LoginSignup
14
10

More than 5 years have passed since last update.

Embulkの設定情報(liquid版)

Last updated at Posted at 2018-02-26

概要

Embulkで処理を作成する際、DB接続情報などの環境によって変更したい設定をどう定義すればいいか調べた内容をメモしておきます。

Embulkのテンプレート機能を利用する

Embulkに搭載されているテンプレートエンジンLiquidの機能を使って共通化してみます。
※ Embulk 0.7.7以上

ファイル構成

ファイル一覧
│ # 設定情報
├ _env.yml.liquid
│
| # bundle plugin.
├ bundle
│ ├ .bundle
│ ├ .ruby-version
│ ├ Gemfile
│ ├ Gemfile.lock
│ ├ embulk
│ └ jruby
│
│ # 処理内容
└ users.yml.liquid

設定情報

設定ファイルを作ってみる。

_env.yml.liquid
{% assign my_host = '127.0.0.1' %}
{% assign my_database = 'fuga_db' %}
{% assign my_user = 'hoge' %}
{% assign my_password = 'test' %}

処理に組み込んでみる

実際に、上記設定を組み込んで実行してみる。

users.yml.liquid
{% include 'env' %}
in:
  type: mysql
  host: {{ my_host }}
  user: {{ my_user }}
  password: {{my_password}}
  database: {{my_database}}
  query: |
    SELECT
      id, name, created_at
    FROM
      users
    WHERE
      deleted_at IS NULL
    LIMIT
      5
    ;
out:
  type: file
  path_prefix: "./users_"
  file_ext: csv
  formatter:
    type: csv
    delimiter: ","
    newline: CRLF
    newline_in_field: LF
    charset: UTF-8
    quote_policy: MINIMAL
    quote: '"'
    escape: "\\"
    null_string: "\\N"
    default_timezone: 'Asia/Tokyo'

プレビュー

ターミナル
$ embulk preview -b bundle users.yml.liquid

実行

ターミナル
$ embulk run -b bundle users.yml.liquid

まとめ

テンプレートエンジンLiquidの機能を使った場合、includeはサブディレクトリには、
対応しているが、「../」のように上の階層を指定するとエラーになることから、階層分けには不向きのようです。

例)

ファイル一覧
│ # 設定情報
├ _env.yml.liquid
├ try1
│  └ config.yml.liquid <- include '../env' (×)
├ try2
│  └ config.yml.liquid <- include '../env' (×)
├ try3
│  └ config.yml.liquid <- include '../env' (×)
     ・
     ・
     ・
└ users.yml.liquid  <- include 'env' (○)

下記のように1つの階層で構成するには向いているようです。

例)

ファイル一覧
│ # 設定情報
├ _env.yml.liquid
├ try1.yml.liquid <- include 'env' (○)
├ try2.yml.liquid <- include 'env' (○)
├ try3.yml.liquid <- include 'env' (○)
     ・
     ・
     ・
└ tryN.yml.liquid <- include 'env' (○)

参考サイト

14
10
1

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
14
10