Posted at

EmblukでS3に吐いた複数ファイルをGlueでカタログ化する際の注意


事象

EmbulkでS3に出力したファイルから、Glueでデータカタログを作成しようとしたところ、入力元データ1に対し、出力は複数だったため、カタログとしては1つでいいのだが、複数ファイル分カタログ(テーブル)ができてしまった。


対処案1:Embulkの出力を1つにする

Embulkは特に指定をしないと、実行したマシンのCPU数分タスクを動作させてファイルを出力するので、min_output_tasks:1とすれば、出力ファイルも1つになるので、カタログの問題は解消する。

だが、その場合Embulkの並列処理が活かせない。


対処案2:クロール対象を1つにする

Glueのクローラ設定で、『データストア』の項目にあるエクスクルードパターンを設定し、1ファイルのみが対象となるようにして対処することもできた。

Embulkの場合、XXXXXX.000.00.tsv.gzのようなファイルが(特にいじらなければ)吐かれるので、この000のファイルのみを対象とするのである。

エクスクルードパターン
**/**0[0-9][1-9]**

だがこの場合、テーブルのプロパティに表示される情報(例えばrecordCount)が、1ファイルのものとなっているため、複数ファイルも含めた全量はここから把握できない。


結論

Glueをデータの詳細を知るためのデータカタログとして使うのであれば、現状出力を1ファイルにまとめる必要がありそうだった。

Athenaで利用する定義として使うだけであれば、対処案2の方法でも良いと思う。


番外:よくわからない項目

『クローラに関する情報の追加』に『Grouping behavior for S3 data (optional)』という項目があり、感覚的にはこれのチェックをつけると、複数ファイルでもデータ構造が同じであれば1つとして認識してくれそうだったが、そんなことはなかった。


  • Create a single schema for each S3 path