AlloyDB にデータをエクスポートする(リバース ETL)
BigQuery から AlloyDB for PostgreSQL へのリバース抽出、変換、読み込み(リバース ETL)ワークフローを使用すると、BigQuery から AlloyDB データベースにデータを移動できます。EXPORT DATA ステートメントを使用して、エクスポートする前にクエリでデータを処理またはフィルタリングできます。また、BigQuery テーブルを AlloyDB に同期して、テーブル全体をコピーまたはミラーリングすることもできます。
始める前に
エクスポートされたデータを受け取るデータベース、スキーマ、テーブルを含む AlloyDB クラスタとインスタンスを作成します。エクスポート ジョブを実行する前に、ターゲット スキーマとテーブルが必要です。
ターゲット AlloyDB インスタンスは、
READY状態のPRIMARYインスタンスである必要があります。AlloyDB インスタンスに接続するための BigQuery 接続を作成します。接続はユーザー名とパスワードで認証する必要があります。接続で指定されたデータベース ユーザーには、ターゲット テーブルに対する
INSERT権限と、ターゲット スキーマに対するUSAGE権限が必要です。この機能を使用するには、BigQuery Enterprise または Enterprise Plus ティアの予約を作成する必要があります。AlloyDB へのエクスポートは、
QUERYの割り当てがある予約でのみサポートされます。このドキュメントの各タスクを実行するために必要な権限をユーザーに与える Identity and Access Management(IAM)のロールを付与します。
必要なロール
BigQuery データを AlloyDB にエクスポートするために必要な権限を取得するには、プロジェクトに対して次の IAM ロールを付与するよう管理者に依頼してください。
-
BigQuery テーブルからデータをエクスポートする: BigQuery データ閲覧者 (
roles/bigquery.dataViewer) -
抽出ジョブを実行する: BigQuery ユーザー (
roles/bigquery.user) -
BigQuery 接続を使用する: BigQuery 接続ユーザー (
roles/bigquery.connectionUser) -
AlloyDB インスタンスに接続する: AlloyDB クライアント(
roles/alloydb.client)- 接続サービス アカウント
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
制限事項
AlloyDB のエクスポートは、バッチ エクスポートのみをサポートしています。継続的クエリを使用して AlloyDB にエクスポートすることはできません。
AlloyDB にエクスポートされたデータは、新しい行としてのみ追加されます。エクスポート プロセスでは、AlloyDB 内の既存のレコードは変更または削除されません。ターゲット テーブルに
PRIMARY KEYまたはUNIQUE制約が定義されていない場合、同じデータを複数回エクスポートすると、エントリが重複します。データの完全性を確保するため、AlloyDB テーブルに
PRIMARY KEY制約またはUNIQUE制約を定義することをおすすめします。エクスポート ジョブは「upsert」を実行しません。upsert では、一意の一致するキーがある場合に既存のレコードが更新されます。受信行がPRIMARY KEYまたはUNIQUE制約に違反している場合、エクスポート ジョブ全体が失敗します。同じ AlloyDB テーブルに対して複数の
EXPORT DATAジョブを同時に実行することはおすすめしません。これを行うと、データの損失やジョブの失敗など、予期しない動作が発生する可能性があります。一度に 1 つのエクスポート ジョブのみが特定のテーブルに書き込むことを確認することをおすすめします。BigQuery 接続を介したユーザー名とパスワードの認証のみがサポートされています。
ARRAY、BYTES、GEOGRAPHY、INTERVAL、STRUCTの BigQuery データ型はサポートされていません。BigQuery の
SELECTステートメントで、ターゲット AlloyDB テーブルに存在する列が省略されている場合、それらの列はNULL値を許可するか、AlloyDB でデフォルト値が定義されている必要があります。NOT NULL制約があり、デフォルト値がない場合、エクスポートは失敗します。AlloyDB へのエクスポートは、BigQuery Enterprise エディションまたは Enterprise Plus エディションでのみサポートされています。BigQuery Standard エディションとオンデマンド コンピューティングはサポートされていません。詳細については、管理機能をご覧ください。
AlloyDB への抽出ジョブなどの BigQuery ジョブの最大期間は 6 時間です。非常に大規模なエクスポートの場合は、エクスポートを複数の小さなジョブに分割することをおすすめします。
ロケーションに関する留意事項
AlloyDB へのデータのエクスポートには、BigQuery データセットと AlloyDB インスタンスのロケーションに関する特定の要件があります。
同じリージョンへのエクスポート: ターゲット AlloyDB インスタンスは、BigQuery データセットとまったく同じ Cloud de Confiance by S3NS リージョンに存在する必要があります。たとえば、
us-east1のデータセットは、us-east1の AlloyDB インスタンスにのみエクスポートできます。マルチリージョン エクスポート:
USマルチリージョンのデータセットは、us-central1リージョンにある AlloyDB インスタンスにのみエクスポートできます。EUマルチリージョンのデータセットは、europe-west4リージョンにある AlloyDB インスタンスにのみエクスポートできます。
前述の組み合わせ以外のクロスリージョン エクスポートはサポートされていません。
alloydb_options を使用してエクスポートを構成する
alloydb_options オプションを使用して、宛先の AlloyDB スキーマ、テーブル、最大接続数を指定できます。構成は JSON 文字列として表現されます。table パラメータのみが必須です。他のすべてのパラメータは省略可能です。
エクスポートを構成するときに、SELECT ステートメントの列には、ターゲット AlloyDB テーブルの列名と一致するエイリアスが必要です。
EXPORT DATA WITH CONNECTION `PROJECT_ID.LOCATION.CONNECTION_ID` OPTIONS( format='ALLOYDB', uri="https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_ID/instances/INSTANCE_ID", alloydb_options="""{ "schema": "SCHEMA_NAME", "table": "TABLE_NAME", "max_parallel_connections":MAX_CONNECTIONS}""" ) AS SELECT * FROM `mydataset.table1`;
次のように置き換えます。
PROJECT_ID: Cloud de Confiance by S3NS プロジェクトの名前。LOCATION: 接続とターゲット インスタンスのロケーション。CONNECTION_ID: BigQuery 接続の名前。CLUSTER_ID: AlloyDB クラスタの名前。INSTANCE_ID: ターゲット AlloyDB インスタンスの名前。SCHEMA_NAME(省略可): AlloyDB の宛先スキーマの名前。指定しない場合は、データベース ユーザーに構成されているデフォルトのスキーマが使用されます。TABLE_NAME: AlloyDB の既存の宛先テーブルの名前。スキーマ接頭辞は付けません。MAX_CONNECTIONS(省略可): BigQuery ワーカーから AlloyDB インスタンスへの同時並列接続の最大数。接続を制限すると、大規模なエクスポート中にターゲット インスタンスが過負荷になるのを防ぐことができます。
データのエクスポート
EXPORT DATA ステートメントを使用して、BigQuery テーブルから AlloyDB テーブルにデータをエクスポートできます。
次の例では、mydataset.table1 という名前のテーブルから選択したフィールドを my_target_table という名前の AlloyDB テーブルにエクスポートします。
EXPORT DATA WITH CONNECTION `myproject.us-central1.my-alloydb-conn` OPTIONS ( format='ALLOYDB', uri="https://alloydb.googleapis.com/v1/projects/myproject/locations/us-central1/clusters/my-cluster/instances/my-instance", alloydb_options="""{ "schema": "public", "table": "my_target_table" }""" ) AS SELECT col1 AS id, col2 AS name, col3 AS value FROM `mydataset.table1`;
エクスポート用にテーブルを同期する
SQL ベースの変換を必要とせずにテーブル全体をコピーする場合や、自動ミラーリングを行う場合は、BigQuery テーブルを AlloyDB に直接同期できます。EXPORT DATA ステートメントを使用すると、SELECT クエリを使用して、データを移動する前に処理、エイリアス、フィルタリングを行うことができます。また、テーブル同期を使用して、BigQuery テーブルを 1 対 1 で移行することもできます。
テーブルの同期は、次のモードで使用できます。
- 1 回限りのインポート: AlloyDB 内に BigQuery テーブルの書き込み可能な独立したコピーを作成します。
- 定期的な同期(ミラーリング): AlloyDB に読み取り専用のローカル テーブルを作成し、定義されたスケジュールで BigQuery から自動的に更新します。
詳細については、BigQuery データを AlloyDB に同期するをご覧ください。
料金
EXPORT DATA ステートメントを使用して AlloyDB にデータをエクスポートする場合は、BigQuery 容量コンピューティングの料金が適用されます。
データのエクスポート後、AlloyDB にデータを保存すると料金が発生します。詳細については、AlloyDB for PostgreSQL の料金をご覧ください。