はじめに
BigQueryへCSVファイルをロードする時、気になるのがCSVファイルのフォーマットやデータの表現形式。
BigQueryが受け付けてくれる形なら問題ないが、出力元システムによって特有の方言がありうる。
とりあえず思いついたものを自動検出ONでロードしてみて、どうなるか知っておきたい。
CSVファイル
sample.csv
col1,col2,col3,col4,col5,col6,col7,col8,col9,col10,col11
null,abc,文字列1,"カンマ,がある",12345,1.2345,20180101,2018-01-01,2018/01/01,2018-01-01 23:59:59,2018/01/01 23:59:59
,def,文字列2,"カンマ,がある",67890,6.7890,20180201,2018-02-01,2018/02/01,2018-01-01 23:59:59,2018/01/01 23:59:59
テーブル定義ファイル
なし。自動検出をONにする。
試しにロードしてみる
Error while reading data, error message: CSV table encountered too many errors, giving up. Rows: 1; errors: 1. Please look into the error stream for more details.
Could not parse '2018/01/01 23:59:59' as a timestamp. Required format is YYYY-MM-DD HH:MM[:SS[.SSSSSS]]; Could not parse '2018/01/01 23:59:59' as datetime for field timestamp_field_10 (position 10) starting at location 51
YYYY/MM/DD HH:MM:SS
は取り込めない
2018/01/01 23:59:59
は取り込めない模様。よくある形式だと思うので辛い。
該当列を消してリトライ。
sample.csv
col1,col2,col3,col4,col5,col6,col7,col8,col9,col10
null,abc,文字列1,"カンマ,がある",12345,1.2345,20180101,2018-01-01,2018/01/01,2018-01-01 23:59:59
,def,文字列2,"カンマ,がある",67890,6.7890,20180201,2018-02-01,2018/02/01,2018-01-01 23:59:59
結果
- 空文字は
null
になる - ダブルクォートの有無に限らず文字列扱いしてくれる
-
YYYYMMDD
は数値扱いになる -
YYYY/MM/DD
は日付扱いしてくれる -
YYYY/MM/DD HH:MM:SS
はダメ
気になる項目が出てきたら都度追記予定。