Google BigQuery‎ > ‎

Load CSV data to BigQuery

BigQuery所支援的上傳格式包括CSV與JSON兩種,其中CSV檔案為較容易產生的逗號隔開的格式文件,最大可以支援到4GB的上傳大小,下面展示將Apache Log文件轉換成CSV格式檔案,並作上傳BigQuery的動作。
BigQuery的資料上傳,需要搭配檔案的結構說明,也就是資料的Schema[參考],欄位的設定將會影響到查詢的方式,下面範例以方便為主,將直接以String方式定義各個欄位。

由CloudStorage上傳資料至BigQuery


CloudStorage具備直接匯入BigQuery的功能,相關的檔案置放於CloudStorage內,則可以保證匯入BigQuery的動作具備Strong Consistency,使用者可以不用擔心匯入動作中斷,造成資料重複匯入的問題...

Step 1: 將文件格式化為CSV格式


CSV為逗號隔開的文件格式,一般會以雙引號將文件中的欄位括起來,以表示與其他的欄位分別。這邊使用cat的方式將Apache格式中的幾個欄位抽取出來,製作成CSV

# cat apache-success-1201.log  | awk '{print "\""$1 "\",\"" $2 "\",\"" $4,$5 "\",\"" $7 "\""}' | cat > log.csv


Sample:


"140.109.32.9","www.micloud.tw","[30/Nov/2013:00:00:01 0800]","/as...dh0oAlw"

"114.41.84.207","www.micloud.tw","[30/Nov/2013:00:00:01 0800]","/e...x.php"

"203.70.93.131","www.micloud.tw","[30/Nov/2013:00:00:02 0800]","/e...ad//"

"60.199.183.253","www.micloud.tw","[30/Nov/2013:00:00:02 0800]","/e...1311"

...

Step 2: Upload to CloudStorage


匯入CloudStorage的方式有很多,這邊採用gsutil工具來做匯入動作,指令為"gsutil cp [from] [to]",gsutil的相關安裝方式可以參考:https://developers.google.com/cloud/sdk/

# gsutil cp ~/Desktop/log.csv gs://your-bucket/

Copying file:///Users/simonsu/Desktop/log.csv [Content-Type=text/csv]...

Uploading: 4.59 MB/36.76 MB

Step 3: Upload to BigQuery


資料匯入CloudStorage之後,可以透過bq指令將檔案匯入BigQuery,指令如下:

#
bq load project.dataset gs://your-bucket/log.csv IP:STRING,DNS:STRING,TS:STRING,URL:STRING

Waiting on bqjob_rf4f3f1d9e2366a6_00000142c1bdd36f_1 ... (24s) Current status: DONE

Local上傳資料至BigQuery

Step 1:  Format file to CSV


做法同上

Step 2: Load file with schema


由本機匯入BigQuery的方式與CloudStorage匯入一樣,只要修改Bucket的位置為本機檔案位置即可,同樣後面需要帶入Schema的說明。

# bq load project.dataset /Users/simonsu/Desktop/log.csv IP:STRING,DNS:STRING,TS:STRING,URL:STRING

Waiting on bqjob_r71397bcce1f88178_00000142c1c57eb6_1 ... (274s) Current status: DONE


Comments