2017年8月17日木曜日

BigQueryにimportする

あまプロではシステム開発も請け負っております。

先日、GoogleBigQueryを使う機会が有りまして、はまった箇所が有りましたのであメログ。
  1. SQLの書式を拡張している
    SQLの書き方がちょっと独特
    select * from tablename;

    select * from [projectID:dataset.tablename];
    となります
  2. 大量データのインポートはGCPStorage経由で
    データインポートの手段は数種類用意されてますが、大量データとなると手段が限られます
    ジョブストリーミングでインポートする方法も有るんですが、Storageからインポートする方法をご紹介
    例えば1000万件のCSVデータやと数十GBになるので、アップロードするだけで何日も掛かりそう…現実的ではないです
    Storageからはgzip( *.csv.gz)形式のインポートが出来るんです
    エンコーディングはUTF-8ね
  3. gzipインポートは単一ファイルのみ
    ついついいつもの癖で
    tar -zcvf testdata.csv.tar.gz testdata.csv
    とかすると、インポート時に
    Error detected while parsing row starting at position: 0. Error: Bad character (ASCII 0) encountered. (error code: invalid)
    という謎のエラーを吐きます
    どうやらtarコマンドで一つのファイルを結合した為に、無効なデータが生成されてしまった様です…一つのファイルを結合しても無意味なのに気付かなんだ orz
    gzip -c testdata.csv > testdata.csv.gz
    で事足りました
実際に使てみんと、なかなか知見は貯まりませんなぁ

ちなみに2000万件のCSVのgzipデータのインポートは三十分くらいで完了しました
ローカル(2.1Ghz,6GB)で圧縮するだけでも同じくらい掛かったんで、やっぱ速いですね
ちなみにちなみにデータ作成はシェルで行ったんですが、ローカルで半日くらい掛かりました…