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 の概要をご覧ください。

始める前に

Data Boost で連携クエリを実行する前に、次のタスクを完了する必要があります。

Spanner のインスタンスとデータベースを作成する

Spanner インスタンスとデータベースがない場合は、Google Cloud コンソールを使用してデータベースを作成してクエリを実行するの手順に沿って作成します。

BigQuery Connection API を有効にする

BigQuery Connection API を使用すると、Spanner データベースなどの外部データソースへの BigQuery 接続を管理できます。

  • 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)権限をご覧ください。

これらの必要な権限を付与するには、spanner.instances.getspanner.databases.useDataBoost を含む Spanner データベース リーダー(roles/spanner.databaseReader)ロールに基づいてカスタムロールを作成することをおすすめします。その後、Data Boost でクエリとエクスポートを実行する必要があるプリンシパルにそのロールを追加できます。カスタム IAM ロールを作成する方法については、カスタムロールを作成するをご覧ください。Spanner の事前定義ロールの詳細については、事前定義ロールをご覧ください。

連携 Data Boost クエリを実行する

BigQuery から外部ソースに Data Boost クエリを実行するには、外部ソースへの BigQuery 接続と接続の ID が必要です。Data Boost で連携 Spanner クエリを実行する場合、外部ソースは Spanner データベースです。接続 ID を作成すると、BigQuery で 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 の [インスタンス] ページに移動します。

    インスタンス ページに移動

    コンソールに Spanner インスタンスのリストが表示されます。

  2. Spanner インスタンスを選択し、データベースを選択します。

  3. [データベースの概要] ページのナビゲーション メニューで、[Spanner Studio] をクリックします。

  4. [BigQuery で表示] をクリックします。

  5. [View in 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 コマンドを使用して、Data Boost の 2 つの必須プロパティを持つ 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

次のステップ