tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【BigQuery】BigQueryへのDATA型のINSERT時に`Could not parse'20210101' as DATE for field partition_date`と怒られるエラー

はじめに

表題のとおりですが、bqコマンドなんかを使用してDATE型の値をINSERTしようとすると以下のようなエラーになりました。

この原因と対処法について。

どういうエラーか

まず、INSERTするSchemaとdataです。

schema

$ cat ./schema.json
[
  {
    "mode": "NULLABLE",
    "name": "employee_id",
    "type": "STRING"
  },
  {
    "mode": "NULLABLE",
    "name": "birthday",
    "type": "STRING"
  },
  {
    "mode": "NULLABLE",
    "name": "name",
    "type": "STRING"
  },
  {
    "mode": "NULLABLE",
    "name": "partition_date",
    "type": "DATE"
  }
]

data

$ cat ./source.csv
1001,20210101,hoge,20210101
1002,20210303,fuga,20210101
1003,20210505,piyo,20210101
1004,20210707,fufu,20210101

つぎにINSERTです。
以下のようにエラーで怒られます。

$ bq load \
>     --replace \
>     --source_format=CSV \
>     --schema=./schema.json \
>     [your project]:bq_command_dataset.bq_command_pt_table \
>     ./source.csv
Upload complete.
Waiting on bqjob_r187e4b6bf330eafd_000001781872232f_1 ... (0s) Current status: DONE
BigQuery error in load operation: Error processing job '[your project]:bqjob_r187e4b6bf330eafd_000001781872232f_1': Error while reading data, error message: Could not parse
'20210101' as DATE for field partition_date (position 3) starting at location 0  with message 'Unable to parse'
Failure details:
- Error while reading data, error message: CSV processing encountered
too many errors, giving up. Rows: 1; errors: 1; max bad: 0; error
percent: 0
- query: Could not parse '20210101' as DATE for field partition_date
(position 3) starting at location 0  with message 'Unable to parse'

対処法

公式サイトに記載がありますが、YYYY-MM-DD形式が必須らしいです。

CSV データまたは JSON データを読み込む場合、DATE 列の値に区切りとしてダッシュ(-)を使用し、YYYY-MM-DD(年-月-日)の形式にする必要があります。

ということで、YYYY-MM-DDに変えてやるとINSERTが成功します。

# YYYYMMDDに変更する
$ cat source.csv
1001,20210101,hoge,2021-01-01
1002,20210303,fuga,2021-01-01
1003,20210505,piyo,2021-01-01
1004,20210707,fufu,2021-01-01

# 成功する
$ bq load \
>     --replace \
>     --source_format=CSV \
>     --schema=./schema.json \
>     [your project]:bq_command_dataset.bq_command_pt_table \
>     ./source.csv

Upload complete.
Waiting on bqjob_rc9c3d4712ae526_00000178187453d6_1 ... (0s) Current status: DONE

おわりに

BigQuery,とくにbqコマンドはオプションやルールがたくさんあるので公式を良く読むのが吉ですね!