基于主键将两个表从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
使用 Golang API 将表从 Amazon RDS 导出到 csv 文件