全球查询

借助全局查询,您可以运行引用存储在多个区域中的数据的 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_projectus-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;

如需成功执行此全球查询,您需要进行以下配置:

  1. 您需要在运行全球查询的区域 (us-central1) 中启用项目 (query_project) 的全球查询执行:

    ALTER PROJECT `query_project`
    SET OPTIONS (
    `region-us-central1.enable_global_queries_execution` = TRUE
    );
  2. 您需要为包含数据的项目 (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 角色,请按以下步骤操作:

  1. 创建自定义角色,例如“BigQuery 全局查询执行者”。
  2. 向此角色添加 bigquery.jobs.createGlobalQuery
  3. 将此角色分配给所选用户或服务账号。

查询数据

若要运行全球查询,您需要像数据位于单个位置时一样编写 SQL 查询。如果查询引用的数据存储在多个位置,BigQuery 会尝试执行全球查询。在某些情况下,BigQuery 会自动选择查询的位置。否则,您必须指定运行查询的位置。查询引用的不在所选位置的数据会被复制到该位置。

以下示例以全球查询的形式运行,该查询会合并存储在两个不同位置的两个不同数据集中的表:

SELECT id, tr_date, product_id, price FROM us_dataset.