LoginSignup
13
12

More than 5 years have passed since last update.

Embulk 0.8.3で導入された-cオプションはLiquidを使った設定ファイルとの連携に便利

Last updated at Posted at 2016-02-09

1. はじめに

Embulk 0.8.3から、run時に-c(--config-diff)オプションが使えるようになりました。
(0.8.2から入っていいましたが不具合がありました。)
これによって、liquidを使った設定ファイルとの連携ができるようになりました。

-cオプションは-oオプションと似ていますが、指定したパスに差分情報だけを保存する点が-oオプションと異なります。
-cオプションの導入に伴って、-oオプションは非推奨になりました。今後は-cを利用してください。

2. 利用例

2.1 設定ファイル

次のようなliquidを使った設定ファイルがあります。

.
|-- config.yml.liquid
`-- hoge
    `-- csv
        `-- sample_01.csv.gz

設定ファイルには、{{ env.DATA_PATH }}といった環境変数を読み込むパラメータが設定されています。

config.yml.liquid
in:
  type: file
  path_prefix: {{ env.DATA_PATH }} # <-- liquid
  decoders:
  - {type: gzip}
  parser:
    charset: UTF-8
    newline: CRLF
    type: csv
    delimiter: ','
    quote: '"'
    escape: '"'
    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}

2.2 runコマンド実行(1回目)

runコマンドを実行します。その際、-cオプションをつけて最後に読み込んだファイルの情報をdiff.ymlに記録させます。

embulk run config.yml.liquid -c diff.yml
2016-02-09 19:14:09.418 +0900: Embulk v0.8.3
2016-02-09 19:14:13.339 +0900 [INFO] (0001:transaction): Listing local files at directory 'hoge/csv' filtering filename by prefix ''
2016-02-09 19:14:13.351 +0900 [INFO] (0001:transaction): Loading files [hoge/csv/sample_01.csv.gz]
2016-02-09 19:14:13.459 +0900 [INFO] (0001:transaction): Using local thread executor with max_threads=8 / output tasks 4 = input tasks 1 * 4
2016-02-09 19:14:13.479 +0900 [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,NULL
2016-02-09 19:14:13.683 +0900 [INFO] (0001:transaction): {done:  1 / 1, running: 0}
2016-02-09 19:14:13.701 +0900 [INFO] (main): Committed.
2016-02-09 19:14:13.701 +0900 [INFO] (main): Next config diff: {"in":{"last_path":"hoge/csv/sample_01.csv.gz"},"out":{}}

保存された中身を見ると、diff.ymlには差分情報のみが記録されています。

in: {last_path: hoge/csv/sample_01.csv.gz}
out: {}

2.3 runコマンド実行(2回目)

同じコマンドを再度実行します。2回目の実行では、diff.ymlファイル内に記載されたlast_pathの値が利用されるため、
sample_01.csv.gzは読み込まれてないことが確認できます。

embulk run config.yml.liquid -c diff.yml
2016-02-09 19:14:56.046 +0900: Embulk v0.8.3
2016-02-09 19:14:59.228 +0900 [INFO] (0001:transaction): Listing local files at directory 'hoge/csv' filtering filename by prefix ''
2016-02-09 19:14:59.237 +0900 [INFO] (0001:transaction): Loading files []
2016-02-09 19:14:59.360 +0900 [INFO] (0001:transaction): Using local thread executor with max_threads=8 / tasks=0
2016-02-09 19:14:59.378 +0900 [INFO] (main): Committed.
2016-02-09 19:14:59.378 +0900 [INFO] (main): Next config diff: {"in":{"last_path":"hoge/csv/sample_01.csv.gz"},"out":{}}

3. 参考(-oオプションの挙動)

-oオプションを使った場合は次のように設定ファイル全体が保存されており、さらに環境変数は展開された値となってしまっていました。
そのため、次回この設定ファイルをliquid形式のファイルとして利用することはできませんでした。

つまりembulk run config.yml.liquid -o config.yml.liquidのような使い方ができなかったということです。

in:
  type: file
  path_prefix: hoge/csv/ # <-- 展開されてしまった環境変数
  decoders:
  - {type: gzip}
  parser:
    charset: UTF-8
    newline: CRLF
    type: csv
    delimiter: ','
    quote: '"'
    escape: '"'
    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}
  last_path: hoge/csv/sample_01.csv.gz
out: {type: stdout}
13
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12