Embulk

Embulk 0.9.12でパーサーのエラーが追跡しやすくなった

2018年12月19日にリリースされたEmbulk 0.9.12では、パース失敗時にファイル名や行番号が参照できるようになったようです。リリースノート。試してみましょう

ファイル名を出力するには、FileInput, Decoder, Parser全てのプラグインがEmbulk 0.9.12以降向けに作られている必要があるようです。現在確認できているのは次のプラグインです。

こちらにリストがないプラグインで対応しているかを知りたい人はTwitter で「EmbulkのXXXは、0.9.12以降で作られているか?」とツイートすると多分答えが返ってくると思います。(...たぶん)

プラグイン
種類
対応状況

Azure
FileInput

FTP
FileInput

GCS
FileInput

RiakCS
FileInput

S3
FileInput

SFTP
FileInput

csv
parser

json
parser

jsonpath
parser
×

gz
decoder

FileInput、Decoder、Parserプラグインの作者の方はプラグインのバージョンを上げましょう

(開発者向け情報参照)

% embulk example hoge

% embulk guess hoge/seed.yml -o config.yml

生成されたconfig.ymlのカラムをコメントにして定義したカラムとデータが不一致になるよう設定します。

in:

type: file
path_prefix: /private/tmp/hoge/csv/sample_
decoders:
- {type: gzip}
parser:
charset: UTF-8
newline: LF
type: csv
delimiter: ','
quote: '"'
escape: '"'
null_string: 'NULL'
trim_if_not_quoted: false
skip_header_lines: 1
allow_extra_columns: false
allow_optional_columns: false
columns:
- {name: id, type: long}
- {name: account, type: long}
- {name: time, type: timestamp, format: '%Y-%m-%d %H:%M:%S'}
- {name: purchase, type: timestamp, format: '%Y%m%d'}
# - {name: comment, type: string} # <-- ここ
out: {type: stdout}

embulk run config.ymlを実行します。

embulk run config.yml

2019-01-10 19:29:45.699 +0900: Embulk v0.9.12
...
2019-01-10 19:29:51.116 +0900 [INFO] (0001:transaction): {done: 0 / 1, running: 0}
2019-01-10 19:29:51.217 +0900 [WARN] (0015:task-0000): Skipped line /private/tmp/hoge/csv/sample_01.csv.gz:2 (Too many columns): 1,32864,2015-01-27 19:23:49,20150127,embulk
2019-01-10 19:29:51.218 +0900 [WARN] (0015:task-0000): Skipped line /private/tmp/hoge/csv/sample_01.csv.gz:3 (Too many columns): 2,14824,2015-01-27 19:01:23,20150127,embulk jruby
2019-01-10 19:29:51.218 +0900 [WARN] (0015:task-0000): Skipped line /private/tmp/hoge/csv/sample_01.csv.gz:4 (Too many columns): 3,27559,2015-01-28 02:20:02,20150128,"Embulk ""csv"" parser plugin"
hsato-mbp13:tmp hsato$ +0900 [WARN] (0015:task-0000): Skipped line /private/tmp/hoge/csv/sample_01.csv.gz:5 (Too many columns): 4,11270,2015-01-29 11:54:36,20150129,NULL
...

Skipped line /private/tmp/hoge/csv/sample_01.csv.gz:2 (Too many columns): 1,32864...のような行が出力されるようになりました。

Skipped line ファイルのパス:行番号 (エラー内容): パースしたデータ のようになるようです。

デバッグが捗りますね。


参考(実装の意図)


開発者向け情報