2 BigQueryハンドラの使用
Google BigQueryハンドラの使用方法について説明します。このハンドラは、チェンジ・データ・キャプチャのデータをソース証跡ファイルからGoogle BigQueryにストリーミングします。
BigQueryは、Google Storageと連携して機能する超大規模データセットの対話型分析を可能にするRESTful Webサービスです。https://cloud.google.com/bigquery/を参照してください。
トピック:
2.1 機能の詳細
トピック:
親トピック: BigQueryハンドラの使用
2.1.1 データ型
BigQueryハンドラは標準のSQLデータ型に対応しており、そのデータ型のほとんどがBigQueryハンドラでサポートされています。証跡ファイルの列値から、BigQueryハンドラでBigQuery列タイプを表す対応するJavaタイプへのデータ型変換が必要です。
次のデータ型がサポートされます。
STRING
BYTES
INTEGER
FLOAT
NUMERIC
BOOLEAN
TIMESTAMP
DATE
TIME
DATETIME
BigQueryハンドラでは、ARRAYやSTRUCTなどの複合データ型がサポートされていません。
親トピック: 機能の詳細
2.1.2 操作モード
BigQueryハンドラは、次の2つのモードのいずれかで構成できます。
-
auditLogMode = true -
監査ログ・モードで実行されるようにハンドラを構成すると、データは一意のIDおよび主キーなしでGoogle BigQueryにプッシュされます。その結果、Google BigQueryでは同じ行に対する異なる操作をマージできません。
また、BigQueryデータ・セットに表示される監査ログの順序は確定的ではありません。
これらの制限を解決するには、ハンドラのメタ列テンプレートに
optypeおよびpositionを指定する必要があります。これにより、Google BigQueryの表用のスキーマに同じ名前の列が2つ追加されます。次に例を示します。gg.handler.bigquery.metaColumnsTemplate = ${optype}, ${position}optypeは、監査ログの行の操作タイプを特定するために重要です。証跡ファイルで処理される操作の順に監査ログを表示するには、Google BigQueryの表を問い合せるときに
ORDER BY句で使用できる位置を指定します。次に例を示します。SELECT * FROM [projectId:datasetId.tableId] ORDER BY position -
auditLogMode = false -
これにより、ハンドラは、各行に一意のIDおよび主キーを指定してデータをGoogle BigQueryに書き込みます。その結果、Google BigQueryでは同じ行に対する異なる操作をマージできます。
証跡ソースには、正しくマージするためにレコードの完全なイメージが必要です。
Google BigQueryでは、行ごとにすべての操作を
insertとして処理します。その結果、この操作モードで表のスキーマに追加されたdeleted列が存在します。ハンドラが行の削除操作を検出すると、その行はGoogle BigQueryに挿入され、削除済列はtrueに設定されます。RDBMSに表示されるようにBigQuery表のデータを表示するには、Google BigQueryの表を問い合せるときに
WHERE deleted = false句を指定します。
親トピック: 機能の詳細
2.1.3 操作処理のサポート
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操作が発生すると異常終了します。
親トピック: 機能の詳細
2.2 BigQueryハンドラの設定および実行
BigQueryクライアント・ライブラリは、Oracle GoldenGate for Big Dataに付属しません。BigQueryのJavaクライアント・ライブラリの最新バージョンは、次の場所でダウンロードする必要があります。
https://developers.google.com/api-client-library/java/apis/bigquery/v2
Javaアダプタ・プロパティ・ファイルでgg.classpath構成プロパティを構成して、BigQuery用のJavaクライアント・ライブラリのJARを指定する必要があります。依存関係JARへのパスには、関連するクラスパスのそのディレクトリにあるJARファイルがすべて含まれるように、ワイルドカード文字のアスタリスク(*)を含める必要があります。*.jarは使用しないでください。正しく構成されたクラスパスの例を次に示します。
gg.classpath= /path_to_repository/bigquery/libs/*:/path_to_repository/bigquery/*次に、Maven Centralから次のJARをダウンロードし、BigQueryハンドラのクラスパスに含めます。
• api-common-1.6.0.jar
• gax-1.28.0.jar
• gax-httpjson-0.45.0.jar
• google-auth-library-credentials-0.9.1.jar
• google-auth-library-oauth2-http-0.9.1.jar
• google-cloud-bigquery-1.31.0.jar
• google-cloud-core-1.35.0.jar
• google-cloud-core-http-1.35.0.jar
• google-http-client-jackson-1.23.0.jar
• guava-25.1-jre.jar
• threetenbp-1.3.6.jar
2.2.1 BigQueryハンドラ構成の理解
BigQueryハンドラの構成可能な値は次のとおりです。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。
BigQueryハンドラの選択を有効にするには、まずgg.handler.jdbc.type=bigqueryを指定してハンドラ・タイプを構成してから、次に示す他のBigQueryプロパティを構成する必要があります。
| プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
|---|---|---|---|---|
|
|
必須 |
任意の文字列 |
なし |
BigQueryハンドラの名前を指定します。BigQueryハンドラ名は、この表にリストしたプロパティ名の一部になります。 |
|
|
必須 |
|
なし |
BigQueryハンドラを選択し、チェンジ・データ・キャプチャをGoogle 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ハンドラで問題が起きることがあるので、特に慎重を期する必要があります。
|
親トピック: BigQueryハンドラの設定および実行
2.2.2 サンプル構成の確認
Javaアダプタ・プロパティ・ファイルからのBigQueryハンドラのサンプル構成を次に示します。
gg.handlerlist = bigquery
#The handler properties
gg.handler.bigquery.type = bigquery
gg.handler.bigquery.projectId = festive-athlete-201315
gg.handler.bigquery.datasetId = oggbd
gg.handler.bigquery.credentialsFile = credentials.json
gg.handler.bigquery.auditLogMode = true
gg.handler.bigquery.pkUpdateHandling = delete-insert
gg.handler.bigquery.metaColumnsTemplate =${optype}, ${position}
親トピック: BigQueryハンドラの設定および実行
2.2.3 プロキシ設定
プロキシ・サーバーを使用してBigQueryに接続するには、次のようにプロパティ・ファイルでプロキシ・ホストおよびプロキシ・ポートを構成する必要があります。
javawriter.bootoptions= -Dhttps.proxyHost=proxy_host_name
-Dhttps.proxyPort=proxy_port_number
親トピック: BigQueryハンドラの設定および実行
2.2.4 ハンドラ認証の構成
Google BigQueryからダウンロードしたJSONファイルの資格証明を使用してBigQueryハンドラ認証を構成する必要があります。
資格証明ファイルをダウンロードします。
-
cloud.google.comでGoogleアカウントにログインします。
-
「Console」をクリックし、プロジェクトを選択できるダッシュボードに移動します。
-
ナビゲーション・メニューから、「APIs & Services」をクリックし、「Credentials」を選択します。
-
「Create Credentials」メニューから、「Service account key」を選択します。
-
JSONキー・タイプを選択して、システムのJSON資格証明ファイルをダウンロードします。
資格証明ファイルを取得すると、次の2つの方法のいずれかでハンドラを認証できます。
-
gg.handler.name.credentialsFile構成プロパティを使用して、プロパティ・ファイルに資格証明ファイルへのパスを指定します。資格証明ファイルのパスには、ワイルドカードが付加されていないパスを使用してください。資格証明ファイルへのパスに
*ワイルドカードを含めると、ファイルは認識されません。または
-
GOOGLE_APPLICATION_CREDENTIALS環境変数をシステムに設定します。次に例を示します。export GOOGLE_APPLICATION_CREDENTIALS = credentials.json次に、Oracle GoldenGateマネージャ・プロセスを再起動します。
親トピック: BigQueryハンドラの設定および実行