使用 Data Boost 运行联合查询

本页面介绍了如何在运行从 BigQuery 到 Spanner 的联合查询时使用 Spanner Data Boost。借助 Data Boost,联合查询运行对已预配的 Spanner 实例上的现有工作负载几乎为零。

Spanner 联合使 BigQuery 能够实时查询驻留在 Spanner 中的数据,而无需复制或移动数据。

如需了解 Spanner 联合查询,请参阅 Spanner 联合查询

如需了解 Data Boost,请参阅 Data Boost 概览

准备工作

请先完成以下任务,然后再尝试使用 Data Boost 运行联合查询。

启用 BigQuery Connection API

借助 BigQuery Connection API,您可以管理与外部数据源的 BigQuery 连接。

  • 启用 BigQuery connection API。

    启用 API

如需了解详情,请参阅 BigQuery Connection API

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

主帐号需要 spanner.instances.getspanner.databases.useDataBoost Identity and Access Management (IAM) 权限才能使用 Data Boost 运行查询和导出。

我们建议您基于 Spanner Database Reader (roles/spanner.databaseReader) 创建自定义 IAM 角色,并将 spanner.instances.getspanner.databases.useDataBoost 添加到该角色中。

如需了解详情,请参阅预定义角色

使用 Data Boost 为 Spanner 创建 BigQuery 连接

借助 BigQuery 连接,您可以查询存储在 BigQuery 外部的数据。如需在 BigQuery 与 Spanner 之间建立连接,您需要创建外部数据连接。然后,您可以运行将 BigQuery 数据与 Spanner 数据相联接的查询。

如需创建与使用 Data Boost 的 Spanner 的外部数据连接,请选择以下选项之一:

控制台

  1. 转到 BigQuery 文档中的创建 Spanner 连接,然后按照控制台说明进行操作。

  2. 外部数据源窗格中,选中并行读取数据使用 Spanner Data Boost 复选框。

bq

  1. 转到 BigQuery 文档中的创建 Spanner 连接,然后按照 bq 说明进行操作。

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

  • useParallelism
  • useDataBoost

以下示例使用 bq mk 命令创建一个名为 my_connection 且具有 Data Boost 的两个必需属性的新连接:

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

运行联合查询

如需使用 Data Boost 运行联合查询,请使用指定使用 Data Boost 的 BigQuery 连接。如需了解详情,请参阅使用 Data Boost 为 Spanner 创建 BigQuery 连接

您可以从 Google Cloud 控制台的 Spanner 页面开始,也可以从 BigQuery 开始。

从控制台的 Spanner 页面开始

  1. 转到 Google Cloud 控制台中的 Spanner 实例页面。

    转到“实例”页面

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

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

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

  4. 点击在 BiqQuery 中查看标签页。

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

    这样会创建一个新连接。如果该 ID 已存在,则会发生错误。

  6. 填写对话框的其余部分,然后选中并行读取数据使用 Spanner Data Boost 复选框。

  7. 点击在 BigQuery 中查看

    系统会打开 BigQuery Studio。在其中输入并运行联合查询。

    以下示例向名为 orders 的 Spanner 数据库发出联合查询,并将结果与名为 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 开始

  • 在浏览器中输入以下网址:

    https://console.cloud.google.com/bigquery

    BigQuery 会在您最近访问的项目中打开,并显示 BigQuery Studio。请在此处运行联合查询。

后续步骤