事象
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