8.2.18 Google BigQuery

トピック:

8.2.18.1 ストリーミングAPIの使用

Google BigQueryハンドラの使用方法について学習します。このハンドラは、チェンジ・データ・キャプチャのデータをソース証跡ファイルからGoogle BigQueryにストリーミングします。

BigQueryは、Google Storageと連携して機能する超大規模データセットの対話型分析を可能にするRESTful Webサービスです。https://cloud.google.com/bigquery/を参照してください。

8.2.18.1.1 機能の詳細

8.2.18.1.1.1 データ型

BigQueryハンドラは標準のSQLデータ型に対応しており、そのデータ型のほとんどがBigQueryハンドラでサポートされています。証跡ファイルの列値から、BigQueryハンドラでBigQuery列タイプを表す対応するJavaタイプへのデータ型変換が必要です。

次のデータ型がサポートされます。

BIGNUMERIC
BOOLEAN
BYTES
DATE
DATETIME
FLOAT
INTEGER
JSON
NUMERIC
STRING
TIME
TIMESTAMP

BigQueryハンドラでは、ARRAYSTRUCTなどの複合データ型がサポートされていません。

8.2.18.1.1.2 メタデータのサポート

BigQueryハンドラは、表が存在しない場合、BigQueryに表を作成します。

BigQueryハンドラは、ソース・メタデータに存在する列、またはターゲット・メタデータに存在しない構成済メタ列を追加するように表を変更します。BigQueryハンドラは、メタデータの変更を検出した場合、実行時にも動的に列を追加します。

BigQueryハンドラは、ソース表定義に存在しないBigQuery表の列を削除しません。BigQueryは、既存の列の削除も、既存の列のデータ型の変更もサポートしていません。BigQueryに列を作成すると、その列は不変になります。

切捨て操作はサポートされていません。

8.2.18.1.1.3 操作モード

BigQueryハンドラは、次の2つのモードのいずれかで構成できます。

Audit Log Mode = true
gg.handler.name.auditLogMode=true

監査ログ・モードをtrueにして実行されるようにハンドラを構成した場合は、データは一意の行識別キーなしでGoogle BigQueryにプッシュされます。その結果、Google BigQueryでは同じ行に対する異なる操作をマージできません。たとえば、1つの挿入操作、2つの更新操作、および1つの削除操作が行われた1つのソース行は、BigQueryでは4つの行(操作ごとに1つ)として表示されます。

また、BigQueryデータ・セットに表示される監査ログの順序は確定的ではありません。

これらの制限を解決するには、ハンドラのメタ列テンプレートでoptypeおよびpostionを指定する必要があります。これにより、Google BigQueryの表用のスキーマに同じ名前の列が2つ追加されます。たとえば: gg.handler.bigquery.metaColumnsTemplate = ${optype}, ${position}

optypeは、監査ログの行の操作タイプを特定するために重要です。

証跡ファイルで処理される操作の順に監査ログを表示するには、Google BigQueryの表を問い合せるときにORDER BY句で使用できる位置を指定します。たとえば:

SELECT * FROM [projectId:datasetId.tableId] ORDER BY position
auditLogMode = false

gg.handler.name.auditLogMode=false

監査ログ・モードをfalseにして実行されるようにハンドラを構成した場合は、データは、一意の行識別キーを使用してGoogle BigQueryにプッシュされます。Google BigQueryでは、同じ行に対する様々な操作をマージできます。ただし、この動作は複雑です。Google BigQueryでは、指定された行に対する操作をマージする間のみ、重複が排除されます。そのため、その結果は、やや非決定的である場合があります。

証跡ソースには、正しくマージするためにレコードの完全なイメージが必要です。

例1

1つの挿入操作がBigQueryに送信されます。重複が排除される期間が経過する前に、同じ行に対する1つの更新操作がBigQueryに送信されます。その更新操作について結果として生成されるのは、BigQueryでは1行です。

例2

1つの挿入操作がBigQueryに送信されます。重複が排除される期間が経過した後、同じ行に対する1つの更新操作がBigQueryに送信されます。結果として、BigQueryで、その挿入操作と更新操作の両方が表示されます。

これは、BigQuery SDKを使用した場合の実証された動作であり、不具合ではなく特性ですが、この動作には多くのユーザーが混乱します。重複が排除される期間の長さとして実証されているのは、1分以上です。ただし、オラクル社のテスト実施では、この期間が非常に長いということが示されています。したがって、指定された1行に対するすべての操作が非常に短期間で実行されることが確実でないかぎり、BigQueryで、指定された1行に対して複数のエントリが存在する可能性があります。そのため、指定された1行の最新の状態を判断できるように、optypeおよびpositionを指定してメタ列を構成することもユーザーにとって重要となります。監査ログ・モードの詳細は、BigQueryへのデータのストリーミングというGoogle BigQueryドキュメントを参照してください。

8.2.18.1.1.4 操作処理のサポート

BigQueryハンドラは、同期APIを使用してGoogle BigQueryに操作をプッシュします。BigQueryでは、挿入、更新および削除操作が、従来のRDBMSとは異なる方法で処理されます。

次に、挿入、更新および削除操作が操作モードに応じてハンドラでどのように解釈されるかについて説明します。

auditLogMode = true
  • insert - optypeを挿入操作として、レコードをBigQuery表に挿入します。

  • update - optypeを更新操作として、レコードをBigQuery表に挿入します。

  • delete - optypeを削除操作として、レコードをBigQuery表に挿入します。

  • pkUpdate - pkUpdateHandlingプロパティがdelete-insertとして構成されている場合、ハンドラは削除操作の後に挿入操作を送信します。これらの行はいずれもBigQuery表の同じ位置を持つので、主キー操作として識別され、別個の削除操作と挿入操作として識別されません。

auditLogMode = false
  • insert - Google BigQueryに行がまだ存在しない場合、挿入操作はinsertとして処理されます。Google BigQueryに行がすでに存在する場合、挿入操作はupdateとして処理されます。ハンドラは、削除済列をfalseに設定します。

  • update - Google BigQueryに行が存在しない場合、更新操作はinsertとして処理されます。Google BigQueryに行がすでに存在する場合、更新操作はupdateとして処理されます。ハンドラは、削除済列をfalseに設定します。

  • delete - Google BigQueryに行が存在しない場合、削除操作が追加されます。Google BigQueryに行が存在する場合、削除操作はdeleteとして処理されます。ハンドラは、削除済列をtrueに設定します。

  • pkUpdate - pkUpdateHandlingプロパティがdelete-insertとして構成されている場合、ハンドラは主キーが更新される行について削除済列をtrueに設定ます。その後に、この行について新しい主キーおよびfalseに設定された削除済列が指定された別の挿入操作が続きます。

監査ログ・モードを切り替えると、Google BigQueryは既存の表のスキーマを変更できないためにBigQueryハンドラは強制的に異常終了するので、監査ログ・モードは切り替えないでください。既存の表は、監査ログ・モードを切り替える前に削除する必要があります。

ノート:

BigQueryハンドラでは、truncate操作がサポートされていません。truncate操作が発生すると異常終了します。

8.2.18.1.1.5 プロキシ設定

プロキシ・サーバーを使用してBigQueryに接続するには、次のようにプロパティ・ファイルでプロキシ・ホストおよびプロキシ・ポートを構成する必要があります。

jvm.bootoptions= -Dhttps.proxyHost=proxy_host_name -Dhttps.proxyPort=proxy_port_number
8.2.18.1.1.6 Googleデータセットへのマッピング

データセットは特定のGoogleクラウド・プロジェクトに含まれています。データセットは最上位レベルのコンテナであり、表およびビューの編成とアクセス制御に使用されます。

表またはビューはデータセットに属している必要があるため、データをBigQueryにロードする前に少なくとも1つのデータセットを作成しておく必要があります。

BigQueryハンドラでは、既存のデータセットを使用することも、それがない場合はデータセットを作成することもできます。

BigQueryハンドラにより、表のスキーマ名がデータセット名にマップされます。3つの部分からなる表名の場合、データセットはカタログとスキーマを連結して作成されます。

8.2.18.1.2 BigQueryハンドラの設定および実行

Google BigQueryハンドラは、Java BigQueryクライアント・ライブラリを使用してBig Queryに接続します。

これらのクライアント・ライブラリは、次のMaven座標を使用して配置されています。
  • グループID: com.google.cloud
  • アーティファクトID: google-cloud-bigquery
  • バージョン: 2.7.1

BigQueryクライアント・ライブラリは、Oracle GoldenGate for Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)には付属していません。またGoogleでは、BigQueryクライアント・ライブラリをダウンロードするためのリンクが削除されている可能性があります。BigQueryクライアント・ライブラリは、Mavenおよび前述のMaven座標を使用してダウンロードできます。ただし、Mavenの扱いに習熟していることが必要です。Google BigQueryクライアント・ライブラリは、依存性ダウンロード・スクリプトを使用してダウンロードできます。詳細は、Google BigQuery依存性を参照してください。

依存関係ダウンロードの詳細は、依存関係ダウンロードを参照してください。

8.2.18.1.2.1 BigQueryのスキーマ・マッピング

Replicatのmap文で指定された表スキーマ名は、BigQueryデータセット名にマップされます。たとえば: map QASOURCE.*, target "dataset_US".*;

このmap文はBigQueryデータセット"dataset_US"に表を複製します。Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)では、スキーマ名と表名が大文字に正規化されます。小文字および大/小文字混在のデータセットおよび表名はサポートされていますが、Replicatマッピング文内では引用符で囲む必要があります。

8.2.18.1.2.2 BigQueryハンドラ構成の理解

BigQueryハンドラの構成可能な値は次のとおりです。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)

BigQueryハンドラの選択を有効にするには、まずgg.handler.name.type=bigqueryを指定してハンドラ・タイプを構成してから、次に示す他のBigQueryプロパティを構成する必要があります。

プロパティ 必須/オプション 有効な値 デフォルト 説明

gg.handlerlist

必須

任意の文字列

なし

BigQueryハンドラの名前を指定します。BigQueryハンドラ名は、この表にリストしたプロパティ名の一部になります。

gg.handler.name.type=bigquery

必須

bigquery

なし

BigQueryハンドラを選択し、チェンジ・データ・キャプチャをGoogle BigQueryにストリーミングします。

gg.handler.name.createDataset オプション true | false true trueに設定すると、BigQueryデータセットが存在しない場合は自動的に作成されます。

gg.handler.name.credentialsFile

オプション

資格証明ファイルの相対パスまたは絶対パス

なし

Google BigQueryから認証用にダウンロードされた資格証明ファイル。資格証明ファイルへのパスを指定しない場合は、環境変数として設定する必要があります。ハンドラ認証の構成を参照してください。

gg.handler.name.projectId

必須

任意の文字列

なし

Google BigQuery内のプロジェクトの名前。ハンドラには、Google BigQueryストアに接続するためのプロジェクトIDが必要です。

gg.handler.name.batchSize

オプション

任意の数値

500

1つのバッチにまとめられる最大操作数。これは、すべてのターゲット表バッチに適用されます。

gg.handler.name.batchFlushFrequency

オプション

任意の数値

1000

次の操作のバッチを実行するまでに待機する最大時間(ミリ秒)。これは、すべてのターゲット表バッチに適用されます。

gg.handler.name.skipInvalidRows

オプション

true | false

false

無効な行が存在する場合でも、リクエストの有効な行をすべて挿入するかどうかを設定します。設定されていない場合、無効な行が含まれると、挿入リクエスト全体が失敗します。

gg.handler.name.ignoreUnknownValues

オプション

true | false

false

スキーマと一致しない値が含まれる行を受け入れるかどうかを設定します。設定されていない場合、不明な値を持つ行は無効とみなされます。

gg.handler.name.connectionTimeout

オプション

正の整数

20000

ハンドラがGoogle BigQueryとの接続を確立するまで待機する最大時間(ミリ秒)。

gg.handler.name.readTimeout

オプション

正の整数

30000

ハンドラが確立した接続からデータを読み取るまで待機する最大時間(ミリ秒)。

gg.handler.name.metaColumnsTemplate

オプション

有効な文字列

なし

含めるmetaColumnsを指定する有効な文字列。auditLogModetrueに設定した場合、監査ログに挿入される行の操作タイプを表示するようにmetaColumnsTemplateプロパティを設定することが重要です。メタ列のキーワードを参照してください。

gg.handler.name.auditLogMode

オプション

true | false

false

trueに設定すると、ハンドラは各レコードを主キーなしでターゲットに書き込みます。すべて挿入として処理されます。

falseに設定すると、着信レコードが同じ主キーを持っている場合、ハンドラはそれらをターゲット表にマージしようとします。このプロパティには主キーが必要です。証跡ソース・レコードには、正しくマージするために完全なイメージ更新が必要です。

gg.handler.name.pkUpdateHandling

オプション

abend | delete-insert

abend

ハンドラが、主キーを変更する更新操作をどのように処理するかを設定します。主キー操作により、BigQueryハンドラで問題が起きることがあるので、特に慎重を期する必要があります。

  • abend - プロセスが異常終了することを示します。

  • delete-insert - プロセスで操作が削除および挿入として扱われることを示します。このプロパティが正しく機能するには、完全な操作前イメージが必要です。操作前と操作後の完全な行イメージがない場合、挿入データは不完全になります。このオプションをお薦めします。

gg.handler.name.adjustScale オプション

true | false

false BigQuery数値データ型では、9桁の最大スケールがサポートされます。フィールドがBigQuery数値データ型にマップされている場合、スケールが9桁を超えると失敗します。BigQuery数値データ型にマップされたフィールドを9桁のスケールに丸めるには、このプロパティをtrueに設定します。このプロパティを有効にすると、スケールが9桁を超えるソース・データ値の精度が失われます。
gg.handler.name.includeDeletedColumn オプション

true | false

false 出力にdeletedというブール列を含めるには、trueに設定します。この列の値は、挿入操作および更新操作の場合はfalseに、削除操作の場合はtrueに設定されます。
gg.handler.name.enableAlter オプション true | false false ターゲットBigQuery表の変更を有効にするには、trueに設定します。これによりBigQueryハンドラは、ソースに構成されていて現在ターゲットBigQuery表には存在しない列またはメタ列を追加できるようになります。
gg.handler.name.clientId オプション 文字列 なし Google BigQuery資格証明を解決するための構成プロパティgg.handler.name.credentialsFileが設定されていない場合に、クライアントIDを設定するために使用します。Oracle Walletを使用して資格証明を保護するには、資格証明ファイルのかわりにこのプロパティを使用できます。
gg.handler.name.clientEmail オプション 文字列 なし Google BigQuery資格証明を解決するための構成プロパティgg.handler.name.credentialsFileが設定されていない場合に、クライアントのメールアドレスを設定するために使用します。Oracle Walletを使用して資格証明を保護するには、資格証明ファイルのかわりにこのプロパティを使用できます。
gg.handler.name.privateKey オプション 文字列 なし Google BigQuery資格証明を解決するための構成プロパティgg.handler.name.credentialsFileが設定されていない場合に、秘密キーを設定するために使用します。Oracle Walletを使用して資格証明を保護するには、資格証明ファイルのかわりにこのプロパティを使用できます。
gg.handler.name.privateKeyId オプション 文字列 なし Google BigQuery資格証明を解決するための構成プロパティgg.handler.name.credentialsFileが設定されていない場合に、秘密キーIDを設定するために使用します。Oracle Walletを使用して資格証明を保護するには、資格証明ファイルのかわりにこのプロパティを使用できます。
gg.handler.name.url オプション スキーム、サーバー名およびポート(デフォルト・ポートでない場合)を含むBigQueryに接続するための有効なURL。デフォルトは、https://www.googleapis.comです。 https://www.googleapis.com ユーザーは、プライベート・エンドポイントがBigQueryに接続するためのURLを設定できます。

GCSをGoogle Cloud Serviceアカウントに接続できるようにするには、資格証明JSONファイルへの相対パスまたは絶対パスを含む資格証明ファイル・プロパティ、または個々の資格証明キーのプロパティのいずれかが構成されていることを確認します。googleサービス・アカウントの資格証明キーを個別に追加するために使用される構成プロパティにより、Oracleウォレットを使用してそれらを暗号化できます。

8.2.18.1.2.3 サンプル構成の確認

次に、BigQueryハンドラのサンプル構成を示します。

gg.handlerlist = bigquery

#The handler properties
gg.handler.bigquery.type = bigquery
gg.handler.bigquery.projectId = festive-athlete-201315
gg.handler.bigquery.credentialsFile = credentials.json
gg.handler.bigquery.auditLogMode = true
gg.handler.bigquery.pkUpdateHandling = delete-insert

gg.handler.bigquery.metaColumnsTemplate =${optype}, ${position}
8.2.18.1.2.4 ハンドラ認証の構成

Google BigQueryからダウンロードしたJSONファイルの資格証明を使用してBigQueryハンドラ認証を構成する必要があります。

資格証明ファイルをダウンロードします。

  1. cloud.google.comでGoogleアカウントにログインします。

  2. 「コンソール」をクリックし、プロジェクトを選択できるダッシュボードに移動します。

  3. ナビゲーション・メニューから、「APIとサービス」をクリックし、「Credentials」を選択します。

  4. 「Create Credential」メニューから、「Service account key」を選択します。

  5. JSONキー・タイプを選択して、システムのJSON資格証明ファイルをダウンロードします。

資格証明ファイルを作成した後、ここにリストされている次のいずれかの方法でハンドラを認証できます。

  • gg.handler.name.credentialsFile構成プロパティを使用して、プロパティ・ファイルに資格証明ファイルへのパスを指定します。

    資格証明ファイルのパスには、ワイルドカードが付加されていないパスを使用してください。資格証明ファイルへのパスに*ワイルドカードを含めると、ファイルは認識されません。

    または

  • 資格証明ファイルのキー(clientIdClientEmailprivateKeyIdおよびprivateKey)を、対応するハンドラ・プロパティに設定します。

    または

  • GOOGLE_APPLICATION_CREDENTIALS環境変数をシステムに設定します。たとえば:

    export GOOGLE_APPLICATION_CREDENTIALS = credentials.json

    次に、Oracle GoldenGateマネージャ・プロセスを再起動します。

8.2.18.1.3 Google BigQuery依存性

Google BigQueryクライアント・ライブラリは、BigQueryとの統合に必要です。

Maven座標は次のとおりです。

Maven groupId: com.google.cloud

Maven artifactId: google-cloud-bigquery

バージョン: 2.7.1

8.2.18.1.3.1 BigQuery 2.7.1

バージョン2.7.1に必要なBigQuery Clientライブラリは、次のとおりです。

api-common-2.1.3.jar
checker-compat-qual-2.5.5.jar
checker-qual-3.21.1.jar
commons-codec-1.15.jar
commons-logging-1.2.jar
error_prone_annotations-2.11.0.jar
failureaccess-1.0.1.jar
gax-2.11.0.jar
gax-httpjson-0.96.0.jar
google-api-client-1.33.1.jar
google-api-services-bigquery-v2-rev20211129-1.32.1.jar
google-auth-library-credentials-1.4.0.jar
google-auth-library-oauth2-http-1.4.0.jar
google-cloud-bigquery-2.7.1.jar
google-cloud-core-2.4.0.jar
google-cloud-core-http-2.4.0.jar
google-http-client-1.41.2.jar
google-http-client-apache-v2-1.41.2.jar
google-http-client-appengine-1.41.2.jar
google-http-client-gson-1.41.2.jar
google-http-client-jackson2-1.41.2.jar
google-oauth-client-1.33.0.jar
grpc-context-1.44.0.jar
gson-2.8.9.jar
guava-31.0.1-jre.jar
httpclient-4.5.13.jar
httpcore-4.4.15.jar
j2objc-annotations-1.3.jar
jackson-core-2.13.1.jar
javax.annotation-api-1.3.2.jar
jsr305-3.0.2.jar
listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
opencensus-api-0.31.0.jar
opencensus-contrib-http-util-0.31.0.jar
protobuf-java-3.19.3.jar
protobuf-java-util-3.19.3.jar
proto-google-common-protos-2.7.2.jar
proto-google-iam-v1-1.2.1.jar

8.2.18.2 Google BigQueryにおけるステージングおよびマージ

トピック:

8.2.18.2.1 概要

BigQueryはGoogle Cloudが提供しているコスト効率に優れたペタバイト規模の完全管理型分析データ・ウェアハウスで、大量のデータをほぼリアルタイムで分析できます。

8.2.18.2.2 詳細な機能

BigQueryイベント・ハンドラは、ステージングおよびマージ・データ・フローを使用します。

変更データはマイクロバッチの一時的な場所にステージングされ、最終的にターゲット表にマージされます。Google Cloud Storage (GCS)は、変更データのステージング領域として使用されます。

このイベント・ハンドラは、GCSイベント・ハンドラの出力に接続されたダウンストリーム・イベント・ハンドラとして使用されます。

GCSイベント・ハンドラは、ファイル・ライター・ハンドラによって生成されたファイルをGoogle Cloud Storageにロードします。

イベント・ハンドラは、BigQuery問合せジョブを実行してMERGE SQLを実行します。SQL操作は、スループットを改善するためにバッチで実行されます。

ノート:

BigQueryイベント・ハンドラは、Google BigQueryストリーミングAPIを使用しません。

8.2.18.2.3 前提条件

Google Cloud Storage (GCS)バケットとデータセットの場所: GCSバケットとBigQueryデータセットが同じ場所/リージョンに存在することを確認します。

8.2.18.2.4 BigQueryハンドラとステージングおよびマージBigQueryイベント・ハンドラの違い

表8-22 BigQueryハンドラ対ステージングおよびマージBigQueryイベント・ハンドラ

機能/制限 BigQueryハンドラ ステージングおよびマージBigQueryイベント・ハンドラ
圧縮更新のサポート 制限付きで部分的にサポートされています。 あり
監査ログ・モード すべての操作をINSERTとして処理します。 監査ログ・モードを有効にする必要はありません。
GCP目標/制限 表当たり1秒間に表示できる最大行数: 100000Google BigQueryドキュメントを参照してください。 日次宛先表更新制限 — 1日当たり表ごとに1500更新。Google BigQueryドキュメントを参照してください。
1TB Storageを使用した場合の概算価格(正確な価格については、GCPの価格計算機能を参照してください) 1TBのストリーミング・インサートのコストは月額~72.71 USD 1TBの問合せジョブのコストは月額~20.28 USD。
BigQueryに複製された重複行 あり なし
TRUNCATE操作のレプリケーション サポート対象外 サポート対象
使用するAPI BigQueryストリーミングAPI BigQuery問合せジョブ

8.2.18.2.5 認証または認可

Googleサービス・アカウント・キーの使用の詳細は、Google Cloud Service (GCS)イベント・ハンドラの項の認証および認可を参照してください。GCSへのアクセスに必要な権限に加えて、サービス・アカウントにもBigQueryにアクセスする権限が必要です。roles/bigquery.dataEditorroles/bigquery.dataOwnerなど、事前定義済のIAMロールの使用を選択できます。カスタム・ロールを作成する場合、BigQueryイベント・ハンドラの実行に使用されるIAM権限は次のとおりです。詳細は、ハンドラ認証の構成を参照してください。

8.2.18.2.5.1 BigQuery権限

表8-23 BigQuery権限

権限 説明
bigquery.connections.create プロジェクトに新しい接続を作成します。
bigquery.connections.delete 接続を削除します。
bigquery.connections.get 接続メタデータを取得します。資格証明は除外されます。
bigquery.connections.list プロジェクト内の接続をリストします。
bigquery.connections.update 接続とその資格証明を更新します。
bigquery.connections.use 接続構成を使用してリモート・データ・ソースに接続します。
bigquery.datasets.create 新しいデータセットを作成します。
bigquery.datasets.get データセットに関するメタデータを取得します。
bigquery.connections.export BigQueryから表データをエクスポートします。
bigquery.connections.get 表メタデータを取得します。表データを取得するには、bigquery.tables.getDataが必要です。
bigquery.connections.list プロジェクト内の接続をリストします。
bigquery.connections.update 接続とその資格証明を更新します。
bigquery.datasets.create 新しい空のデータセットを作成します。
bigquery.datasets.get データセットに関するメタデータを取得します。
bigquery.datasets.getIamPolicy 将来の使用のために予約されています。
bigquery.datasets.update データセットのメタデータを更新します。
bigquery.datasets.updateTag データセットのタグを更新します。
bigquery.jobs.create プロジェクト内でジョブ(問合せを含む)を実行します。
bigquery.jobs.get あらゆるジョブのデータおよびメタデータを取得します。
bigquery.jobs.list すべてのジョブをリストし、任意のユーザーが発行したジョブのメタデータを取得します。他のユーザーによって発行されたジョブの場合、詳細およびメタデータは編集されます。
bigquery.jobs.listAll すべてのジョブをリストし、任意のユーザーが発行したジョブのメタデータを取得します。
bigquery.jobs.update 任意のジョブを取り消します。
bigquery.readsessions.create BigQueryストレージAPIを使用して、新しい読取りセッションを作成します。
bigquery.readsessions.getData BigQueryストレージAPIを使用して、読取りセッションからデータを読み取ります。
bigquery.readsessions.update BigQueryストレージAPIを使用して、読取りセッションを更新します。
bigquery.reservations.create プロジェクトに予約を作成します。
bigquery.reservations.delete 予約を削除します。
bigquery.reservations.get 予約の詳細を取得します。
bigquery.reservations.list プロジェクト内のすべての予約をリストします。
bigquery.reservations.update 予約のプロパティを更新します。
bigquery.reservationAssignments.create 予約割当を作成します。この権限は所有者プロジェクトおよび割当先リソースに必要です。予約割当を移動するには、新しい所有者プロジェクトおよび割当先リソースにbigquery.reservationAssignments.createが必要です。
bigquery.reservationAssignments.delete 予約割当を削除します。この権限は所有者プロジェクトおよび割当先リソースに必要です。予約割当を移動するには、古い所有者プロジェクトおよび割当先リソースにbigquery.reservationAssignments.deleteが必要です。
bigquery.reservationAssignments.list プロジェクト内のすべての予約割当をリストします。
bigquery.reservationAssignments.search 指定されたプロジェクト、フォルダまたは組織の予約割当を検索します。
bigquery.routines.create 新しいルーチン(関数とストアド・プロシージャ)を作成します。
bigquery.routines.delete ルーチンを削除します。
bigquery.routines.list ルーチンとルーチンのメタデータをリストします。
bigquery.routines.update ルーチン定義およびメタデータを更新します。
bigquery.savedqueries.create 保存された問合せを作成します。
bigquery.savedqueries.delete 保存された問合せを削除します。
bigquery.savedqueries.get 保存された問合せのメタデータを取得します。
bigquery.savedqueries.list 保存された問合せをリストします。
bigquery.savedqueries.update 保存された問合せを更新します。
bigquery.tables.create 新しい表を作成します。
bigquery.tables.delete 表を削除します
bigquery.tables.export BigQueryから表データをエクスポートします。
bigquery.tables.get 表メタデータを取得します。表データを取得するには、bigquery.tables.getDataが必要です。
bigquery.tables.getData 表データを取得します。この権限は、表データの問合せに必要です。表メタデータを取得するには、bigquery.tables.getが必要です。
bigquery.tables.getIamPolicy 表のIAMポリシーを読み取ります。
bigquery.tables.list 表および表のメタデータをリストします。
bigquery.tables.setCategory 表スキーマにポリシー・タグを設定します。
bigquery.tables.setIamPolicy 表のIAMポリシーを変更します。
bigquery.tables.update 表メタデータを更新します。表データを更新するには、bigquery.tables.updateDataが必要です。
bigquery.tables.updateData 表データを更新します。表メタデータを更新するには、bigquery.tables.updateが必要です。
bigquery.tables.updateTag 表のタグを更新します。

これらの権限に加えて、resourcemanager.projects.get/listが常にペアとして付与されていることを確認します。

8.2.18.2.6 構成

8.2.18.2.6.1 自動構成

BigQueryへのレプリケーションには、ファイル・ライター・ハンドラ、Google Cloud Storage (GCS)イベント・ハンドラ、BigQueryイベント・ハンドラなど、複数のコンポーネントの構成が含まれます。

自動構成機能は、ユーザー構成が最小限になるようにこれらのコンポーネントを自動構成するのに役立ちます。

自動構成によって変更されたプロパティもハンドラのログ・ファイルに記録されます。自動構成でBigQueryターゲットに複製できるようにするには、パラメータgg.target=bqを設定します。

BigQueryターゲットに複製する場合、GCSイベント・ハンドラ名およびBigQueryイベント・ハンドラ名はカスタマイズできません。

8.2.18.2.6.1.1 ファイル・ライター・ハンドラの構成

ファイル・ライター・ハンドラ名は、値bqに事前設定されています。ファイル・ライター・ハンドラのプロパティを編集する例を次に示します。gg.handler.bq.pathMappingTemplate=./dirout

8.2.18.2.6.1.2 GCSイベント・ハンドラ構成

GCSイベント・ハンドラ名は、値gcsに事前設定されています。次に、GCSイベント・ハンドラのプロパティを編集する例を示します。gg.eventhandler.gcs.concurrency=5

8.2.18.2.6.1.3 BigQueryイベント・ハンドラ構成

BigQueryイベント・ハンドラ名は、値bqに事前設定されています。BigQueryイベント・ハンドラに必要な必須パラメータはありません。ほとんどの場合、自動構成によって必要なパラメータが導出されます。

BigQueryイベント・ハンドラの構成は次のとおりです。

プロパティ 必須/オプション 有効な値 デフォルト 説明
gg.eventhandler.bq.credentialsFile オプション サービス・アカウント・キー・ファイルへの相対パスまたは絶対パス。 プロパティgg.eventhandler.gcs.credentialsFileの値 サービス・アカウント・キー・ファイルへのパスを設定します。ユーザーがBigQueryアクセスに別のサービス・アカウント・キー・ファイルを使用する場合を除き、自動構成では、構成gg.eventhandler.gcs.credentialsFileに基づいてこのプロパティが自動的に構成されます。または、環境変数GOOGLE_APPLICATION_CREDENTIALSがサービス・アカウント・キー・ファイルへのパスに設定されている場合、このパラメータを設定する必要はありません。
gg.eventhandler.bq.projectId オプション GoogleプロジェクトID サービス・アカウントに関連付けられたプロジェクトID。 BigQueryを格納するGoogle CloudプロジェクトのプロジェクトIDを設定します。ユーザーが明示的にオーバーライドしないかぎり、自動構成では、サービス・アカウント・キー・ファイルにアクセスしてこのプロパティが自動的に構成されます。
gg.eventhandler.bq.kmsKey オプション 次の書式のキー名: projects/<PROJECT>/locations/<LOCATION>/keyRings/<RING_NAME>/cryptoKeys/<KEY_NAME>
  • <PROJECT>: GoogleプロジェクトID
  • <LOCATION>: BigQueryデータセットの場所。
  • <RING_NAME>: Google Cloud KMSキー・リング名。
  • <KEY_NAME>: Google Cloud KMSキー名。
プロパティgg.eventhandler.gcs.kmsKeyの値 BigQueryのデータを暗号化するには、顧客管理のクラウドKMSキーを設定します。自動構成では、構成gg.eventhandler.gcs.kmsKeyに基づいてこのプロパティが自動的に構成されます。
gg.eventhandler.bq.connectionTimeout オプション 正の整数。 20000 ハンドラがGoogle BigQueryとの接続を確立するまで待機する最大時間(ミリ秒)。
gg.eventhandler.bq.readTimeout オプション 正の整数。 30000 ハンドラが確立した接続からデータを読み取るまで待機する最大時間(ミリ秒)。
gg.eventhandler.bq.totalTimeout オプション 正の整数。 120000 合計タイムアウト・パラメータ(秒)。TotalTimeoutパラメータは、ロジックが完全に放棄するまでリモート・コールの試行を継続する期間を最終的に制御します。
gg.eventhandler.bq.retries オプション 正の整数。 3 実行する再試行の最大回数。
gg.eventhandler.bq.createDataset オプション true | false true trueに設定すると、BigQueryデータセットが存在しない場合は自動的に作成されます。
gg.eventhandler.bq.createTable オプション true | false true trueに設定すると、BigQueryターゲット表が存在しない場合は自動的に作成されます。
gg.aggregate.operations.flush.interval オプション 整数 30000 flush intervalパラメータは、データがSnowflakeにマージされる頻度を決定します。値はミリ秒単位で設定されます。

注意:

この値が大きいほど、より多くのデータがReplicatプロセスのメモリーに格納されます。

ノート:

flush intervalパラメータは慎重に使用してください。デフォルト値を増やすと、Replicatの内部メモリーに格納されるデータの量が増えます。これにより、メモリー不足エラーが発生し、メモリー不足になるとReplicatが停止する可能性があります。
gg.compressed.update オプション trueまたはfalse true trueを設定すると、ソース証跡ファイルに圧縮更新操作が含まれていることを示します。trueに設定すると、ソース証跡ファイルには、非圧縮更新操作が含まれることが想定されます。
gg.eventhandler.bq.connectionRetryIntervalSeconds オプション 整数値 30 接続再試行間の遅延(秒単位)を指定します。
gg.eventhandler.bq.connectionRetries オプション 整数値 3 ターゲット・データ・ウェアハウスへの接続が再試行される回数を指定します。
gg.eventhandler.bq.url オプション Google BigQueryに接続するための絶対URL。 https://googleapis.com スキーム、サーバー名およびポート(デフォルト・ポートでない場合)を含む、Google BigQueryに接続するための有効なURL。デフォルトは、https://googleapis.comです。
8.2.18.2.6.2 クラスパス構成

GCSイベント・ハンドラおよびBigQueryイベント・ハンドラは、Googleによって提供されるJava SDKを使用します。GoogleはSDKをダウンロードするための直接リンクを提供していません。

SDKは次のmaven座標を使用してダウンロードできます。

Google Cloud Storage
 <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>google-cloud-storage</artifactId>
        <version>1.113.9</version>
    </dependency>

GCS依存性をダウンロードするには、スクリプト <OGGDIR>/DependencyDownloader/GCS.shを実行します。

BigQuery
 <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>google-cloud-bigquery</artifactId>
        <version>1.111.1</version>
    </dependency>

BigQuery依存性をダウンロードするには、スクリプト <OGGDIR>/DependencyDownloader/bigquery.shを実行します。詳細は、依存性ダウンローダ・スクリプトgcs.shを参照してください。

gg.classpath構成パラメータにGCSおよびBigQuery SDKへのパスを設定します。例: gg.classpath=./gcs-deps/*:./bq-deps/*

詳細は、依存性ダウンローダ・スクリプトを参照してください。

8.2.18.2.6.3 プロキシ構成

Replicatプロセスがプロキシ・サーバーの背後で実行される場合、jvm.bootoptionsプロパティを使用してプロキシ・サーバー構成を設定できます。例: jvm.bootoptions=-Dhttps.proxyHost=some-proxy-address.com -Dhttps.proxyPort=80

8.2.18.2.6.4 INSERTALLRECORDSのサポート

ステージングおよびマージ・ターゲットでは、INSERTALLRECORDSパラメータがサポートされます。

『Oracle GoldenGateリファレンス』INSERTALLRECORDSを参照してください。Replicatパラメータ・ファイル(.prm)でINSERTALLRECORDSパラメータを設定します。Replicatパラメータ・ファイル(.prm)でINSERTALLRECORDSパラメータを設定します

このプロパティを設定すると、Replicatプロセスに、操作データをターゲット表にロードするための一括挿入操作を使用するように指示されます。

初期ロード証跡ファイルを処理するには、Replicatパラメータ・ファイル(.prm)でINSERTALLRECORDSパラメータを設定します。このプロパティを設定すると、Replicatプロセスに、操作データをターゲット表にロードするための一括挿入操作を使用するように指示されます。gg.handler.bq.maxFileSizeファイル・ライター・プロパティを使用して、一括挿入のバッチ・サイズをチューニングできます。デフォルト値は1GBに設定されています。

一括挿入の頻度は、ファイル・ライター・プロパティgg.handler.bq.fileRollIntervalを使用してチューニングでき、デフォルト値は3m (3分)に設定されています。

8.2.18.2.6.5 BigQueryデータセットおよびGCP ProjectIdマッピング

BigQueryイベント・ハンドラは、表スキーマ名をBigQueryデータセットにマップします。

3部構成の表名の場合、表カタログ名はGCP projectIdにマップされます。

表で個別のカタログ名が使用されている場合、BigQueryデータセットは複数のGCPプロジェクトに存在できます。GCPサービス・アカウント・キーそれぞれに、データセットおよび表を作成するために必要な権限が付与されている必要があります

表カタログ名はGCP projectIdにマップされます。

8.2.18.2.6.5.1 3部構成の表名
表で個別のカタログ名が使用されている場合、BigQueryデータセットは複数のGCPプロジェクトに存在します。GCPサービス・アカウント・キーには、それぞれのGCPプロジェクトで必要な権限が付与されている必要があります。「BigQuery権限」を参照してください。
8.2.18.2.6.5.2 マッピング表

表8-24 マッピング表

Replicatパラメータ・ファイルのMAP文 BigQueryデータセット GCP ProjectId
MAP SCHEMA1.*, TARGET "bq-project-1".*.*; SCHEMA1 bq-project-1
MAP "bq-project-2".SCHEMA2.*, TARGET *.*.*; SCHEMA2 bq-project-2
MAP SCHEMA3.*, TARGET *.*; SCHEMA3 GCPサービス・アカウント・キー・ファイルまたは構成gg.eventhandler.bq.projectIdのデフォルトのprojectId。
8.2.18.2.6.6 エンドツーエンドの構成

ファイル・ライター(FW)ハンドラ、GCSおよびBigQueryイベント・ハンドラの自動構成を使用するエンド-エンド構成の例を次に示します。

このサンプル・プロパティ・ファイルは、AdapterExamples/big-data/bigquery-via-gcs/bq.propsにあります。
 # Configuration to load GoldenGate trail operation records
 # into Google Big Query by chaining
 # File writer handler -> GCS Event handler -> BQ Event handler.
 # Note: Recommended to only edit the configuration marked as TODO
 # The property gg.eventhandler.gcs.credentialsFile need not be set if
 # the GOOGLE_APPLICATION_CREDENTIALS environment variable is set.

 gg.target=bq

 ## The GCS Event handler
 #TODO: Edit the GCS bucket name
 gg.eventhandler.gcs.bucketMappingTemplate=<gcs-bucket-name>
 #TODO: Edit the GCS credentialsFile
 gg.eventhandler.gcs.credentialsFile=/path/to/gcp/credentialsFile

## The BQ Event handler
## No mandatory configuration required.

#TODO: Edit to include the GCS Java SDK and BQ Java SDK.
gg.classpath=/path/to/gcs-deps/*:/path/to/bq-deps/*
#TODO: Edit to provide sufficient memory (at least 8GB).
jvm.bootoptions=-Xmx8g -Xms8g
#TODO: If running OGGBD behind a proxy server.
#jvm.bootoptions=-Xmx8g -Xms512m -Dhttps.proxyHost=<ip-address> -Dhttps.proxyPort=<port> 
8.2.18.2.6.7 Google BigQueryステージおよびマージ・イベント・ハンドラを調整適用Replicatとして使用する場合に推奨される構成

MERGE SQLはミューテーションDML操作であり、Google BigQueryではそれらが2つまで同時に実行され、その後20個まで、PENDINGとしてキューに入れられます。そのため、調整適用Replicatでの最大スレッド数についてのお薦めの構成は2です。これより多くスレッドを追加しても、ハンドラのパフォーマンスは向上しません。これは、それらが同時にではなく順次実行されるためです。

この項の内容は次のとおりです。

8.2.18.2.6.8 圧縮更新の処理

圧縮更新レコードには、キー列および変更された列の値が含まれています。

非圧縮更新レコードには、すべての列の値が含まれています。

Oracle GoldenGate証跡には、圧縮更新レコードまたは非圧縮更新レコードを含めることができます。デフォルトの抽出構成では、圧縮更新が証跡に書き込まれます。

パラメータgg.compressed.updatetrueまたはfalseに設定して、圧縮/非圧縮更新レコードを指定できます。

8.2.18.2.6.8.1 非圧縮更新を含むMERGE文

場合によっては、証跡に非圧縮更新レコードが含まれている場合、gg.compressed.update=falseを設定することで、パフォーマンスを向上させるためにMERGE SQL文を最適化できます。

ノート:

MERGE SQL文のかわりにDELETE+INSERT SQL文を使用する場合は、gg.eventhandler.snowflake.deleteInsert=trueを設定します。

8.2.18.2.7 トラブルシューティングと診断

  • DDLがターゲット表に適用されない: Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)ではDDLレプリケーションはサポートされていません。
  • SQLエラー: SQLの実行中にエラーが発生した場合、そのSQL文全体がバインド・パラメータ値とともにGG for DAAハンドラのログ・ファイルに記録されます。
  • コンポーネントの共存: Replicatプロセスが実行され、BigQueryデータセット/GCSバケットが適用プロセスの全体的なスループットに影響するマシンの場所/リージョン。

    データ・フローは次のとおりです: GoldenGate -> GCSバケット -> BigQuery。最高のパフォーマンスを得るには、コンポーネントができるかぎり近くにあることを確認します。

  • com.google.cloud.bigquery.BigQueryException: Access Denied: Project <any-gcp-project>: User does not have bigquery.datasets.create permission in project <any-gcp-project>.GG for DAAで使用されるサービス・アカウント・キーには、このプロジェクトでデータセットを作成する権限がありません。権限bigquery.datasets.createを付与し、Replicatプロセスを再起動します。権限は、BigQuery Permissionsにリストされます。