概要
業務でEmbulkの設定変更を行う機会があったので、仮想環境で環境構築を行い、
プラグインなどの挙動を確認したのでメモ
※本記事はEmbulkの最低限の環境構築手順と動作確認のみしか記載しておりません
環境
OS | バージョン |
---|---|
CentOS | 6.7 |
手順
1. vagrant環境構築
- vagrant初期化
$ vagrnat init centos6.7
$ vagrant up
- vagrantにsshログイン
$ vagrant ssh
2. Javaインストール
- javaインストール
$ sudo yum install -y java-1.8.0-openjdk
- 確認
$ java -version
openjdk version "1.8.0_144"
OpenJDK Runtime Environment (build 1.8.0_144-b01)
OpenJDK 64-Bit Server VM (build 25.144-b01, mixed mode)
3. Embulkインストール
- Embulkインストール & パスを通す
$ curl --create-dirs -o ~/.embulk/bin/embulk -L "https://dl.embulk.org/embulk-latest.jar"
$ chmod +x ~/.embulk/bin/embulk
$ echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc
$ source ~/.bashrc
- 確認
$ embulk --version
embulk 0.8.35
4. mkbundleでgemを管理できるようにする
-
embulk mkbundle
すると、Gemfile
やプラグインの雛形が作られる
$ embulk mkbundle {ディレクトリ名}
下記のようなディレクトリ及び、ファイルが作成される。
{ディレクトリ名}/
├── Gemfile
└── embulk
├── filter
│ └── example.rb
├── input
│ └── example.rb
└── output
└── example.rb
※追加したい外部プラグインはGemfileに追記する
例: embulk-filter-evalの追加
Gemfile
source 'https://rubygems.org/'
gem 'embulk', '~> 0.8.0'
+ gem 'embulk-filter-eval'
Gemfileの書き方はこちらを参考にすると良いです
-
Gemfile
を更新した場合には、ディレクトリに移って、embulk bundle
する。
$ cd bundle_dir
$ embulk bundle
5. サンプルファイル作成
-
embulk example {任意のディレクトリ名}
でサンプルプロジェクト?を作成する- サンプルのCSVや設定が作成される
$ embulk example {任意のディレクトリ名}
- ディレクトリ構成
{任意のディレクトリ名}./
├── csv
│ └── sample_01.csv.gz
└── seed.yml
6. 設定ファイルの雛形を作成
-
embulkの設定を1から作成するのもいいが、元となるCSVがあれば、
embulk guess
コマンドで大体の設定を行ったファイルを作成してくれる -
例えば今回だと
csv/sample_01.csv.gz
を元にconfig.yml
を作成するとすると下記のようなコマンドとなる。
$ embulk guess ./dev_dir/seed.yml -o config.yml
- 作成された
config.yml
config.yml
in:
type: file
path_prefix: /home/vagrant/./dev_dir/csv/sample_
decoders:
- {type: gzip}
parser:
charset: UTF-8
newline: LF
type: csv
delimiter: ','
quote: '"'
escape: '"'
null_string: 'NULL'
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}
- デファルトの設定では、path_prefixで指定したcsvファイルの中身を標準出力する設定になっている。
7. 実行する
$ embulk run config.yml
2017-10-18 09:25:22.512 +0100: Embulk v0.8.35
2017-10-18 09:25:28.922 +0100 [INFO] (0001:transaction): Listing local files at directory '/home/vagrant/dev_dir/csv' filtering filename by prefix 'sample_'
2017-10-18 09:25:28.926 +0100 [INFO] (0001:transaction): "follow_symlinks" is set false. Note that symbolic links to directories are skipped.
2017-10-18 09:25:28.932 +0100 [INFO] (0001:transaction): Loading files [/home/vagrant/dev_dir/csv/sample_01.csv.gz]
2017-10-18 09:25:29.003 +0100 [INFO] (0001:transaction): Using local thread executor with max_threads=4 / output tasks 2 = input tasks 1 * 2
2017-10-18 09:25:29.020 +0100 [INFO] (0001: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,
2017-10-18 09:25:29.284 +0100 [INFO] (0001:transaction): {done: 1 / 1, running: 0}
2017-10-18 09:25:29.290 +0100 [INFO] (main): Committed.
2017-10-18 09:25:29.290 +0100 [INFO] (main): Next config diff: {"in":{"last_path":"/home/vagrant/dev_dir/csv/sample_01.csv.gz"},"out":{}}
- わかりにくいが、抜粋すると下記のようにcsvファイルの中身が出力されている
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,
- sample_01.csv.gzの中身を確認して比較してみる
$ zcat dev_dir/csv/sample_01.csv.gz
id,account,time,purchase,comment
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
ヘッダーを除いて、csvファイルの中身が出力されていることがわかる