全球查询
借助全局查询,您可以运行引用存储在多个区域中的数据的 SQL 查询。例如,您可以运行一个全球查询,将位于 us-central1 中的表与位于 europe-central2 中的表联接起来。本文档介绍了如何在项目中启用和运行全局查询。
准备工作
验证是否已为您的项目启用全局查询,并确保您拥有运行全局查询所需的权限。
启用全局查询
如需为项目或组织启用全局查询,请使用 ALTER PROJECT SET OPTIONS 语句或 ALTER ORGANIZATION SET OPTIONS 语句更改默认配置。
- 如需在某个区域中运行全局查询,请为运行查询的项目将该区域中的
enable_global_queries_execution实参设置为true。 - 如需允许全局查询从某个区域复制数据,请为包含相应数据的项目将该区域中的
enable_global_queries_data_access实参设置为true。 - 每当查询访问远程表时,系统都会检查这些选项。
- 全局查询可以在一个项目中运行,并从另一个项目的其他区域提取数据。
示例:跨项目配置
以下示例展示了如何在某个项目中运行查询,以访问另一个项目中的表。
假设您有一个项目 query_project 在 us-central1 区域中运行作业,并且您想要运行一个访问位于 europe-west1 区域中的表 data_project.dataset.my_table 的查询:
SET @@location='us-central1';
SELECT
*
FROM
`query_project.dataset.my_table`
JOIN `data_project.dataset.my_other_table` USING id;
如需成功执行此全球查询,您需要进行以下配置:
您需要在运行全球查询的区域 (
us-central1) 中启用项目 (query_project) 的全球查询执行:ALTER PROJECT `
query_project` SET OPTIONS ( `region-us-central1.enable_global_queries_execution` = TRUE );您需要为包含数据的项目 (
data_project) 启用通过全局查询复制数据的功能,并指定相应区域 (europe-west1):ALTER PROJECT `
data_project` SET OPTIONS ( `region-europe-west1.enable_global_queries_data_access` = TRUE );
如需创建和使用包含远程表的视图,请遵循相同的原则:运行查询的项目必须已启用 enable_global_queries_execution。
这些 ALTER PROJECT 操作必须单独运行,因为它们引用了不同的项目和区域。更改可能需要几分钟才能生效。
所需权限
如需运行全球查询,您必须拥有 bigquery.jobs.createGlobalQuery 权限。BigQuery Admin 角色是唯一包含此权限的预定义角色。如需授予运行全局查询的权限,但不授予 BigQuery Admin 角色,请按以下步骤操作:
- 创建自定义角色,例如“BigQuery 全局查询执行者”。
- 向此角色添加
bigquery.jobs.createGlobalQuery。 - 将此角色分配给所选用户或服务账号。
查询数据
若要运行全球查询,您需要像数据位于单个位置时一样编写 SQL 查询。如果查询引用的数据存储在多个位置,BigQuery 会尝试执行全球查询。在某些情况下,BigQuery 会自动选择查询的位置。否则,您必须指定运行查询的位置。查询引用的不在所选位置的数据会被复制到该位置。
以下示例以全球查询的形式运行,该查询会合并存储在两个不同位置的两个不同数据集中的表:
SELECT id, tr_date, product_id, price FROM us_dataset.