embulkでBigqueryにテキストデータ流し込めなかった話
ユーザーメッセージを分析するようにBigqueryに流し込んでたんですが、とある日Slackに失敗通知が飛んでいることに気づく
Error: org.jruby.exceptions.RaiseException: (Error) failed during waiting a Load job, get_job(to_aru_server, embulk_load_job_000f1d44 -0935-4cf7-84a9-e00aac16995e), errors:[{:reason=>"invalid", :message=>"Too many errors encountered."}, {:reason=>"invalid", :message=>"CSV table references column position 2, but line starting at position:147 contains only 2 columns.", :location=>"file-00000000"}] 2017-03-09 06:00:38 +0900 [ERROR] (0017@+fetch_table+fetch_yesterday^sub+for-table=messages) io.digdag.core.agent.OperatorManager: Task failed with unexpected error: Command failed with code 1 java.lang.RuntimeException: Command failed with code 1
なんぞこれ。設定周りに不備があると思って色々調べたんですが、原因が特定できず。 弊社のBigquery師範から、流し込んでるデータに問題あるんじゃないかの指摘を受け、調べてみたら改行を含んだユーザーコメントがいるわけでして(ヽ´ω`)
改行を含んだカラムを扱うときは、--allow-quoted-newlines
が必要とのことなので、liquidにオプション追加すると解消できました
in: {% include 'common_in' %} query: | SELECT id, text, created_at FROM messages WHERE id > 1 AND created_at >= "{{ env.TARGET_DATE }}" AND created_at < DATE_ADD("{{ env.TARGET_DATE }}", INTERVAL 1 DAY) out: {% include 'common_out' %} table: messages{{ env.TARGET_DATE | date: "%Y%m%d" }} schema_file: embulk/messages.json path_prefix: /tmp/messages allow_quoted_newlines: 1 # <--------これ formatter: type: csv charset: UTF-8 delimiter: ',' header_line: false column_options: created_at: { format: "%Y-%m-%d %H:%M:%S" }