Embulk Advent Calendar 2015の9日目の記事です。
こんにちは @sonots です。3連投すみません。昨日に引き続き、淡々と拙作のプラグインの紹介をしようと思います。
本日紹介するのは embulk-parser-none および embulk-filter-stdout プラグインです。
embulk-parser-none
URL: https://github.com/sonots/embulk-parser-none
何も parse せず、payload カラム(デフォルト)として保存するだけの便利プラグインです。Fluentd の none parser からパクっています。
file input プラグインと、自分の後ろの席の civitaspo が作っている embulk-output-hdfs を使って、ローカルファイルをそのまま HDFS にアップロードしたくて作成しました。
使い方は、以下のように書いて、
in:
type: file
path_prefix: example.txt
parser:
type: none
column_name: payload
例えば、example.txt の内容が以下のようになっている場合、
foo bar baz
foo bar baz
このように取り込まれます。
+----------------+
| payload:string |
+----------------+
| foo bar baz |
| foo bar baz |
+----------------+
書き出す場合、csv formatter を使ってもらって、以下のように指定すれば
out:
type: file
path_prefix: example.txt
sequence_format: ""
file_ext: .out
formatter:
type: csv
delimiter: 0
quote_policy: NONE
header_line: false
元の内容のまま吐き出されます。やった!ただの cp ができた!
foo bar baz
foo bar baz
embulk-filter-stdout
URL: https://github.com/sonots/embulk-filter-stdout
embulk の records を標準出力に吐き出すだけのデバグ用のプラグインです。アイデアは Fluentd の stdout filter からパクっています
in:
type: file
path_prefix: example.csv
parser:
type: csv
charset: UTF-8
newline: CRLF
null_string: 'NULL'
skip_header_lines: 1
comment_line_marker: '#'
columns:
- {name: time, type: timestamp, format: "%Y-%m-%d"}
- {name: id, type: long}
- {name: name, type: string}
- {name: score, type: double}
filters:
- type: stdout
out:
type: file
path_prefix: example.txt
sequence_format: ""
file_ext: .out
formatter:
type: csv
quote_policy: NONE
他の filter プラグインの結果を確認するために、途中に差し込んだりして利用できます。大分捗ります。
おわりに
一通り、拙作プラグインの紹介をさせて頂きました。embulk の plugin を作りっぱなしで、ブログなどには一切書いてなかったので、Advent Calendar が良い機会になりました。良かった。
まだ Advent Calendar 空いているので、自作プラグインの紹介とかもっと皆さん書いたら良いと思います!