blogembulk-parser-csv_guessable作った2018/03/13Tweetembulk-parsre-csv_guessableというembulkのプラグインを作りました。[https://github.com/koooge/embulk-parser-csv_guessable:embed:cite]これは何?embulk-standardsのcsvパーサを継承して機能拡張したものです。オリジナルのcsvパーサでは、csvのスキーマをconfig.ymlにきっちり書く必要があります。このためスキーマが変更された場合には動的に対応できず、embulkがコケてしまいます。runの前にconfig.ymlを生成するオレオレguessスクリプトをかましていました。plugin”の精神でpluginを作ってみることにしました。やりたいこと下のような1行目がヘッダ行のcsvをよく見ると思います。(なんか名前あるんでしょうか?)[http://www.soumu.go.jp/toukei_toukatsu/index/seido/9-5.htm:title]ken-code,sityouson-code,tiiki-code,ken-name,sityouson-name1,sityouson-name2,sityouson-name3,yomigana1,0,1000,北海道,,,,ほっかいどう1,100,1100,北海道,札幌市,,,さっぽろし1,101,1101,北海道,札幌市,,中央区,ちゅうおうくこのヘッダ行を使って、いい感じにパースしたいというのがこのpluginの発想です。スキーマ変更に柔軟に対応するオリジナルのcsvパーサだとオレオレスクリプトを噛ましていましたが、embulk-parser-csv_guessableはヘッダ行をカラム名として利用します。副次的な効果としてダラダラとcolumnsを定義せずとも簡単に書けます。カラムの型も指定するparserでlongなりtimestampなりの型にしておきたいことがあると思います。型はguessによって(簡単には)どうにもなりそうになかったので、指定したい場合は、元のcsvパーサと同じような書き方ができるようにしました。string型にする場合は書かなくても良いです。long}別名にする特にヘッダが下記のような日本語の場合に、英語名に変更したい事があると思います。県コード,市町村コード,地域コード,県名,市町村名1,市町村名2,市町村名3,読み仮名1,0,1000,北海道,,,,ほっかいどう1,100,1100,北海道,札幌市,,,さっぽろし1,101,1101,北海道,札幌市,,中央区,ちゅうおうく古き良きcsvといった感じ。下記のような設定で、value_nameをnameに置き換えることができます。string}parserという割にguessしたりfilterっぽい事もしてるきもしますが、こういうcsvはよくあるので自分的には便利なんですよね。これらのサンプルをgithubに置いてますのでご覧ください。今後イケてない部分がまだありますし、なんかもっと上手い方法がある気がしていますので、もう少しメンテ予定。