🌟
EmbulkでBad character (ASCII 0) encountered.
状況
MySQL(RDS)からBigQyeryへデータを定期的に移行していた。
EmbulkはECSで実行。
CloudWatchで以下のエラーを観測。
Error: org.jruby.exceptions.RaiseException: (Error) failed during waiting a Load job, get_job(hogehoge-1111, embulk_load_job_947d2dfd-7507-4337-bc5f-0275847f791d), errors:[{:reason=>"invalid", :message=>"Error while reading data, error message: Error detected while parsing row starting at position: 328164. Error: Bad character (ASCII 0) encountered."}, {:reason=>"invalid", :message=>"Error while reading data, error message: CSV processing encountered too many errors, giving up. Rows: 1916; errors: 1; max bad: 0; error percent: 0"}]
使用していたプラグインは以下。
embulk-input-mysql
embulk-output-bigquery
embulk-filter-ruby_proc
jruby-openssl
原因
該当レコードに\u0000
が含まれていた。
おそらくこのNULL文字が原因かと。
その他のユニコード文字(\u0001\u007F
)が含まれていた場合はエラーが発生しなかったのでそう判断。
対処
\u0000
が含まれていたら\u0000
を削除するように。
embulk-filter-ruby_proc
(レコードの値をRubyで変換できるプラグイン)を使っていたので、embulk-filter-ruby_proc
で対処することにしました。
filters:
- type: ruby_proc
columns:
- name: body
proc: |
->(body) do
body.gsub(/\u0000/, '')
end
Discussion