Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 基于主键将两个表从BigQuery导出到csv_Google Cloud Platform_Google Bigquery_Google Cloud Dataflow - Fatal编程技术网

Google cloud platform 基于主键将两个表从BigQuery导出到csv

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

我在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_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行)
是什么意思请澄清。