【问题标题】:Save large BigQuery results to another project's BigQuery将大型 BigQuery 结果保存到另一个项目的 BigQuery
【发布时间】:2018-02-23 07:16:20
【问题描述】:
我需要在一个项目的 BigQuery 上运行连接查询,这可能会返回大量数据(可能不适合 VM 的内存),然后将结果保存到另一个项目的 BigQuery 中。
有没有一种简单的方法可以在不将数据加载到 VM 的情况下执行此操作,因为数据大小可能会有所不同,并且 VM 可能没有足够的内存来加载它?
【问题讨论】:
标签:
google-bigquery
google-cloud-platform
【解决方案1】:
要将查询结果保存到任何项目中的表中 - 您无需先将其保存到 VM,您只需正确设置目标属性,当然您需要对包含该表的数据集具有写入权限!
目标属性可能因您使用的client tool 而异
例如,如果你使用 REST API 的 jobs.insert 你应该设置下面的属性
configuration.query.destinationTable 嵌套对象 [可选]
描述应存储查询结果的表。如果不
目前,将创建一个新表来存储结果。这
必须为超过最大值的大型结果设置属性
响应大小。
configuration.query.destinationTable.datasetId 字符串 [必需]
这
包含此表的数据集的 ID。
configuration.query.destinationTable.projectId 字符串 [必需]
这
包含此表的项目的 ID。
configuration.query.destinationTable.tableId 字符串 [必需]
身份证
的表。 ID 只能包含字母(a-z、A-Z)、数字
(0-9) 或下划线 (_)。最大长度为 1,024 个字符。
【解决方案2】:
一种方法是绕过虚拟机进行操作并改用 Google Cloud Storage。
流程如下所示
- 创建两个项目都可以访问的 GS 存储桶
- 源项目 - 将表导出到 GS 存储桶(可以从 Web 界面执行此操作,很确定 CLI 工具可以做到)
- 目标项目 - 从 GS 存储桶中的文件创建新表