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

Optimized Row Columnar (ORC)イベント・ハンドラは、ORC形式のデータ・ファイルを生成します。

このトピックでは、ORCイベント・ハンドラの使用方法について説明します。

7.1 概要

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

7.2 機能の詳細

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

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

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

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

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

7.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

7.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