Embulkのフィルターのメモ。
|
Embulkでは、読み込んだデータを多少加工することが出来る。
これはフィルタープラグインで行う。
出力系のプラグインには、フィルターで加工された後のデータが渡される。
入力時に付けられたカラム名を変更するには、「type: rename
」のフィルターを使う。
例えば、idというカラム名をsample_id、accountをaccount_idに変更するには、以下の様に記述する。
in:
〜
filters:
- type: rename
columns:
id: sample_id
account: account_id
out:
type: stdout
$ embulk preview config.yml 〜 +----------------+-----------------+-------------------------+-------------------------+----------------------------+ | sample_id:long | account_id:long | time:timestamp | purchase:timestamp | comment:string | +----------------+-----------------+-------------------------+-------------------------+----------------------------+ | 1 | 32,864 | 2015-01-27 10:23:49 UTC | 2015-01-26 15:00:00 UTC | embulk | | 2 | 14,824 | 2015-01-27 10:01:23 UTC | 2015-01-26 15:00:00 UTC | embulk jruby | | 3 | 27,559 | 2015-01-27 17:20:02 UTC | 2015-01-27 15:00:00 UTC | Embulk "csv" parser plugin | | 4 | 11,270 | 2015-01-29 02:54:36 UTC | 2015-01-28 15:00:00 UTC | | +----------------+-----------------+-------------------------+-------------------------+----------------------------+
カラムを選択する(絞る・減らす、並び順を変える)には、「type: column
」のフィルターを使う。
このフィルターを使う為には、embulk-filter-columnプラグインをインストールしておく必要がある。
$ embulk gem install embulk-filter-column $ embulk gem list embulk-filter-column 2015-08-09 13:25:53.108 +0900: Embulk v0.6.21 *** LOCAL GEMS *** embulk-filter-column (0.1.6)
例えば、account, purchase, commentだけに絞りたい場合は以下の様に記述する。
ついでに、commentがnullだった場合のデフォルト値も指定している。
in:
〜
filters:
- type: column
columns:
- {name: account}
- {name: purchase}
- {name: comment, default: '(empty)'}
out:
type: stdout
$ $HOME/.embulk/bin/embulk preview sample_csv.yml 〜 +--------------+-------------------------+----------------------------+ | account:long | purchase:timestamp | comment:string | +--------------+-------------------------+----------------------------+ | 32,864 | 2015-01-26 15:00:00 UTC | embulk | | 14,824 | 2015-01-26 15:00:00 UTC | embulk jruby | | 27,559 | 2015-01-27 15:00:00 UTC | Embulk "csv" parser plugin | | 11,270 | 2015-01-28 15:00:00 UTC | (empty) | +--------------+-------------------------+----------------------------+
必要な行だけを抽出する(不要な行を削除する)には、「type: row
」のフィルターを使う。[2015-09-27]
このフィルターを使う為には、embulk-filter-rowプラグインをインストールしておく必要がある。
$ embulk gem install embulk-filter-row $ embulk gem list embulk-filter-row 2015-09-27 05:49:30.253 +0900: Embulk v0.6.21 *** LOCAL GEMS *** embulk-filter-row (0.1.3)
例えば、commentがnull以外のレコードだけ出力したい場合は以下の様に記述する。
in:
〜
filters:
- type: row
conditions:
- {column: comment, operator: "IS NOT NULL"}
out:
type: stdout
$ $HOME/.embulk/bin/embulk preview sample_csv.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 | +---------+--------------+-------------------------+-------------------------+----------------------------+
フィルターは複数定義することが出来る。
複数のフィルターを定義すると、実行時には上から順番に適用されるようだ。
in:
〜
filters:
- type: rename
columns:
account: account_id
- type: column
columns:
- {name: account_id}
- {name: purchase}
out:
type: stdout
$ embulk preview config.yml 〜 +-----------------+-------------------------+ | account_id:long | purchase:timestamp | +-----------------+-------------------------+ | 32,864 | 2015-01-26 15:00:00 UTC | | 14,824 | 2015-01-26 15:00:00 UTC | | 27,559 | 2015-01-27 15:00:00 UTC | | 11,270 | 2015-01-28 15:00:00 UTC | +-----------------+-------------------------+