BigQuery と Iceberg のデータを AlloyDB に同期する

このページでは、AlloyDB for PostgreSQL 向け Lakehouse Federation を使用して、BigQuery ネイティブ テーブル、マテリアライズド ビュー、BigQuery ビュー、BigLake 外部テーブルApache Iceberg マネージド テーブルなど)、標準外部テーブルからデータを同期する方法について説明します。Iceberg は、データを管理、交換するためのオープン テーブル形式です。

このページでは、AlloyDB クラスタとプライマリ インスタンスを作成しており、 BigQuery のデータセットとテーブルがあることを前提としています。詳細については、データセットの作成テーブルの作成と使用をご覧ください。

始める前に

  1. AlloyDB インスタンスで the bigquery_fdw.enabled フラグが構成されていることを確認します
  2. サポートされている BigQuery のデータ型と列のマッピングについて理解しておいてください。
  3. アカウントにログインします。 Google Cloud を初めて使用する場合は、 アカウントを作成して、実際のシナリオで Google プロダクトのパフォーマンスを評価してください。 Google Cloud新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Enable the AlloyDB, Compute Engine, Resource Manager, and BigQuery APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  8. Verify that billing is enabled for your Google Cloud project.

  9. Enable the AlloyDB, Compute Engine, Resource Manager, and BigQuery APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  10. AlloyDB for PostgreSQL の作成と接続に必要な Cloud APIs を有効にします。

    API を有効にする

  11. [プロジェクトを確認] の手順で、[次へ] をクリックして、変更するプロジェクトの名前を確認します。

  12. [API を有効にする] の手順で、[有効にする] をクリックして、次の機能を有効にします。

    • AlloyDB API
    • Compute Engine API
    • Cloud Resource Manager API
    • Service Networking API
    • BigQuery Storage API

    AlloyDB と同じ Google Cloud プロジェクトにある VPC ネットワークを使用して AlloyDB へのネットワーク接続を構成する場合は、Service Networking API が必要です。

    別の Google Cloud プロジェクトにある VPC ネットワークを使用して AlloyDB へのネットワーク接続を構成する場合は、Compute Engine API と Cloud Resource Manager API が必要です。

必要なロール

AlloyDB クラスタのサービス アカウントに BigQuery データセットへの読み取りアクセス権を付与するには、次の権限が必要です。

  • BigQuery データ閲覧者(roles/bigquery.dataViewer)、または bigquery.tables.get 権限と bigquery.tables.getData 権限を含むカスタムロール。このロールをテーブルまたはビューに付与すると、テーブルまたはビューからデータとメタデータを読み取る権限が付与されます。
  • BigQuery 読み取りセッション ユーザー(roles/bigquery.readSessionUser)、または bigquery.readsessions.create 権限と bigquery.readsessions.getData 権限を含むカスタムロール。読み取りセッションを作成および使用する権限が付与されます。

AlloyDB に BigQuery データセットへのアクセス権を付与する

AlloyDB クラスタで Lakehouse Federation 機能が有効になったら、AlloyDB クラスタのサービス アカウントに BigQuery データセットへのアクセス権を付与します。

gcloud CLI を使用するには、Google Cloud CLI をインストールして初期化 するか、Cloud Shell を使用します。

  1. gcloud CLI を開きます。gcloud CLI がインストールされていない場合は、gcloud CLI をインストールして初期化するか、Cloud Shell を使用します。

  2. gcloud beta alloydb clusters describe コマンドを実行します。

    gcloud beta alloydb clusters describe CLUSTER --region=REGION

    次のように置き換えます。

    出力には、このクラスタのサービス アカウントである serviceAccountEmail フィールドが含まれます。サービス アカウントは、[クラスタの詳細] ページでも確認できます。

  3. 必要な権限を付与します。 詳細については、IAM を使用してリソースへのアクセスを制御するをご覧ください。

    クラスタのサービス アカウントに必要な権限がない場合、BigQuery テーブルに対してクエリを実行すると、次のエラーが表示されます。

    • The user does not have bigquery.readsessions.create permissions
    • Permission bigquery.tables.get denied on table
    • Permission bigquery.tables.getData denied on table

拡張機能を構成する

  1. 拡張機能を作成します。

    1. psql クライアントをインスタンスに接続するの手順に沿って、psql クライアントを使用して AlloyDB インスタンスに接続します。または、AlloyDB Studio を使用することもできます。詳細については、 Google Cloud コンソールを使用してデータを管理するをご覧ください。
    2. 次のコマンドを実行します。

      CREATE EXTENSION bigquery_fdw;
      
  2. 外部サーバーを作成して、リモート BigQuery データセットの接続パラメータを定義します。

    CREATE SERVER BIGQUERY_SERVER_NAME FOREIGN DATA WRAPPER bigquery_fdw;
    

    次のように置き換えます。

    • BIGQUERY_SERVER_NAME: 外部サーバーの固有識別子。これは、特定のデータベースで 1 回定義します。BIGQUERY_SERVER_NAME は、実際のサーバー名に置き換えることができます。
  3. CREATE USER MAPPING コマンドを実行してユーザー マッピングを作成します。このコマンドは、外部サーバーに接続するときに使用する認証情報を指定します。

    CREATE USER MAPPING FOR USERNAME SERVER BIGQUERY_SERVER_NAME ;
    

    次のように置き換えます。

    • USERNAME: 外部テーブルにアクセスするデータベース ユーザー名または IAM ユーザー。
    • BIGQUERY_SERVER_NAME: 作成した外部サーバーの固有識別子。
  4. CREATE FOREIGN TABLE コマンドを使用して、BigQuery でアクセスするテーブルに対応する外部テーブルを定義します。このコマンドを使用すると、リモート テーブルの構造を定義できます。外部テーブルには、BigQuery のソーステーブルのすべての列または列のサブセットを含めることができます。

    CREATE FOREIGN TABLE TABLENAME (
    COLUMNX_NAME DATA_TYPE,
    COLUMNX_NAME DATA_TYPE,
    ...
    ) SERVER  BIGQUERY_SERVER_NAME OPTIONS (project BIGQUERY_PROJECT_ID, dataset  BIGQUERY_DATASET_NAME, table  BIGQUERY_TABLE_NAME [, mode EXECUTION_MODE]);
    

    次のように置き換えます。

    • TABLENAME: ローカル データベース内の外部テーブルの名前。
    • COLUMNX_NAME: AlloyDB の列名。 列名は、BigQuery ソーステーブルの対応する列の名前 と完全に一致する必要があります。X は、テーブル を複数の列で作成できることを示します。名前は、BigQuery 列の大文字と小文字も正確に一致する必要があります。BigQuery 列名に大文字が含まれている場合(employeeID など)、大文字と小文字を区別するには、 AlloyDB 識別子を二重 引用符で囲む必要があります("employeeID" など)。
    • DATA_TYPE: 列のデータ型。
    • BIGQUERY_SERVER_NAME: 作成した外部サーバーの固有識別子。
    • BIGQUERY_PROJECT_ID: BigQuery データセットがあるプロジェクトの ID。
    • BIGQUERY_DATASET_NAME: テーブルの BigQuery データセットの名前。
    • BIGQUERY_TABLE_NAME: BigQuery テーブルの名前。
    • EXECUTION_MODE: 省略可。mode オプションでは、次の設定がサポートされています。

      • query: 複雑なクエリには BigQuery API を使用します。
      • storage: 大量の読み取りを高速化するには、BigQuery Storage API を使用します。
      • auto: モードを自動的に選択します。これがデフォルトです。

      詳細については、BigQuery 外部データラッパーの実行モードをご覧ください。

    外部テーブルを作成したら、AlloyDB の任意のテーブルにクエリを実行するのと同じ方法で、このテーブルにクエリを実行できます。

データを同期

BigQuery データまたは BigLake Iceberg データを AlloyDB に同期する手順は次のとおりです。

  1. 既存のデータソースを特定するか、 ネイティブ BigQuery テーブルまたは 新しい Iceberg マネージド テーブルを作成します。

  2. 次のコマンドを実行して、psql を使用して local_table を作成します。

    CREATE TABLE local_table AS (SELECT * from foreign_table);
    

    このコマンドは、BigQuery テーブルのコピーをローカルのネイティブ AlloyDB テーブルに作成します。
    アプリケーション ワークフローによっては、PostgreSQL pg_cron 拡張機能を構成して、AlloyDB テーブルを定期的に更新できます。

AlloyDB にデータを同期するスケジュールを設定する

BigQuery データまたは BigLake Iceberg データを AlloyDB に同期するスケジュールを設定する手順は次のとおりです。

  1. bigquery_fdw 拡張機能を構成します
  2. AlloyDB インスタンスで pg_cron 拡張機能を有効にします。詳細については、サポートされているデータベース拡張機能をご覧ください。
    1. alloydb.enable_pg_cron フラグを on に設定します。詳細については、 alloydb.enable_pg_cronをご覧ください。
    2. cron.database_name フラグを、bigquery_fdw 拡張機能をインストールしたデータベースの名前と、同期用の SQL クエリを実行するデータベースの名前に設定します。詳細については、 サポートされているデータベース フラグをご覧ください。
  3. 外部テーブルのローカルコピーを定期的に更新するには、bigquery_fdw 拡張機能をインストールしたデータベースで次のコマンドを実行します。

    CREATE EXTENSION pg_cron;
    SELECT cron.schedule(JOB_NAME, SCHEDULE, 'CREATE TABLE IF NOT EXISTS local_table_copy AS (SELECT * FROM foreign_table); DROP TABLE IF EXISTS local_table; ALTER TABLE local_table_copy RENAME TO local_table;');
    

    次のように置き換えます。

    • JOB_NAME: ジョブの名前。
    • SCHEDULE: ジョブのスケジュール。

    詳細については、pg_cron とはをご覧ください。

次のステップ