embulk-filter-eval というフィルタープラグイン書いた
イントロ
まぁ半分ネタも入ってますが、何かちょっとした事を行う程度なら役に立つはず。
これは何が便利?
input
として与えられたカラムに対して、Ruby のコードでちょっとした変換を加える事ができる embulk プラグインです。
embulk
の version 0.5.2
で作りました。
example
github の README に書いてあるサンプルそのままなのですが。(サボってるわけじゃなくて、何かサンプルがあったほうが説明しやすい)
以下のように embulk
コマンドを使って sample を作り、preview できたとします。
$ embulk example $ embulk guess embulk-example/example.yml -o config.yml
preview
すると、以下の様な出力です。
$ embulk preview config.yml +---------+--------------+-------------------------+-------------------------+----------------------------+ | id:long | account:long | time:timestamp | purchase:timestamp | comment:string | +---------+--------------+-------------------------+-------------------------+----------------------------+ | 1 | 32,864 | 2015-01-27 19:23:49 UTC | 2015-01-27 00:00:00 UTC | embulk | | 2 | 14,824 | 2015-01-27 19:01:23 UTC | 2015-01-27 00:00:00 UTC | embulk jruby | | 3 | 27,559 | 2015-01-28 02:20:02 UTC | 2015-01-28 00:00:00 UTC | Embulk "csv" parser plugin | | 4 | 11,270 | 2015-01-29 11:54:36 UTC | 2015-01-29 00:00:00 UTC | NULL | +---------+--------------+-------------------------+-------------------------+----------------------------+
eval_columns
では、例えば全ての id に 1
を足して出力したい、という要望があったとします。
こんな時に filter-eval
では簡単に書くことが出来ます。 config.yml
に以下のように指定するだけ。
filters: - type: eval eval_columns: - id: value + 1
value
には id 列の要素が入ってきます。
なので value + 1
とすると、最初は value =1 なので、 value + 1
が評価されて 2 が返って、次は 3 が返って... というわけです。
$ embulk preview config.yml +---------+--------------+-------------------------+-------------------------+----------------------------+ | id:long | account:long | time:timestamp | purchase:timestamp | comment:string | +---------+--------------+-------------------------+-------------------------+----------------------------+ | 2 | 32,864 | 2015-01-27 19:23:49 UTC | 2015-01-27 00:00:00 UTC | embulk | | 3 | 14,824 | 2015-01-27 19:01:23 UTC | 2015-01-27 00:00:00 UTC | embulk jruby | | 4 | 27,559 | 2015-01-28 02:20:02 UTC | 2015-01-28 00:00:00 UTC | Embulk "csv" parser plugin | | 5 | 11,270 | 2015-01-29 11:54:36 UTC | 2015-01-29 00:00:00 UTC | NULL | +---------+--------------+-------------------------+-------------------------+----------------------------+
実行してみたら、id のカラムが 2, 3, 4, 5
となりました。
out_columns
このプラグインでは出力したいカラムを制御することも可能で、out_columns
という設定で、出力したいカラムを配列で書けば可能です。
filters: - type: eval eval_columns: - id: value + 1 out_columns: - id
これは out_columns
に id
しか指定していないので
$ embulk preview config.yml +---------+ | id:long | +---------+ | 2 | | 3 | | 4 | | 5 | +---------+
こんな感じになります。
まとめ
またゴミのような gem を作ってしまった...
次はもっといいものを考えてます。