8.2.17 フラット・ファイル
Oracle GoldenGate for Big Dataでは、ファイル・ライター・ハンドラを使用したローカル・ファイル・システムへのデータ・ファイルの書込みがサポートされています。
- ファイル・ライター・ハンドラ
ファイル・ライター・ハンドラとイベント・ハンドラを使用してデータを変換できます。 - Optimized Row Columnar (ORC)
データ・ファイルを生成するOptimized Row Columnar (ORC)イベント・ハンドラは、ORC形式です。 - Parquet
Parquetを使用して、ファイル・ライター・ハンドラによって生成されたファイルをHDFSにロードする方法について説明します。
親トピック: ターゲット
8.2.17.1 ファイル・ライター・ハンドラ
ファイル・ライター・ハンドラとイベント・ハンドラを使用してデータを変換できます。
ファイル・ライター・ハンドラは、区切りテキスト、XML、JSON、AvroおよびAvroオブジェクト・コンテナ・ファイル形式でのデータ・ファイルの生成をサポートします。抽出、ロードおよび変換のユースケースに対応するためのものです。データ・ファイルは、ローカル・ファイル・システム上にステージングされます。その後、データ・ファイルへの書込みが完了すると、サード・パーティ・アプリケーションを使用して、追加処理を実行するファイルを読み取ることができます。
ファイル・ライター・ハンドラは、イベント・ハンドラ・フレームワークもサポートしています。イベント・ハンドラ・フレームワークを使用すると、ファイル・ライター・ハンドラで生成されたデータ・ファイルを、Optimized Row Columnar (ORC)やParquetなどの他の形式に変換できます。データ・ファイルは、HDFSやAmazon s3などのサード・パーティ・アプリケーションにロードできます。イベント・ハンドラ・フレームワークは、より多くのイベント・ハンドラが様々な変換を実行したり、開発される別のターゲットにロードできるように拡張できます。また、Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)環境用のカスタム・イベント・ハンドラを開発できます。
GG for DAAでは、HDFSに書き込むための2つのハンドラが用意されています。次の状況では、HDFSハンドラまたはファイル・ライター・ハンドラを使用することをお薦めします。
- HDFSハンドラは、データをHDFSに直接ストリーミングするように設計されています。
-
HDFSで書込み後処理が発生していない場合に使用します。HDFSハンドラではファイルの内容を変更せず、単に、既存のファイルをHDFSにアップロードします。
分析ツールが、開いていてアクティブに書き込まれているファイル内のデータなど、HDFSに書き込まれるデータにリアルタイムにアクセスしている場合に使用します。
- -ファイル・ライター・ハンドラが、ファイルの書込みが完了したときにローカル・ファイル・システムにデータをステージングし、完了したデータ・ファイルをHDFSにロードするように設計されています。
-
分析ツールが、HDFSに書き込まれるデータにリアルタイムでアクセスしません。
データを変換、リフォーマット、マージおよび最終的な場所に移動する書込み後処理がHDFSで発生します。
データ・ファイルがORCまたはParquet形式でHDFSに書き込まれます。
- 機能の詳細
- ファイル・ライター・ハンドラの構成
- ファイル・ライター・ハンドラの停止
- サンプル構成の確認
- ファイル・ライター・ハンドラのパーティション化
パーティション化機能が、Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA) 21.1でのファイル・ライター・ハンドラに追加されました。パーティション化機能ではテンプレート・マッパー機能を使用してパーティション化文字列を解決します。その結果、ソース証跡データのパーティション化方法を制御できるようになります。
親トピック: フラット・ファイル
8.2.17.1.1 機能の詳細
8.2.17.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プロセスの停止。
操作シーケンス
ファイル・ロール・イベントによって、操作のシーケンスの発生がトリガーされます。個々のデータファイルがロールされたときに発生する操作の順序を理解することが重要です。
-
アクティブなデータ・ファイルが非アクティブに切り替えられ、データ・ファイルがフラッシュされて、状態データ・ファイルがフラッシュされます。
-
構成されたイベント・ハンドラは、指定された順序で呼び出されます。
-
ファイナライズ・アクションは、すべてのイベント・ハンドラで、構成した順序と逆の順序で実行されます。構成したすべてのファイナライズ・アクションが実行されます。
-
ファイナライズ・アクションは、データ・ファイルおよび状態ファイルに対して実行されます。すべてのアクションが正常に完了すると、状態ファイルが削除されます。構成したすべてのファイナライズ・アクションが実行されます。
たとえば、Parquetイベント・ハンドラとS3イベント・ハンドラを使用してファイル・ライター・ハンドラを構成する場合、ロール・イベントの順序は次のようになります。
-
アクティブなデータ・ファイルが非アクティブに切り替えられ、データ・ファイルがフラッシュされて、状態データ・ファイルがフラッシュされます。
-
Parquetイベント・ハンドラが呼び出され、ソース・データ・ファイルからParquetファイルが生成されます。
-
S3イベント・ハンドラが呼び出され、生成されたParquetファイルがS3にロードされます。
-
ファイナライズ・アクションが、S3 Parquetイベント・ハンドラに対して実行されます。構成したすべてのファイナライズ・アクションが実行されます。
-
ファイナライズ・アクションが、Parquetイベント・ハンドラに対して実行されます。構成したすべてのファイナライズ・アクションが実行されます。
-
ファイナライズ・アクションが、ファイル・ライター・ハンドラのデータ・ファイルに対して実行されます
親トピック: 機能の詳細
8.2.17.1.1.2 自動ディレクトリ作成
親トピック: 機能の詳細
8.2.17.1.1.3 アクティブな書込み接尾辞について
一般的なユースケースでは、サード・パーティ・アプリケーションを使用して、データ・ファイルを読み取る書込みディレクトリを監視します。サード・パーティ・アプリケーションは、ファイルへの書込みが完了した場合にのみデータ・ファイルを読み取ることができます。これらのアプリケーションでは、データ・ファイルへの書込みがアクティブであるか、または完了しているかを判別する方法が必要になります。ファイル・ライター・ハンドラを使用すると、次のプロパティを使用してアクティブな書込み接尾辞を構成できます。
gg.handler.name.fileWriteActiveSuffix=.tmp
このプロパティの値は、生成されたファイル名に付加されます。ファイルへの書込みが完了すると、データ・ファイルの名前が変更され、アクティブな書込み接尾辞がファイル名から削除されます。データ・ファイル名を監視し、アクティブな書込み接尾辞がいつ削除されたかを識別するように、サード・パーティ・アプリケーションを設定できます。
親トピック: 機能の詳細
8.2.17.1.1.4 状態のメンテナンス
以前は、すべてのOracle GoldenGate for Distributed Applications and Analytics (GG for DAA)ハンドラがステートレスでした。これらのステートレス・ハンドラでは、実行していたReplicatプロセスのコンテキストでの状態のみを保持します。Replicatプロセスを停止して再起動した場合、すべての状態が失われていました。Replicatを再起動すると、ハンドラは、前回の実行時の状況の認識がない状態で書込みを開始しました。
ファイル・ライター・ハンドラは、Replicatプロセスの呼出し間で状態を維持するための機能を提供します。デフォルトでは、再起動に伴って次のことが実行されます。
-
状態保存ファイルが読み取られます。
-
状態がリストアされます。
-
前回の実行が停止した位置からアクティブ・データ・ファイルの追加が続行されます。
次のプロパティを設定することで、このデフォルトのアクションから、シャットダウン時にすべてのファイルのロールが必要になるように変更できます。
gg.handler.name.rollOnShutdown=true
親トピック: 機能の詳細
8.2.17.1.2 ファイル・ライター・ハンドラの構成
ファイル・ライター・ハンドラの構成可能な値を示しています。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)
ファイル・ライター・ハンドラの選択を有効にするには、まずgg.handler.name.type=filewriter
およびその他のファイル・ライター・プロパティを次のように指定してハンドラ・タイプを構成する必要があります。
表8-19 ファイル・ライター・ハンドラの構成プロパティ
プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
---|---|---|---|---|
|
必須 |
|
なし |
使用するファイル・ライター・ハンドラを選択します。 |
|
オプション |
デフォルトの測定単位はバイトです。 |
1g |
ファイル・ライター・ハンドラによって生成されるファイルの最大ファイル・サイズを設定します。ファイル・サイズが超過すると、ロール・イベントがトリガーされます。 |
|
オプション |
デフォルトの測定単位はミリ秒です。 |
ファイルのローリング・オン時間がオフ。 |
タイマーは、ファイルが作成されるときにスタートします。間隔が経過したときにまだファイルが開いている場合、ファイル・ロール・イベントがトリガーされます。 |
|
オプション |
デフォルトの測定単位はミリ秒です。 |
ファイルの非アクティブ・ローリングがオフ。 |
タイマーは、生成されたファイルへの前回の書込みからスタートします。生成されたファイルへの新しい書込みでカウンタが再開されます。タイマーが経過したときにまだファイルが開いている場合、ロール・イベントがトリガーされます。 |
|
必須 |
実行時にファイル・ライター・ハンドラのデータ・ファイル名を動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。 |
なし |
定数とともにインタレースされるキーワードを使用して、一意のファイル名を実行時に動的に生成します。通常、ファイル名は、 |
|
必須 |
ファイルが書き込まれるディレクトリを動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。 |
なし |
定数とインタレースされたキーワードを使用して、一意のパス名を実行時に動的に生成します。通常、パス名は |
|
オプション |
文字列。 |
なし |
ファイルへの書込みがアクティブであることを示すために、ファイル・ライター・ハンドラによって生成されたファイルに付加されるオプションの接尾辞。ファイナライズ・アクションで、接尾辞が削除されます。 |
|
必須 |
ファイル・ライター・ハンドラの状態ファイルを格納するローカル・マシン上のディレクトリ。 |
なし |
ファイル・ライター・ハンドラの状態ファイルを格納するローカル・マシン上のディレクトリを設定します。調整された適用環境での操作時に機能するように、グループ名がディレクトリに追加されます。 |
|
オプション |
|
|
|
|
オプション |
|
|
ファイナライズ・アクションでのファイル・ライター・ハンドラの動作を示します。
|
|
オプション |
|
|
|
|
オプション |
|
イベント・ハンドラは構成されない。 |
イベント・ハンドラを相互参照する一意の文字列識別子。イベント・ハンドラは、ファイル・ロール・イベントで呼び出されます。イベント・ハンドラは、S3へのファイルのロード、ParquetまたはORC形式への変換、HDFSへのファイルのロードなどのファイル・ロール・イベントのアクションを実行できます。 |
|
|
ファイナライズ・アクションにおけるファイルの名前変更用にファイル・ライター・ハンドラのデータ・ファイル名を動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。 |
なし。 |
定数とともにインタレースされるキーワードを使用して、一意のファイル名を実行時に動的に生成します。ファイル名は、通常、 |
|
|
ファイルが書き込まれるディレクトリを動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。 |
なし |
定数とともにインタレースされるキーワードを使用して、一意のパス名を実行時に動的に生成します。パス名は、通常、 |
|
必須 |
|
|
出力データのフォーマット方法について、HDFSハンドラのフォーマッタを選択します
ParquetまたはORCイベント・ハンドラを使用する場合、選択した形式が |
|
オプション |
16進文字の偶数。 |
なし |
各2文字がバイト・オーダー・マーク(BOM)で1バイトに対応している16進文字の偶数を入力します。たとえば、文字列 |
|
オプション |
|
|
制御ファイルを作成するには、 |
|
オプション |
任意の文字列 |
改行( |
制御ファイルで区切り文字で区切られたファイル名を制御できます。このプロパティでは |
|
オプション |
制御ファイルを格納するディレクトリのパス。 |
ピリオド( |
制御ファイルを作成する場所を指定するように設定されます。 |
|
オプション |
|
|
所有者ファイルを作成するには、 |
|
オプション |
開いているすべてのファイルのロール・アクションをトリガーするために1回以上。 |
なし |
次の形式で1つ以上のトリガー時刻を構成します。 HH:MM,HH:MM,HH:MM エントリは24時間制に基づきます。たとえば、1日のうち3回個別の時刻にロールされるアクションを構成するエントリは次のとおりです。 gg.handler.fw.atTime=03:30,21:00,23:51 |
|
オプション |
圧縮なし。 |
|
生成されたAvro OCFファイルに対応する圧縮アルゴリズムを有効にします。圧縮を有効にしたら、対応する圧縮ライブラリを |
|
オプション |
|
正の整数 >= 512 |
アクティブな書込みストリームごとに |
gg.handler.name.rollOnTruncate |
オプション | true | false |
false |
切り捨て操作が発生したときに、ハンドラによってデータファイルのロールオーバーを発生させるかどうかを指定します。デフォルトはfalse です。これは、切捨て操作が提示されたときに、対応するデータ・ファイルがロールされないことを意味します。true に設定すると、切り捨て操作時にデータ・ファイルがロールされます。切捨て操作を伝播するには、ReplicatプロパティGETTRUNCATES を設定します。
|
gg.handler.name.logEventHandlerStatus |
オプション | true | false |
false |
true に設定すると、完了したイベント・ハンドラのステータスが情報ロギング・レベルで記録されます。イベント・ハンドラのデバッグおよびトラブルシューティングに使用できます。
|
gg.handler.name.eventHandlerTimeoutMinutes |
オプション | 長整数 | 120 | イベント・ハンドラ・スレッドのタイムアウト(分)。ファイル・ライター・ハンドラによって生成されたイベント・ハンドラ・スレッドには、作業を完了するための最大実行時間が提供されます。タイムアウト値を超えると、Replicatはイベント・ハンドラ・スレッドがハングしていると想定し、異常終了します。ステージングおよびマージのユースケースでは、イベント・ハンドラ・スレッドが作業を完了するのに時間がかかる場合があります。デフォルト値は120 (2時間)に設定されます。 |
gg.handler.name.processBacklogOnShutdown |
オプション |
true | false |
false |
true に設定すると、Replicatで、イベント・ハンドラ・フレームワークを介して未処理のステージング済ファイルがすべて処理されるようになります。データ・ウェアハウス・ターゲットへの初期ロード・レプリケーションの場合は、true に設定することをお薦めします。単純なデータ形式変換やクラウド・ストレージへのロードのシナリオの場合は、true に設定することをお薦めします。マージには長時間かかる可能性があるため、データ・ウェアハウス・ターゲットへのCDCレプリケーションの場合はfalse に設定することをお薦めします。
|
親トピック: ファイル・ライター・ハンドラ
8.2.17.1.3 ファイル・ライター・ハンドラの停止
- 強制停止はReplicatプロセスでは実行しないでください。
- Unixのkillコマンドを使用してReplicatプロセスを終了しないでください。
一貫性のない状態は、Replicatプロセスが起動時に異常終了し、状態ファイルの手動削除が必要になることを意味する場合があります。
ERROR 2022-07-11 19:05:23.000367 [main]- Failed to restore state for UUID [d35f117f-ffab-4e60-aa93-f7ef860bf280] table name [QASOURCE.TCUSTORD] data file name [QASOURCE.TCUSTORD_2022-07-11_19-04-27.900.txt]
.state
ファイルがまだ削除されていないことを意味します。通常、次の3つのシナリオでこの問題が発生する可能性があります。
- データ・ファイルが削除されてから関連する
.state
ファイルが削除されるまでの処理期間中に、Replicatプロセスが強制的に停止されたか、killコマンドを使用して強制終了されたか、クラッシュしました。 - ユーザーはデータ・ファイルまたはファイルを手動で削除しましたが、関連する
.state
ファイルをそのまま残しました。 - 同じReplicatプロセスの2つのインスタンスが実行されています。これを防ぐためにロック・ファイルが作成されますが、Replicat起動時にReplicatプロセスの複数のインスタンスを起動できるウィンドウがあります。
この問題が発生した場合は、.state
ファイルに関連付けられているデータ・ファイルが正常に処理されたかどうかを手動で判断する必要があります。データが正常に処理された場合は、.state
ファイルを手動で削除し、Replicatプロセスを再起動できます。
問題のある.state
ファイルに関連付けられているデータ・ファイルが処理されていないと判断された場合、次を実行します。
- すべての
.state
ファイルを削除します。 - Replicatプロセスの
seqno
およびrba
を変更し、処理が正常に行われたことがわかっている期間までバックアップします。 - Replicatプロセスを再起動して、データを再処理します。
親トピック: ファイル・ライター・ハンドラ
8.2.17.1.4 サンプル構成の確認
このファイル・ライター・ハンドラの構成例では、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.includeggtokens=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
親トピック: ファイル・ライター・ハンドラ
8.2.17.1.5 ファイル・ライター・ハンドラのパーティション化
パーティション化機能が、Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA) 21.1でのファイル・ライター・ハンドラに追加されました。パーティション化機能ではテンプレート・マッパー機能を使用してパーティション化文字列を解決します。その結果、ソース証跡データのパーティション化方法を制御できるようになります。
テンプレートでサポートされているキーワードはすべて、ファイル・ライター・ハンドラのパーティション化でサポートされるようになりました。
- ファイル・ライター・ハンドラのパーティション化の前提条件
パーティション化機能を使用するには、データが表ごとにパーティション化されている必要があります。次の構成は設定できません:gg.handler.filewriter.partitionByTable=false
。 - パス構成
パス・マッピング・テンプレートの構成がgg.handler.filewriter.pathMappingTemplate=/ogg/${fullyQualifiedTableName}
であると想定します。ソース表DBO.ORDERS
の場合、パスは実行時に次のように解決されます:/ogg/DBO.ORDERS
。 - パーティション化構成
テンプレートで有効なキーワードはすべてパーティション化でも有効です:gg.handler.filewriter.partitioner.fully qualified table name=templating keywords and/or constants
- イベント・ハンドラへのパーティション化の影響
解決されたパーティション化パスは、対応するイベント・ハンドラにも転送されます。
親トピック: ファイル・ライター・ハンドラ
8.2.17.1.5.1 ファイル・ライター・ハンドラのパーティション化の前提条件
パーティション化機能を使用するには、データが表ごとにパーティション化されている必要があります。次の構成は設定できません: gg.handler.filewriter.partitionByTable=false
。
親トピック: ファイル・ライター・ハンドラのパーティション化
8.2.17.1.5.2 パス構成
パス・マッピング・テンプレートの構成がgg.handler.filewriter.pathMappingTemplate=/ogg/${fullyQualifiedTableName}
であると想定します。ソース表DBO.ORDERS
の場合、パスは実行時に次のように解決されます: /ogg/DBO.ORDERS
。
親トピック: ファイル・ライター・ハンドラのパーティション化
8.2.17.1.5.3 パーティション化構成
テンプレートで有効なキーワードはすべてパーティション化でも有効です: gg.handler.filewriter.partitioner.fully qualified table name=templating keywords and/or constants
DBO.ORDERS
表のパーティション化が次のように設定されています。
gg.handler.filewriter.partitioner.DBO.ORDERS=par_sales_region=${columnValue[SALES_REGION]}
この例では、ファイル・システム上で次のようなファイル分割が発生します。
/ogg/DBO.ORDERS/par_sales_region=west/data files /ogg/DBO.ORDERS/par_sales_region=east/data files /ogg/DBO.ORDERS/par_sales_region=north/data files /ogg/DBO.ORDERS/par_sales_region=south/data file例2
DBO.ORDERS
表のパーティション化が次のように設定されています。
gg.handler.filewriter.partitioner.DBO.ORDERS=par_sales_region=${columnValue[SALES_REGION]}/par_state=${columnValue[STATE]}
この例では、ファイル・システム上で次のようなファイル分割が発生します。 /ogg/DBO.ORDERS/par_sales_region=west/par_state=CA/data files /ogg/DBO.ORDERS/par_sales_region=east/par_state=FL/data files /ogg/DBO.ORDERS/par_sales_region=north/par_state=MN/data files /ogg/DBO.ORDERS/par_sales_region=south/par_state=TX/data files
注意:
パーティション化の構成は慎重に行ってください。データ値の幅が大きいパーティション化列値を選択すると、比例した数の出力データ・ファイルにパーティション化されます。親トピック: ファイル・ライター・ハンドラのパーティション化
8.2.17.1.5.4 イベント・ハンドラへのパーティション化の影響
解決されたパーティション化パスは、対応するイベント・ハンドラにも転送されます。
パーティション化が gg.handler.filewriter.partitioner.DBO.ORDERS=par_sales_region=${columnValue[SALES_REGION]}
のように構成されている場合、パーティション文字列は次のように解決されます。
par_sales_region=west par_sales_region=east par_sales_region=north par_sales_region=south例2
S3イベント・ハンドラを使用する場合、S3イベント・ハンドラのパス・マッピング・テンプレートは次のように構成されます: gg.eventhandler.s3.pathMappingTemplate=output/dir
。S3のターゲット・ディレクトリは次のようになります。
output/dir/par_sales_region=west/data files output/dir/par_sales_region=east/data files output/dir/par_sales_region=north/data files output/dir/par_sales_region=south/data files
親トピック: ファイル・ライター・ハンドラのパーティション化
8.2.17.2 Optimized Row Columnar (ORC)
データ・ファイルを生成するOptimized Row Columnar (ORC)イベント・ハンドラはORC形式です。
このトピックでは、ORCイベント・ハンドラの使用方法について説明します。
- 概要
- 機能の詳細
- ORCイベント・ハンドラの構成
- Optimized Row Columnarイベント・ハンドラ・クライアント依存性
Optimized Row Columnar (OCR)ハンドラの依存性とはどのようなものでしょう。
親トピック: フラット・ファイル
8.2.17.2.1 概要
ORCは、データ取得時間、およびOracle GoldenGate for Distributed Applications and Analytics (GG for DAA)の分析のパフォーマンスが大幅に向上する行列形式です。ORCイベント・ハンドラを使用して、ローカル・ファイル・システムまたはHDFSに直接ORCファイルを書き込むことができます。詳細は、https://orc.apache.org/を参照してください。
親トピック: Optimized Row Columnar (ORC)
8.2.17.2.2 機能の詳細
8.2.17.2.2.1 アップストリーム・データ形式について
ORCイベント・ハンドラは、ファイル・ライター・ハンドラによって生成されたAvroオブジェクト・コンテナ・ファイル(OCF)のみを変換できます。ORCイベント・ハンドラは他の形式をORCデータ・ファイルに変換できません。ファイル・ライター・ハンドラの形式は、avro_row_ocf
またはavro_op_ocf
である必要があります。「フラット・ファイル」を参照してください。
親トピック: 機能の詳細
8.2.17.2.2.2 ライブラリの依存性について
ORCファイルを生成するには、Apache ORCライブラリおよびHDFSクライアント・ライブラリの両方が必要です。「Optimized Row Columnarイベント・ハンドラ・クライアント依存性」および「HDFSハンドラ・クライアント依存性」を参照してください。
Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)には、Apache ORCライブラリもHDFSクライアント・ライブラリも含まれていません。依存性ライブラリを含めるには、gg.classpath
変数を構成する必要があります。
親トピック: 機能の詳細
8.2.17.2.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
親トピック: 機能の詳細
8.2.17.2.3 ORCイベント・ハンドラの構成
プロパティ・ファイルを使用して、ORCハンドラの操作を構成します。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)
ORCイベント・ハンドラは、ファイル・ライター・ハンドラと組み合せてのみ機能します。
ORCハンドラの選択を有効にするには、まずgg.eventhandler.name.type=orc
およびその他のORCプロパティを次のように指定してハンドラ・タイプを構成する必要があります。
表8-20 ORCイベント・ハンドラの構成プロパティ
プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
---|---|---|---|---|
|
必須 |
|
なし |
ORCイベント・ハンドラを選択します。 |
|
オプション |
|
|
ORCフレームワークを使用すると、HDFSに直接書き込むことができます。ローカル・ファイル・システムに書き込むには、 |
|
必須 |
ファイルを書き込むORCバケットのパスを動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。 |
なし |
定数とインタレースされたキーワードを使用して、一意のORCパス名を実行時に動的に生成します。パス名は、通常、 |
|
オプション |
実行時にORCファイル名を動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。 |
なし |
実行時にORCデータ・ファイル名を動的に生成するために使用される、解決可能なキーワードと定数を使用します。設定しない場合、アップストリームのファイル名が使用されます。テンプレート・キーワードを参照してください。 |
|
オプション |
|
|
生成されたORCファイルの圧縮コーデックを設定します。 |
|
オプション |
|
|
ファイナライズ・アクションでORCデータ・ファイルをそのままにするには、 |
|
オプション |
Kerberosプリンシパル名。 |
なし |
HDFSに直接書き込み、Kerberos認証が有効になっている場合は、Kerberosプリンシパルを設定します。 |
|
オプション |
Kerberos |
|
HDFSに直接書込み、HDFS Kerberos認証が有効になっている場合は、Kerberos |
|
オプション |
|
|
生成されたORCファイルでブロック埋込みを有効にするには、 |
|
オプション |
|
ORCのデフォルト。 |
生成されたORCファイルのブロック・サイズを設定します。 |
|
オプション |
|
ORCのデフォルト。 |
生成されたORCファイルのバッファ・サイズを設定します。 |
|
オプション |
|
ORCのデフォルト。 |
ORCエンコーディング方式が圧縮または高速化のいずれのために最適化されるかを設定します。 |
|
オプション |
浮動小数点数で表されるパーセント。 |
ORCのデフォルト。 |
生成されたORCファイルの埋込み許容度のパーセントを設定します。 |
|
オプション |
|
ORCのデフォルト。 |
生成されたORCファイルの行インデックス・ストライドを設定します。 |
|
オプション |
|
ORCのデフォルト。 |
生成されたORCファイルのストライプ・サイズを設定します。 |
|
オプション |
子イベント・ハンドラを相互参照する一意の文字列識別子。 |
イベント・ハンドラは構成されない。 |
ファイル・ロール・イベントで呼び出されるイベント・ハンドラ。イベント・ハンドラは、S3またはHDFSへのファイルのロードなどのファイル・ロール・イベント・アクションを実行できます。 |
|
オプション |
偽陽性の確率はゼロより大きく、1より小さくする必要があります。たとえば、 |
Apache ORCのデフォルト。 |
ブルーム・フィルタ索引の問合せの偽陽性を設定し、検索対象の値がブロック内にあるという結果が示されますが、値は実際にはブロック内にありません。 ブルーム・フィルタを設定する表および列を設定する必要があります。次の構成構文を使用して、ブルーム・フィルタを設定する表および列を選択します。 gg.eventhandler.orc.bloomFilter.QASOURCE.TCUSTMER=CUST_CODE gg.eventhandler.orc.bloomFilter.QASOURCE.TCUSTORD=CUST_CODE,ORDER_DATE
|
|
オプション |
|
|
ORCブルーム・フィルタのバージョンを設定します。 |
親トピック: Optimized Row Columnar (ORC)
8.2.17.2.4 Optimized Row Columnarイベント・ハンドラ・クライアント依存性
Optimized Row Columnar (OCR)ハンドラの依存性とはどのようなものでしょう。
Maven Central RepositoryのORCのアーティファクトは次のとおりです。
Maven groupId: org.apache.orc
Maven atifactId: orc-core
Maven version: 1.6.9
ORCイベント・ハンドラにはHadoopクライアント依存性も必要です。「Hadoopクライアント依存性」を参照してください。
8.2.17.2.4.1 ORC Client 1.6.9
aircompressor-0.19.jar annotations-17.0.0.jar commons-lang-2.6.jar commons-lang3-3.12.0.jar hive-storage-api-2.7.1.jar jaxb-api-2.2.11.jar orc-core-1.6.9.jar orc-shims-1.6.9.jar protobuf-java-2.5.0.jar slf4j-api-1.7.5.jar threeten-extra-1.5.0.jar
8.2.17.2.4.2 ORC Client 1.5.5
aircompressor-0.10.jar asm-3.1.jar commons-cli-1.2.jar commons-codec-1.4.jar commons-collections-3.2.1.jar commons-compress-1.4.1.jar commons-configuration-1.6.jar commons-httpclient-3.1.jar commons-io-2.1.jar commons-lang-2.6.jar commons-logging-1.1.1.jar commons-math-2.1.jar commons-net-3.1.jar guava-11.0.2.jar hadoop-annotations-2.2.0.jar hadoop-auth-2.2.0.jar hadoop-common-2.2.0.jar hadoop-hdfs-2.2.0.jar hive-storage-api-2.6.0.jar jackson-core-asl-1.8.8.jar jackson-mapper-asl-1.8.8.jar jaxb-api-2.2.11.jar jersey-core-1.9.jar jersey-server-1.9.jar jsch-0.1.42.jar log4j-1.2.17.jar orc-core-1.5.5.jar orc-shims-1.5.5.jar protobuf-java-2.5.0.jar slf4j-api-1.7.5.jar slf4j-log4j12-1.7.5.jar xmlenc-0.52.jar zookeeper-3.4.5.jar
8.2.17.2.4.3 ORC Client 1.4.0
aircompressor-0.3.jar apacheds-i18n-2.0.0-M15.jar apacheds-kerberos-codec-2.0.0-M15.jar api-asn1-api-1.0.0-M20.jar api-util-1.0.0-M20.jar asm-3.1.jar commons-beanutils-core-1.8.0.jar commons-cli-1.2.jar commons-codec-1.4.jar commons-collections-3.2.2.jar commons-compress-1.4.1.jar commons-configuration-1.6.jar commons-httpclient-3.1.jar commons-io-2.4.jar commons-lang-2.6.jar commons-logging-1.1.3.jar commons-math3-3.1.1.jar commons-net-3.1.jar curator-client-2.6.0.jar curator-framework-2.6.0.jar gson-2.2.4.jar guava-11.0.2.jar hadoop-annotations-2.6.4.jar hadoop-auth-2.6.4.jar hadoop-common-2.6.4.jar hive-storage-api-2.2.1.jar htrace-core-3.0.4.jar httpclient-4.2.5.jar httpcore-4.2.4.jar jackson-core-asl-1.9.13.jar jdk.tools-1.6.jar jersey-core-1.9.jar jersey-server-1.9.jar jsch-0.1.42.jar log4j-1.2.17.jar netty-3.7.0.Final.jar orc-core-1.4.0.jar protobuf-java-2.5.0.jar slf4j-api-1.7.5.jar slf4j-log4j12-1.7.5.jar xmlenc-0.52.jar xz-1.0.jar zookeeper-3.4.6.jar
8.2.17.3 Parquet
Parquetを使用して、ファイル・ライター・ハンドラによって生成されたファイルをHDFSにロードする方法について学習します。
「フラット・ファイル」を参照してください。
- Parquetハンドラ
- 機能の詳細
- Parquetイベント・ハンドラの構成
- Parquetイベント・ハンドラ・クライアント依存性
Parquetイベント・ハンドラの依存性とはどのようなものでしょう。
親トピック: フラット・ファイル
8.2.17.3.1 Parquetハンドラ
Parquetイベント・ハンドラを使用すると、Parquet形式のデータ・ファイルを生成できます。Parquetファイルはローカル・ファイル・システムまたはHDFSに直接書き込むことができます。Parquetは、データ取得時間、およびOracle GoldenGate for Distributed Applications and Analytics (GG for DAA)の分析のパフォーマンスが大幅に向上する列データ形式です。https://parquet.apache.org/を参照してください。
親トピック: Parquet
8.2.17.3.2 機能の詳細
8.2.17.3.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
親トピック: 機能の詳細
8.2.17.3.2.2 アップストリーム・データ形式について
Parquetイベント・ハンドラは、ファイル・ライター・ハンドラによって生成されたAvroオブジェクト・コンテナ・ファイル(OCF)のみを変換できます。Parquetイベント・ハンドラは他の形式をParquetデータ・ファイルに変換できません。ファイル・ライター・ハンドラの形式は、avro_row_ocf
またはavro_op_ocf
である必要があります。「フラット・ファイル」を参照してください。
親トピック: 機能の詳細
8.2.17.3.3 Parquetイベント・ハンドラの構成
プロパティ・ファイルを使用して、Parquetイベント・ハンドラの操作を構成します。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)
Parquetイベント・ハンドラは、ファイル・ライター・ハンドラと組み合せてのみ機能します。
Parquetイベント・ハンドラの選択を有効にするには、まずgg.eventhandler.name.type=parquet
およびその他のParquetイベント・プロパティを次のように指定してハンドラ・タイプを構成する必要があります。
表8-21 Parquetイベント・ハンドラの構成プロパティ
プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
---|---|---|---|---|
|
必須 |
|
なし |
使用するParquetイベント・ハンドラを選択します。 |
|
オプション |
|
|
ローカル・ファイル・システムに書き込むには、 |
|
必須 |
生成されたParquetファイルを書き込むパスを動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。 |
なし |
定数とインタレースされたキーワードを使用して、一意のパス名を実行時に動的に生成します。パス名は、通常、 |
|
オプション |
実行時にParquetファイル名を動的に生成するために使用される、解決可能なキーワードと定数を含む文字列 |
なし |
Parquetファイル名を設定します。設定しない場合、アップストリームのファイル名が使用されます。テンプレート・キーワードを参照してください。 |
|
オプション |
|
|
生成されたParquetファイルの圧縮コーデックを設定します。 |
|
オプション |
|
|
ファイナライズ・アクションでのParquetイベント・ハンドラの動作を示します。 |
|
オプション |
|
Parquetのデフォルト。 |
Parquetディクショナリ・エンコーディングを有効にするには、 |
|
オプション |
|
Parquetのデフォルト。 |
Parquet検証を有効にするには、 |
|
オプション |
整数 |
Parquetのデフォルト。 |
Parquetディクショナリのページ・サイズを設定します。 |
|
オプション |
整数 |
Parquetのデフォルト。 |
Parquet埋込みサイズを設定します。 |
|
オプション |
整数 |
Parquetのデフォルト。 |
Parquetページ・サイズを設定します。 |
|
オプション |
整数 |
Parquetのデフォルト。 |
Parquet行グループ・サイズを設定します。 |
|
オプション |
Kerberosプリンシパル名。 |
なし |
HDFSに直接書き込み、Kerberos認証が有効になっている場合は、Kerberosプリンシパルに設定します。 |
|
オプション |
Kerberos |
Parquetのデフォルト。 |
HDFSに直接書込み、HDFS Kerberos認証が有効になっている場合は、Kerberos |
|
オプション |
子イベント・ハンドラを相互参照する一意の文字列識別子。 |
イベント・ハンドラは構成されない。 |
ファイル・ロール・イベントで呼び出されるイベント・ハンドラ。イベント・ハンドラは、S3へのファイルのロード、ParquetまたはORC形式への変換、HDFSへのファイルのロードなどのファイル・ロール・イベントのアクションを実行できます。 |
gg.eventhandler.name.writerVersion |
オプション | v1|v2 |
Parquetバージョン1.11.0を介して起動されるParquetライブラリのデフォルトは、v1 です。
|
Parquetライターのバージョンを設定する機能を許可します。 |
親トピック: Parquet
8.2.17.3.4 Parquetイベント・ハンドラ・クライアント依存性
Parquetイベント・ハンドラの依存性とはどのようなものでしょう。
Maven Central RepositoryのParquetのアーティファクトは次のとおりです。
Maven groupId: org.apache.parquet
Maven atifactId: parquet-avro
Maven version: 1.9.0
Maven groupId: org.apache.parquet
Maven atifactId: parquet-hadoop
Maven version: 1.9.0
Parquetイベント・ハンドラにはHadoopクライアント依存性も必要です。「Hadoopクライアント依存性」を参照してください。
8.2.17.3.4.1 Parquetクライアント1.12.0
audience-annotations-0.12.0.jar avro-1.10.1.jar commons-compress-1.20.jar commons-pool-1.6.jar jackson-annotations-2.11.3.jar jackson-core-2.11.3.jar jackson-databind-2.11.3.jar javax.annotation-api-1.3.2.jar parquet-avro-1.12.0.jar parquet-column-1.12.0.jar parquet-common-1.12.0.jar parquet-encoding-1.12.0.jar parquet-format-structures-1.12.0.jar parquet-hadoop-1.12.0.jar parquet-jackson-1.12.0.jar slf4j-api-1.7.22.jar snappy-java-1.1.8.jar zstd-jni-1.4.9-1.jar
親トピック: Parquetイベント・ハンドラ・クライアント依存性
8.2.17.3.4.2 Parquetクライアント1.11.1
audience-annotations-0.11.0.jar avro-1.9.2.jar commons-compress-1.19.jar commons-pool-1.6.jar jackson-annotations-2.10.2.jar jackson-core-2.10.2.jar jackson-databind-2.10.2.jar javax.annotation-api-1.3.2.jar parquet-avro-1.11.1.jar parquet-column-1.11.1.jar parquet-common-1.11.1.jar parquet-encoding-1.11.1.jar parquet-format-structures-1.11.1.jar parquet-hadoop-1.11.1.jar parquet-jackson-1.11.1.jar slf4j-api-1.7.22.jar snappy-java-1.1.7.3.jar
親トピック: Parquetイベント・ハンドラ・クライアント依存性
8.2.17.3.4.3 Parquetクライアント1.10.1
avro-1.8.2.jar commons-codec-1.10.jar commons-compress-1.8.1.jar commons-pool-1.6.jar fastutil-7.0.13.jar jackson-core-asl-1.9.13.jar jackson-mapper-asl-1.9.13.jar paranamer-2.7.jar parquet-avro-1.10.1.jar parquet-column-1.10.1.jar parquet-common-1.10.1.jar parquet-encoding-1.10.1.jar parquet-format-2.4.0.jar parquet-hadoop-1.10.1.jar parquet-jackson-1.10.1.jar slf4j-api-1.7.2.jar snappy-java-1.1.2.6.jar xz-1.5.jar
親トピック: Parquetイベント・ハンドラ・クライアント依存性
8.2.17.3.4.4 Parquetクライアント1.9.0
avro-1.8.0.jar commons-codec-1.5.jar commons-compress-1.8.1.jar commons-pool-1.5.4.jar fastutil-6.5.7.jar jackson-core-asl-1.9.11.jar jackson-mapper-asl-1.9.11.jar paranamer-2.7.jar parquet-avro-1.9.0.jar parquet-column-1.9.0.jar parquet-common-1.9.0.jar parquet-encoding-1.9.0.jar parquet-format-2.3.1.jar parquet-hadoop-1.9.0.jar parquet-jackson-1.9.0.jar slf4j-api-1.7.7.jar snappy-java-1.1.1.6.jar xz-1.5.jar
親トピック: Parquetイベント・ハンドラ・クライアント依存性