8.2.18 Google BigQuery
トピック:
- ストリーミングAPIの使用
Google BigQueryハンドラの使用方法について学習します。このハンドラは、チェンジ・データ・キャプチャのデータをソース証跡ファイルからGoogle BigQueryにストリーミングします。 - Google BigQueryにおけるステージングおよびマージ
親トピック: ターゲット
8.2.18.1 ストリーミングAPIの使用
Google BigQueryハンドラの使用方法について学習します。このハンドラは、チェンジ・データ・キャプチャのデータをソース証跡ファイルからGoogle BigQueryにストリーミングします。
BigQueryは、Google Storageと連携して機能する超大規模データセットの対話型分析を可能にするRESTful Webサービスです。https://cloud.google.com/bigquery/を参照してください。
- 機能の詳細
- BigQueryハンドラの設定および実行
Google BigQueryハンドラは、Java BigQueryクライアント・ライブラリを使用してBig Queryに接続します。 - Google BigQuery依存性
Google BigQueryクライアント・ライブラリは、BigQueryとの統合に必要です。
親トピック: Google BigQuery
8.2.18.1.1 機能の詳細
- データ型
- メタデータのサポート
- 操作モード
- 操作処理のサポート
- プロキシ設定
- Googleデータセットへのマッピング
データセットは特定のGoogleクラウド・プロジェクトに含まれています。データセットは最上位レベルのコンテナであり、表およびビューの編成とアクセス制御に使用されます。
親トピック: ストリーミングAPI
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ハンドラでは、ARRAY
やSTRUCT
などの複合データ型がサポートされていません。
親トピック: 機能の詳細
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に接続します。
- グループ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マッピング文内では引用符で囲む必要があります。
親トピック: BigQueryハンドラの設定および実行
8.2.18.1.2.2 BigQueryハンドラ構成の理解
BigQueryハンドラの構成可能な値は次のとおりです。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)
BigQueryハンドラの選択を有効にするには、まずgg.handler.name.type=bigquery
を指定してハンドラ・タイプを構成してから、次に示す他のBigQueryプロパティを構成する必要があります。
プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
---|---|---|---|---|
|
必須 |
任意の文字列 |
なし |
BigQueryハンドラの名前を指定します。BigQueryハンドラ名は、この表にリストしたプロパティ名の一部になります。 |
|
必須 |
|
なし |
BigQueryハンドラを選択し、チェンジ・データ・キャプチャをGoogle BigQueryにストリーミングします。 |
gg.handler.name.createDataset |
オプション | true | false |
true |
true に設定すると、BigQueryデータセットが存在しない場合は自動的に作成されます。
|
|
オプション |
資格証明ファイルの相対パスまたは絶対パス |
なし |
Google BigQueryから認証用にダウンロードされた資格証明ファイル。資格証明ファイルへのパスを指定しない場合は、環境変数として設定する必要があります。ハンドラ認証の構成を参照してください。 |
|
必須 |
任意の文字列 |
なし |
Google BigQuery内のプロジェクトの名前。ハンドラには、Google BigQueryストアに接続するためのプロジェクトIDが必要です。 |
|
オプション |
任意の数値 |
|
1つのバッチにまとめられる最大操作数。これは、すべてのターゲット表バッチに適用されます。 |
|
オプション |
任意の数値 |
|
次の操作のバッチを実行するまでに待機する最大時間(ミリ秒)。これは、すべてのターゲット表バッチに適用されます。 |
|
オプション |
|
|
無効な行が存在する場合でも、リクエストの有効な行をすべて挿入するかどうかを設定します。設定されていない場合、無効な行が含まれると、挿入リクエスト全体が失敗します。 |
gg.handler. name. ignoreUnknownValues |
オプション |
|
|
スキーマと一致しない値が含まれる行を受け入れるかどうかを設定します。設定されていない場合、不明な値を持つ行は無効とみなされます。 |
gg.handler. name. connectionTimeout |
オプション |
正の整数 |
|
ハンドラがGoogle BigQueryとの接続を確立するまで待機する最大時間(ミリ秒)。 |
gg.handler. name. readTimeout |
オプション |
正の整数 |
|
ハンドラが確立した接続からデータを読み取るまで待機する最大時間(ミリ秒)。 |
|
オプション |
有効な文字列 |
なし |
含める |
gg.handler. name. auditLogMode |
オプション |
|
|
|
gg.handler. name. pkUpdateHandling |
オプション |
|
|
ハンドラが、主キーを変更する更新操作をどのように処理するかを設定します。主キー操作により、BigQueryハンドラで問題が起きることがあるので、特に慎重を期する必要があります。
|
gg.handler.name.adjustScale |
オプション |
|
false |
BigQuery数値データ型では、9桁の最大スケールがサポートされます。フィールドがBigQuery数値データ型にマップされている場合、スケールが9桁を超えると失敗します。BigQuery数値データ型にマップされたフィールドを9桁のスケールに丸めるには、このプロパティをtrue に設定します。このプロパティを有効にすると、スケールが9桁を超えるソース・データ値の精度が失われます。
|
gg.handler.name.includeDeletedColumn |
オプション |
|
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ウォレットを使用してそれらを暗号化できます。
親トピック: BigQueryハンドラの設定および実行
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}
親トピック: BigQueryハンドラの設定および実行
8.2.18.1.2.4 ハンドラ認証の構成
Google BigQueryからダウンロードしたJSONファイルの資格証明を使用してBigQueryハンドラ認証を構成する必要があります。
資格証明ファイルをダウンロードします。
-
cloud.google.comでGoogleアカウントにログインします。
-
「コンソール」をクリックし、プロジェクトを選択できるダッシュボードに移動します。
-
ナビゲーション・メニューから、「APIとサービス」をクリックし、「Credentials」を選択します。
-
「Create Credential」メニューから、「Service account key」を選択します。
-
JSONキー・タイプを選択して、システムのJSON資格証明ファイルをダウンロードします。
資格証明ファイルを作成した後、ここにリストされている次のいずれかの方法でハンドラを認証できます。
-
gg.handler.name.credentialsFile
構成プロパティを使用して、プロパティ・ファイルに資格証明ファイルへのパスを指定します。資格証明ファイルのパスには、ワイルドカードが付加されていないパスを使用してください。資格証明ファイルへのパスに
*
ワイルドカードを含めると、ファイルは認識されません。または
- 資格証明ファイルのキー(
clientId
、ClientEmail
、privateKeyId
およびprivateKey
)を、対応するハンドラ・プロパティに設定します。または
-
GOOGLE_APPLICATION_CREDENTIALS
環境変数をシステムに設定します。たとえば:export GOOGLE_APPLICATION_CREDENTIALS = credentials.json
次に、Oracle GoldenGateマネージャ・プロセスを再起動します。
親トピック: BigQueryハンドラの設定および実行
8.2.18.1.3 Google BigQuery依存性
Google BigQueryクライアント・ライブラリは、BigQueryとの統合に必要です。
Maven座標は次のとおりです。
Maven groupId: com.google.cloud
Maven artifactId: google-cloud-bigquery
バージョン: 2.7.1
親トピック: ストリーミングAPI
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
親トピック: Google BigQuery依存性
8.2.18.2 Google BigQueryにおけるステージングおよびマージ
トピック:
- 概要
BigQueryはGoogle Cloudが提供しているコスト効率に優れたペタバイト規模の完全管理型分析データ・ウェアハウスで、大量のデータをほぼリアルタイムで分析できます。 - 詳細な機能
- 前提条件
- BigQueryハンドラとステージングおよびマージBigQueryイベント・ハンドラの違い
- 認証または認可
- 構成
- トラブルシューティングと診断
親トピック: 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秒間に表示できる最大行数: 100000 。Google 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.dataEditor
やroles/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 構成
- 自動構成
- クラスパス構成
GCSイベント・ハンドラおよびBigQueryイベント・ハンドラは、Googleによって提供されるJava SDKを使用します。GoogleはSDKをダウンロードするための直接リンクを提供していません。 - プロキシ構成
- INSERTALLRECORDSのサポート
- BigQueryデータセットおよびGCP ProjectIdマッピング
- エンドツーエンドの構成
- Google BigQueryステージングおよびマージ・イベント・ハンドラを調整適用Replicatとして使用する場合に推奨される構成
- 圧縮更新の処理
8.2.18.2.6.1 自動構成
BigQueryへのレプリケーションには、ファイル・ライター・ハンドラ、Google Cloud Storage (GCS)イベント・ハンドラ、BigQueryイベント・ハンドラなど、複数のコンポーネントの構成が含まれます。
自動構成機能は、ユーザー構成が最小限になるようにこれらのコンポーネントを自動構成するのに役立ちます。
自動構成によって変更されたプロパティもハンドラのログ・ファイルに記録されます。自動構成でBigQueryターゲットに複製できるようにするには、パラメータgg.target=bq
を設定します。
BigQueryターゲットに複製する場合、GCSイベント・ハンドラ名およびBigQueryイベント・ハンドラ名はカスタマイズできません。
- ファイル・ライター・ハンドラの構成
ファイル・ライター・ハンドラ名は、値bq
に事前設定されています。ファイル・ライター・ハンドラのプロパティを編集する例を次に示します。gg.handler.bq.pathMappingTemplate=./dirout
- ファイル・ライター・ハンドラの構成
GCSイベント・ハンドラ名は、値gcs
に事前設定されています。次に、GCSイベント・ハンドラのプロパティを編集する例を示します。gg.eventhandler.gcs.concurrency=5
- BigQueryイベント・ハンドラの構成
BigQueryイベント・ハンドラ名は、値bq
に事前設定されています。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>
|
プロパティ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座標を使用してダウンロードできます。
<dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-storage</artifactId> <version>1.113.9</version> </dependency>
GCS依存性をダウンロードするには、スクリプト <OGGDIR>/DependencyDownloader/GCS.sh
を実行します。
<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部構成の表名
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.update
をtrue
または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にリストされます。