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

时间:2015-10-26 23:55:42

标签: google-bigquery

我的作业/查询返回了几十万行。我想得到查询的结果,并将它们作为json写入存储桶。

有没有直截了当的方法呢?现在我能想到的唯一方法是:

  • 将allowLargeResults设置为true
  • 设置随机命名的目标表以保存查询输出
  • 创建第二个作业以将“临时”目标表中的数据提取到存储桶中的文件
  • 删除随机“临时”表。

这似乎有点凌乱和迂回。我将把所有这些包装在一个连接到UI的服务中,这个UI会有很多用户点击它,而不愿意管理所有这些临时表。

1 个答案:

答案 0 :(得分:5)

1)如你所说,步骤很好。您需要将Google云端存储用于导出作业。从here解释了从BigQuery导出数据,还要检查不同路径语法的变体。

然后,您可以将文件从GCS下载到本地存储。

Gsutil工具可以帮助您进一步将文件从GCS下载到本地计算机。

使用此方法,您首先需要导出到GCS,然后转移到本地计算机。如果您有一个消息队列系统(如Beanstalkd)来驱动所有这些系统,那么很容易做一系列操作:提交作业,监视作业状态,完成后启动导出到GCS,然后删除临时表。

另请注意,您可以通过API update a table并设置expirationTime媒体资源,但您无需删除该资源。

2)如果使用BQ Cli工具,则可以将输出格式设置为JSON,然后可以重定向到文件。通过这种方式,您可以在本地实现一些导出,但它有一些其他限制。

这会将第1000行导出为JSON

bq --format=prettyjson query --n=1000 "SELECT * from publicdata:samples.shakespeare" > export.json