查询结果后 BigQuery 导出多个文件

Posted

技术标签:

【中文标题】查询结果后 BigQuery 导出多个文件【英文标题】:BigQuery Export Multiple Files After Query Result 【发布时间】:2021-02-12 21:37:32 【问题描述】:

我在 BigQuery 中有一个包含两个主要列的表,如下所示:

Name,City
John,NY
Mike,NY
Spencer,LA

我想导出多个文件(一个包含每个城市的所有名称的文件)。

在前面的示例中,我会得到两个名为 NYLA 的文件,其中包含与它们相关的每个人的姓名。

我知道为了从 BigQuery 导出文件,我需要将数据存储在特定的表中。

我想知道是否有办法自动将按城市分组的每个名称列表存储在名为相应城市的表中。

如果可能,我将在 bash 中创建一个循环(使用 bq ls dataset),以便从每个 City 表中创建一个文件。

这是正确的做法吗?

谢谢

【问题讨论】:

【参考方案1】:

一种方法是在 BigQuery 中使用集群方法。

您可以根据您的主表创建一个新的聚簇表:

bq query --use_legacy_sql=false \
  'CREATE TABLE dataset.clustered_table
   CLUSTER BY city 
   AS
   select distinct name, city from `dataset.maintable`'

一旦你有了这个聚簇表,你现在可以利用你的 bash 脚本循环遍历每个城市并查询其对应的聚簇并在本地通过管道输出。

例如:

bq query --format=csv --max_rows=999999 --use_legacy_sql=false\
  "select name from dataset.clustered_table where city = 'NY'" > NY.csv

请注意,上述查询不会扫描整个表,您只需为扫描确定为您正在查询的特定集群的一部分的行付费。

【讨论】:

以上是关于查询结果后 BigQuery 导出多个文件的主要内容,如果未能解决你的问题,请参考以下文章

如何关联多个 BigQuery 数组字段?

无法将 Google BigQuery 导出到本地计算机中的 CSV 文件

将 BigQuery 表的并发导出扩展到 Google Cloud Storage

通过 Google BigQuery API 将查询结果导出为 JSON

从 Bigquery 导出到存储

将 BigQuery 查询结果直接写入 GCS - 可以吗?