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

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

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

10.1 概要

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

10.2 機能の詳細

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

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

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

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

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

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

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

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

表10-1 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へのファイルのロードなどのファイル・ロール・イベントのアクションを実行できます。

gg.eventhandler.name.writerVersion オプション v1|v2 Parquetバージョン1.11.0を介して起動されるParquetライブラリのデフォルトは、v1です。 Parquetライターのバージョンを設定する機能を許可します。