雑文発散

«前の日記(2015-08-04) 最新 次の日記(2015-08-06)» 編集
過去の日記

2015-08-05 [長年日記]

[Embulk] Embulk の CSV Parser の挙動に悩んでツイートしたら、対応策を教えて頂けたうえに機能拡張までしてもらった

Embulk の CSV Parser で、TSV のファイルを読み込んでいたとき、InvalidValueException が発生して、処理が止まってしまった。調べてみると、次のようなデータの場合に失敗することが分かった。

カラム1 カラム2 カラム3
abc "de"f ghi

この例の場合、カラム2の「"de"f」で Exception が発生する。

これは「"」で始まったカラムは「"」で終わることが期待されており、その後ろに続く文字は、区切り文字(delimiter)もしくは改行(newline)が期待されているため。「"」のすぐ後に区切りでも改行でもない文字があるので、フォーマットが違うだろ!!という指摘の Exception だった。

TSV なので、カラムのクォートは関係ないかなと思っていたのだけど、CSV Parser のデフォルトが quote: "\t" となっているので、そういう動作になっていた。

quote: "" とすれば無視されるかな?と思ってやってみたけど、変わらず。じゃあ、どうするかな?元のデータを加工した方がいいのかな?とか思いつつ、Twitter に悩みを吐露したら @frsyuki さんからアドバイスを頂いた!

アドバイスどおりに quote: "\v" とすることで、この Exception は回避できた。

その後、quote: null という指定ができるような拡張を進めて頂ける話になり、この日記を書いている 8/6 の朝時点では、もうこの件に対応する pull request が作成され、master ブランチに取り込まれていた!!

だからもうみんなは Embulk の最新版を使えば quote: null という魔法のことばでこの問題を回避できるよ!!!

今回は(オレのレベルの低さで)コードによる貢献ができなかったのが残念だったけど、こういうアウトプットをしていくことだって OSS への貢献なんだ!という雑な自信を持って、この日記を書いている次第である。

できることをやろう。

【追記】

この修正が入った Embulk v0.6.21 がリリースされた! スピード感すごい!