日々地道に成長

思いついたことを書いていきます。

【Digdag Embulk】Digdag+Embulkで変数を使用してコードを分かりやすく変える【基礎】

お疲れ様です。コーヒーです。

 

今回はDigdag+Embulkをで変数を使用して、分かりやすく、使いまわしやすく、修正しやすいプログラムを目指していこうと思います。

前回作成した処理を変数を使用したものに変更していこうと思いますので、よければそちらも確認してみてください。

stady-diary.hatenablog.com

Digdagの変数について

Digdagで変数を定義するときには、主に「_export」で行います。

以下のように設定することができます。

_export:
  bq_json_keyfile: xxx.json
  bq_project: project_name
  path_prefix: /data/save/test.
  s3_bucket_name: s3_bucket_name
  s3_dir: s3://${s3_bucket_name}

よく使うであろうものを今回は変数として設定しています。

さらにこの情報を、config.digファイルという設定だけをまとめておくファイルを作って読み込むようにすればより汎用性が上がります。

 

_export:
  !include : config/config.dig

上記のような感じにすっきりまとめられます。

他のdigファイルから読み込むときは[!include]を使用します。

 

そして前回作成したdigファイルに反映すると以下になります。

+main:
#BQからEmbulkでcsvファイルを出力
  +BQ_output_csv:
    sh>: embulk run example.yml.liquid

#出力したファイルをS3に転送
  +s3_transfer:
    sh>: /usr/bin/aws s3 cp /data/save/test.csv ${s3_dir}/xxx/

digファイル上で変数を使用するには${}で使用できます。

digdagからembulkへの変数の受け渡し

digdagで先ほど定義した変数をembulkで使用する方法について説明します。

まず気を付けなければならないのが、embulkの拡張子を[.yml.liquid]に変更しておいてください。こちらの設定をしていないとうまく動作しません。

 

実際にembulkファイルに変数を受け渡したコードが以下になります。

in:
  type: bigquery
  keyfile: {{env.bq_json_keyfile}}
  project: {{env.bq_project}}
  location: asia-northeast1
  sql: |
    select
        *
    from
        xxx.xxx
out:
  type: file
  file_ext: csv
  path_prefix: {{env.path_prefix}}
  sequence_format: ''
  formatter:
    type: csv
    charset: Shift_JIS
    header_line : true
    newline: CRLF
    quote_policy: NONE

digdagの[_export]で設定した変数を、embulk上で{{env.xxx}}で受け取ります。

 

これで変数を使用しての、コード作成方法は以上になります。

最後まで読んでいただきありがとうございます!!