【BigQuery】NULLデータをCSV取り込みする方法

20230726_BigQuery クラウドプラットフォーム

NULL値を持ったCSVデータをBigQueryに入れようとしたところ、ジョブが失敗しデータが入れられませんでした。NULLABLEなカラムにしているのにおかしい。

今回はNULLを含んだCSVデータをBigQueryに取り込む方法をご紹介します。

BigQueryにCSVデータを取り込もうとしたときの事前情報

カラム定義

テーブルのカラム定義はこちらです。

実際にNULLが入るのは「start_datetime」だけですが、どのカラムもNULLABLE(NULL許容)としました。NULLABLEであるため、フィールドにはNULLが入ることができるはずですがエラーが起こります。

CSVデータ

BigQueryに取り込もうとしたCSVデータはこちら。
トレーニングメニューに関するデータでした。

date,menu,start_datetime,end_datetime
2023-07-16,プッシュアップ,2023-07-16 10:00:00,2023-07-16 10:30:00
2023-07-16,たった1セットで大胸筋がパンパンになるやばいメニュー,2023-07-16 10:35:00,2023-07-16 10:45:00
2023-07-17,今日は筋トレお休みの日,NULL,NULL
2023-07-18,ベンチプレス,2023-07-18 08:10:00,2023-07-18 08:40:00
2023-07-19,ラットプルダウン,2023-07-19 07:40:00,2023-07-19 07:55:00
2023-07-19,インクラインダンベルロウ,2023-07-19 8:00:00,2023-07-19 08:20:00
2023-07-20,今日は筋トレお休みの日,NULL,NULL
2023-07-21,バックスクワット,2023-07-21 07:40:00,2023-07-21 08:10:00
2023-07-21,自重スクワット,2023-07-21 08:15:00,2023-07-21 08:25:00
2023-07-22,ベンチプレス,2023-07-22 17:50:00,2023-07-22 18:20:00
2023-07-22,ダンベルフライ,2023-07-22 18:25:00,2023-07-22 18:45:00

その他設定

その他の設定はこちらです。特に異常はなさそうです。

【失敗した原因】明示的にNULLと記述していたため

今回のエラー原因はCSVデータにありました。
エラー内容をよく読むとNULLがSTRING型として取り扱われているため型違いにより失敗しています。

テーブルを作成できませんでした: Error while reading data, error message: Could not parse ‘NULL’ as DATETIME for field start_datetime (position 2) starting at location 242 with message ‘Invalid datetime string “NULL”‘

NULLと書くとSTRING型の文字列として扱われるため、NULLにしたいときは何も記述しないのが正解です。CSVデータにあるNULLを削除して再度BigQueryに取り込んでみましょう。

date,menu,start_datetime,end_datetime
2023-07-16,プッシュアップ,2023-07-16 10:00:00,2023-07-16 10:30:00
2023-07-16,たった1セットで大胸筋がパンパンになるやばいメニュー,2023-07-16 10:35:00,2023-07-16 10:45:00
2023-07-17,今日は筋トレお休みの日,,
2023-07-18,ベンチプレス,2023-07-18 08:10:00,2023-07-18 08:40:00
2023-07-19,ラットプルダウン,2023-07-19 07:40:00,2023-07-19 07:55:00
2023-07-19,インクラインダンベルロウ,2023-07-19 8:00:00,2023-07-19 08:20:00
2023-07-20,今日は筋トレお休みの日,,
2023-07-21,バックスクワット,2023-07-21 07:40:00,2023-07-21 08:10:00
2023-07-21,自重スクワット,2023-07-21 08:15:00,2023-07-21 08:25:00
2023-07-22,ベンチプレス,2023-07-22 17:50:00,2023-07-22 18:20:00
2023-07-22,ダンベルフライ,2023-07-22 18:25:00,2023-07-22 18:45:00

NULLを削除して再取り込み

無事取り込みが成功しました。

何も記述しなかった値はちゃんとnullが表示されています。

まとめ

NULLを含んだCSVデータをBigQueryに取り込むときはNULLと明記してはいけません。
NULLと書きたくなる気持ちは分かりますが、CSVデータの場合は不要なんですね。

今回のヒントはエラー内容にありました。
エラー文を読むことは原因特定の第1歩だと感じされる出来事でした。