こんにちは。サーバーサイドエンジニアの柴田です。
皆さんはBigQueryにCSVファイルをインポートしたくなったことはありますか? 私はあります。そしてエラーの原因特定ができず軽く躓いたことがあるので、簡単にですが備忘録的にその時の対処法を残しておこうと思います。
データ転送を使ってBigQueryにCSVファイルをインポートしようとした際のエラー箇所の特定方法
Cloud Storageに配置したCSVファイルをBigQueryの「データ転送」機能を使って転送を実行した際に、以下のようなエラーとなりデータ転送に失敗しました。
Error while reading data, error message: CSV table references column position XX, but line starting at position:XXXXXXXX contains only X columns.
XXXXXXXX
の位置の行でカラム数が一致しないというエラーですが、CSVファイルの XXXXXXXX
文字目を確認しても特におかしいところは見当たりません。
どこがおかしいんだろう、という感じで暫くCSVファイルとにらめっこをしていたのですが…、実はこの line starting at position: XXXXXX
の数字は「何文字目」ではなく「何バイト目」を示していました。(なぜ早く気付かなかったのだろう)
なので、以下のようなコマンドでCSVファイルの問題の箇所を切り出してみたところ、見事に問題の箇所を見つけることができました。
tail -c +問題の箇所(バイト) ファイル名 > 出力先ファイル名 # 使用例 tail -c +12345678 件のCSV.csv > 件のCSVの12345678バイト目以降.csv
このときの問題の原因としては行内に改行コードが含まれているという単純なものだったため、データ転送におけるオプション Allow quoted newlines
を有効化することで無事データ転送ができるようになりました。
まとめ
- BigQueryのデータ転送のエラー
line starting at position: XXXXXX
は問題の箇所を「何バイト目」で示している - 「何バイト目」が分かったらtailコマンド等で問題の箇所を切り出すことができる
さいごになりますが、ヤプリでは引き続き仲間を募集しています。ご興味をお持ちいただけましたら、ぜひカジュアル面談でお話しましょう!