概要
embulk の QuickStart を試してみました
何事も試して感覚をつかむ
環境
- CentOS 6.6 64bit
- embulk 0.7.4
- Java OpenJDK 1.8.0_45
インストール
以下 root で作業しています
Javaが必要なのでインストールしていない場合は事前にインストールしてください
- curl –create-dirs -o ~/.embulk/bin/embulk -L “http://dl.embulk.org/embulk-latest.jar”
- chmod +x ~/.embulk/bin/embulk
- echo
'export PATH="$HOME/.embulk/bin:$PATH"'
>> ~/.bashrc - source ~/.bashrc
特に考える必要はないと思います
ダウンロードして権限を変えて PATH に通してあげているだけです
Quick Start
インストールしたらサンプルデータで試します
- mkdir ~/work
- cd ~/work
- embulk example ./try1
- embulk guess ./try1/example.yml -o config.yml
- embulk preview config.yml
- embulk run config.yml
example
でサンプルデータを作成して
guess
で設定ファイルを自動生成して
preview
で読み込んだデータがちゃんとパースされるかテストして
run
で実際に実行させます
だいぶ省略したサブコマンドの説明なので詳細は公式等みてください
とりあえずこれを実行するとexample
で生成された CSV データを読み込んで標準出力にその内容を出力してくれます
2015-09-24 14:00:29.248 +0900: Embulk v0.7.4
2015-09-24 14:00:31.432 +0900 [INFO] (transaction): Listing local files at directory ‘/root/work/embulk/try1/csv’ filtering filename by prefix ‘sample_’
2015-09-24 14:00:31.438 +0900 [INFO] (transaction): Loading files [/root/work/embulk/try1/csv/sample_01.csv.gz]
2015-09-24 14:00:31.524 +0900 [INFO] (transaction): {done: 0 / 1, running: 0}
1,32864,2015-01-27 19:23:49,20150127,embulk
2,14824,2015-01-27 19:01:23,20150127,embulk jruby
3,27559,2015-01-28 02:20:02,20150128,Embulk “csv” parser plugin
4,11270,2015-01-29 11:54:36,20150129,NULL
2015-09-24 14:00:31.815 +0900 [INFO] (transaction): {done: 1 / 1, running: 0}
2015-09-24 14:00:31.822 +0900 [INFO] (main): Committed.
2015-09-24 14:00:31.823 +0900 [INFO] (main): Next config diff: {“in”:{“last_path”:”/root/work/embulk/try1/csv/sample_01.csv.gz”},”out”:{}}
プラグインを試す
プラグインの使い方まで試します
今回使用するプラグインは embulk-output-command です
- embulk gem install embulk-output-command
- vim config_try_plugin.yml
in:
type: file
path_prefix: /root/work/embulk/try1/csv/sample_
decoders:
- {type: gzip}
parser:
charset: UTF-8
newline: CRLF
type: csv
delimiter: ','
quote: '"'
trim_if_not_quoted: false
skip_header_lines: 1
allow_extra_columns: false
allow_optional_columns: false
columns:
- {name: id, type: long}
- {name: account, type: long}
- {name: time, type: timestamp, format: '%Y-%m-%d %H:%M:%S'}
- {name: purchase, type: timestamp, format: '%Y%m%d'}
- {name: comment, type: string}
out:
type: command
command: "cat -> task.$INDEX.$SEQID.csv.gz"
encoders:
- {type: gzip}
formatter:
type: csv
config_try_plugin.yml
はデフォルトで生成されるconfig.yml
を元にするといいです
変わっているのはout:
の部分でここでインストールしたプラグインを使っています
これをインストールするとtype: command
が使えるようになりcommand:
に指定したコマンドを実行することができます
サンプルの場合in:
で読み込んだ CSV ファイルを名前のフォーマットを変更して再度 CSV に出力しています
$INDEX
と $SEQID
について
command:
内で変数を使っています
簡単に説明すると $INDEX は読み込んだファイルの数だけインクリメントしてくれる変数です
例えばサンプルで使用した try1/csv/sample_01.csv.gz
ともう一つ try1/csv/sample_02.csv.gz
というファイルを作成すると $INDEX をインクリメントしてくれます
$SEQID は formatter の数に依存します
formatter が複数あった場合、0 から順番にインクリメントしてくれます
最後に
公式の Quick Start をやっただけなので特に躓くこともなく簡単に使うことができました
実行してみるとわかりますが、embulk は並列実行なので、複数のファイルを in:
で読み込んだ場合は 1 つ目のファイルが終わってから 2 つ目のファイルを実行するわけではなく、一気に 2 つのファイルの処理がはじまります
本当に試しただけなので、まだ現場レベルでの有効な使い道は思い浮かびませんが機会があれば使いたいかなと
0 件のコメント:
コメントを投稿