使用 Data Boost 运行联合查询

本页介绍了在从 BigQuery 向 Spanner 数据库运行联合查询时如何使用 Spanner Data Boost。借助 Data Boost,联合查询的运行对预配的 Spanner 实例上的现有工作负载影响极小。从 BigQuery 到 Spanner 数据库的数据提升查询可以将 BigQuery 数据与 Spanner 数据联接起来。

借助 Spanner 联合,BigQuery 能够实时查询驻留在 Spanner 中的数据,而无需复制或移动数据。如需详细了解 Spanner 联合查询,请参阅 Spanner 联合查询。如需了解 Data Boost,请参阅 Data Boost 概览

准备工作

在使用 Data Boost 运行联合查询之前,您需要完成以下任务:

创建 Spanner 实例和数据库

如果您没有 Spanner 实例和数据库,请按照使用 Google Cloud 控制台创建和查询数据库中的步骤进行创建。

启用 BigQuery Connection API

借助 BigQuery Connection API,您可以管理 BigQuery 与外部数据源(例如 Spanner 数据库)的连接。

  • Enable the BigQuery connection API.

    Enable the API

如需了解详情,请参阅 BigQuery 文档中的 BigQuery 连接 API

向主账号授予 Data Boost 的 IAM 权限

必须向主账号授予以下权限,才能使用 Data Boost 运行联合查询:

  • spanner.instances.get - 可让您获取实例的配置。
  • spanner.databases.useDataBoost - 可让您使用 Spanner Data Boost 计算资源处理分区查询

如需详细了解 Spanner 权限,请参阅 Identity and Access Management (IAM) 权限

如需授予这些必需权限,我们建议您使用 Cloud Spanner Database Reader With DataBoost (roles/spanner.databaseReaderWithDataBoost) IAM 角色。您可以将该角色添加到需要使用 Data Boost 运行联合查询的任何主账号。如需详细了解 Spanner 中的预定义角色,请参阅预定义角色。如需了解如何创建自定义 IAM 角色,请参阅创建自定义角色

运行联合 Data Boost 查询

如需从 BigQuery 对外部数据源运行数据提升查询,您需要拥有指向该外部数据源的 BigQuery 连接以及该连接的 ID。使用 Data Boost 运行联合 Spanner 查询时,外部来源是 Spanner 数据库。创建连接 ID 后,BigQuery 会使用该 ID 运行 Spanner 数据库的数据提升查询。

使用以下任一选项创建 BigQuery 连接 ID,然后使用该连接 ID 从 BigQuery 运行数据提升查询:

  1. 从 Spanner 开始 - 在 Spanner 控制台中创建 BigQuery 外部连接 ID。在 Spanner 控制台中创建连接 ID 后,您会被重定向到 BigQuery 控制台,以便对 Spanner 数据库运行联合 Data Boost 查询。

  2. 从 BigQuery 开始 - 在 BigQuery 控制台中或使用 bq 命令行工具创建 Data Boost 外部连接 ID。创建连接 ID 后,您可以继续留在 BigQuery 控制台中,对 Spanner 数据库运行联合 Data Boost 查询。

从 Spanner 开始运行 Data Boost 查询

如需从 Spanner Studio 开始运行联合 Data Boost 查询,请执行以下操作:

  1. 前往Google Cloud 控制台中的 Spanner 实例页面。

    转到“实例”页面

    控制台会显示您的 Spanner 实例列表。

  2. 选择一个 Spanner 实例,然后选择一个数据库。

  3. 数据库概览页面上的导航菜单中,点击 **Spanner Studio**。

  4. 点击在 BigQuery 中查看

  5. 在 BigQuery 中查看对话框中,输入连接 ID。

    连接 ID 用于创建与 Spanner 数据库的新 BigQuery 外部连接。您可以使用以下格式引用外部连接:

    PROJECT-ID.LOCATION.CONNECTION-ID
    

    如果 ID 已存在,则会发生错误。

  6. 填写对话框的其余部分,然后执行以下操作:

    • 选择并行读取数据
    • 选择使用 Spanner Data Boost
  7. 点击在 BigQuery 中查看

    BigQuery Studio 随即打开,其中包含以下查询:

    SELECT * FROM EXTERNAL_QUERY("PROJECT-ID.LOCATION.CONNECTION-ID", "SELECT * FROM INFORMATION_SCHEMA.TABLES;");
    

    您可以将其替换为联合查询。例如,您可以发出类似以下示例的查询。此示例会对 Spanner 数据库中名为 orders 的表发出联合查询,并将结果与名为 mydataset.customers 的 BigQuery 表联接。

    SELECT c.customer_id, c.name, rq.first_order_date
    FROM mydataset.customers AS c
    LEFT OUTER JOIN EXTERNAL_QUERY(
      'my-project.us.example-db',
      '''SELECT customer_id, MIN(order_date) AS first_order_date
      FROM orders
      GROUP BY customer_id''') AS rq
      ON rq.customer_id = c.customer_id
    GROUP BY c.customer_id, c.name, rq.first_order_date;

在 BigQuery 中开始运行 Data Boost 查询

如需创建从 BigQuery 到 Spanner 数据库的外部数据连接,并使用该连接从 BigQuery 运行联合 Data Boost 查询,请选择以下任一选项:

控制台

  1. 前往 BigQuery 文档中的创建 Spanner 连接部分,然后按照控制台标签页上的说明操作。

  2. 外部数据源窗格中,执行以下操作:

    • 选择并行读取数据
    • 选择使用 Spanner Data Boost

bq

  1. 前往 BigQuery 文档中的创建 Spanner 连接部分,然后按照 bq* 标签页上的说明操作。

  2. 将以下连接属性设置为 true

    • useParallelism
    • useDataBoost

以下示例使用 bq mk 命令创建一个名为 my_connection 的新连接,并为其添加了数据提升功能所需的两个属性:

bq mk --connection --connection_type='CLOUD_SPANNER' --location='us' \
--properties='{"database":"projects/my-project/instances/my-instance/databases/my-database", "useParallelism":true, "useDataBoost": true}' my_connection

后续步骤