12 コマンド・イベント・ハンドラの使用

この章では、コマンド・イベント・ハンドラの使用方法について説明します。コマンド・イベント・ハンドラは、外部プログラムまたはスクリプトを同期的に実行するためのインタフェースを提供します。

12.1 概要 - コマンド・イベント・ハンドラ

コマンド・イベント・ハンドラの目的は、指定された外部プログラムまたはスクリプトを実行することで、ファイル・ライター・ハンドラによって生成されたデータ・ファイルを各ターゲットにロードすることです。

12.2 コマンド・イベント・ハンドラの構成

ファイル・ライター・ハンドラのプロパティ・ファイルを使用して、コマンド・イベント・ハンドラの操作を構成できます。

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

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

表12-1 コマンド・イベント・ハンドラの構成プロパティ

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

gg.eventhandler.name.type

必須

コマンド

なし

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

gg.eventhandler.name.command

必須

実行する外部プログラムまたはスクリプトの有効なパス。

なし

コマンド・イベント・ハンドラによって実行されるスクリプトまたは外部プログラム。

gg.eventhandler.name.cmdWaitMilli

オプション

ミリ秒を表す整数値。

無期限

コマンド・イベント・ハンドラは、スクリプトまたは外部プログラムでコールされたコマンドが完了するまで待機します。コマンド・イベント・ハンドラが、構成されたタイムアウト期間内にコマンドを完了できなかった場合、処理は異常終了します。

gg.eventhandler.name.multithreaded オプション true | false true trueの場合、スクリプトまたは外部プログラムに構成されているコマンドはマルチスレッド方式で実行されます。falseの場合は、単一スレッドで実行されます。

gg.eventhandler.name.commandArgumentTemplate

オプション

「コマンド引数テンプレート文字列の使用」を参照してください。

なし

コマンド・イベント・ハンドラでは、スクリプトまたは外部プログラムの実行時に入力引数としてコマンド引数テンプレート文字列を使用します。有効な引数文字列のリストについては、「コマンド引数テンプレート文字列の使用」を参照してください。

サンプル構成
gg.eventhandler.command.type=command

gg.eventhandler.command.command=<path of the script to be executed>

#gg.eventhandler.command.cmdWaitMilli=10000

gg.eventhandler.command.multithreaded=true

gg.eventhandler.command.commandArgumentTemplate=${tablename},${datafilename},${countoperations}

12.3 コマンド引数テンプレート文字列の使用

コマンド引数テンプレート文字列は、実行時に動的に解決されるキーワードで構成されます。コマンド引数テンプレート文字列は、commandArgumentTemplateプロパティに指定されている順序と同じ順序で引数としてスクリプトに渡されます。

コマンド引数テンプレート文字列として使用される有効なトークンは、UUIDTableNameDataFileNameDataFileDirDataFileDirandNameOffsetFormatCountOperationsCountInsertsCountUpdatesCountDeletesおよびCountTruncatesです。テンプレート文字列が無効な場合は異常終了します。

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

${uuid}
ファイル・ライター・ハンドラは、生成されたファイルの状態を内部的に追跡するためにUUIDを割り当てます。UUIDの有用性は、トラブルシューティングのシナリオに限られることがあります。
${tableName}
個々のソース表名。たとえば、MYTABLE
${dataFileName}
生成されるデータ・ファイルの名前。
${dataFileDirandName}
完全パス、ファイル名およびファイル拡張子を指定したソース・ファイル名。
${offset}
データ・ファイルのオフセット(またはバイト単位のサイズ)。
${format}
ファイルの形式。たとえば、delimitedtext | json | json_row | xml | avro_row | avro_op | avro_row_ocf | avro_op_ocfです
${countOperations}
データ・ファイル内の操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何も書き込まれていないため、ゼロ(0)になります。たとえば、1024です。
${countInserts}
データ・ファイル内の挿入操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何も書き込まれていないため、ゼロ(0)になります。たとえば、125です。
${countUpdates}
データ・ファイル内の更新操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何も書き込まれていないため、ゼロ(0)になります。たとえば、265です。
${countDeletes}
データ・ファイル内の削除操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何も書き込まれていないため、ゼロ(0)になります。たとえば、11です。
${countTruncates}
データ・ファイル内の切捨て操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ(0)になります。たとえば、5です。

ノート:

スクリプトまたはコマンドが正常に実行されると、コマンド・イベント・ハンドラは「The command completed successfully」という文および実行されたコマンドの文とともにメッセージを記録します。コマンドの実行時にエラーが発生した場合、コマンド・イベント・ハンドラはReplicatプロセスを異常終了させ、エラー・メッセージをログに記録します。