LoginSignup
0
0

More than 1 year has passed since last update.

AirflowのBigQueryInsertJobOperatorのオプションについて

Posted at

先日「AirflowでGCS外部パーティションテーブルをBigQueryに取り込む方法」についての記事を書きましたが、BigQueryInsertJobOperatorにフォーマットのオプションを追加する際に、実際の挙動は公式ドキュメントの記述と若干違うので、追記しておきます。

なぜ気づいたのか

外部テーブルを取り組む際に、閉じるカッコが見つからないというエラーが出て、

Error detected while parsing row starting at position: 4204. Error: Missing close double quote (") character.

調査してみた結果、改行記号が含まれているのが原因のようでした。stack overflowによるとallowQuotedNewlinesといったCSVのオプションを追加すると解決できるらしいです。

ただし、configurationにcsvOptionsを追加しても解決されず(同じエラーが出た)、困っていました。

configuration={
    "load": {
	"destinationTable": {
	    "projectId": PROJECT_ID,
	    "datasetId": DATASET_NAME,
	    "tableId": TABLE,
	},
	"sourceUris": ["gs://my-bucket/biostats/*.csv"],
	"autodetect": True,
	"sourceFormat": "CSV",
	"hivePartitioningOptions": {
	    "mode": "AUTO",
	    "sourceUriPrefix": "gs://my-bucket/biostats/",
	},
	"csvOptions": {
	    "allowQuotedNewlines": True
	 },
    }
},

解決法

CLI bq loadを利用す際にどうなっているかを確認したら、どうやらcsvOptionsを明示的に書く必要がなく--allow_quoted_newlinesだけ追加すとでうまくいきました。AirflowのBigQueryInsertJobOperatorで同じことをすると、問題なくloadできました。

configuration={
    "load": {
	"destinationTable": {
	    "projectId": PROJECT_ID,
	    "datasetId": DATASET_NAME,
	    "tableId": TABLE,
	},
	"sourceUris": ["gs://my-bucket/biostats/*.csv"],
	"autodetect": True,
	"sourceFormat": "CSV",
	"hivePartitioningOptions": {
	    "mode": "AUTO",
	    "sourceUriPrefix": "gs://my-bucket/biostats/",
	},
	# csvOptionsの記述は不要 
	"allowQuotedNewlines": True
    }
},
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0