多くの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で操作したら、楽でしたので
ここに挙げさせていただきました。