Embulkとは
様々なDB,File,Service間の大量データ転送をしてくれるイカしたやつです。
詳しい説明は、メインコミッターのスライドに譲ります。
https://www.slideshare.net/frsyuki/embuk-making-data-integration-works-relaxed
準備
Dockerで環境を立ち上げます。サンプルでmysqlからpostgresへのデータ転送を行うため、mysqlとpostgresのコンテナも立ち上げます。
mysqlにはサンプルのデータが入った状態で立ち上がります。
git clone https://github.com/shinji19/docker-embulk.git
cd docker-embulk
docker-compose build
docker-compose up -d # サンプルで利用するmysqlとpostgresを立ち上げる
docker exec -it docker-embulk_embulk_1 bash # 以降の作業はembulkコンテナ内
embulk gem install embulk-input-mysql embulk-output-postgresql # サンプルで利用するプラグインを導入
サンプル
mysqlからpostgresqlへデータを転送してみましょう。
sample.yamlを作成します。
in: type: mysql # プラグインの名前 host: mysql port: 3306 user: mysql password: mysql database: sample table: data out: type: postgresql # プラグインの名前 host: postgres port: 5432 user: postgres password: postgres database: sample table: data mode: insert
作成したsample.yamlを実行します。
embulk preview sample.yaml # 入力から得られた結果が出力されます。
embulk run sample.yaml # 実際にデータを転送します。
postgresコンテナ内を覗くとデータが入っていることが確認できると思います。
簡単ですね。
応用
SQLを記述できるプラグイン(embulk-input-mysqlのような)の場合、そこに集計SQLを書けば、Embulkを集計システムの基盤として使えます。
sample2.yamlを作成します。
in: type: mysql # プラグインの名前 host: mysql port: 3306 user: mysql password: mysql database: sample query: | SELECT action, count(1) AS cnt FROM data GROUP BY action out: type: postgresql # プラグインの名前 host: postgres port: 5432 user: postgres database: sample table: summary mode: insert
作成したsample.yamlを実行します。
embulk preview sample2.yaml # 入力から得られた結果が出力されます。
embulk run sample2.yaml # 実際にデータを転送します。
まとめ
色々な集計を業務ですることがあると思いますが、あとで見返すとよくわからないこともあると思います。
そんな時、Embulkを使っていれば、集計の肝がyamlに集約されるため、わかりやすいです。ぜひ、使っていきましょう!
ジョブスケジューラとEmbulkを組み合わせることで集計システムの基盤として使えます。
enishのデータ分析チームでは、試験的にJenkinsとEmbulkを組み合わせています。集計の登録がGUIで完結するため、エンジニアでなくとも定期集計を仕掛けることができます。
Embulk(プラグイン)にはここで紹介していない便利機能が色々ありますので、気になる方はお試しください。
・設定ファイルに環境変数をはめ込む
・並列実行して実行時間を短縮
・べき等なデータ転送
などなど