5 ファイル・ライター・ハンドラの使用

ファイル・ライター・ハンドラおよび関連イベント・ハンドラを使用する方法について説明します。これらのハンドラを使用すると、データ・ファイルをローカル・システムに書き込むことができます。

トピック:

5.1 概要

ファイル・ライター・ハンドラとイベント・ハンドラを使用してデータを変換する方法について説明します。

ファイル・ライター・ハンドラは、区切りテキスト、XML、JSON、AvroおよびAvroオブジェクト・コンテナ・ファイル形式でのデータ・ファイルの生成をサポートします。抽出、ロードおよび変換のユースケースに対応するためのものです。データ・ファイルは、ローカル・ファイル・システム上にステージングされます。その後、データ・ファイルへの書込みが完了すると、サード・パーティ・アプリケーションを使用して、追加処理を実行するファイルを読み取ることができます。

ファイル・ライター・ハンドラは、イベント・ハンドラ・フレームワークもサポートしています。イベント・ハンドラ・フレームワークを使用すると、ファイル・ライター・ハンドラで生成されたデータ・ファイルを、Optimized Row Columnar (ORC)やParquetなどの他の形式に変換できます。データ・ファイルは、HDFSやAmazon S3などのサード・パーティ・アプリケーションにロードできます。イベント・ハンドラ・フレームワークは、より多くのイベント・ハンドラが様々な変換を実行したり、開発される別のターゲットにロードできるように拡張できます。また、ビッグ・データ環境用のカスタム・イベント・ハンドラを開発できます。

Oracle GoldenGate for Big Dataには、HDFSに書き込む2つのハンドラが用意されています。次の状況では、HDFSハンドラまたはファイル・ライター・ハンドラを使用することをお薦めします。

HDFSイベント・ハンドラが、HDFSにデータを直接ストリーミングするように設計されています。

HDFSで書込み後処理が発生しません。HDFSイベント・ハンドラではファイルの内容を変更せず、単に、既存のファイルをHDFSにアップロードします。

分析ツールが、開いていて頻繁に書き込まれるファイル内のデータなど、HDFSに書き込まれるデータにリアルタイムでアクセスします。

-ファイル・ライター・ハンドラが、ファイルの書込みが完了したときにローカル・ファイル・システムにデータをステージングし、完了したデータ・ファイルをHDFSにロードするように設計されています。

分析ツールが、HDFSに書き込まれるデータにリアルタイムでアクセスしません。

データを変換、リフォーマット、マージおよび最終的な場所に移動する書込み後処理がHDFSで発生します。

データ・ファイルがORCまたはParquet形式でHDFSに書き込まれます。

トピック:

5.1.1 機能の詳細

トピック:

5.1.1.1 ファイル・ロール・イベントの使用

ファイル・ロール・イベントは、特定のデータ・ファイルへの書込みが完了したときに発生します。その特定のデータ・ファイルには、これ以上データが書き込まれません。

ファイナライズ・アクション操作

次のオプションとともにfinalizeactionパラメータを使用してファイナライズ・アクション操作を構成し、ファイル・ロール・アクションが正常に実行された後に特定のデータ・ファイルがクリーン・アップされるようにできます。

none

データ・ファイルをそのままにします(アクティブな書込み接尾辞を削除します。「アクティブな書込み接尾辞について」を参照)。

delete

データ・ファイルを削除します(データ・ファイルが別の形式に変換されていたり、サード・パーティ・アプリケーションにロードされている場合)。

move

ファイル名を維持(アクティブな書込み接尾辞を削除)しますが、ファイルをmovePathMappingTemplateプロパティを使用して解決したディレクトリに移動します。

rename

現在のディレクトリを維持しますが、fileRenameMappingTemplateプロパティを使用して、データ・ファイルの名前を変更します。

move-rename

fileRenameMappingTemplateプロパティによって生成されたファイル名を使用してファイル名を変更し、movePathMappingTemplateプロパティを使用して解決したディレクトリにファイルを移動します。

通常、イベント・ハンドラは、これらの同じアクションのサブセットを提供します。

ファイナライズ・アクション操作のサンプル構成を次に示します。

gg.handlerlist=filewriter
#The File Writer Handler
gg.handler.filewriter.type=filewriter
gg.handler.filewriter.mode=op
gg.handler.filewriter.pathMappingTemplate=./dirout/evActParamS3R
gg.handler.filewriter.stateFileDirectory=./dirsta
gg.handler.filewriter.fileNameMappingTemplate=${fullyQualifiedTableName}_${currentTimestamp}.txt
gg.handler.filewriter.fileRollInterval=7m
gg.handler.filewriter.finalizeAction=delete
gg.handler.filewriter.inactivityRollInterval=7m

ファイル・ローリング・アクション

次のすべてのアクションによって、ファイル・ロール・イベントがトリガーされます。

  • メタデータ変更イベント。

  • 構成ファイルの最大サイズ超過

  • ファイル・ロールの間隔超過(現在時刻から最初のファイル書込み時刻を差し引いた時間が、ファイル・ロール間隔よりも大きい)。

  • 非アクティブ・ロールの間隔超過(現在時刻から最後のファイル書込み時刻を差し引いた時間が、ファイル・ロール間隔よりも大きい)。

  • ファイル・ライター・ハンドラはシャットダウン時にロールするよう構成されている場合のReplicatプロセスの停止。

操作シーケンス

ファイル・ロール・イベントによって、操作のシーケンスの発生がトリガーされます。個々のデータファイルがロールされたときに発生する操作の順序を理解することが重要です。

  1. アクティブなデータ・ファイルが非アクティブに切り替えられ、データ・ファイルがフラッシュされて、状態データ・ファイルがフラッシュされます。

  2. 構成されたイベント・ハンドラは、指定された順序で呼び出されます。

  3. ファイナライズ・アクションは、すべてのイベント・ハンドラで、構成した順序と逆の順序で実行されます。構成したすべてのファイナライズ・アクションが実行されます。

  4. ファイナライズ・アクションは、データ・ファイルおよび状態ファイルに対して実行されます。すべてのアクションが正常に完了すると、状態ファイルが削除されます。構成したすべてのファイナライズ・アクションが実行されます。

たとえば、Parquetイベント・ハンドラとS3イベント・ハンドラを使用してファイル・ライター・ハンドラを構成する場合、ロール・イベントの順序は次のようになります。

  1. アクティブなデータ・ファイルが非アクティブに切り替えられ、データ・ファイルがフラッシュされて、状態データ・ファイルがフラッシュされます。

  2. Parquetイベント・ハンドラが呼び出され、ソース・データ・ファイルからParquetファイルが生成されます。

  3. S3イベント・ハンドラが呼び出され、生成されたParquetファイルがS3にロードされます。

  4. ファイナライズ・アクションが、S3 Parquetイベント・ハンドラに対して実行されます。構成したすべてのファイナライズ・アクションが実行されます。

  5. ファイナライズ・アクションが、Parquetイベント・ハンドラに対して実行されます。構成したすべてのファイナライズ・アクションが実行されます。

  6. ファイナライズ・アクションが、ファイル・ライター・ハンドラのデータ・ファイルに対して実行されます

5.1.1.2 自動ディレクトリの作成
ハンドラを実行する前に書込みディレクトリを構成する必要はありません。ファイル・ライター・ハンドラは、ファイルを作成する前に指定された書込みディレクトリが存在するかどうかを確認し、必要に応じて再帰的にディレクトリを作成します。
5.1.1.3 アクティブな書込み接尾辞について

一般的なユースケースでは、サード・パーティ・アプリケーションを使用して、データ・ファイルを読み取る書込みディレクトリを監視します。サード・パーティ・アプリケーションは、ファイルへの書込みが完了した場合にのみデータ・ファイルを読み取ることができます。これらのアプリケーションでは、データ・ファイルへの書込みがアクティブであるか、または完了しているかを判別する方法が必要になります。ファイル・ライター・ハンドラを使用すると、次のプロパティを使用してアクティブな書込み接尾辞を構成できます。

gg.handler.name.fileWriteActiveSuffix=.tmp

このプロパティの値は、生成されたファイル名に付加されます。ファイルへの書込みが完了すると、データ・ファイルの名前が変更され、アクティブな書込み接尾辞がファイル名から削除されます。データ・ファイル名を監視し、アクティブな書込み接尾辞がいつ削除されたかを識別するように、サード・パーティ・アプリケーションを設定できます。

5.1.1.4 状態のメンテナンス

これまでは、すべてのOracle GoldenGate for Big Dataハンドラがステートレスでした。これらのステートレス・ハンドラでは、実行していたReplicatプロセスのコンテキストでの状態のみを保持します。Replicatプロセスを停止して再起動した場合、すべての状態が失われていました。Replicatを再起動すると、ハンドラは、前回の実行時の状況の認識がない状態で書込みを開始しました。

ファイル・ライター・ハンドラは、Replicatプロセスの呼出し間で状態を維持するための機能を提供します。デフォルトでは、再起動に伴って次のことが実行されます。

  • 状態保存ファイルが読み取られます。

  • 状態がリストアされます。

  • 前回の実行が停止した位置からアクティブ・データ・ファイルの追加が続行されます。

次のプロパティを設定することで、このデフォルトのアクションから、シャットダウン時にすべてのファイルのロールが必要になるように変更できます。

gg.handler.name.rollOnShutdown=true
5.1.1.5 テンプレート文字列の使用

テンプレート文字列には、実行時に動的に解決されるリテラルとキーワードの組合せを含めることができます。ORCイベント・ハンドラは、テンプレート文字列を多用して、ORCディレクトリ名、データ・ファイル名およびORCバケット名を生成します。これらの文字列によって、データ・ファイルおよびデータ・ファイルの名前を書き込む場所を柔軟に選択できます。ファイルおよびディレクトリの名前を選択する場合は、異常終了の原因となる可能性があるファイル命名の競合を回避するように注意する必要があります。

サポートされているテンプレート文字列

キーワード 説明
${fullyQualifiedTableName}

ピリオド(.)で区切られた完全修飾ソース表名。たとえば、MYCATALOG.MYSCHEMA.MYTABLE

${catalogName}

個々のソース・カタログ名。たとえば、MYCATALOG

${schemaName}

個々のソース・スキーマ名。たとえば、MYSCHEMA

${tableName}

個々のソース表名。たとえば、MYTABLE

${groupName}

Replicatプロセスの名前(調整された適用を使用する場合は、スレッド番号を含む)。

${emptyString}

空の文字列になります。たとえば、""

${operationCount}

データ・ファイル内の操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"1024"

${insertCount}

データ・ファイル内の挿入操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"125"

${updateCount}

データ・ファイル内の更新操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"265"

${deleteCount}

データ・ファイル内の削除操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"11"

${truncateCount}

データ・ファイル内の切捨て操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"5"

${currentTimestamp}

現在のタイムスタンプ。日時のデフォルトの出力形式はyyyy-MM-dd_HH-mm-ss.SSSです。たとえば、2017-07-05_04-31-23.123。または、次のように角カッコ内に形式を挿入して、現在のタイムスタンプの形式をカスタマイズできます。

${currentTimestamp[MM-dd_HH]}

この形式は、JavaのSimpleDateFormatクラスで定義された構文を使用します。https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.htmlを参照してください。

${toUpperCase[]}

角カッコ内のコンテンツを大文字に変換します。たとえば、${toUpperCase[${fullyQualifiedTableName}]}

${toLowerCase[]}

角カッコ内のコンテンツを小文字に変換します。たとえば、${toLowerCase[${fullyQualifiedTableName}]}

テンプレート文字列の構成では、キーワードおよび静的文字列の組合せを使用して、実行時にパスとデータ・ファイル名を構成できます。

パスの構成例
/usr/local/${fullyQualifiedTableName}
データ・ファイルの構成例
${fullyQualifiedTableName}_${currentTimestamp}_${groupName}.txt

要件

テンプレートを使用して生成されたディレクトリ名およびファイル名は、書込み先のシステム上で有効である必要があります。ファイル名の競合を避けるために、ファイル名は一意である必要があります。${currentTimestamp}キーワードを使用して、現在のタイムスタンプを追加すると、競合を回避できます。調整された適用を使用している場合は、データ・ファイル名に${groupName}を追加することをお薦めします。

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

ファイル・ライター・ハンドラの構成可能な値を示しています。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)

ファイル・ライター・ハンドラの選択を有効にするには、まずgg.handler.jdbc.type=filewriterおよびその他のファイル・ライター・プロパティを次のように指定してハンドラ・タイプを構成する必要があります。

表5-1 ファイル・ライター・ハンドラの構成プロパティ

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

gg.handler.name.type

必須

filewriter

なし

使用するファイル・ライター・ハンドラを選択します。

gg.handler.name.maxFileSize

オプション

デフォルトの測定単位はバイトです。kmまたはgがそれぞれキロバイト、メガバイト、ギガバイトを表すように指定できます。有効な値は、1000010k100m1.1gなどです。

1g

ファイル・ライター・ハンドラによって生成されるファイルの最大ファイル・サイズを設定します。ファイル・サイズが超過すると、ロール・イベントがトリガーされます。

gg.handler.name.fileRollInterval

オプション

デフォルトの測定単位はミリ秒です。mssmhがそれぞれ、ミリ秒、秒、分、時間を表すように指定できます。有効な値は、1000010000ms10s10m1.5hなどです。0以下の値を指定すると、ファイルのローリング・オン時間がオフになります。

ファイルのローリング・オン時間がオフ。

タイマーは、ファイルが作成されるときにスタートします。間隔が経過したときにまだファイルが開いている場合、ファイル・ロール・イベントがトリガーされます。

gg.handler.name.inactivityRollInterval

オプション

デフォルトの測定単位はミリ秒です。mssmhがそれぞれ、ミリ秒、秒、分、時間を表すように指定できます。有効な値は、1000010000ms10s10m1.5hなどです。0以下の値を指定すると、ファイルのローリング・オン時間がオフになります。

ファイルの非アクティブ・ローリングがオフ。

タイマーは、生成されたファイルへの前回の書込みからスタートします。生成されたファイルへの新しい書込みでカウンタが再開されます。タイマーが経過したときにまだファイルが開いている場合、ロール・イベントがトリガーされます。

gg.handler.name.fileNameMappingTemplate

必須

実行時にファイル・ライター・ハンドラのデータ・ファイル名を動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。

なし

定数とともにインタレースされるキーワードを使用して、一意のパス名を実行時に動的に生成します。パス名は、通常、${fullyQualifiedTableName}_${groupName}_${currentTimestamp}{.txt}の形式に従います。

gg.handler.name.pathMappingTemplate

必須

ファイルが書き込まれるディレクトリを動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。

なし

定数とともにインタレースされるキーワードを使用して、一意のパス名を実行時に動的に生成します。パス名は、通常、${fullyQualifiedTableName}_${groupName}_${currentTimestamp}.txtの形式に従います。

gg.handler.name.fileWriteActiveSuffix

オプション

文字列。

なし

ファイルへの書込みがアクティブであることを示すために、ファイル・ライター・ハンドラによって生成されたファイルに付加されるオプションの接尾辞。ファイナライズ・アクションで、接尾辞が削除されます。

gg.handler.name.stateFileDirectory

必須

ファイル・ライター・ハンドラの状態ファイルを格納するローカル・マシン上のディレクトリ。

なし

ファイル・ライター・ハンドラの状態ファイルを格納するローカル・マシン上のディレクトリを設定します。調整された適用環境での操作時に機能するように、グループ名がディレクトリに追加されます。

gg.handler.name.rollOnShutdown

オプション

true | false

false

trueに設定すると、Replicatプロセスの正常なシャットダウン時に開いているすべてのファイルが閉じて、ファイル・ロール・イベントがトリガーされます。成功した場合、ファイル・ライター・ハンドラからファイル・ライター・ハンドラの再起動には状態を引き継ぎません。

gg.handler.name.finalizeAction

オプション

none | delete | move | rename | move-rename

none

ファイナライズ・アクションでのファイル・ライター・ハンドラの動作を示します。

none

データ・ファイルをそのままにします(アクティブな書込み接尾辞を削除します。「アクティブな書込み接尾辞について」を参照)。

delete

データ・ファイルを削除します(データ・ファイルが別の形式に変換されていたり、サード・パーティ・アプリケーションにロードされている場合)。

move

ファイル名を維持(アクティブな書込み接尾辞を削除)しますが、ファイルをmovePathMappingTemplateプロパティを使用して解決したディレクトリに移動します。

rename

現在のディレクトリを維持しますが、fileRenameMappingTemplateプロパティを使用して、データ・ファイルの名前を変更します。

move-rename

fileRenameMappingTemplateプロパティによって生成されたファイル名を使用してファイル名を変更し、movePathMappingTemplateプロパティを使用して解決したディレクトリにファイルを移動します。

gg.handler.name.partitionByTable

オプション

true | false

true

trueに設定すると、別のソース表からのデータが個別のファイルにパーティション化されます。falseに設定すると、すべてのソース表からの操作データが単一の出力ファイルにインタレースされます。ファイル形式がAvro OCF (オブジェクト・コンテナ・ファイル)形式である場合は、falseに設定できません。

gg.handler.name.eventHandler

オプション

HDFS | ORC | PARQUET | S3

イベント・ハンドラは構成されない。

イベント・ハンドラを相互参照する一意の文字列識別子。イベント・ハンドラは、ファイル・ロール・イベントで呼び出されます。イベント・ハンドラは、S3へのファイルのロード、ParquetまたはORC形式への変換、HDFSへのファイルのロードなどのファイル・ロール・イベントのアクションを実行できます。

gg.handler.name.fileRenameMappingTemplate

gg.handler.name.finalizeActionrenameまたはmove-renameに設定されている場合に必要です。

ファイナライズ・アクションにおけるファイルの名前変更用にファイル・ライター・ハンドラのデータ・ファイル名を動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。

なし。

定数とともにインタレースされるキーワードを使用して、一意のファイル名を実行時に動的に生成します。ファイル名は、通常、${fullyQualifiedTableName}_${groupName}_${currentTimestamp}.txtの形式に従います。

gg.handler.name.movePathMappingTemplate

gg.handler.name.finalizeActionrenameまたはmove-renameに設定されている場合に必要です。

ファイルが書き込まれるディレクトリを動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。

なし

定数とともにインタレースされるキーワードを使用して、一意のパス名を実行時に動的に生成します。パス名は、通常、/ogg/data/${groupName}/${fullyQualifiedTableName}の形式に従います。

gg.handler.name.format

必須

delimitedtext | json | json_row | xml | avro_row | avro_op | avro_row_ocf | avro_op_ocf

delimitedtext

出力データのフォーマット方法について、HDFSハンドラのフォーマッタを選択します

delimitedtext

区切りテキスト。

json

JSON

json_row

JSON出力モデリング行データ

xml

XML

avro_row

行コンパクト形式のAvro。

avro_op

操作詳細形式のAvro。

avro_row_ocf

Avroオブジェクト・コンテナ・ファイル(OCF)形式でHDFSに書き込まれる行コンパクト形式のAvro。

avro_op_ocf

Avro OCF形式でHDFSに書き込まれる詳細形式のAvro。

ParquetまたはORCイベント・ハンドラを使用する場合、選択した形式がavro_row_ocfまたはavro_op_ocfである必要があります。

gg.handler.name.bom

オプション

16進文字の偶数。

なし

各2文字がバイト・オーダー・マーク(BOM)で1バイトに対応している16進文字の偶数を入力します。たとえば、文字列efbbbfは、UTF-8の3バイトのBOMを表します。

gg.handler.name.createControlFile

オプション

true | false

false

制御ファイルを作成するには、trueに設定します。制御ファイルには、区切り文字で区切られたパスを含む完全なファイル名がすべて含まれています。制御ファイルの名前は、{groupName}.controlです。たとえば、Replicatプロセス名がfwの場合、制御ファイル名はFW.controlです。

gg.handler.name.controlFileDelimiter

オプション

任意の文字列

改行(\n)

制御ファイルで区切り文字で区切られたファイル名を制御できます。このプロパティではCDATA[]ラッピングを使用できます。

gg.handler.name.controlFileDirectory

オプション

制御ファイルを格納するディレクトリのパス。

ピリオド(.)またはOracle GoldenGateインストール・ディレクトリ。

制御ファイルを作成する場所を指定するように設定されます。

gg.handler.name.createOwnerFile

オプション

true | false

false

所有者ファイルを作成するには、trueに設定します。所有者ファイルは、Replicatプロセスが開始され、正常に終了して削除されたときに作成されます。所有者ファイルを使用すると、他のアプリケーションで、プロセスが実行されているかどうかを判別できます。所有者ファイルは、Replicatプロセスが異常終了した場合はそのまま保持されます。所有者ファイルの名前は、{groupName}.ownerです。たとえば、Replicatプロセス名がfwの場合、所有者ファイル名はFW.ownerです。このファイルは、.ディレクトリまたはOracle GoldenGateインストール・ディレクトリに作成されます。

gg.handler.name.atTime

オプション

開いているすべてのファイルのロール・アクションをトリガーするために1回以上。

なし

次の形式で1つ以上のトリガー時刻を構成します。

HH:MM,HH:MM,HH:MM

エントリは24時間制に基づきます。たとえば、1日のうち3回個別の時刻にロールされるアクションを構成するエントリは次のとおりです。

gg.handler.fw.atTime=03:30,21:00,23:51

gg.handler.name.avroCodec

オプション

null

圧縮なし。

null | bzip2 | deflate | snappy | xz

生成されたAvro OCFファイルに対応する圧縮アルゴリズムを有効にします。圧縮を有効にしたら、対応する圧縮ライブラリをgg.classpathに追加する必要があります。

gg.handler.name.bufferSize

オプション

1024

正の整数 >= 512

アクティブな書込みストリームごとにBufferedOutputStreamのサイズを設定します。アクティブな書込みストリームが少ない場合は特に、より大きな値を設定するとパフォーマンスが向上しますが、それらのストリームには多数の操作が書き込まれます。アクティブな書込みストリームが多数存在する場合、このプロパティの値を増やすのは望ましくありません。Javaヒープの消費によってメモリー不足例外が発生することがあります。

5.1.3 サンプル構成の確認

このファイル・ライター・ハンドラの構成例では、Parquetイベント・ハンドラを使用して、データ・ファイルをParquetに変換し、その後、S3イベント・ハンドラ用にParquetファイルをS3にロードしています。

gg.handlerlist=filewriter 

#The handler properties 
gg.handler.name.type=filewriter 
gg.handler.name.mode=op 
gg.handler.name.pathMappingTemplate=./dirout 
gg.handler.name.stateFileDirectory=./dirsta 
gg.handler.name.fileNameMappingTemplate=${fullyQualifiedTableName}_${currentTimestamp}.txt 
gg.handler.name.fileRollInterval=7m 
gg.handler.name.finalizeAction=delete 
gg.handler.name.inactivityRollInterval=7m 
gg.handler.name.format=avro_row_ocf 
gg.handler.name.includetokens=true 
gg.handler.name.partitionByTable=true 
gg.handler.name.eventHandler=parquet 
gg.handler.name.rollOnShutdown=true 

gg.eventhandler.parquet.type=parquet 
gg.eventhandler.parquet.pathMappingTemplate=./dirparquet 
gg.eventhandler.parquet.writeToHDFS=false 
gg.eventhandler.parquet.finalizeAction=delete 
gg.eventhandler.parquet.eventHandler=s3 
gg.eventhandler.parquet.fileNameMappingTemplate=${tableName}_${currentTimestamp}.parquet 

gg.handler.filewriter.eventHandler=s3 
gg.eventhandler.s3.type=s3
gg.eventhandler.s3.region=us-west-2 
gg.eventhandler.s3.proxyServer=www-proxy.us.oracle.com 
gg.eventhandler.s3.proxyPort=80 
gg.eventhandler.s3.bucketMappingTemplate=tomsfunbucket 
gg.eventhandler.s3.pathMappingTemplate=thepath 
gg.eventhandler.s3.finalizeAction=none
goldengate.userexit.writers=javawriter

5.2 HDFSイベント・ハンドラの使用

HDFSイベント・ハンドラを使用して、ファイル・ライター・ハンドラによって生成されたファイルをHDFSにロードする方法について説明します。

「ファイル・ライター・ハンドラの使用」を参照してください。

トピック:

5.2.1 機能の詳細

トピック:

5.2.1.1 ハンドラの構成

HDFSイベント・ハンドラは、データ・ファイルをHDFSにアップロードできます。次の追加の構成ステップが必要です。

HDFSイベント・ハンドラの依存性と考慮事項は、HDFSハンドラと同じです。「HDFSのその他の考慮事項」を参照してください。

gg.classpathにHDFSクライアント・ライブラリが含まれていることを確認します。

HDFS core-site.xmlファイルを含むディレクトリがgg.classpathにあることを確認します。これは、core-site.xmlファイルを実行時に読み取ることができ、HDFSへの接続情報を解決できるようにしています。次に例を示します。

gg.classpath=/{HDFSinstallDirectory}/etc/hadoop

HDFSクラスタ上でKerberos認証が有効化されている場合は、パスワードを実行時に解決できるように、Kerberosプリンシパルとkeytabファイルの場所を構成する必要があります。

gg.eventHandler.name.kerberosPrincipal=principal
gg.eventHandler.name.kerberosKeytabFile=pathToTheKeytabFile
5.2.1.2 テンプレート文字列の使用

テンプレート文字列には、実行時に動的に解決されるリテラルとキーワードの組合せを含めることができます。HDFSイベント・ハンドラは、テンプレート文字列を多用して、HDFSディレクトリ名、データ・ファイル名およびHDFSバケット名を生成します。これにより、データ・ファイルおよびデータ・ファイルの名前を書き込む場所を柔軟に選択できます。

サポートされているテンプレート文字列

キーワード 説明
${fullyQualifiedTableName}

ピリオド(.)で区切られた完全修飾ソース表名。たとえば、MYCATALOG.MYSCHEMA.MYTABLE

${catalogName}

個々のソース・カタログ名。たとえば、MYCATALOG

${schemaName}

個々のソース・スキーマ名。たとえば、MYSCHEMA

${tableName}

個々のソース表名。たとえば、MYTABLE

${groupName}

Replicatプロセスの名前(調整された適用を使用する場合は、スレッド番号を含む)。

${emptyString}

空の文字列になります。たとえば、""

${operationCount}

データ・ファイル内の操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"1024"

${insertCount}

データ・ファイル内の挿入操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"125"

${updateCount}

データ・ファイル内の更新操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"265"

${deleteCount}

データ・ファイル内の削除操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"11"

${truncateCount}

データ・ファイル内の切捨て操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"5"

${currentTimestamp}

現在のタイムスタンプ。日時のデフォルトの出力形式はyyyy-MM-dd_HH-mm-ss.SSSです。たとえば、2017-07-05_04-31-23.123。または、次のように角カッコ内に形式を挿入して、現在のタイムスタンプの形式をカスタマイズできます。

${currentTimestamp[MM-dd_HH]}

この形式は、JavaのSimpleDateFormatクラスで定義された構文を使用します。https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.htmlを参照してください。

${toUpperCase[]}

角カッコ内のコンテンツを大文字に変換します。たとえば、${toUpperCase[${fullyQualifiedTableName}]}

${toLowerCase[]}

角カッコ内のコンテンツを小文字に変換します。たとえば、${toLowerCase[${fullyQualifiedTableName}]}

テンプレート文字列の構成では、キーワードおよび静的文字列の組合せを使用して、実行時にパスとデータ・ファイル名を構成できます。

パスの構成例
/usr/local/${fullyQualifiedTableName}
データ・ファイルの構成例
${fullyQualifiedTableName}_${currentTimestamp}_${groupName}.txt
5.2.1.3 HDFSイベント・ハンドラの構成

プロパティ・ファイルを使用して、HDFSハンドラの操作を構成します。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。

HDFSイベント・ハンドラの選択を有効にするには、まずgg.eventhandler.jdbc.type=hdfsおよびその他のHDFSイベント・プロパティを次のように指定してハンドラ・タイプを構成する必要があります。

表5-2 HDFSイベント・ハンドラの構成プロパティ

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

gg.eventhandler.name.type

必須

hdfs

なし

使用するHDFSイベント・ハンドラを選択します。

gg.eventhandler.name.pathMappingTemplate

必須

データ・ファイルを書き込むHDFSのパスを動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。

なし

定数とともにインタレースされるキーワードを使用して、一意のパス名を実行時に動的に生成します。パス名は、通常、/ogg/data/${groupName}/${fullyQualifiedTableName}の形式に従います。

gg.eventhandler.name.fileNameMappingTemplate

オプション

実行時にHDFSファイル名を動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。

なし

定数とともにインタレースされるキーワードを使用して、一意のファイル名を実行時に動的に生成します。設定しない場合、アップストリームのファイル名が使用されます。

gg.eventhandler.name.finalizeAction

オプション

none | delete

none

ファイナライズ・アクションでのファイル・ライター・ハンドラの動作を示します。

none

データ・ファイルをそのままにします(アクティブな書込み接尾辞を削除します。「アクティブな書込み接尾辞について」を参照)。

delete

データ・ファイルを削除します(データ・ファイルが別の形式に変換されていたり、サード・パーティ・アプリケーションにロードされている場合)。

gg.eventhandler.name.kerberosPrincipal

オプション

Kerberosプリンシパル名。

なし

HDFS Kerberos認証が有効になっている場合は、Kerberosプリンシパルに設定します。

gg.eventhandler.name.keberosKeytabFile

オプション

Kerberos keytabファイルのパス。

なし

HDFS Kerberos認証が有効になっている場合は、Kerberos keytabファイルのパスに設定します。

gg.eventhandler.name.eventHandler

オプション

子イベント・ハンドラを相互参照する一意の文字列識別子。

イベント・ハンドラは構成されない。

イベント・ハンドラを相互参照する一意の文字列識別子。イベント・ハンドラは、ファイル・ロール・イベントで呼び出されます。イベント・ハンドラは、S3へのファイルのロード、ParquetまたはORC形式への変換、HDFSへのファイルのロードなどのファイル・ロール・イベントのアクションを実行できます。

5.3 Optimized Row Columnarイベント・ハンドラの使用

Optimized Row Columnar (ORC)イベント・ハンドラを使用して、ORC形式のデータ・ファイルを生成する方法について説明します。

トピック:

5.3.1 概要

ORCは、データ取得時間とビッグ・データ分析のパフォーマンスが大幅に向上する行および列形式です。ORCイベント・ハンドラを使用して、ローカル・ファイル・システムまたはHDFSに直接ORCファイルを書き込むことができます。詳細は、https://orc.apache.org/を参照してください。

5.3.2 機能の詳細

トピック:

5.3.2.1 アップストリーム・データ形式について

ORCイベント・ハンドラは、ファイル・ライター・ハンドラによって生成されたAvroオブジェクト・コンテナ・ファイル(OCF)のみを変換できます。ORCイベント・ハンドラは他の形式をORCデータ・ファイルに変換できません。ファイル・ライター・ハンドラの形式は、avro_row_ocfまたはavro_op_ocfである必要があります。「ファイル・ライター・ハンドラの使用」を参照してください。

5.3.2.2 ライブラリの依存性について

ORCファイルを生成するには、Apache ORCライブラリおよびHDFSクライアント・ライブラリの両方が必要です。「Optimized Row Columnarイベント・ハンドラ・クライアント依存性」および「HDFSハンドラ・クライアント依存性」を参照してください。

Oracle GoldenGate for Big Dataには、Apache ORCライブラリもHDFSクライアント・ライブラリも含まれていません。依存性ライブラリを含めるには、gg.classpath変数を構成する必要があります。

5.3.2.3 要件

ORCイベント・ハンドラはORCファイルを直接HDFSに書き込むことができます。writeToHDFSプロパティをtrueに設定する必要があります。

gg.eventhandler.orc.writeToHDFS=true

HDFS core-site.xmlファイルを含むディレクトリがgg.classpathにあることを確認します。これは、core-site.xmlファイルを実行時に読み取ることができ、HDFSへの接続情報を解決できるようにしています。次に例を示します。

gg.classpath=/{HDFS_install_directory}/etc/hadoop

HDFSクラスタ上でKerberos認証を有効化する場合は、パスワードを実行時に解決できるように、Kerberosプリンシパルとkeytabファイルの場所を構成する必要があります。

gg.eventHandler.name.kerberosPrincipal=principal
gg.eventHandler.name.kerberosKeytabFile=path_to_the_keytab_file
5.3.2.4 テンプレート文字列の使用

テンプレート文字列には、実行時に動的に解決されるリテラルとキーワードの組合せを含めることができます。ORCイベント・ハンドラは、テンプレート文字列を多用して、ORCディレクトリ名、データ・ファイル名およびORCバケット名を生成します。これにより、データ・ファイルおよびデータ・ファイルの名前を書き込む場所を柔軟に選択できます。

サポートされているテンプレート文字列

キーワード 説明
${fullyQualifiedTableName}

ピリオド(.)で区切られた完全修飾ソース表名。たとえば、MYCATALOG.MYSCHEMA.MYTABLE

${catalogName}

個々のソース・カタログ名。たとえば、MYCATALOG

${schemaName}

個々のソース・スキーマ名。たとえば、MYSCHEMA

${tableName}

個々のソース表名。たとえば、MYTABLE

${groupName}

Replicatプロセスの名前(調整された適用を使用する場合は、スレッド番号を含む)。

${emptyString}

空の文字列になります。たとえば、""

${operationCount}

データ・ファイル内の操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"1024"

${insertCount}

データ・ファイル内の挿入操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"125"

${updateCount}

データ・ファイル内の更新操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"265"

${deleteCount}

データ・ファイル内の削除操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"11"

${truncateCount}

データ・ファイル内の切捨て操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"5"

${currentTimestamp}

現在のタイムスタンプ。日時のデフォルトの出力形式はyyyy-MM-dd_HH-mm-ss.SSSです。たとえば、2017-07-05_04-31-23.123。または、次のように角カッコ内に形式を挿入して、現在のタイムスタンプの形式をカスタマイズできます。

${currentTimestamp[MM-dd_HH]}

この形式は、JavaのSimpleDateFormatクラスで定義された構文を使用します。https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.htmlを参照してください。

${toUpperCase[]}

角カッコ内のコンテンツを大文字に変換します。たとえば、${toUpperCase[${fullyQualifiedTableName}]}

${toLowerCase[]}

角カッコ内のコンテンツを小文字に変換します。たとえば、${toLowerCase[${fullyQualifiedTableName}]}

テンプレート文字列の構成では、キーワードおよび静的文字列の組合せを使用して、実行時にパスとデータ・ファイル名を構成できます。

パスの構成例
/usr/local/${fullyQualifiedTableName}
データ・ファイルの構成例
${fullyQualifiedTableName}_${currentTimestamp}_${groupName}.txt

5.3.3 ORCイベント・ハンドラの構成

プロパティ・ファイルを使用して、ORCハンドラの操作を構成します。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。

ORCイベント・ハンドラは、ファイル・ライター・ハンドラと組み合せてのみ機能します。

ORCハンドラの選択を有効にするには、まずgg.eventhandler.name.type=orcおよびその他のORCプロパティを次のように指定してハンドラ・タイプを構成する必要があります。

表5-3 ORCイベント・ハンドラの構成プロパティ

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

gg.eventhandler.name.type

必須

ORC

なし

ORCイベント・ハンドラを選択します。

gg.eventhandler.name.writeToHDFS

オプション

true | false

false

ORCフレームワークを使用すると、HDFSに直接書き込むことができます。ローカル・ファイル・システムに書き込むには、falseに設定します。HDFSに直接書き込むには、trueに設定します。

gg.eventhandler.name.pathMappingTemplate

必須

ファイルを書き込むORCバケットのパスを動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。

なし

定数とともにインタレースされるキーワードを使用して、一意のORCパス名を実行時に動的に生成します。パス名は、通常、/ogg/data/${groupName}/${fullyQualifiedTableName}の形式に従います。

gg.eventhandler.name.fileMappingTemplate

オプション

実行時にORCファイル名を動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。

なし

実行時にORCデータ・ファイル名を動的に生成するために使用される、解決可能なキーワードと定数を使用します。設定しない場合、アップストリームのファイル名が使用されます。

gg.eventhandler.name.compressionCodec

オプション

LZ4 | LZO | NONE | SNAPPY | ZLIB

NONE

生成されたORCファイルの圧縮コーデックを設定します。

gg.eventhandler.name.finalizeAction

オプション

none | delete

none

ファイナライズ・アクションでORCデータ・ファイルをそのままにするには、noneを設定します。ファイナライズ・アクションでORCデータ・ファイルを削除するには、deleteを設定します。

gg.eventhandler.name.kerberosPrincipal

オプション

Kerberosプリンシパル名。

なし

HDFSに直接書き込み、Kerberos認証が有効になっている場合は、Kerberosプリンシパルを設定します。

gg.eventhandler.name.kerberosKeytabFile

オプション

Kerberos keytabファイルのパス。

none

HDFSに直接書込み、HDFS Kerberos認証が有効になっている場合は、Kerberos keytabファイルのパスを設定します。

gg.eventhandler.name.blockPadding

オプション

true | false

true

生成されたORCファイルでブロック埋込みを有効にするには、falseを設定し、無効にするには、trueを設定します。

gg.eventhandler.name.blockSize

オプション

long

ORCのデフォルト。

生成されたORCファイルのブロック・サイズを設定します。

gg.eventhandler.name.bufferSize

オプション

integer

ORCのデフォルト。

生成されたORCファイルのバッファ・サイズを設定します。

gg.eventhandler.name.encodingStrategy

オプション

COMPRESSION | SPEED

ORCのデフォルト。

ORCエンコーディング方式が圧縮または高速化のいずれのために最適化されるかを設定します。

gg.eventhandler.name.paddingTolerance

オプション

浮動小数点数で表されるパーセント。

ORCのデフォルト。

生成されたORCファイルの埋込み許容度のパーセントを設定します。

gg.eventhandler.name.rowIndexStride

オプション

integer

ORCのデフォルト。

生成されたORCファイルの行インデックス・ストライドを設定します。

gg.eventhandler.name.stripeSize

オプション

integer

ORCのデフォルト。

生成されたORCファイルのストライプ・サイズを設定します。

gg.eventhandler.name.eventHandler

オプション

子イベント・ハンドラを相互参照する一意の文字列識別子。

イベント・ハンドラは構成されない。

ファイル・ロール・イベントで呼び出されるイベント・ハンドラ。イベント・ハンドラは、S3またはHDFSへのファイルのロードなどのファイル・ロール・イベント・アクションを実行できます。

gg.eventhandler.name.bloomFilterFpp

オプション

偽陽性の確率はゼロより大きく、1より小さくする必要があります。たとえば、.25.75はどちらも有効な値ですが、01は無効です。

Apache ORCのデフォルト。

ブルーム・フィルタ索引の問合せの偽陽性を設定し、検索対象の値がブロック内にあるという結果が示されますが、値は実際にはブロック内にありません。

ブルーム・フィルタを設定する表および列を設定する必要があります。次の構成構文を使用して、ブルーム・フィルタを設定する表および列を選択します。

gg.eventhandler.orc.bloomFilter.QASOURCE.TCUSTMER=CUST_CODE
gg.eventhandler.orc.bloomFilter.QASOURCE.TCUSTORD=CUST_CODE,ORDER_DATE

QASOURCE.TCUSTMERおよびQASOURCE.TCUSTORDは、ソース表の完全修飾名です。構成値は、ブルーム・フィルタを構成する1つ以上の列です。列名はカンマで区切ります。

gg.eventhandler.name.bloomFilterVersion

オプション

ORIGINAL | UTF8

ORIGINAL

ORCブルーム・フィルタのバージョンを設定します。

5.4 Oracle Cloud Infrastructureイベント・ハンドラの使用

Oracle Cloud Infrastructureイベント・ハンドラを使用して、ファイル・ライター・ハンドラによって生成されたファイルをOracle Cloud Infrastructureオブジェクト・ストアにロードする方法について説明します。

トピック:

5.4.1 概要

Oracle Cloud Infrastructure Object Storageサービスは、信頼性およびコスト効率が高いデータ耐久性を実現するインターネット規模の高パフォーマンス・ストレージ・プラットフォームです。Object Storageサービスは、分析データやリッチ・コンテンツ(イメージやビデオなど)を含め、あらゆるコンテンツ・タイプの非構造化データを無制限に格納できます。https://cloud.oracle.com/en_US/cloud-infrastructureを参照してください。

ファイル・ライター・ハンドラでサポートされるフォーマット・ハンドラはすべて使用できます。

5.4.2 機能の詳細

Oracle Cloud Infrastructureイベント・ハンドラには、Oracle Cloud Infrastructure Object Storageにファイルを転送するためのOracle Cloud Infrastructure Javaソフトウェア開発キット(SDK)が必要です。Oracle GoldenGate for Big Dataには、Oracle Cloud Infrastructure Java SDKが付属していません。 https://docs.cloud.oracle.com/iaas/Content/API/Concepts/sdkconfig.htmを参照してください。

Oracle Cloud Infrastructure Java SDKは、次の場所でダウンロードする必要があります。

https://docs.us-phoenix-1.oraclecloud.com/Content/API/SDKDocs/javasdk.htm

JARファイルを永続ディレクトリに解凍します。ハンドラには、Oracle Cloud Infrastructure SDK JARがあるJARライブラリ・ディレクトリとサード・パーティのJARライブラリの2つのディレクトリが必要です。両方のディレクトリは、gg.classpathにある必要があります。

環境変数gg.classpathを指定し、Oracle Cloud Infrastructure Java SDKのJARファイルを含めます。

gg.classpath=/usr/var/oci/lib/*:/usr/var/oci/third-party/lib/*

5.4.3 Oracle Cloud Infrastructureイベント・ハンドラの構成

Oracle Cloud Infrastructureイベント・ハンドラの操作は、プロパティ・ファイルを使用して構成します。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。

Oracle Cloud Infrastructureイベント・ハンドラは、ファイル・ライター・ハンドラとの組合せでのみ機能します。

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

表5-4 Oracle Cloud Infrastructureイベント・ハンドラの構成プロパティ

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

gg.eventhandler.name.type

必須

oci

なし

Oracle Cloud Infrastructureイベント・ハンドラを選択します。

gg.eventhandler.name.configFilePath

必須

イベント・ハンドラのconfigファイルへのパス。

なし

構成ファイルの名前および場所。

gg.eventhandler.name.profile

必須

プロファイル名を表す有効な文字列。

なし

Oracle Cloud Infrastructureのconfigファイルでは、エントリがプロファイル名で識別されます。デフォルトのプロファイルはDEFAULTです。ADMIN_USERなどのプロファイルを追加できます。ADMIN_USERプロファイル(またはconfigファイルに追加する他のプロファイル)に明示的に定義されていない値は、DEFAULTプロファイルから継承されます。

gg.eventhandler.name.namespace

必須

Oracle Cloud Infrastructureのネームスペース。

なし

ネームスペースは、すべてのバケットおよびオブジェクトの最上位レベルのコンテナとして機能し、ユーザーのテナント内のバケット命名を制御できます。オブジェクト・ストレージのネームスペースは、アカウントの作成時に割り当てられるシステム生成文字列です。ネームスペース文字列は、Oracle Cloud Infrastructureコンソールの使用中に「Object Storage Settings」に示されます。

gg.eventhandler.name.region

必須

Oracle Cloud Infrastructureのリージョン。

なし

Oracle Cloud Infrastructureのサーバーおよびデータはリージョンでホストされ、ローカライズされた地理的領域です。サポートされているリージョンは4つあります。次に例を示します。

London Heathrow("uk-london-1")
Frankfurt("eu-frankfurt-1")
Ashburn("us-ashburn-1")
Phoenix("us-phoenix-1").

gg.eventhandler.name.compartmentID

必須

有効なコンパートメントID。

なし

コンパートメントは、Oracle Cloud Infrastructureのリソースを編成するための論理コンテナです。compartmentIDは、Oracle Cloud Infrastructureコンソールの使用中に「Bucket Details」に示されます。

gg.eventhandler.name.pathMappingTemplate

必須

ファイルを書き込むOracle Cloud Infrastructureバケットのパスを動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。

なし

定数とともにインタレースされるキーワードを使用して、実行時に一意のOracle Cloud Infrastructureパス名を動的に生成します。

gg.eventhandler.name.fileNameMappingTemplate

オプション

実行時にOracle Cloud Infrastructureファイル名を動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。

なし

解決可能なキーワードと定数を使用して、実行時にOracle Cloud Infrastructureデータ・ファイル名を動的に生成します。設定しない場合、アップストリームのファイル名が使用されます。

gg.eventhandler.name.bucketMappingTemplate

必須

ファイルを書き込むOracle Cloud Infrastructureバケットのパスを動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。

なし

解決可能なキーワードと定数を使用して、実行時にOracle Cloud Infrastructureバケット名を動的に生成します。Oracle Cloud Infrastructureバケットが存在しない場合、イベント・ハンドラはOracle Cloud Infrastructureバケットを作成しようとします。

gg.eventhandler.name.finalizeAction

オプション

none | delete

none

ファイナライズ・アクションでOracle Cloud Infrastructureデータ・ファイルを残す場合は、noneに設定します。ファイナライズ・アクションでOracle Cloud Infrastructureデータ・ファイルを削除する場合は、deleteに設定します。

gg.eventhandler.name.eventHandler

オプション

子イベント・ハンドラを相互参照する一意の文字列識別子。

イベント・ハンドラは構成されません。

ファイル・ロール・イベントで呼び出されるイベント・ハンドラを設定します。イベント・ハンドラは、S3へのファイルのロード、ParquetまたはORCフォーマットへの変換、HDFSへのファイルのロード、Oracle Cloud Infrastructure Storage Classicへのファイルのロード、Oracle Cloud Infrastructureへのファイルのロードなどのファイル・ロール・イベント・アクションを実行できます。

サンプル構成

gg.eventhandler.oci.type=oci
gg.eventhandler.oci.configFilePath=~/.oci/config
gg.eventhandler.oci.profile=DEFAULT
gg.eventhandler.oci.namespace=dwcsdemo
gg.eventhandler.oci.region=us-ashburn-1
gg.eventhandler.oci.compartmentID=ocid1.compartment.oc1..aaaaaaaajdg6iblwgqlyqpegf6kwdais2gyx3guspboa7fsi72tfihz2wrba
gg.eventhandler.oci.pathMappingTemplate=${schemaName}
gg.eventhandler.oci.bucketMappingTemplate=${schemaName}
gg.eventhandler.oci.fileNameMappingTemplate=${tableName}_${currentTimestamp}.txt
gg.eventhandler.oci.finalizeAction=NONE

5.4.4 Oracle Cloud Infrastructureの資格証明の構成

Java SDKが機能するには、ユーザー資格証明などの基本構成情報およびOracle Cloud InfrastructureのテナントOracle Cloud ID (OCID)が必要です。https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htmを参照してください。

理想的な構成ファイルには、userfingerprintkey_filetenancyおよびregionの各キーとそれぞれの値が含まれます。デフォルトの構成ファイルの名前と場所は、~/.oci/configです。

次のように、configファイルを作成します。

  1. Oracle GoldenGate for Big Dataホーム・ディレクトリに.ociというディレクトリを作成します。

  2. テキスト・ファイルを作成し、configと名前を付けます。

  3. 次のプロパティの値を取得します。

    user
    1. Oracle Cloud Infrastructureコンソール(https://console.us-ashburn-1.oraclecloud.com)にログインします。

    2. 「Username」をクリックします。

    3. 「User Settings」をクリックします。

      ユーザーのOCIDが表示され、これがキー・ユーザーの値です。

    tenancy

    テナントIDがコンソール・ページの下部に表示されます。

    region

    コンソールのヘッダー・セッション・ドロップダウン・メニューでリージョンが表示されます。

    fingerprint

    フィンガープリントを生成するには、次のキーのフィンガープリントの取得方法の手順に従います。

    https://docs.cloud.oracle.com/iaas/Content/API/Concepts/apisigningkey.htm

    key_file

    Oracle Cloud Infrastructureとの接続を確立するには、公開キーと秘密キーを共有する必要があります。キーを生成するには、次のAPI署名キーの生成方法に従います。

    https://docs.cloud.oracle.com/iaas/Content/API/Concepts/apisigningkey.htm

構成ファイルの例

user=ocid1.user.oc1..aaaaaaaat5nvwcna5j6aqzqedqw3rynjq
fingerprint=20:3b:97:13::4e:c5:3a:34
key_file=~/.oci/oci_api_key.pem
tenancy=ocid1.tenancy.oc1..aaaaaaaaba3pv6wkcr44h25vqstifs

5.4.5 テンプレート文字列の使用

テンプレート文字列には、実行時に動的に解決されるリテラルとキーワードの組合せを含めることができます。このイベント・ハンドラは、テンプレート文字列を大量に使用して、Oracle Cloud Infrastructureディレクトリ名、データ・ファイル名およびOracle Cloud Infrastructureバケット名を生成します。これらの文字列によって、データ・ファイルおよびデータ・ファイルの名前を書き込む場所を柔軟に選択できます。ファイルおよびディレクトリの名前を選択する場合は、異常終了の原因となる可能性があるファイル命名の競合を回避するように注意する必要があります。

サポートされているテンプレート文字列

キーワード 説明
${fullyQualifiedTableName}

ピリオド(.)で区切られた完全修飾ソース表名。たとえば、MYCATALOG.MYSCHEMA.MYTABLE

${catalogName}

個々のソース・カタログ名。たとえば、MYCATALOG

${schemaName}

個々のソース・スキーマ名。たとえば、MYSCHEMA

${tableName}

個々のソース表名。たとえば、MYTABLE

${groupName}

Replicatプロセスの名前(調整された適用を使用する場合は、スレッド番号を含む)。

${emptyString}

空の文字列になります。たとえば、""

${operationCount}

データ・ファイル内の操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"1024"

${insertCount}

データ・ファイル内の挿入操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"125"

${updateCount}

データ・ファイル内の更新操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"265"

${deleteCount}

データ・ファイル内の削除操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"11"

${truncateCount}

データ・ファイル内の切捨て操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"5"

${currentTimestamp}

現在のタイムスタンプ。日時のデフォルトの出力形式はyyyy-MM-dd_HH-mm-ss.SSSです。たとえば、2017-07-05_04-31-23.123。または、次のように角カッコ内に形式を挿入して、現在のタイムスタンプの形式をカスタマイズできます。

${currentTimestamp[MM-dd_HH]}

この形式は、JavaのSimpleDateFormatクラスで定義された構文を使用します。https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.htmlを参照してください。

${toUpperCase[]}

角カッコ内のコンテンツを大文字に変換します。たとえば、${toUpperCase[${fullyQualifiedTableName}]}

${toLowerCase[]}

角カッコ内のコンテンツを小文字に変換します。たとえば、${toLowerCase[${fullyQualifiedTableName}]}

テンプレート文字列の構成では、キーワードおよび静的文字列の組合せを使用して、実行時にパスとデータ・ファイル名を構成できます。

パスの構成例
/usr/local/${fullyQualifiedTableName}
データ・ファイルの構成例
${fullyQualifiedTableName}_${currentTimestamp}_${groupName}.txt

要件

テンプレートを使用して生成されたディレクトリ名およびファイル名は、書込み先のシステム上で有効である必要があります。ファイル名の競合を避けるために、ファイル名は一意である必要があります。${currentTimestamp}キーワードを使用して、現在のタイムスタンプを追加すると、競合を回避できます。調整された適用を使用している場合は、データ・ファイル名に${groupName}を追加することをお薦めします。

5.4.6 トラブルシューティング

接続の問題。

オンプレミスの実行時にイベント・ハンドラがOracle Cloud Infrastructure Classicオブジェクトに接続できない場合、パブリック・インターネットへの接続がプロキシ・サーバーによって保護されている可能性があります。プロキシ・サーバーは、企業のプライベート・ネットワークとパブリック・インターネットとの間のゲートウェイとして機能します。ネットワーク管理者に連絡して、プロキシ・サーバーのURLを取得し、プロキシ・サーバーを設定します。

Oracle GoldenGate for Big Dataは、次の例のように、プロキシ・サーバーを有効にする次のJava実行時引数を使用して、プロキシ・サーバーとともに使用できます。

-Dhttps.proxyHost=www-proxy.us.company.com 
-Dhttps.proxyPort=80   

ClassNotFoundExceptionエラー

最も一般的な初期エラーは、必要なすべてのクライアント・ライブラリが含まれていない正しくないクラスパスで、これによりClassNotFoundExceptionエラーが発生します。Oracle Cloud Infrastructure Java SDKの必要なJARファイルをすべて含めるためにgg.classpath変数を指定します。機能の詳細を参照してください。

5.5 Oracle Cloud Infrastructure Classicイベント・ハンドラの使用

Oracle Cloud Infrastructure Classicイベント・ハンドラを使用して、ファイル・ライター・ハンドラによって生成されたファイルをOracle Cloud Infrastructure Classicオブジェクト・ストアにロードする方法について説明します。

トピック:

5.5.1 概要

Oracle Cloud Infrastructure Object Classicサービスは、ファイルや非構造化データに対してエンタープライズ仕様の大規模オブジェクト・ストレージ・ソリューションを提供するInfrastructure as a Service (IaaS)製品です。https://cloud.oracle.com/storage-classicを参照してください。

ファイル・ライター・ハンドラでサポートされるフォーマット・ハンドラはすべて使用できます。

5.5.2 機能の詳細

Oracle Cloud Infrastructure Classicイベント・ハンドラには、Oracle Cloud Infrastructure Classicにファイルを転送するファイル転送マネージャ(FTM) Java SDKが必要です。Oracle GoldenGate for Big Dataには、FTM Java SDKが付属していません。

FTM Java SDKは、次の場所でダウンロードする必要があります。

http://www.oracle.com/technetwork/topics/cloud/downloads/index.html#storejavasdk

JARファイルを永続ディレクトリに解凍します。ハンドラには、Oracle Cloud Infrastructure SDK JARがあるJARライブラリ・ディレクトリとサード・パーティのJARライブラリの2つのディレクトリが必要です。両方のディレクトリは、gg.classpathにある必要があります。

環境変数gg.classpathを指定し、FTM Java SDKのJARファイルを含めます。

必要なサード・パーティのJARは次のとおりです。

ftm-api-2.4.4.jar 
javax.json-1.0.4.jar 
slf4j-api-1.7.7.jar 
slf4j-log4j12-1.7.7.jar 
log4j-1.2.17-16.jar 
low-level-api-core-1.14.22.jar

gg.classpath=/usr/var/ftm-sdk/libs/*:

5.5.3 Oracle Cloud Infrastructure Classicイベント・ハンドラの構成

Oracle Cloud Infrastructure Classicハンドラの操作は、プロパティ・ファイルを使用して構成します。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。

Oracle Cloud Infrastructure Classicイベント・ハンドラは、ファイル・ライター・ハンドラとの組合せでのみ機能します。

Oracle Cloud Infrastructure Classicイベント・ハンドラの選択を有効にするには、まずgg.eventhandler.name.type=oci-cを指定してハンドラ・タイプを構成してから、次に示す他のOracle Cloud Infrastructureプロパティを構成する必要があります。

表5-5 Oracle Cloud Infrastructure Classicイベント・ハンドラの構成プロパティ

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

gg.eventhandler.name.type

必須

oci-c

なし

Oracle Cloud Infrastructure Classicイベント・ハンドラを選択します。

gg.eventhandler.name.serverUrl

必須

サーバーURL

なし

Oracle Cloud Infrastructure Classicイベント・ハンドラのサーバーURL。

gg.eventhandler.name.tenantID

必須

tenantIDを表す有効な文字列。

なし

Oracle Cloud Infrastructureコンソールにサインインするときに指定する、大/小文字を区別するテナントID。

gg.eventhandler.name.serviceName

必須

Oracle Cloud Infrastructure Classicイベント・ハンドラのサービス・インスタンス名。

なし

指定したOracle Cloud Infrastructure Classicイベント・ハンドラのサービス・インスタンス名。

gg.eventhandler.name.username

必須

有効なユーザー名。

なし

Oracle Cloud Infrastructureユーザー・アカウントのユーザー名。

gg.eventhandler.name.password

必須

有効なパスワード。

なし

Oracle Cloud Infrastructureユーザー・アカウントのパスワード。

gg.eventhandler.name.pathMappingTemplate

必須

ファイルを書き込むOracle Cloud Infrastructureバケットのパスを動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。

なし

解決可能なキーワードと定数を使用して、実行時に一意のOracle Cloud Infrastructure Classicのパス名を動的に生成します。

gg.eventhandler.name.containerMappingTemplate

必須

ファイルを書き込むOracle Cloud Infrastructureコンテナのパスを動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。

なし

解決可能なキーワードと定数を使用して、実行時にOracle Cloud Infrastructureコンテナ名を動的に生成します。Oracle Cloud Infrastructureコンテナが存在しない場合、イベント・ハンドラはOracle Cloud Infrastructureコンテナを作成しようとします。

gg.eventhandler.name.fileMappingTemplate

オプション

実行時にOracle Cloud Infrastructureファイル名を動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。

なし

解決可能なキーワードと定数を使用して、実行時にOracle Cloud Infrastructureファイル名を動的に生成します。設定しない場合、アップストリームのファイル名が使用されます。

gg.eventhandler.name.finalizeAction

オプション

none | delete

none

ファイナライズ・アクションでOracle Cloud Infrastructure Classicデータ・ファイルを残す場合は、noneに設定します。ファイナライズ・アクションでOracle Cloud Infrastructure Classicデータ・ファイルを削除する場合は、deleteに設定します。

gg.eventhandler.name.eventHandler

オプション

子イベント・ハンドラを相互参照する一意の文字列識別子。

イベント・ハンドラは構成されません。

ファイル・ロール・イベントで呼び出されるイベント・ハンドラを設定します。イベント・ハンドラは、S3へのファイルのロード、ParquetまたはORCフォーマットへの変換、HDFSへのファイルのロード、Oracle Cloud Infrastructure Classicへのファイルのロード、Oracle Cloud Infrastructureへのファイルのロードなどのファイル・ロール・イベント・アクションを実行できます。

サンプル構成

#The OCI-C Event handler
gg.eventhandler.oci-c.type=oci-c
gg.eventhandler.oci-c.serverURL=https://storage.companycloud.com/
gg.eventhandler.oci-c.tenantID=usoraclebig
gg.eventhandler.oci-c.serviceName=dev1
gg.eventhandler.oci-c.username=user@company.com
gg.eventhandler.oci-c.password=pass
gg.eventhandler.oci-c.pathMappingTemplate=${schemaName}
gg.eventhandler.oci-c.containerMappingTemplate=${schemaName}
gg.eventhandler.oci-c.fileNameMappingTemplate=${tableName}_${currentTimestamp}.json
gg.eventhandler.oci-c.finalizeAction=NONE 

5.5.4 テンプレート文字列の使用

テンプレート文字列には、実行時に動的に解決されるリテラルとキーワードの組合せを含めることができます。このイベント・ハンドラは、テンプレート文字列を大量に使用して、Oracle Cloud Infrastructureディレクトリ名、データ・ファイル名およびOracle Cloud Infrastructureバケット名を生成します。これらの文字列によって、データ・ファイルおよびデータ・ファイルの名前を書き込む場所を柔軟に選択できます。ファイルおよびディレクトリの名前を選択する場合は、異常終了の原因となる可能性があるファイル命名の競合を回避するように注意する必要があります。

サポートされているテンプレート文字列

キーワード 説明
${fullyQualifiedTableName}

ピリオド(.)で区切られた完全修飾ソース表名。たとえば、MYCATALOG.MYSCHEMA.MYTABLE

${catalogName}

個々のソース・カタログ名。たとえば、MYCATALOG

${schemaName}

個々のソース・スキーマ名。たとえば、MYSCHEMA

${tableName}

個々のソース表名。たとえば、MYTABLE

${groupName}

Replicatプロセスの名前(調整された適用を使用する場合は、スレッド番号を含む)。

${emptyString}

空の文字列になります。たとえば、""

${operationCount}

データ・ファイル内の操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"1024"

${insertCount}

データ・ファイル内の挿入操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"125"

${updateCount}

データ・ファイル内の更新操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"265"

${deleteCount}

データ・ファイル内の削除操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"11"

${truncateCount}

データ・ファイル内の切捨て操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"5"

${currentTimestamp}

現在のタイムスタンプ。日時のデフォルトの出力形式はyyyy-MM-dd_HH-mm-ss.SSSです。たとえば、2017-07-05_04-31-23.123。または、次のように角カッコ内に形式を挿入して、現在のタイムスタンプの形式をカスタマイズできます。

${currentTimestamp[MM-dd_HH]}

この形式は、JavaのSimpleDateFormatクラスで定義された構文を使用します。https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.htmlを参照してください。

${toUpperCase[]}

角カッコ内のコンテンツを大文字に変換します。たとえば、${toUpperCase[${fullyQualifiedTableName}]}

${toLowerCase[]}

角カッコ内のコンテンツを小文字に変換します。たとえば、${toLowerCase[${fullyQualifiedTableName}]}

テンプレート文字列の構成では、キーワードおよび静的文字列の組合せを使用して、実行時にパスとデータ・ファイル名を構成できます。

パスの構成例
/usr/local/${fullyQualifiedTableName}
データ・ファイルの構成例
${fullyQualifiedTableName}_${currentTimestamp}_${groupName}.txt

要件

テンプレートを使用して生成されたディレクトリ名およびファイル名は、書込み先のシステム上で有効である必要があります。ファイル名の競合を避けるために、ファイル名は一意である必要があります。${currentTimestamp}キーワードを使用して、現在のタイムスタンプを追加すると、競合を回避できます。調整された適用を使用している場合は、データ・ファイル名に${groupName}を追加することをお薦めします。

5.5.5 トラブルシューティング

接続の問題。

オンプレミスの実行時にイベント・ハンドラがOracle Cloud Infrastructure Classicオブジェクトに接続できない場合、パブリック・インターネットへの接続がプロキシ・サーバーによって保護されている可能性があります。プロキシ・サーバーは、企業のプライベート・ネットワークとパブリック・インターネットとの間のゲートウェイとして機能します。ネットワーク管理者に連絡して、プロキシ・サーバーのURLを取得し、プロキシ・サーバーを設定します。

Oracle GoldenGate for Big Dataは、次の例のように、プロキシ・サーバーを有効にする次のJava実行時引数を使用して、プロキシ・サーバーとともに使用できます。

-Dhttps.proxyHost=www-proxy.us.company.com 
-Dhttps.proxyPort=80   

ClassNotFoundExceptionエラー

最も一般的な初期エラーは、必要なすべてのクライアント・ライブラリが含まれていない正しくないクラスパスで、これによりClassNotFoundExceptionエラーが発生します。Oracle Cloud Infrastructure Java SDKの必要なJARファイルをすべて含めるためにgg.classpath変数を指定します。機能の詳細を参照してください。

5.6 Parquetイベント・ハンドラの使用

Parquetイベント・ハンドラを使用して、ファイル・ライター・ハンドラによって生成されたファイルをHDFSにロードする方法について説明します。

「ファイル・ライター・ハンドラの使用」を参照してください。

トピック:

5.6.1 概要

Parquetイベント・ハンドラを使用すると、Parquet形式のデータ・ファイルを生成できます。Parquetファイルはローカル・ファイル・システムまたはHDFSに直接書き込むことができます。Parquetは、データ取得時間とビッグ・データ分析のパフォーマンスが大幅に向上する列データ形式です。https://parquet.apache.org/を参照してください。

5.6.2 機能の詳細

トピック:

5.6.2.1 HDFSに書き込むParquetイベント・ハンドラの構成

Apache Parquetフレームワークは、HDFSへの直接書込みをサポートします。Parquetイベント・ハンドラはParquetファイルを直接HDFSに書き込むことができます。次の追加の構成ステップが必要です。

Parquetイベント・ハンドラの依存性と考慮事項は、HDFSハンドラと同じです。「HDFSのその他の考慮事項」を参照してください。

writeToHDFSプロパティをtrueに設定します。

gg.eventhandler.parquet.writeToHDFS=true

gg.classpathにHDFSクライアント・ライブラリが含まれていることを確認します。

HDFS core-site.xmlファイルを含むディレクトリがgg.classpathにあることを確認します。これは、core-site.xmlファイルを実行時に読み取ることができ、HDFSへの接続情報を解決できるようにしています。次に例を示します。

gg.classpath=/{HDFS_install_directory}/etc/hadoop

HDFSクラスタ上でKerberos認証が有効化されている場合は、パスワードを実行時に解決できるように、Kerberosプリンシパルとkeytabファイルの場所を構成する必要があります。

gg.eventHandler.name.kerberosPrincipal=principal
gg.eventHandler.name.kerberosKeytabFile=path_to_the_keytab_file
5.6.2.2 アップストリーム・データ形式について

Parquetイベント・ハンドラは、ファイル・ライター・ハンドラによって生成されたAvroオブジェクト・コンテナ・ファイル(OCF)のみを変換できます。Parquetイベント・ハンドラは他の形式をParquetデータ・ファイルに変換できません。ファイル・ライター・ハンドラの形式は、avro_row_ocfまたはavro_op_ocfである必要があります。「ファイル・ライター・ハンドラの使用」を参照してください。

5.6.2.3 テンプレート文字列の使用

テンプレート文字列には、実行時に動的に解決されるリテラルとキーワードの組合せを含めることができます。Parquetイベント・ハンドラは、テンプレート文字列を多用して、HDFSディレクトリ名、データ・ファイル名およびHDFSバケット名を生成します。これにより、データ・ファイルおよびデータ・ファイルの名前を書き込む場所を柔軟に選択できます。

サポートされているテンプレート文字列

キーワード 説明
${fullyQualifiedTableName}

ピリオド(.)で区切られた完全修飾ソース表名。たとえば、MYCATALOG.MYSCHEMA.MYTABLE

${catalogName}

個々のソース・カタログ名。たとえば、MYCATALOG

${schemaName}

個々のソース・スキーマ名。たとえば、MYSCHEMA

${tableName}

個々のソース表名。たとえば、MYTABLE

${groupName}

Replicatプロセスの名前(調整された適用を使用する場合は、スレッド番号を含む)。

${emptyString}

空の文字列になります。たとえば、""

${operationCount}

データ・ファイル内の操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"1024"

${insertCount}

データ・ファイル内の挿入操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"125"

${updateCount}

データ・ファイル内の更新操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"265"

${deleteCount}

データ・ファイル内の削除操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"11"

${truncateCount}

データ・ファイル内の切捨て操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"5"

${currentTimestamp}

現在のタイムスタンプ。日時のデフォルトの出力形式はyyyy-MM-dd_HH-mm-ss.SSSです。たとえば、2017-07-05_04-31-23.123。または、次のように角カッコ内に形式を挿入して、現在のタイムスタンプの形式をカスタマイズできます。

${currentTimestamp[MM-dd_HH]}

この形式は、JavaのSimpleDateFormatクラスで定義された構文を使用します。https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.htmlを参照してください。

${toUpperCase[]}

角カッコ内のコンテンツを大文字に変換します。たとえば、${toUpperCase[${fullyQualifiedTableName}]}

${toLowerCase[]}

角カッコ内のコンテンツを小文字に変換します。たとえば、${toLowerCase[${fullyQualifiedTableName}]}

テンプレート文字列の構成では、キーワードおよび静的文字列の組合せを使用して、実行時にパスとデータ・ファイル名を構成できます。

パスの構成例
/usr/local/${fullyQualifiedTableName}
データ・ファイルの構成例
${fullyQualifiedTableName}_${currentTimestamp}_${groupName}.txt

5.6.3 Parquetイベント・ハンドラの構成

プロパティ・ファイルを使用して、Parquetイベント・ハンドラの操作を構成します。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。

Parquetイベント・ハンドラは、ファイル・ライター・ハンドラと組み合せてのみ機能します。

Parquetイベント・ハンドラの選択を有効にするには、まずgg.eventhandler.name.type=parquetおよびその他のParquetイベント・プロパティを次のように指定してハンドラ・タイプを構成する必要があります。

表5-6 Parquetイベント・ハンドラの構成プロパティ

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

gg.eventhandler.name.type

必須

parquet

なし

使用するParquetイベント・ハンドラを選択します。

gg.eventhandler.name.writeToHDFS

オプション

true | false

false

ローカル・ファイル・システムに書き込むには、falseに設定します。HDFSに直接書き込むには、trueに設定します。

gg.eventhandler.name.pathMappingTemplate

必須

生成されたParquetファイルを書き込むパスを動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。

なし

定数とともにインタレースされるキーワードを使用して、一意のパス名を実行時に動的に生成します。パス名は、通常、/ogg/data/${groupName}/${fullyQualifiedTableName}の形式に従います。

gg.eventhandler.name.fileNameMappingTemplate

オプション

実行時にParquetファイル名を動的に生成するために使用される、解決可能なキーワードと定数を含む文字列

なし

Parquetファイル名を設定します。設定しない場合、アップストリームのファイル名が使用されます。

gg.eventhandler.name.compressionCodec

オプション

GZIP | LZO | SNAPPY | UNCOMPRESSED

UNCOMPRESSED

生成されたParquetファイルの圧縮コーデックを設定します。

gg.eventhandler.name.finalizeAction

オプション

none | delete

none

ファイナライズ・アクションでのParquetイベント・ハンドラの動作を示します。

none

データ・ファイルをそのままにします。

delete

データ・ファイルを削除します(データ・ファイルが別の形式に変換されていたり、サード・パーティ・アプリケーションにロードされている場合)。

gg.eventhandler.name.dictionaryEncoding

オプション

true | false

Parquetのデフォルト。

Parquetディクショナリ・エンコーディングを有効にするには、trueに設定します。

gg.eventhandler.name.validation

オプション

true | false

Parquetのデフォルト。

Parquet検証を有効にするには、trueに設定します。

gg.eventhandler.name.dictionaryPageSize

オプション

整数

Parquetのデフォルト。

Parquetディクショナリのページ・サイズを設定します。

gg.eventhandler.name.maxPaddingSize

オプション

整数

Parquetのデフォルト。

Parquet埋込みサイズを設定します。

gg.eventhandler.name.pageSize

オプション

整数

Parquetのデフォルト。

Parquetページ・サイズを設定します。

gg.eventhandler.name.rowGroupSize

オプション

整数

Parquetのデフォルト。

Parquet行グループ・サイズを設定します。

gg.eventhandler.name.kerberosPrincipal

オプション

Kerberosプリンシパル名。

なし

HDFSに直接書き込み、Kerberos認証が有効になっている場合は、Kerberosプリンシパルに設定します。

gg.eventhandler.name.kerberosKeytabFile

オプション

Kerberos keytabファイルのパス。

Parquetのデフォルト。

HDFSに直接書込み、HDFS Kerberos認証が有効になっている場合は、Kerberos keytabファイルのパスに設定します。

gg.eventhandler.name.eventHandler

オプション

子イベント・ハンドラを相互参照する一意の文字列識別子。

イベント・ハンドラは構成されない。

ファイル・ロール・イベントで呼び出されるイベント・ハンドラ。イベント・ハンドラは、S3へのファイルのロード、ParquetまたはORC形式への変換、HDFSへのファイルのロードなどのファイル・ロール・イベントのアクションを実行できます。

5.7 S3イベント・ハンドラの使用

Amazon S3 Webサービスへのインタフェースを提供するS3イベント・ハンドラを使用する方法について説明します。

トピック:

5.7.1 概要

Amazon S3は、Amazonクラウドでホストされているオブジェクト・ストレージです。S3イベント・ハンドラの目的は、ファイル・ライター・ハンドラによって生成されたデータ・ファイルをAmazon S3にロードすることです。https://aws.amazon.com/s3/を参照してください。

ファイル・ライター・ハンドラの任意の形式を使用できます。「ファイル・ライター・ハンドラの使用」を参照してください。

5.7.2 機能の詳細

S3イベント・ハンドラには、ファイルをS3オブジェクト・ストレージに移動するためにAmazon Web Services (AWS) Java SDKが必要です。Oracle GoldenGate for Big Dataには、AWS Java SDKが含まれていません。AWS Java SDKを次のサイトからダウンロードしてインストールする必要があります。

https://aws.amazon.com/sdk-for-java/

次に、AWS Java SDKのJARファイルが含まれ、2つのディレクトリに分割されるようにgg.classpath変数を構成する必要があります。両方のディレクトリが、次のようにgg.classpathにある必要があります。

gg.classpath=/usr/var/aws-java-sdk-1.11.240/lib/*:/usr/var/aws-java-sdk-1.11.240/third-party/lib/

トピック:

5.7.2.1 クライアントIDとシークレットの構成

クライアントIDおよびシークレットは、S3イベント・ハンドラがAmazon S3とやりとりするために必要な資格証明です。クライアントIDおよびシークレットは、Amazon AWSのWebサイトを使用して生成されます。これらの資格証明の取得とS3サーバーへの提示は、AWS Java SDKによってクライアント側で実行されます。AWS Java SDKにより、実行時にクライアントIDおよびシークレットを解決できる複数の方法が提供されます。

クライアントIDおよびシークレットは、Javaアダプタ・プロパティ・ファイルでJavaプロパティとして次のように1行で設定できます。

javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=ggjava/ggjava.jar -Daws.accessKeyId=your_access_key -Daws.secretKey=your_secret_key

これにより、ローカル・マシン上のAmazon Elastic Compute Cloud (Amazon EC2) AWS_ACCESS_KEY_IDおよびAWS_SECRET_ACCESS_KEY変数を使用して環境変数が設定されます。

5.7.2.2 AWS S3バケットについて

AWSでは、S3ストレージをバケットと呼ばれる個別のファイル・システムに分割します。S3イベント・ハンドラは、事前作成されたバケットに書き込むことができます。または、S3バケットが存在しない場合、S3イベント・ハンドラは、指定されたS3バケットを作成しようとします。AWSでは、S3バケット名を小文字にする必要があります。Amazon S3バケット名はグローバルに一意である必要があります。Amazonアカウントにすでに存在するS3バケットを作成しようとすると、S3イベント・ハンドラが異常終了します。

5.7.2.3 テンプレート文字列の使用

テンプレート文字列には、実行時に動的に解決されるリテラルとキーワードの組合せを含めることができます。S3イベント・ハンドラは、テンプレート文字列を多用して、S3ディレクトリ名、データ・ファイル名およびS3バケット名を生成します。これにより、データ・ファイルおよびデータ・ファイルの名前を書き込む場所を柔軟に選択できます。

サポートされているテンプレート文字列

キーワード 説明
${fullyQualifiedTableName}

ピリオド(.)で区切られた完全修飾ソース表名。たとえば、MYCATALOG.MYSCHEMA.MYTABLE

${catalogName}

個々のソース・カタログ名。たとえば、MYCATALOG

${schemaName}

個々のソース・スキーマ名。たとえば、MYSCHEMA

${tableName}

個々のソース表名。たとえば、MYTABLE

${groupName}

Replicatプロセスの名前(調整された適用を使用する場合は、スレッド番号を含む)。

${emptyString}

空の文字列になります。たとえば、""

${operationCount}

データ・ファイル内の操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"1024"

${insertCount}

データ・ファイル内の挿入操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"125"

${updateCount}

データ・ファイル内の更新操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"265"

${deleteCount}

データ・ファイル内の削除操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"11"

${truncateCount}

データ・ファイル内の切捨て操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、"5"

${currentTimestamp}

現在のタイムスタンプ。日時のデフォルトの出力形式はyyyy-MM-dd_HH-mm-ss.SSSです。たとえば、2017-07-05_04-31-23.123。または、次のように角カッコ内に形式を挿入して、現在のタイムスタンプの形式をカスタマイズできます。

${currentTimestamp[MM-dd_HH]}

この形式は、JavaのSimpleDateFormatクラスで定義された構文を使用します。https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.htmlを参照してください。

${toUpperCase[]}

角カッコ内のコンテンツを大文字に変換します。たとえば、${toUpperCase[${fullyQualifiedTableName}]}

${toLowerCase[]}

角カッコ内のコンテンツを小文字に変換します。たとえば、${toLowerCase[${fullyQualifiedTableName}]}

テンプレート文字列の構成では、キーワードおよび静的文字列の組合せを使用して、実行時にパスとデータ・ファイル名を構成できます。

パスの構成例
/usr/local/${fullyQualifiedTableName}
データ・ファイルの構成例
${fullyQualifiedTableName}_${currentTimestamp}_${groupName}.txt
5.7.2.4 トラブルシューティング

接続の問題。

オンプレミスで実行していて、S3イベント・ハンドラがS3オブジェクト・ストレージに接続できない場合は、プロキシ・サーバーによってパブリック・インターネットへの接続が保護されている可能性が高くなります。プロキシ・サーバーは、企業のプライベート・ネットワークとパブリック・インターネットとの間のゲートウェイとして機能します。ネットワーク管理者に連絡して、プロキシ・サーバーのURLを取得し、プロキシ・サーバーを設定します。

Oracle GoldenGateは、プロキシ・サーバーを使用可能にする次のパラメータを使用して、プロキシ・サーバーとともに使用できます。

  • gg.handler.name.proxyServer=
  • gg.handler.name.proxyPort=80

資格証明および次の構成パラメータを使用して、プロキシ・サーバーへのアクセスを保護できます。

  • gg.handler.name.proxyUsername=username
  • gg.handler.name.proxyPassword=password

サンプル構成:

gg.eventhandler.s3.type=s3
gg.eventhandler.s3.region=us-west-2
gg.eventhandler.s3.proxyServer=www-proxy.us.oracle.com
gg.eventhandler.s3.proxyPort=80
gg.eventhandler.s3.proxyProtocol=HTTP
gg.eventhandler.s3.bucketMappingTemplate=yourbucketname
gg.eventhandler.s3.pathMappingTemplate=thepath
gg.eventhandler.s3.finalizeAction=none

5.7.3 S3イベント・ハンドラの構成

プロパティ・ファイルを使用して、S3イベント・ハンドラの操作を構成します。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。

S3イベント・ハンドラの選択を有効にするには、まずgg.eventhandler.name.type=s3およびその他のS3イベント・プロパティを次のように指定してハンドラ・タイプを構成する必要があります。

表5-7 S3イベント・ハンドラの構成プロパティ

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

gg.eventhandler.name.type

必須

s3

なし

Replicatで使用するS3イベント・ハンドラを選択します。

gg.eventhandler.name.region

必須

S3インスタンスをホストしているAWSリージョン名。

なし

有効なAWSリージョン名の設定は必須です。

gg.eventhandler.name.proxyServer

オプション

プロキシ・サーバーのホスト名。

なし

プロキシ・サーバーを使用したAWSへの接続が必要な場合は、プロキシ・サーバーのホスト名を設定します。

gg.eventhandler.name.proxyPort

オプション

プロキシ・サーバーのポート番号。

なし

プロキシ・サーバーを使用したAWSへの接続が必要な場合は、プロキシ・サーバーのポート番号を設定します。

gg.eventhandler.name.proxyUsername

オプション

プロキシ・サーバーのユーザー名。

なし

プロキシ・サーバーを使用したAWSへの接続が必要で、かつ、プロキシ・サーバーによって資格証明が要求される場合は、プロキシ・サーバーのユーザー名を設定します。

gg.eventhandler.name.proxyPassword

オプション

プロキシ・サーバーのパスワード。

なし

プロキシ・サーバーを使用したAWSへの接続が必要で、かつ、プロキシ・サーバーによって資格証明が要求される場合は、プロキシ・サーバーのユーザー名のパスワードを設定します。

gg.eventhandler.name.bucketMappingTemplate

必須

ファイルを書き込むS3バケットのパスを動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。

なし

実行時にS3バケット名を動的に生成するために使用される、解決可能なキーワードと定数を使用します。S3バケットが存在しない場合、ハンドラはS3バケットを作成しようとします。AWSでは、バケット名はすべて小文字にする必要があります。大文字を使用したバケット名によって、実行時例外が発生します。

gg.eventhandler.name.pathMappingTemplate

必須

ファイルを書き込むS3バケットのパスを動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。

なし

定数とともにインタレースされるキーワードを使用して、一意のS3パス名を実行時に動的に生成します。通常パス名は、ogg/data/${groupName}/${fullyQualifiedTableName}の形式に従います。S3の規則では、先頭にバックスラッシュ(/)を使用しません。これは、""のルート・ディレクトリになるためです。

gg.eventhandler.name.fileNameMappingTemplate

オプション

実行時にS3ファイル名を動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。

なし

実行時にS3データ・ファイル名を動的に生成するために使用される、解決可能なキーワードと定数を使用します。設定しない場合、アップストリームのファイル名が使用されます。

gg.eventhandler.name.finalizeAction

オプション

none | delete

none

ファイナライズ・アクションでS3データ・ファイルをそのままにするには、noneを設定します。ファイナライズ・アクションでS3データ・ファイルを削除するには、deleteを設定します。

gg.eventhandler.name.eventHandler

オプション

子イベント・ハンドラを相互参照する一意の文字列識別子。

イベント・ハンドラは構成されない。

ファイル・ロール・イベントで呼び出されるイベント・ハンドラを設定します。イベント・ハンドラは、S3へのファイルのロード、ParquetまたはORC形式への変換、HDFSへのファイルのロードなどのファイル・ロール・イベントのアクションを実行できます。

gg.eventhandler.name.url

オプション(Dell ECS以外の場合は必須)

クラウド・ストレージに接続するための有効なURL。

なし

Amazon AWS S3の場合、不要です。Dell ECSの場合、必須です。クラウド・ストレージに接続するためのURLを設定します。

gg.eventhandler.name.proxyProtocol

オプション

HTTP | HTTPS

HTTP

セキュリティ・レベルの追加のためにプロキシ・サーバーへのプロキシ・プロトコル接続を設定します。クライアントは最初にプロキシ・サーバーとのSSLハンドシェイクを実行し、次にAmazon AWSとのSSLハンドシェイクを実行します。この機能はバージョン1.11.396のAmazon SDKに追加されたため、このプロパティを使用するには少なくともこのバージョンを使用する必要があります。

gg.eventhandler.name.SSEAlgorithm

オプション

AES256 | aws:kms

S3サーバー側暗号化を有効にする場合にのみ設定します。パラメータを使用して、S3のサーバー側暗号化のアルゴリズムを設定します。

gg.eventhandler.name.AWSKmsKeyId

オプション

有効なAWSキー管理システムのサーバー側の管理キー、またはそのキーを表す別名。

S3サーバー側暗号化を有効にし、S3アルゴリズムがaws:kmsである場合にのみ設定します。これは、AWS Identity and Access ManagementのWebページで設定した暗号化キーまたは暗号化別名のいずれかです。別名の先頭にalias/が付加されます。