Embulk を使った。 バルクデータ転送用だけあって目的通りに使うと便利そう。 プラグインが多いのとプラグインを一般な人には書きやすそうなのが良い。 でもJava, Ruby 経験が浅いので慣れないけど作ることは出来た。

Embulk is a open-source bulk data loader that helps data transfer between various databases, storages, file formats, and cloud services.

ref. Embulk公式Doc

Embulkイメージ

使ってみた

インストール資料に従って導入した。

使ってみる流れ

だいたい下のステップを繰り返して設定ファイルを準備していった。

  1. 設定ファイル編集
    vim ./config.yml
  2. プレビュー
    embulk preview [-G] ./config.yml
  3. 実施
    embulk run ./config.yml

使い方は公式をたどれば苦労しない。 プラグインの利用は公式Docの他にQiitaのプラグインまとめでだいたい知れる。 Plugin化されている箇所(input, parser, decoder, formatter, encoder, filter, output, executor)が多い。 実際Pluginの提供はとても多い

parser-grokというプラグインが便利だった。 またoutput-elasticsearch利用するElasticsearchに合わせてver.を選ぶ必要がある。 これにははまっていた。 RESTじゃなくてTCP上でJavaAPIを使って投入しているっぽい。 環境によってはjruby のメモリ制限に引っかかる場合があるらしく-J-Xmx1000mのようにオプション指定して実行することで回避する。

アーキテクチャの勉強

下のまとめにコードリーディングした人の記事のリンクがある。

プラグイン開発

grok の柔軟さのお陰で結局は不要になったのだけど自分でもpluginを開発してみたがそんなに難しくなかった。 公式のカスタマイズを見れば大枠がわかる。 公式はJava だけが記載されててruby で開発したい時はJava からどう呼ばれるか?を読むなどが必要になる。 コスト下の記事を参考に真似るだけでもとりあえずいける。実際、簡単に作れた。

ただしembulk newとembulk mkbundleの違いとか色々とわかっていない。 “embulk のプラグイン開発時にお試し実行するには“って記事に記載されている最適化オプションをオフにするフラグは試行錯誤が確かに早くなるので大事だと思った。

重要資料と利用の助け

古橋さんのjava,jrubyの接続周りに関する記述があるコメント。コメント先の記事も面白かった。