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歩だと感じされる出来事でした。