embulk-input-mysql の incremental_columns の設定でハマった

embulk-input-mysql

ご存知、Embulk 用の MySQL の input プラグインです。

incremental と incremental_columns

設定項目の一つにincrementalという項目があり、ここをtrueにするとこの項目で指定されたカラムを基準として最終取得したレコードの情報を保存してくれます。

次回以降に Embulk するときは最初からまた総なめするのではなく、続きから取得してくれるという大変便利なプラグイン(設定内容)です。incrementalに用いるカラムは自前で設定することができ、その際はincremental_columnsでカラム名を指定します。

incremental_columns の設定記述方法

コレではだめです……。

incremental: true
incremental_column: column_name

ドキュメントのIncremental loadingの箇所を読むと分かるのですが、以下のような記述があります。

For example, if incremental_columns: [updated_at, id] option is set, query will be as following:

これはすなわち、カラム名を [] でくくってあげなければいけないということです。だからさっきの場合の正解は以下のとおりです。ちなみにカラム名はカンマ区切りで複数指定が可能です。

incremental: true
incremental_column: [column_name]

思いっきりはまり込んでしまいました……

Ubuntu 16.04 LTS の MySQL で STRICT_TRANS_TABLES を無効にする方法

STRICT_TRANS_TABLES

MySQL には設定項目にSTRICT_TRANS_TABLESという項目があります。これを無効にする方法です。

結論

/etc/mysql/mysql.conf.d/mysqld.cnfに以下のように書きます*1。必要に応じて内容は調整しましょう。

# STRICT_TRANS_TABLES を除外
sql_mode=ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

確認

mysqlのプロンプトから以下のようにして確認します。

mysql> SELECT @@GLOBAL.sql_mode\G

*1:要は STRICT_TRANS_TABLES を除外します

Powered by はてなブログ