notebook

都内でWEB系エンジニアやってます。

改行含むデータがあるCSVをBigQueryにloadする

今までCSVをBigQueryにloadすることがそんなになかったので(だいたいJSONでloadしてた)改行が含まれているCSVをloadするのにオプションが必要なのを知らなかった

今回は調べる過程をせっかくなので残しておく

load時のエラー

  • 何も知らずにloadしたときのエラー
Error while reading data, error message: CSV table references column position
9, but line starting at position:2815 contains only 3 columns.

カラム数があっていない

GCS上の複数ファイル合わせてloadしようと思っていたので該当ポジションがどこかわからない…

ただ、想定よりカラム数が少ないということなのでGCSからファイルを落としてきて探す

列数を出力

  • 各行の列数を出力
cat hoge.csv | awk -F ',' '{print NF}'

NFは項目数、-Fオプションで区切り文字を,にしているので実質CSVのカラム数をカウントできる

それを使って複数ファイルを対象にすべての行のカラム数をチェックして中身をみてみる

  • 特定のカラム数に満たない行をすべて出力する
ls *.csv | xarsg -i cat {} | awk -F ',' 'NF<10{print}'

実際の出力

"1","2020/07/23","hoge
fuga","1223","piyo","未分類","未分類","","0","foo"
.....
.....
.....

ちょっとぼかしたがこんな感じ、改行が含まれているということは改行の前後両方「カラムが足りないよ」といわれているのでこのような出力になる

この結果をみると一目瞭然で「改行かー…」となったので

オプションを調べて--allow_quoted_newlines を付けて無事loadできるようになった

bq load --replace --source_format=CSV --skip_leading_rows=1 --allow_quoted_newlines rawdata.records 'gs://sample-rawdata/*.csv' schema.json