Embulk の MySQL Output プラグイン
これです。「Output」という名前が紛らわしいのですが*1、INSERT をする方のプラグインです。
対象としたデータ
出力元は MySQL です*2。対象のテーブルのカラム数は 10、レコード数は約 776 万件です。
途中でエラー
ある程度までは進んでいくのですが、途中でコケます。エラーメッセージは以下のとおりです。
org.embulk.exec.PartialExecutionException: java.lang.RuntimeException: java.sql.SQLException: The total number of locks exceeds the lock table size
まあ、メモリ不足ですね*3。
プラグインのオプション設定や MySQL のオプション設定をいじる
となると MySQL Output プラグインの設定をいじることだったり、MySQL の設定をいじることをやろうとしますが、まあたいてい少しの改善は見られても、だめだったりしますし、実際だめでした。
Embulk(やFluentdも)の用途を考えるとこういう利用方法はすべきではないでしょう。
どうするか
もちろん mysqldump なりを経由して初期のデータはインポートしてから Embulk で merge なりをしてあげれば全く問題ないです。Embulk だけで解決したい場合は、扱うデータを細切れにすればきっと大丈夫でしょう*4。
今回はやや実験的なことをしたという認識がありましたが、やはりソフトウェアは想定された方法や場面で使うべきということですね。