Google cloud platform 基于主键将两个表从BigQuery导出到csv
我在BigQuery表中有两个表,它们被聚合和处理,可能分别有200万行和1000万行 它们有非常不同的列,但每个列都作为相同的主键(IDXX)。 在表1中,每个IDXX对应一行,在表2中,最多可能有10行IDXX 我想从BigQuery中以匹配的块导出这两个表。例如:Google cloud platform 基于主键将两个表从BigQuery导出到csv,google-cloud-platform,google-bigquery,google-cloud-dataflow,Google Cloud Platform,Google Bigquery,Google Cloud Dataflow,我在BigQuery表中有两个表,它们被聚合和处理,可能分别有200万行和1000万行 它们有非常不同的列,但每个列都作为相同的主键(IDXX)。 在表1中,每个IDXX对应一行,在表2中,最多可能有10行IDXX 我想从BigQuery中以匹配的块导出这两个表。例如: 表1\u chunk1.csv:应具有IDXX:1-10(10行) 表2\u chunk1.csv:应该有IDXX:1-10(最多可以有100行) 表1_chunk2.csv:应具有IDXX:11-20(10行) table2
- 表1\u chunk1.csv:应具有IDXX:1-10(10行)
- 表2\u chunk1.csv:应该有IDXX:1-10(最多可以有100行)
- 表1_chunk2.csv:应具有IDXX:11-20(10行)
- table2_chunk2.csv:应该有IDXX:11-20(最多可以有100行)
最好的方法是什么?使用云数据流?在Bash中实现它?这是一个非常广泛的问题,但我将尝试在BigQuery中解决它 您首先需要的是对您的ID进行某种静态排序。通过这种方式,您可以使检索固定ID集的解决方案具有确定性。因此,您可以创建一个(一次性)表,其中包含ID的列组:
bq query --nouse_legacy_sql --allow_large_results --replace \
--destination_table=dataset.ranking_table \
"select row_number() over () as rnk, id from dataset.table1"
一旦你有了这个静态的排名表
,你就可以在不同的范围内重复创建块了。例如(对于1-10):
对于表1\u chunk1
:
bq query --nouse_legacy_sql --allow_large_results --replace \
--destination_table=dataset.table1_chunk1 \
"select a.* from dataset.table1 a join dataset.ranking_table b on b.id=a.id
where b.rnk between 1 and 10"
对于表1\u chunk2
:
bq query --nouse_legacy_sql --allow_large_results --replace \
--destination_table=dataset.table2_chunk1 \
"select a.* from dataset.table2 a join dataset.ranking_table b on b.id=a.id
where b.rnk between 1 and 10"
然后,您可以将这些表中的数据导出到GCS存储桶,然后本地导出。假设你能弄明白,我就不谈那部分了
希望有帮助。不清楚拆分为这四个块的预期逻辑是什么?“1-10(10行)”和
1-10(最多100行)
是什么意思请澄清。