今回は、BigQueryのテーブル作成時、csvをインポートしたときに発生するエラーについて説明します。
BigQueryでテーブルを作成する方法はいくつかあるのですが、多くの方はテーブルの元データになるcsvをインポートする方法を選択すると思います。
そしてスキーマを定義してcsvインポートを実行した際、様々な要因によってエラーが発生し、正常にテーブルが作成できない場合があります。
この記事では、BigQueryのテーブル作成時、csvをインポートしたときに発生するエラーの原因について説明します。
ここでは、当サイトの実経験に基づいてBigQueryで発生するcsvインポート時のエラーと、その原因について説明します。
紹介するのは、「データ型(タイプ)不一致によるエラー」、「カラム(フィールド)数不一致によるエラー」、「ヘッダー行が原因のエラー」、[NULLが原因のエラー]です。
csvインポート時に発生するエラーのうち、「データ型(タイプ)不一致」のエラーは、発生頻度も高いと思われます。
BigQueryで定義したスキーマとアップロードしたcsvのデータ型が一致しないことが原因のエラーです。
これは、アップロードするcsvに日付(DATE型)のカラムがあるときで、csvとBgQueryの日付型の定義が異なる場合に発生するエラーです。
テーブルを作成できませんでした: Error while reading data, error message: Could not parse ‘1997/10/16’ as DATE for field birthday (position 2) starting at location 74 with message ‘Unable to parse’
BigQueryの日付(DATE型)は、[yyyy-MM-dd]の形式です。csvを[yyyy/MM/dd]形式のまま、BigQueryにアップロードすると上記のエラーが発生します。下記は、csvの元データの例です。
csvでは書式の保存はできませんので、インポート時にエラーが発生するのであれば、元データを修正して、再度、csvを作成しなければエラーは回避できません。
なお、csv(Excel)の書式設定の特性上、見かけ上では[yyyy/MM/dd]になっていても元データが正しい形式であれば、エラーは発生せず、正常にインポートすることができます。
日付(DATE型)と同じく、BigQueryのスキーマの定義とインポートするcsvの書式が異なっている場合には、csvをインポートした際、エラーが発生します。
下記は、BigQueryのスキーマの定義で、整数(INTEGER型)を設定したにも関わらず、csvには少数点以下の数値を含んでいた場合に発生したエラーの例です。
テーブルを作成できませんでした: Error while reading data, error message: Could not parse ‘300000.0’ as INT64 for field wage (position 1) starting at location 14 with message ‘Unable to parse’
この場合も、前節「DATE型のケース」同様、csvではなく、元データを修正したうえでcsvを再作成する必要があります。くり返しますが、csvでは見かけ上、小数点以下の数値が表示されていないこともあります。
BigQueryでテーブルを作成するときのスキーマの定義では、当然、元データであるcsvのすべてのカラムについて、定義する必要があります。たとえば、9列分のcsvに対して、スキーマの定義が8列分しか設定されていなければ、csvのインポート時にエラーが発生します。
テーブルを作成できませんでした: Error while reading data, error message: Too many values in row starting at position: 74. Found 9 column(s) while expected 8.
BigQueryでテーブルを作成するときのスキーマの定義では、インポートするcsvにヘッダー行が含まれている場合、当該ヘッダー行の分は無視(スキップ)して取り込まなくてはなりません。
ヘッダー行の情報は、正式なデータではないからです。
ヘッダー行分のスキップの処理が漏れてしまうと、csvのインポート時にエラーが発生します。
一方、すべてのカラムが文字列(STRING型)でヘッダー行とデータ型が一致してしまい、エラーに気付かずに取り込まれてしまうリスクもあります。
テーブルを作成できませんでした: Error while reading data, error message: Could not parse ‘id’ as INT64 for field id (position 0) starting at location 0 with message ‘Unable to parse’
BigQueryでテーブルを作成するときのスキーマの定義では、NULL(空白)を許可するかどうかの定義もします。
NULLを許可しない設定(REQUIRED)にしたにも関わらず、インポートするcsvにNULL(空白)が含まれている場合には、csvのインポート時にエラーが発生します。
テーブルを作成できませんでした: Error while reading data, error message: Required column value for column index: 1 is missing in row starting at position: 54
今回は、BiqQueryでテーブルを作成する際、csvをインポートが正常に行われず、エラーが発生する事例について記事にしました。
もちろん、当記事で紹介したケース以外でも数多くのエラーパターンはあると思いますが、何よりもスキーマの定義について正しく理解しておくことが重要です。
ほとんどのエラーは、スキーマの定義に反するデータコンディションが原因で発生するのです。