S-JIS[2015-08-09/2015-09-27] 変更履歴

Embulk フィルター

Embulkのフィルターのメモ。


概要

Embulkでは、読み込んだデータを多少加工することが出来る。
これはフィルタープラグインで行う。

出力系のプラグインには、フィルターで加工された後のデータが渡される。


カラム名変更フィルター

入力時に付けられたカラム名を変更するには、「type: rename」のフィルターを使う。

例えば、idというカラム名をsample_id、accountをaccount_idに変更するには、以下の様に記述する。

config.yml:

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だった場合のデフォルト値も指定している。

config.yml:

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以外のレコードだけ出力したい場合は以下の様に記述する。

config.yml:

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 |
+---------+--------------+-------------------------+-------------------------+----------------------------+

複数フィルター

フィルターは複数定義することが出来る。
複数のフィルターを定義すると、実行時には上から順番に適用されるようだ。

config.yml:

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 |
+-----------------+-------------------------+

Embulk目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま