2 BigQueryハンドラの使用

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

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

トピック:

2.1 機能の詳細

トピック:

2.1.1 データ型

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

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

STRING
BYTES
INTEGER
FLOAT
NUMERIC
BOOLEAN
TIMESTAMP
DATE
TIME
DATETIME

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

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プロパティを構成する必要があります。

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

gg.handlerlist

必須

任意の文字列

なし

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

gg.handler.name.type=bigquery

必須

bigquery

なし

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

gg.handler.name.credentialsFile

オプション

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

なし

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

gg.handler.name.projectId

必須

任意の文字列

なし

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

gg.handler.name.datasetId

オプション

任意の文字列

default_dataset

表が格納されるデータ・セットの名前。指定しない場合、ハンドラはdefault_datasetという名前の新しいデータ・セットを作成し、表を挿入します。

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

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}

2.2.3 プロキシ設定

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

javawriter.bootoptions= -Dhttps.proxyHost=proxy_host_name
 				                -Dhttps.proxyPort=proxy_port_number

2.2.4 ハンドラ認証の構成

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

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

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

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

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

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

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

資格証明ファイルを取得すると、次の2つの方法のいずれかでハンドラを認証できます。

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

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

    または

  • GOOGLE_APPLICATION_CREDENTIALS環境変数をシステムに設定します。次に例を示します。

    export GOOGLE_APPLICATION_CREDENTIALS = credentials.json

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