BigQuery to Bigtable テンプレートは、BigQuery テーブルから既存の Bigtable テーブルにデータをコピーするバッチ パイプラインです。テンプレートでは、テーブル全体を読み取ることも、クエリを使用して特定のレコードを読み取ることもできます。
パイプラインの要件
- ソースとなる BigQuery テーブルが存在していること。
- Bigtable テーブルが存在していること。
- ワーカー サービス アカウントには
roles/bigquery.datasets.create
権限が必要です。詳細については、IAM の概要をご覧ください。
テンプレートのパラメータ
必須パラメータ
- readIdColumn: 行の固有識別子を格納している BigQuery の列の名前。
- bigtableWriteInstanceId: テーブルが含まれている Bigtable インスタンスの ID。
- bigtableWriteTableId: 書き込み先の Bigtable テーブルの ID。
- bigtableWriteColumnFamily: データを書き込む Bigtable テーブルの列ファミリーの名前。
オプション パラメータ
- inputTableSpec: 読み取り元の BigQuery テーブル形式:
projectId:datasetId.tablename
。inputTableSpec
を指定すると、テンプレートは BigQuery Storage Read API(https://cloud.google.com/bigquery/docs/reference/storage)を使用して、BigQuery ストレージから直接データを読み取ります。Storage Read API の制限については、https://cloud.google.com/bigquery/docs/reference/storage#limitations をご覧ください。inputTableSpec
またはquery
を指定する必要があります。両方のパラメータを設定した場合、テンプレートはquery
パラメータを使用します(例: bigquery-project:dataset.input_table)。 - outputDeadletterTable: 出力テーブルに到達できなかったメッセージが記録される BigQuery テーブル。<PROJECT_ID>:<DATASET_NAME>.<DEADLETTER_TABLE> の形式で指定します。テーブルが存在しない場合は、パイプラインの実行中に作成されます。指定しない場合は
<outputTableSpec>_error_records
が使用されます(例: your-project-id:your-dataset.your-table-name)。 - query: BigQuery からデータを読み取るために使用する SQL クエリ。BigQuery データセットが Dataflow ジョブとは異なるプロジェクトにある場合は、SQL クエリで完全なデータセット名を指定します(例: <PROJECT_ID>.<DATASET_NAME>.<TABLE_NAME>)。デフォルトでは、
useLegacySql
がtrue
でない限り、query
パラメータは GoogleSQL(https://cloud.google.com/bigquery/docs/introduction-sql)を使用します。inputTableSpec
またはquery
を指定する必要があります。両方のパラメータを設定した場合、テンプレートはquery
パラメータを使用します(例: select * from sampledb.sample_table)。 - useLegacySql: レガシー SQL を使用するには、true に設定します。このパラメータは、
query
パラメータを使用する場合にのみ適用されます。デフォルトは false です。 - queryLocation: 基となるテーブルの権限なしで承認済みビューから読み取る場合は必須です(例: US)。
- bigtableRpcAttemptTimeoutMs: Bigtable RPC の個々の試行のタイムアウト(ミリ秒)。
- bigtableRpcTimeoutMs: Bigtable RPC オペレーションの合計タイムアウト(ミリ秒)。
- bigtableAdditionalRetryCodes: 追加の再試行コード(例: RESOURCE_EXHAUSTED、DEADLINE_EXCEEDED)。
- bigtableWriteAppProfile: エクスポートに使用する Bigtable アプリケーション プロファイルの ID。アプリ プロファイルを指定しない場合、Bigtable はインスタンスのデフォルトのアプリ プロファイル(https://cloud.google.com/bigtable/docs/app-profiles#default-app-profile)を使用します。
- bigtableWriteProjectId: データを書き込む Bigtable インスタンスを含む Google Cloud プロジェクトの ID。
- bigtableBulkWriteLatencyTargetMs: レイテンシ ベースのスロットリングに対する Bigtable のレイテンシ ターゲット(ミリ秒)。
- bigtableBulkWriteMaxRowKeyCount: Bigtable バッチ書き込みオペレーションの行キーの最大数。
- bigtableBulkWriteMaxRequestSizeBytes: 1 回の Bigtable バッチ書き込みオペレーションに含める最大バイト数。
テンプレートを実行する
コンソール
- Dataflow の [テンプレートからジョブを作成] ページに移動します。 [テンプレートからジョブを作成] に移動
- [ジョブ名] フィールドに、固有のジョブ名を入力します。
- (省略可)[リージョン エンドポイント] で、プルダウン メニューから値を選択します。デフォルトのリージョンは
us-central1
です。Dataflow ジョブを実行できるリージョンのリストについては、Dataflow のロケーションをご覧ください。
- [Dataflow テンプレート] プルダウン メニューから、[ the BigQuery to Bigtable template] を選択します。
- 表示されたパラメータ フィールドに、パラメータ値を入力します。
- [ジョブを実行] をクリックします。
gcloud
シェルまたはターミナルで、テンプレートを実行します。
gcloud dataflow flex-template run JOB_NAME \ --project=PROJECT_ID \ --region=REGION_NAME \ --template-file-gcs-location=gs://dataflow-templates-REGION_NAME/VERSION/flex/BigQuery_to_Bigtable \ --parameters \ readIdColumn=READ_COLUMN_ID,\ inputTableSpec=INPUT_TABLE_SPEC,\ bigtableWriteInstanceId=BIGTABLE_INSTANCE_ID,\ bigtableWriteTableId=BIGTABLE_TABLE_ID,\ bigtableWriteColumnFamily=BIGTABLE_COLUMN_FAMILY
次のように置き換えます。
PROJECT_ID
: Dataflow ジョブを実行する Google Cloud プロジェクトの IDJOB_NAME
: 一意の任意のジョブ名REGION_NAME
: Dataflow ジョブをデプロイするリージョン(例:us-central1
)VERSION
: 使用するテンプレートのバージョン使用できる値は次のとおりです。
latest
: 最新バージョンのテンプレートを使用します。このテンプレートは、バケット内で日付のない親フォルダ(gs://dataflow-templates-REGION_NAME/latest/)にあります。- バージョン名(例:
2023-09-12-00_RC00
)。特定のバージョンのテンプレートを使用します。このテンプレートは、バケット内で対応する日付の親フォルダ(gs://dataflow-templates-REGION_NAME/)にあります。
READ_COLUMN_ID
: BigQuery の一意の ID の列。INPUT_TABLE_SPEC
: BigQuery テーブル名。BIGTABLE_INSTANCE_ID
: Bigtable インスタンス ID。BIGTABLE_TABLE_ID
: Bigtable テーブル ID。BIGTABLE_COLUMN_FAMILY
: Bigtable テーブルの列ファミリー。
API
REST API を使用してテンプレートを実行するには、HTTP POST リクエストを送信します。API とその認証スコープの詳細については、projects.templates.launch
をご覧ください。
POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch { "launch_parameter": { "jobName": "JOB_NAME", "parameters": { "readIdColumn": "READ_COLUMN_ID", "inputTableSpec": "INPUT_TABLE_SPEC", "bigtableWriteInstanceId": "BIGTABLE_INSTANCE_ID", "bigtableWriteTableId": "BIGTABLE_TABLE_ID", "bigtableWriteColumnFamily": "BIGTABLE_COLUMN_FAMILY" }, "containerSpecGcsPath": "gs://dataflow-templates-LOCATION/VERSION/flex/BigQuery_to_Bigtable", } }
次のように置き換えます。
PROJECT_ID
: Dataflow ジョブを実行する Google Cloud プロジェクトの IDJOB_NAME
: 一意の任意のジョブ名LOCATION
: Dataflow ジョブをデプロイするリージョン(例:us-central1
)VERSION
: 使用するテンプレートのバージョン使用できる値は次のとおりです。
latest
: 最新バージョンのテンプレートを使用します。このテンプレートは、バケット内で日付のない親フォルダ(gs://dataflow-templates-REGION_NAME/latest/)にあります。- バージョン名(例:
2023-09-12-00_RC00
)。特定のバージョンのテンプレートを使用します。このテンプレートは、バケット内で対応する日付の親フォルダ(gs://dataflow-templates-REGION_NAME/)にあります。
READ_COLUMN_ID
: BigQuery の一意の ID の列。INPUT_TABLE_SPEC
: BigQuery テーブル名。BIGTABLE_INSTANCE_ID
: Bigtable インスタンス ID。BIGTABLE_TABLE_ID
: Bigtable テーブル ID。BIGTABLE_COLUMN_FAMILY
: Bigtable テーブルの列ファミリー。
次のステップ
- Dataflow テンプレートについて学習する。
- Google 提供のテンプレートのリストを確認する。