使用 Data Boost 執行聯合查詢

本頁說明從 BigQuery 對 Spanner 資料庫執行聯合查詢時,如何使用 Spanner Data Boost。有了 Data Boost,聯合查詢的執行對已佈建 Spanner 執行個體上的現有工作負載影響極小。從 BigQuery 到 Spanner 資料庫的 Data Boost 查詢,可以將 BigQuery 資料與 Spanner 資料彙整在一起。

透過 Spanner 連結,BigQuery 可即時查詢 Spanner 中的資料,不必複製或搬移資料。如要進一步瞭解 Spanner 聯合查詢,請參閱 Spanner 聯合查詢。 如要瞭解 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 權限,請參閱「身分與存取權管理 (IAM) 權限」。

如要授予這些必要權限,建議使用 Cloud Spanner Database Reader With DataBoost(roles/spanner.databaseReaderWithDataBoost) IAM 角色。您可以將該角色新增至任何需要使用 Data Boost 執行聯邦查詢的主體。如要進一步瞭解 Spanner 中的預先定義角色,請參閱「預先定義的角色」。如要瞭解如何建立自訂 IAM 角色,請參閱「建立自訂角色」。

執行聯合 Data Boost 查詢

如要從 BigQuery 對外部來源執行 Data Boost 查詢,您需要 BigQuery 與外部來源的連線,以及連線 ID。使用 Data Boost 執行聯合 Spanner 查詢時,外部來源是 Spanner 資料庫。建立連線 ID 後,BigQuery 會使用該 ID 執行 Spanner 資料庫的 Data Boost 查詢。

請使用下列任一種方法建立 BigQuery 連線 ID,然後使用該連線 ID 從 BigQuery 執行 Data Boost 查詢:

  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「Instances」(執行個體) 頁面。

    前往「Instances」(執行個體) 頁面

    主控台會顯示 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 的新連線,並包含 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

後續步驟