2015年9月13日日曜日

データ加工ツールembulkを試してみる

■embulkとは

ざっくり言うと
データを取り込んでデータ加工し、そのデータ出力を出力するツール
それぞれ取り込み、データ加工、データ出力がプラグインで拡張できるようになっている
例えばCSVファイルを読み込んで、読み込んだデータの日付フォーマットを変換しDBに入れるというようなことができるツール




それぞれ現在利用できるプラグインは以下から確認できる
http://www.embulk.org/plugins/

またプラグインを自分で作成することも可能で
言語はjava または ruby

■環境等

OS : windows7
embulk : 0.7.4

■使い方

・ダウンロード
http://dl.embulk.org/embulk-latest.jar

ダウンロードした jar を embulk.bat にリネーム
embulk.batにパスを通す

■exampleを試す

クイックスタート(https://github.com/embulk/embulk#quick-start)にあるexampleを試してみる

exampleコマンド

exampleコマンドでお試し用のファイルができる


X:\embulk>embulk example .\try1
2015-XX-XX XX:XX:XX.000 +0900: Embulk v0.7.4
Creating .\try1 directory...
  Creating .\try1/
  Creating .\try1/csv/
  Creating .\try1/csv/sample_01.csv.gz
  Creating .\try1/example.yml

Run following subcommands to try embulk:

   1. embulk guess .\try1/example.yml -o config.yml
   2. embulk preview config.yml
   3. embulk run config.yml


Run following ...に次に何をすればいいのかが書いてあるので試してみる

guessコマンド

guessコマンドはデータを読み込んで推測してくれる機能
exampleコマンドで出来たtry1\example.ymlは以下のようになっている

in:
  type: file
  path_prefix: "X:/embulk/try1/csv/sample_"
out:
  type: stdout

inは入力で頭に X:/embulk/try1/csv/sample_ が付くファイルを読み込む
この場合の対象はexampleコマンドで出来た try1\csv\sample_01.csv.gz になる
outは出力で標準出力
この try1\csv\sample_01.csv.gz を読み込んで推測してくれるらしい
このようにymlファイルにin out や フィルターなど様々な条件を指定してデータを加工する

guessコマンドは以下で -o に推測結果を書き込むymlを指定する
embulk guess   .\try1\example.yml -o config.yml


X:\embulk>embulk guess   .\try1\example.yml -o config.yml
2015-XX-XX 00:00:00.000 +0900: Embulk v0.7.4
2015-XX-XX 00:00:00.000 +0900 [INFO] (guess): Listing local files at directory 'X:\embulk\try1\csv' filtering filename by prefix 'sample_'
2015-XX-XX 00:00:00.000 +0900 [INFO] (guess): Loading files [X:\embulk\try1\csv\sample_01.csv.gz]
2015-XX-XX 00:00:00.000 +0900 [INFO] (guess): Loaded plugin embulk/guess/gzip from a load path
2015-XX-XX 00:00:00.000 +0900 [INFO] (guess): Loaded plugin embulk/guess/csv from a load path
in:
  type: file
  path_prefix: X:/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: stdout}
Created 'config.yml' file.


previewコマンド

previewコマンドは実際にoutへの書き込みを行わずに試してみるためのコマンド
使い方は以下
embulk preview config.yml

X:\embulk>embulk preview config.yml
2015-09-13 11:54:45.499 +0900: Embulk v0.7.4
2015-09-13 11:54:46.724 +0900 [INFO] (preview): Listing local files at directory 'X:\embulk\\try1\csv' filtering filename by prefix 'sample_'
2015-09-13 11:54:46.724 +0900 [INFO] (preview): Loading files [X:\embulk\\try1\csv\sample_01.csv.gz]
+---------+--------------+-------------------------+-------------------------+----------------------------+
| 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 |
+---------+--------------+-------------------------+-------------------------+----------------------------+

runコマンド

実際のデータ変換を行うコマンド
出力先が標準出力になっているのでコンソールに表示される
コマンドは以下
embulk run config.yml
色が変わっている部分が出力結果
このように加工される

X:\embulk\>embulk run config.yml
2015-XX-XX 00:00:00.000 +0900: Embulk v0.7.4
2015-XX-XX 00:00:00.000 +0900 [INFO] (transaction): Listing local files at directory 'X:\embulk\\try1\csv' filtering filename by prefix 'sample_'
2015-XX-XX 00:00:00.000 +0900 [INFO] (transaction): Loading files [X:\embulk\\try1\csv\sample_01.csv.gz]
2015-XX-XX 00:00:00.000 +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-XX-XX 00:00:00.000 +0900 [INFO] (transaction): {done:  1 / 1, running: 0}
2015-XX-XX 00:00:00.000 +0900 [INFO] (main): Committed.
2015-XX-XX 00:00:00.000 +0900 [INFO] (main): Next config diff: {"in":{"last_path":"E:\\share\\work\\data\\embulk\\try1\\csv\\sample_01.csv.gz"},"out":{}}


次はプラグインの作成について書くつもり




0 件のコメント:

コメントを投稿