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

Posted

技术标签:

【中文标题】通过 Google BigQuery API 将查询结果导出为 JSON【英文标题】:Exporting query results as JSON via Google BigQuery API 【发布时间】:2015-10-26 23:55:42 【问题描述】:

我有返回几十万行的作业/查询。我想获取查询结果并将它们作为 json 写入存储桶中。

有什么直接的方法吗?目前我能想到的唯一方法是:

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

这似乎有点混乱和迂回。我将把所有这些都包装在一个连接到 UI 的服务中,该 UI 会有很多用户点击它,并且宁愿不从事管理所有这些临时表的业务。

【问题讨论】:

【参考方案1】:

1) 正如您所提到的,这些步骤很好。您需要使用 Google Cloud Storage 进行导出作业。从 BigQuery 导出数据在 here 中进行了解释,还请检查不同路径语法的变体。

然后您可以将文件从 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

【讨论】:

以上是关于通过 Google BigQuery API 将查询结果导出为 JSON的主要内容,如果未能解决你的问题,请参考以下文章

Google Spark-BigQuery-Connector如何利用BigQuery Storage API?

使用 google bigquery API 时避免 DefaultCredentialsError

如何使用API 而不是使用Google BigQuery数据传输服务?

Google BigQuery API,如何设置destinationTable 的字段类型?

使用服务帐户通过 PHP API 访问 BigQuery 时出现“无效凭据”

如何使用 Google BigQuery python API 获得超过 100,000 个响应结果?