fluent-plugin-bigquery を v0.2.x から v0.3.x にアップデートしたところ, insert errors insert_errors="[#<Google::Apis::BigqueryV2::InsertAllTableDataResponse::InsertError
のようなエラーが出て, BigQuery に insert 出来なくなってしまったエラーについてのまとめです.
問題
fluent-plugin-bigquery を v0.3.x にアップデートしたところ, fluentd が次のようなエラーを発生するようになりました.
2016-11-12 17:19:45 +0000 [warn]: insert errors insert_errors="[#<Google::Apis::BigqueryV2::InsertAllTableDataResponse::InsertError:0x007f9ce03a9718 @errors=[#<Google::Apis::BigqueryV2::ErrorProto:0x007f9ce03a8908 @debug_info=\"generic::not_found: no such field.\", @location=\"log.time\", @message=\"no such field.\", @reason=\"invalid\">], @index=0>]"
@location=\"log.time\"
の部分がポイントです. fluentd で処理しているレコードに log.time
というフィールドが含まれているが, BigQuery のテーブルのスキーマには log.time
というフィールドが含まれない場合, このようなエラーが発生するようです.
fluent-plugin-bigquery v0.2.x の際は, BigQuery のテーブルに存在しないフィールドがあっても, そのフィールドは無視して BigQuery に insert 出来ていました.
対処
BigQuery のテーブルに存在しないフィールドを削除しておくことで, このエラーを回避できました. 例えば fluentd に標準で含まれている filter の record_transformer を用いると, 不要なフィールドを削除できます.
<filter foo.bar>
@type record_transformer
remove_keys log.time
</filter>
その他
fluent-plugin-bigquery は CHANGELOG が全く書かれていないため, これが仕様変更なのかバグなのかは分かりません. fluent-plugin-bigquery のバージョンを v0.3.x から v0.2.x に戻すと, 従来通りに動作するので, BigQuery 側の変更ではないようです.