[GCP] BigQuery 踩雷遊記…

Bryan Yang
A multi hyphen life
3 min readMar 27, 2018

我只是想 load 個檔案..

直接跳過 Big Query 簡介進入踩雷階段…

Load File

和 Hadoop 相反,BigQuery 是 schema on write 的 Database,所以在把資料 Load 進去的時候就會檢查資料欄位內容是否正確,如果不對就會爆炸(Load 失敗).

這是 BQ Create Table 的畫面,支援從 gcloud 直接讀取檔案,檔案格式支援 CSV、JSON、AVRO、Parquet 等.

今天主角就是 CSV.

不斷的錯誤

因為我們原始資料是 Parquet ,因 Parquet 內建欄位資訊,BQ 雖然可以自動偵測,但是有些限制:

  1. 不能讀取巢狀資料
  2. 自動偵測欄位時不能指定 partition 欄位

所以我們還是先轉成 CSV 再塞進去.但是一直遇到莫名錯誤…

到底什麼ASCII 錯誤呢?把該檔案調出來,格式沒有問題.

打開資料也看不出問題(資料敏感無法截圖),但是就算知道這筆資料哪裡錯,也很難確保剩下幾千個檔案不會有錯…

原本感到絕望的時候,想說死馬當活馬醫,把檔案格式改成 JSON (抱歉資料敏感無法截圖)再讓 BQ 讀,竟然就成功了!

之後把剩下的檔案從 Parquet 轉成 JSON 再給 BigQuery 就都沒問題了噎!

插曲之天元突破之突破天際之Dataflow

一開始 CSV 因為檔案格式錯誤的時,本來想嘗試使用 dataflow 讀取檔案在存到 BQ,沒想到!

第一次看到這種需求啊!819 個 CPU + 3TB 的 RAM 阿各位觀眾!(把同樣檔案從 parquet 轉成 CSV 時用的是 4 cpu * 4 台的 Spark 機器,花了三個多小時)而且這個 dataflow job 居然在跑了一個多小時後 fail 了啊啊啊啊

我的心在淌血…

--

--

Bryan Yang
A multi hyphen life

Data Engineer, Data Producer Manager, Data Solution Architect