fluent-plugin-bigquery v0.3.x で遭遇したエラーについて

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 側の変更ではないようです.