Categories: BigQuery

BigQueryでcsvインポート時のエラー原因(テーブル作成)

今回は、BigQueryのテーブル作成時、csvをインポートしたときに発生するエラーについて説明します。

BigQueryでテーブルを作成する方法はいくつかあるのですが、多くの方はテーブルの元データになるcsvをインポートする方法を選択すると思います。

テーブルの作成元の選択

そしてスキーマを定義してcsvインポートを実行した際、様々な要因によってエラーが発生し、正常にテーブルが作成できない場合があります。

この記事では、BigQueryのテーブル作成時、csvをインポートしたときに発生するエラーの原因について説明します。

BigQuery_csvインポート時のエラー

ここでは、当サイトの実経験に基づいてBigQueryで発生するcsvインポート時のエラーと、その原因について説明します。

紹介するのは、「データ型(タイプ)不一致によるエラー」、「カラム(フィールド)数不一致によるエラー」、「ヘッダー行が原因のエラー」、[NULLが原因のエラー]です。

データ型(タイプ)不一致によるエラー

csvインポート時に発生するエラーのうち、「データ型(タイプ)不一致」のエラーは、発生頻度も高いと思われます。

BigQueryで定義したスキーマとアップロードしたcsvのデータ型が一致しないことが原因のエラーです。

DATE型のケース

これは、アップロードするcsvに日付(DATE型)のカラムがあるときで、csvとBgQueryの日付型の定義が異なる場合に発生するエラーです。

DATE型不一致

テーブルを作成できませんでした: 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のデータ型について

BigQueryの日付(DATE型)は、[yyyy-MM-dd]の形式です。csvを[yyyy/MM/dd]形式のまま、BigQueryにアップロードすると上記のエラーが発生します。下記は、csvの元データの例です。

×:yyyy/MM/dd
〇:yyyy-MM-dd

csvでは書式の保存はできませんので、インポート時にエラーが発生するのであれば、元データを修正して、再度、csvを作成しなければエラーは回避できません。

なお、csv(Excel)の書式設定の特性上、見かけ上では[yyyy/MM/dd]になっていても元データが正しい形式であれば、エラーは発生せず、正常にインポートすることができます。

yyyy-MM-dd形式にしてアップロードした後、クエリを実行したプレビュー画面

INTEGER型のケース

日付(DATE型)と同じく、BigQueryのスキーマの定義とインポートするcsvの書式が異なっている場合には、csvをインポートした際、エラーが発生します。

下記は、BigQueryのスキーマの定義で、整数(INTEGER型)を設定したにも関わらず、csvには少数点以下の数値を含んでいた場合に発生したエラーの例です。

INTEGER型不一致

テーブルを作成できませんでした: 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では見かけ上、小数点以下の数値が表示されていないこともあります。

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’

csvにはヘッダー(タイトル)行がある・・

NULLが原因のエラー

BigQueryでテーブルを作成するときのスキーマの定義では、NULL(空白)を許可するかどうかの定義もします。

NULLを許可しない設定(REQUIRED)にしたにも関わらず、インポートするcsvにNULL(空白)が含まれている場合には、csvのインポート時にエラーが発生します。

NULLを許可しないREQUIRED
エラー発生

テーブルを作成できませんでした: Error while reading data, error message: Required column value for column index: 1 is missing in row starting at position: 54

csvを確認すると・・

あとがき

今回は、BiqQueryでテーブルを作成する際、csvをインポートが正常に行われず、エラーが発生する事例について記事にしました。

もちろん、当記事で紹介したケース以外でも数多くのエラーパターンはあると思いますが、何よりもスキーマの定義について正しく理解しておくことが重要です。

ほとんどのエラーは、スキーマの定義に反するデータコンディションが原因で発生するのです。

Analytics沖縄

データサイエンス・機械学習・ディープラーニングを本格的に研究するフリーランスエンジニア。 「Google データアナリティクス プロフェッショナル」の認定証を取得済み。 この分野は専門知識がなければ理解し辛い情報が多いのですが、当サイトでは初学者も意識して発信していきますので、ご関心があればぜひご覧ください。

Share
Published by
Analytics沖縄

Recent Posts

SQLの種類|DDL、DML、DCL(命令言語の分類)

今回は、データベースに対する命…

3か月 ago

SQL|FROM句の使い方。基本構文とテーブル指定の実例

今回は、SQLの基本かつ使用頻…

3か月 ago

MySQLの日付型や時刻型で使う関数のフォーマット指定子

今回は、MySQLの日付型や時…

7か月 ago

SQL│文字列を日付型に変換するTo_Date・Convert

今回は、SQLで文字列を日付型…

7か月 ago