基于主键将两个表从BigQuery导出到CSV

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于主键将两个表从BigQuery导出到CSV相关的知识,希望对你有一定的参考价值。

我在BigQuery表中有2个表经过汇总和处理,分别可能有多达200万行和1000万行。

它们具有非常不同的列,但每个列都是相同的主键(IDXX)。在表1中,每个IDXX有一行,在表2中,IDXX可能有多达10行。

我想从BigQuery中以匹配的块导出这两个表。因此,例如:

  • table1_chunk1.csv:应具有IDXX:1-10(10行)
  • table2_chunk1.csv:应具有IDXX:1-10(最多100行)

  • table1_chunk2.csv:应具有IDXX:11-20(10行)

  • table2_chunk2.csv:应具有IDXX:11-20(最多100行)

什么是最好的方法?使用云数据流?在Bash中执行吗?

答案

这是一个非常广泛的问题,但是我将尝试仅在BigQuery中解决它。

您需要做的第一件事是对您的ID进行某种static排名。这样,您就可以确定性地检索固定的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"

一旦有了此静态ranking_table,就可以在不同范围内重复创建块。例如(对于1-10):

对于table1_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"

对于table1_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存储桶,然后再导出到本地。我将假设您能弄清楚那部分内容。

希望有帮助。

以上是关于基于主键将两个表从BigQuery导出到CSV的主要内容,如果未能解决你的问题,请参考以下文章

无法将表从 BigQuery 导出到 Google Cloud Storage

将表从数据库导出到 csv 文件

使用 Golang API 将表从 Amazon RDS 导出到 csv 文件

如何通过GCS将GA360表从Big query导出到雪花作为json文件而不丢失数据?

从 BigQuery 导出到 MySQL 时出错

基于单击命令按钮将表从 Access 导出到 Excel