このページでは、Lakehouse Federation を使用して、BigQuery を使用して保存またはアクセス可能なデータに AlloyDB for PostgreSQL Interface からアクセスする方法について説明します。
外部データラッパーは、幅広い BigQuery リソースをサポートしています。これにより、次のクエリを実行できます。
- ネイティブ テーブルとマテリアライズド ビュー
- BigQuery ビュー(論理ビュー)
- BigLake 外部テーブル(Apache Iceberg マネージド テーブル用のテーブルを含む)
- 標準外部テーブル
この統合を使用すると、BigQuery データセットを PostgreSQL 環境内のローカル テーブルとして扱い、クロスエンジン分析を実行できます。詳細については、AlloyDB の Lakehouse 連携の概要をご覧ください。
このページでは、AlloyDB クラスタとプライマリ インスタンスを作成しており、BigQuery のデータセットとテーブルがあることを前提としています。詳細については、データセットの作成とテーブルの作成と使用をご覧ください。
始める前に
- AlloyDB for PostgreSQL インスタンスで
bigquery_fdw.enabledフラグが構成されていることを確認します。 - サポートされている BigQuery のデータ型と列のマッピングについて理解しておいてください。
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the AlloyDB, Compute Engine, Resource Manager, and BigQuery APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
AlloyDB for PostgreSQL の作成と接続に必要な Cloud APIs を有効にします。
[プロジェクトを確認] の手順で、[次へ] をクリックして、変更するプロジェクトの名前を確認します。
[API を有効にする] の手順で、[有効にする] をクリックして、次の機能を有効にします。
- AlloyDB API
- Compute Engine API
- Cloud Resource Manager API
- Service Networking API
- BigQuery Storage API
- BigQuery API
AlloyDB と同じ Google Cloud プロジェクトにある VPC ネットワークを使用して AlloyDB へのネットワーク接続を構成する場合は、Service Networking API が必要です。
別の Google Cloud プロジェクトにある VPC ネットワークを使用して AlloyDB へのネットワーク接続を構成する場合は、Compute Engine API と Cloud Resource Manager API が必要です。
必要なロール
AlloyDB クラスタのサービス アカウントに BigQuery データセットへの読み取りアクセス権を付与するには、次の権限が必要です。詳細については、AlloyDB に BigQuery データセットへのアクセス権を付与するをご覧ください。
- BigQuery データ閲覧者(
roles/bigquery.dataViewer)、またはbigquery.tables.get権限とbigquery.tables.getData権限を含むカスタムロール。このロールをテーブルまたはビューに付与すると、テーブルまたはビューからデータとメタデータを読み取る権限が付与されます。 - BigQuery 読み取りセッション ユーザー(
roles/bigquery.readSessionUser)、またはbigquery.readsessions.create権限とbigquery.readsessions.getData権限を含むカスタムロール。読み取りセッションを作成および使用する権限が付与されます。 - BigQuery ジョブユーザー(
roles/bigquery.jobUser)、またはbigquery.jobs.create権限を含むカスタムロール。BigQuery API を使用して、プロジェクト内でジョブ(クエリを含む)を実行する権限を付与します。このロールは、Resource Manager リソース(プロジェクト、フォルダ、組織)にのみ付与できます。 - ストレージ オブジェクト閲覧者(
roles/storage.objectViewer)、またはstorage.objects.get権限を持つカスタムロール。BigQuery 外部テーブルにアクセスする権限を付与します。プロジェクト レベルまたはバケットレベルで付与する必要があります。
AlloyDB に BigQuery データセットへのアクセス権を付与する
AlloyDB クラスタで Lakehouse 連携機能が有効になったら、AlloyDB クラスタのサービス アカウントに BigQuery データセットへのアクセス権を付与する必要があります。
AlloyDB Studio を使用して BigQuery テーブルを接続すると、 Google Cloud コンソールによって、必要な権限がクラスタ サービス アカウントに自動的に付与されます。
gcloud CLI を使用してアクセス権を付与する手順は次のとおりです。
gcloud
gcloud CLI を使用するには、Google Cloud CLI をインストールして初期化するか、Cloud Shell を使用します。
gcloud CLI を開きます。gcloud CLI がインストールされていない場合は、gcloud CLI をインストールして初期化するか、Cloud Shell を使用します。
gcloud beta alloydb clusters describeコマンドを実行します。gcloud beta alloydb clusters describe CLUSTER --region=REGION次のように置き換えます。
CLUSTER: AlloyDB クラスタ ID。REGION: AlloyDB クラスタのロケーション(例:asia-east1、us-east1)。リージョンの一覧については、AlloyDB のロケーションをご覧ください。
出力には、このクラスタのサービス アカウントである
serviceAccountEmailフィールドが含まれます。サービス アカウントは、[クラスタの概要] ページでも確認できます。必要な権限を付与します。詳細については、IAM を使用してリソースへのアクセスを制御するをご覧ください。
クラスタのサービス アカウントに必要な権限がない場合、BigQuery テーブルに対してクエリを実行すると、次のエラーが表示されます。
The user does not have bigquery.readsessions.create permissionsPermission bigquery.tables.get denied on tablePermission bigquery.tables.getData denied on table
拡張機能の設定
拡張機能を構成する手順は次のとおりです。
コンソール
[クラスタ] ページに移動します。
使用するクラスタの ID をクリックします。
ナビゲーション メニューで [AlloyDB Studio] をクリックします。
データベースにログインします。
[エクスプローラ] ペインで、関連するスキーマを開きます。
[BigQuery テーブル] の横にある [アクション] メニューをクリックし、[BigQuery テーブルを接続] をクリックします。
[BigQuery テーブルを接続] ペインで、ソース プロジェクト、ソース データセット、テーブルを選択します。
[列の確認と選択] テーブルには、選択したテーブルの列が表示されます。マッピングする列を選択します。
[テーブル名] フィールドに、外部テーブルの名前を入力します。
省略可: [SQL コマンドを表示] をクリックして、生成されたコマンドを表示します。
[テーブルを接続] をクリックします。進行状況を示すダイアログが表示されます。プロセスが完了すると、AlloyDB の任意のテーブルにクエリを実行するのと同じ方法で、テーブルにクエリを実行できます。
psql
拡張機能を作成します。
- psql クライアントをインスタンスに接続するの手順に沿って、psql クライアントを使用して AlloyDB インスタンスに接続します。または、AlloyDB Studio を使用することもできます。詳細については、 Google Cloud コンソールを使用してデータを管理するをご覧ください。
次のコマンドを実行します。
CREATE EXTENSION bigquery_fdw;
外部サーバーを作成して、リモート BigQuery データセットの接続パラメータを定義します。
CREATE SERVER BIGQUERY_SERVER_NAME FOREIGN DATA WRAPPER bigquery_fdw;次のように置き換えます。
BIGQUERY_SERVER_NAME: 外部サーバーの固有識別子。これは、特定のデータベースで 1 回定義します。BIGQUERY_SERVER_NAMEは、実際のサーバー名に置き換えることができます。
CREATE USER MAPPINGコマンドを実行してユーザー マッピングを作成します。このコマンドは、外部サーバーに接続するローカル PostgreSQL ユーザーをマッピングします。CREATE USER MAPPING FOR USERNAME SERVER BIGQUERY_SERVER_NAME ;次のように置き換えます。
USERNAME: 外部テーブルにアクセスするデータベース ユーザー名または IAM ユーザー。BIGQUERY_SERVER_NAME: 作成した外部サーバーの固有識別子。
CREATE FOREIGN TABLEコマンドを使用して、BigQuery でアクセスするテーブルに対応する外部テーブルを定義します。このコマンドを使用すると、リモート テーブルの構造を定義できます。外部テーブルには、BigQuery のソーステーブルのすべての列または列のサブセットを含めることができます。CREATE FOREIGN TABLE TABLENAME ( COLUMN1_NAME DATA_TYPE, COLUMN2_NAME DATA_TYPE, ... ) SERVER BIGQUERY_SERVER_NAME OPTIONS (project BIGQUERY_PROJECT_ID, dataset BIGQUERY_DATASET_NAME, table BIGQUERY_TABLE_NAME [, mode EXECUTION_MODE]);次のように置き換えます。
TABLENAME: ローカル AlloyDB データベース内の外部テーブルの名前。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オプションは、複雑なクエリに BigQuery API を使用する場合はquery、高速な一括読み取りに BigQuery Storage API を使用する場合はstorage、モードを自動的に選択する場合はautoに設定できます。デフォルトはautoです。詳細については、BigQuery 外部データラッパーの実行モードをご覧ください。
外部テーブルを作成したら、AlloyDB の任意のテーブルにクエリを実行するのと同じ方法で、このテーブルにクエリを実行できます。
BigQuery 外部データ ラッパーの実行モード
実行モードによって、AlloyDB for PostgreSQL が BigQuery と連携してデータを取得する方法が決まります。BigQuery 外部データラッパーは、query と storage の 2 つの実行モードをサポートしています。各モードには個別のパフォーマンス特性と料金が設定されているため、適切なモードを選択することが重要です。詳細については、BigQuery の料金をご覧ください。
クエリモード
このモードでは、BigQuery API を使用して BigQuery からデータを取得します。BigQuery のコンピューティング エンジンを使用して、フィルタと集計をプッシュダウンすることで複雑なクエリを実行します。つまり、WHERE 句、GROUP BY 句、集計は、データを PostgreSQL に送り返す前に BigQuery で実行されます。このモードでは、BigQuery ビューと外部テーブルのクエリもサポートされています。
この API は、小さな結果セットに適した構造化されたページネーション形式の行レスポンスを提供するため、大きなデータセットの読み取りには、BigQuery Storage API のストリーミング オプションと比較して、スループットの制限とレイテンシの増加があります。
ストレージ モード
このモードでは、BigQuery Storage API を使用して BigQuery からデータを取得します。構造化データをバイナリ シリアル化形式でネットワーク経由で送信することで、高スループットの読み取りが可能になります。これは、BigQuery で大きなテーブルをスキャンする場合に推奨されるモードです。
ただし、このモードにはいくつかの制限があります。複雑な SQL オペレーションのすべてを BigQuery Storage API にプッシュダウンできるわけではありません。たとえば、集計は BigQuery に push できないため、AlloyDB で実行する必要があります。このモードでは、BigQuery ビューと外部テーブルのクエリもサポートされていません。
自動モード
CREATE FOREIGN TABLE コマンドでモードを設定しない場合、デフォルトのモードは auto に設定されます。auto モードを使用すると、AlloyDB はパフォーマンスのバランスを取り、BigQuery にプッシュダウンされる SQL オペレーションを最大化する基盤となる API を選択します。