4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

jupyter notebookAdvent Calendar 2016

Day 23

Jupyterでembulk configを作成して実行

Last updated at Posted at 2016-12-22

多くのembulkの設定ファイル(以後embulk config)を動的に生成して、
かつそれを実行していきたいというケースがたまにあると思います。

embulkについては下記のページを参照いただければさいわいです。
http://qiita.com/hiroysato/items/397f36c4838a0a93e352
http://qiita.com/hiroysato/items/da45e52fb79c39547f69

Jupyterでembulk configファイルの生成と実行ができると
試行錯誤しながら進められて便利ですし、
embulk configの作成効率もあがると思います。

embulk config作成

    f=open('[file name]','w')
    setting = '''in:\n\
  type: gcs\n\
  bucket: xxxx\n\
  path_prefix: aaa/bbb/ccc_\n\
  auth_method: private_key\n\
  service_account_email: {{ env.SERVICE_ACCOUNT_EMAIL }}\n\
  p12_keyfile: ../key/{{ env.P12_FILENAME }}\n\
  application_name: zzz\n\
  tasks: 1\n\
  parser:\n\
    charset: UTF-8\n\
    newline: LF\n\
    header_line: true\n\
    type: csv \n\
    delimiter: \',\' \n\
    quote: \'\"\' \n\
    columns: \n\
    - {name: name, type: string}\n\
    - {name: title, type: string}\n\
    - {name: words, type: string}\n\
\n
out: \n\
  type: file \n\
  path_prefix: tmp \n\
  file_ext: txt \n\
  formatter: \n\
    type: csv \n\
    charset: UTF-8 \n\
    delimiter: \'\\\' \n\
    header_line: false \n\
    newline: LF'''

    f.write(setting)
    f.close()

特に変わったところがなくてすみませんが、
ファイルにembulk configの内容を書き込むだけです。
改行は「\n\」をくっつけていくと出力されたembulk configが見やすくなると思います。

embulk実行

  os.system('embulk run [file name]')

パスに気をつけながら、実行します。

利用ケース

移行したいテーブルが多い場合やデータの種類ごとにファイルを出し分けたい場合などに、
使っていくと便利です。
for文などを使って動的に多くのembulk configを作っていけるようになってくると
手動で1つ1つembulk configを作っていくのが面倒になってくるぐらいです。

1〜5のカテゴリの掛け合わせに応じて、ファイルを生成して実行

for a in [1, 2, 3, 4, 5]:
  for b in [1, 2, 3, 4, 5]:
    filename = a + '-' + b '_xxx.yml.liquid'
    f.open(filename,'w')
    setting = '''in:\n\
      [embulk setting]
    '''
    f.write(setting)
    f.close()
    os.system('embulk run ' + filename)

最後に

embulkのin,out,filterなどを別途文字列で持っておき、
それを組み合わせる形でembulk configを生成していくともっと便利になっていきます。

Jupyterのファイルは
runipy
を使ってバッチ実行もできますので、
試行錯誤の末に完成した処理を定期実行させるのも容易でした。

今回記載した内容はJupyterでなくてもできるばかりだと思いますが、
直近Jupyterからembulk configを生成と実行し、
関連する他の処理もJupyterで操作したら、楽でしたので
ここに挙げさせていただきました。

4
3
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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?