BigQuery 是 GCP 的企業級資料倉儲服務,它可以快速處理結構化和非結構化資料,並提供即時查詢和分析功能。它主要針對需要分析大量資料的企業所設計,例如電子商務平台、遊戲公司、媒體公司和金融服務公司等等。簡述 BigQuery 的優勢如下:
BigQuery 的簡介與優勢
(一) 再大的資料都能即時高速處理與查詢
BigQuery 能在幾秒鐘內處理數百億行數據,這對於需要快速決策的企業來說至關重要。它的分散式架構允許你同時查詢和寫入資料,完全不需要等待。
而且無論是幾百 GB 的數據,還是幾 PB 的數據,BigQuery 都能輕鬆處理。它的擴充能力確保即使你的業務需求增長,你的資料分析能力也能跟上。
資料來源 GCP 官方部落格
(二) 串接各種資料來源
BigQuery 自問世以來,便極力整合巿面上各種服務,尤其是針對第三方的資料來源,開發了各種連接器 (Connector) 來串接,直接省去你手動傳輸的工作,非常方便。建議你可以先查看官方文件,也許你的資料來源已經內建整合 BigQuery 的功能喔!
資料來源 GCP 官方部落格
(三) 無伺服器容易上手
使用 BigQuery 根本不用開機器,直接倒入資料就可以開始分析,光是這一點就足以輾壓巿面上各種分析工具。而且你只要使用 SQL 語法就能分析出結果 (如第一張圖片),不用重新學習新的語法,對使用者非常友善。
基於以上特色,BigQuery 在世界各地早已經有各大知名企業使用,最知名的就是 Twitter (現在叫 X),而在台灣像是知名的社群數據分析公司 QSearch,在 8 小時內可以分析 432 億筆資料。痞客邦 幾10秒就查完 60 億筆資料。
其他成功案例還有 KKBOX、東森新聞雲、大數據(網路溫度計)、旋轉拍賣 Carousell、智生活、UDN 聯合新聞網、 QBurger、Freshworks、Blibli 等等,族繁不及備載。
資料上傳到 BigQuery 的方法介紹
BigQuery 支援多種上傳資料的方法和工具,方便企業處於各種不同情境,都能夠找到方法把資料匯入 BigQuery,分述如下:
(一) 手動匯入檔案
1. 從本機上傳 CSV 檔
假如你剛開始使用 GCP,你可以先在 Console 上面手動匯入一筆小量的資料,我這裡先準備一個 CSV 檔案,內容是 GCP 的帳單明細。如果你想用我的資料測試看看,也可以從這裡下載。
這裡要注意如果第一列是你的欄位名稱,務必要確保它是小寫英文字母開頭,後面是可接英文和數字,如果有空格請使用底線,萬一沒有按照要求來匯入資料,就會失敗喔!
資料來源:擷圖自 GCP 主控台
我們先到 BigQuery 的主畫面,然後點擊「建立資料集」,也就是 Dataset:
資料來源:擷圖自 GCP 主控台
點擊之後,馬上跳出側邊視窗,先設定 Dataset ID,注意不能用 “-” 而是要用 “_”。另外 Dataset ID 並不像 Cloud Storage,使用全球獨一無二的 Bucket ID,你可以設定任何的 Dataset ID。
在位置部分,和 Snapshot 或 Image 一樣,你可以設定單一地區或是多個地區的儲存位置。
下方有一個預設資料表到期時間,通常我們不會去設定,因為萬一時間到了,整個 Dataset 的資料都會刪除乾淨。除非你很確定只是短期使用,再做這個設定。沒問題就可以點擊「建立資料集」。
資料來源:擷圖自 GCP 主控台
接下來你會看到左邊已經產生剛剛建立的 Dataset,並在右邊視窗看到相關資訊,我們再點擊「建立資料表」:
資料來源:擷圖自 GCP 主控台
接著跳出側邊的視窗,我們在來源部分點擊下拉選單,選擇來源為「上傳」。同時你也會看到它可以從各種不同來源來建立資料表,例如 Cloud Storage、雲端硬碟、Bigtable 甚至 AWS 的 S3 和 Azure Blob Storage 都可以是匯入資料的來源。
資料來源:擷圖自 GCP 主控台
接著跳出上傳檔案的視窗,選擇我的 CSV 檔案之後,BigQuery 自動偵測要匯入的檔案格式,自動秀出 CSV。
我們再輸入要建立的表格名稱,接著不要急著按下「建立資料表」喔!我們再來看一些重要參數。
資料來源:擷圖自 GCP 主控台
結構定義就是 Schema,指的就是這張表格的結構,包含欄位名稱和資料格式,例如文字叫 STRING、日期叫 DATE 等等,還有欄位是否可以為空 (NULLABLE) 還是必填 (REQUIRED)。
你可以點擊「以文字形式編輯」,手動一個一個欄位設定。如果你是初學者,不知道如何設定的話,可以直接勾選「自動偵測」,BigQuery 會自動幫你偵測內容,選擇一個適合的格式。
如果你是專業的資料數據工程師,請務必手動設定欄位,確保它的格式符合你後續的分析工作。
資料來源:擷圖自 GCP 主控台
接下來的「分區」下拉式選單,是因為 BigQuery 有所謂的分區表 (Partitioned Table)。因為 BigQuery 一般的表格,每次都是查詢整個表格,即使你只撈出一點點資料,但它仍然會以整張表格的資料量計費,這樣很容易就花費不少錢。
而分區表的設計,可以讓你設定撈取資料的日期範圍,當你使用相同語法來查詢時,它只會依照日期範圍的資料量來計費,而不是整張表格計費,節省不少成本。
我們目前的資料量不大,可以保持「無分區」就好。我們再往下展開進階選項。
資料來源:擷圖自 GCP 主控台
進階選項展開後,第一個是「寫入偏好設定」,如果你的表格本來有資料,你可以決定要繼續新增 (附加到資料表中),或是把原本資料蓋掉 (覆寫資料表),而我們是建立新的表格,所以選哪一種都可以。
而「允許的錯誤數量」很重要,指的是你對於這個匯入動作,是否要求必須每一筆都格式正確。如果是,你就設成 0,但你要注意,在匯入過程中,只要偵測到一筆資料有問題,你就必須「全部重新匯入」,即使你已經匯入 100 萬筆資料。
這就會導致你浪費前面所有的時間,你可以視情況「把允許的錯誤數量」調高一點,例如資料筆數的 1%,否則你就必須保證資料格式完全正確。
資料來源:擷圖自 GCP 主控台
至於「要略過的標題列數」,就像我前面準備好的 CSV 檔,第一列是欄位名稱,所以我就在這裡輸入 1,確保它不會把欄位名稱也當成一筆資料,如果你的原始資料並沒有欄位名稱,就保持 0 就好。其他選項就保持預設,然後按下建立資料表。
資料來源:擷圖自 GCP 主控台
幾秒鐘後,會看到系統提示資料表建立完成的訊息,我們可以直接點擊「前往資料表」:
資料來源:擷圖自 GCP 主控台
畫面跳轉到我們建立完成的表格,你可以看到 BigQuery 自動偵測的欄位名稱和資料類型。
資料來源:擷圖自 GCP 主控台
我們點擊「詳細資訊」,可以看到表格的一些基本資訊,例如表格的完整 ID、建立時間、位置、表格的大小和資料比數等等。
資料來源:擷圖自 GCP 主控台
我們在點「預覽」,可以看到表格前面幾列的內容。要注意 BigQuery 是按照查詢的資料量來計費的,如果你想探索資料,不要動不動就 「Select * from 某個 Table」,這樣是會被計費收錢的喔!
資料來源:擷圖自 GCP 主控台
這個方法要注意,只能上傳最大 100 MB 的檔案,再大就無法上傳了。
2. 從 Google Drive 匯入 BigQuery
這個方法可以上傳最大 10GB 的檔案,所以先上傳到這裡比較方便。 但它只限 Google 試算表,不能匯入 CSV 檔案喔!
你可以直接在檔案上按右鍵=>共用=>複製連結:
資料來源:擷圖自 GCP 主控台
然後貼到「選取雲端硬碟 URI」欄位中:
資料來源:擷圖自 GCP 主控台
比較特別的地方是,你可以指定匯入的資料範圍,不一定要全部匯入。我們選定資料範圍後可以複製左上角的座標:
資料來源:擷圖自 GCP 主控台
然後貼到工作表範圍:
資料來源:擷圖自 GCP 主控台
其他的設定跟前面一樣,沒問題就按下建立資料表:
資料來源:擷圖自 GCP 主控台
完成後去查看表格,你會發現,你看不到資料量大小和筆數,是因為 BigQuery 並沒有把 Google 試算表的資料複製進來,而是當成外部的表 (External Table) 來用。
資料來源:擷圖自 GCP 主控台
接著我們使用查詢來確認,看它是不是剛好 10 筆資料。我們開啟新的分頁:
資料來源:擷圖自 GCP 主控台
它把前面欄位的部分空著,我們直接輸入「 * 」代表所有欄位,並且把「 LIMIT 1000」刪除,確保它能夠秀出所有資料,接著按下「執行」:
資料來源:擷圖自 GCP 主控台
你會到剛好 10 筆資料的查詢結果,代表即使試算表有 100 多筆資料,但我們己在匯入時限制 10 筆的範圍,所以這裡就只能看到 10 筆。
資料來源:擷圖自 GCP 主控台
關於資料不在 BigQuery 裡面的問題,不用擔心,接下來我們使用「撈出資料寫入表格」的語法來處理,我們開啟一個新的查詢分頁,然後準備以下語法:
| CREATE TABLE `專案.資料集.新表格名稱` ASSELECT * FROM `專案.資料集.原外部表格名稱` |
資料來源:擷圖自 GCP 主控台
沒問題就按下執行,因為這個語法是讓它直接執行寫入資料表的動作,是在背景作業,不會秀出資料給你看。所以我們再按「前往資料表」:
資料來源:擷圖自 GCP 主控台
你會看到它沒有再秀出「外部資料設定」和「來源 URI」,而是直接秀出資料筆數和佔用空間大小。
資料來源:擷圖自 GCP 主控台
代表它已經是 BigQuery 本身的內部表格喔!
3. 從 Google Cloud Storage 匯入檔案
假如你的資料超過 10 GB,那建議先上傳到 Cloud Storage 再匯入 BigQuery,這樣最大單次能匯入 5TB 的檔案。 我用同個檔案來示範,首先我直接拖曳到 Cloud Storage 的 Bucket。
資料來源:擷圖自 GCP 主控台
然後回到 BigQuery 建立資料表,按下「瀏覽」:
資料來源:擷圖自 GCP 主控台
然後找到要匯入的檔案,再按「選取」。
順便提一下,它支援萬用字元 (例如: gs://bucket/data/*.csv),代表你可以一次匯入多個檔案,但資料總量還是不能超過 5 TB 喔!
資料來源:擷圖自 GCP 主控台
接下來看到「結構定義」,我們這次自己來挑選匯入之後的欄位格式。如果你使用我的範例檔案,可以參考下圖設定,其它類型可以查看官方文件。
資料來源:擷圖自 GCP 主控台
然後按下「以文字形式編輯」,它會把設定轉換成語法,強烈建議你複製語法。
為什麼要多此一舉?
你剛剛手動設定欄位,一定花費很多時間。如果待會匯入發生錯誤,相同的動作你就要再做一次。現在只有 6 個欄位就算了,如果正式的表格有 40 個欄位,你可能已經花了半個小時設定,結果匯入失敗要重來的話,你可能會懷疑人生。
如果你已經事先複製語法,你只要稍做調整就可以直接貼上,可以省去你大量的時間。
資料來源:擷圖自 GCP 主控台
接下來是分割設定,是因為 BigQuery 有所謂的分區表 (Partitioned Table)。因為 BigQuery 一般的表格,每次都是查詢整個表格,即使你只撈出一點點資料,但它仍然會以整張表格的資料量計費,這樣很容易就花費不少錢。
而分區表的設計,可以讓你設定撈取資料的日期範圍,當你使用相同語法來查詢時,它只會依照日期範圍的資料量來計費,而不是整張表格計費,節省不少成本。
我們這次選擇「依欄位分割」,然後選取「use_date」欄位,並且勾選必須使用「WHERE 子句」來查詢資料。就是要強迫使用者在查詢的時候指定時間範圍,如果使用者不使用這個語法,系統不會讓他執行,藉此降低查詢成本 。
資料來源:擷圖自 GCP 主控台
接下來進階選項的部分跟前面一樣,你可以事情況設定「允許的錯誤數量」,以及「要列過的標題列數」,如果沒問題就按下「建立資料表」。
資料來源:擷圖自 GCP 主控台
建立完成之後你會看到系統提示「這是分區資料表」,你也會在下方看到「已分區」以及分區的欄位。
資料來源:擷圖自 GCP 主控台
關於更多從 Cloud Storage 匯入 BigQuery 的細節,可以參考這份文件。
我們將三種方法整理如下表,你可以視情況選用適合的匯入方法。
資料來源:東東老師自行整理
文章轉載自《東東GCP 教學》網站






