🗺️ GCP 服務地圖
資料分析・BigQuery・ADP/PDE

BigQuery:分區、叢集與查詢成本

BigQuery 不用管伺服器,但隨選計價是「查詢讀了多少資料就付多少」。一支沒篩日期的 SELECT * 可能掃過整張多年累積的大表。這一頁教你怎麼讓查詢只讀需要的那一小塊。

掃描量計算器 情境分診:10 張卡 控制台 × bq × Terraform 同步操作

💡 先搞懂問題

虛構公司「晴空食品」把三年來的訂單都放進 BigQuery 的一張 orders 資料表,每天新增約 500 萬筆,整張表已經到 1.5 TiB 左右(示意)。行銷分析師每天早上要看「上週各門市營收」,習慣先 SELECT * … LIMIT 100 瞄一下資料,再寫正式查詢。月底帳單出來,處理量高得嚇人:每一支查詢都掃過了整張表。

原因在 BigQuery 的隨選計價(on-demand pricing):運算費依查詢處理的位元組(bytes processed)計算,看的是「讀了多少資料」,不是「回傳多少列」。新手最常卡在四個地方:以為加了 LIMIT 就只付 100 列的錢;以為 WHERE 篩掉的資料就不算錢;不知道 BigQuery 是欄式儲存(columnar storage),每個欄位分開存放,SELECT * 等於把每個欄位都讀一遍;也分不清分區(partitioning)和叢集(clustering)各自在省什麼。

這一頁的主角就是這兩個設定。分區把資料表依日期(或整數範圍)切成很多段,查詢條件有篩分區欄位時,BigQuery 只讀相關的分區,這叫分區修剪(partition pruning);叢集讓資料在儲存時依指定欄位排序,查詢篩這些欄位時可以跳過不相符的資料區塊,這叫區塊修剪(block pruning)。再加上只選需要的欄位、執行前先試算(dry run),大部分「掃整張表」的帳單問題都能解決。

需求:上週各門市營收(數字為示意) 做法一:SELECT * … LIMIT 100,資料表沒有分區 讀了全部 10 個欄位 × 三年所有日期 ≈ 1.5 TiB LIMIT 只少回傳幾列,沒有少讀;沒有分區,日期條件也省不到讀取量 做法二:只選 3 個欄位+依日期分區、只查 7 天 讀 3 個欄位 × 7 個分區 ≈ 1 GiB(左邊那一小條) 再加上依門市叢集,只看一家門市時還能跳過大部分資料區塊 同一個答案,處理量相差一千倍以上;隨選計價的運算費就跟著差這麼多
兩支查詢算出來的答案一樣,差別只在讀了多少資料。上面那條是整張表,下面紫色的細條是 1 GiB,按比例畫幾乎看不見。實驗室一可以自己切換每一個條件,看處理量怎麼變。

生活比喻:按年份分櫃、櫃內依作者排序的付費檔案室

想像一間收費的報刊檔案室,計費方式很特別:不管你最後抄了幾行,都依「翻過幾頁」收錢。最笨的找法是把整間檔案室每一本都從頭翻到尾。聰明的檔案室會做三件事。第一,每本刊物把「目錄」「財經版」「副刊」分開裝訂,你只要財經數字,就只翻財經那一冊,不用連副刊一起翻。第二,依年份與月份分成不同的櫃子,要找上週的資料,只打開上週那幾個櫃子。第三,每個櫃子裡再依作者姓名排好,要找某位作者時,直接翻到那一段,前後不相干的部分不用碰。

櫃台還有兩個規矩:進去之前可以先問館員「照這張借閱單,大概要翻幾頁」,館員不收費就能估出來;有些櫃子貼著「沒寫年份的借閱單不受理」,免得有人不小心把整間都翻一遍。

回到 Google Cloud:檔案室就是一張 BigQuery 資料表,「依翻過幾頁收費」就是隨選計價依處理的位元組計費。分冊裝訂對應欄式儲存:只選需要的欄位,就只讀那幾欄。依年月分櫃是分區,常見的是依日期欄位每天一個分區;櫃內依作者排序是叢集,最多可以指定 4 個叢集欄位。先問館員要翻幾頁就是試算(dry run),不收費;「沒寫年份不受理」就是要求分區篩選器(require partition filter),查詢沒有篩分區欄位時直接拒絕執行。
付費檔案室(比喻) BigQuery 的正式名稱 整間檔案室 依翻過幾頁收費 各版分冊裝訂,只翻財經冊 依年月分櫃 櫃內依作者排序 先問館員要翻幾頁 沒寫年份不受理 資料表(table) 隨選計價:處理的位元組 欄式儲存:只讀選到的欄位 分區(partitioning) 叢集(clustering,最多 4 欄) 試算(dry run) 要求分區篩選器
左欄是比喻,右欄是正式名稱。實驗室一會讓你逐一打開「只翻財經冊」「只開上週的櫃子」「直接翻到某位作者」這三個開關,看處理量各自省下多少。

這個比喻有三個地方和實際不同。第一,檔案室是「翻到哪頁算到哪頁」,BigQuery 則是在被讀到的分區裡,選到的欄位整欄都算:WHERE store_id = 'TPE012' 篩掉的列,如果資料表沒有依 store_id 叢集,照樣要讀過才能篩掉,一樣算錢。第二,館員能精準告訴你要翻幾個櫃子,但叢集是「排序後跳過區塊」,執行前無法精準知道能跳過多少,所以對叢集資料表的試算只是上限,實際計費可能比較少。第三,櫃子分得越細不一定越好:BigQuery 每張資料表最多 10,000 個分區,每個分區太小(官方以約 10 GB 為參考)時,管理負擔變大、效益反而不如叢集。

orders 資料表:欄位 × 分區(示意) order_iddatetsstorecustproductqtyamountchannelnote 2023-10-01⋮(三年)2026-09-232026-09-242026-09-30 舊分區:被分區修剪跳過 紫色=實際讀取:3 個欄位 × 最近 7 個分區 note 這種長文字欄位最佔空間,SELECT * 會把它一起讀進來
欄式儲存讓「選哪些欄位」決定橫向讀多少,分區修剪讓「篩哪些日期」決定縱向讀多少,兩者相乘就是處理量。叢集作用在每個分區內部,讓紫色區塊裡還能再跳過不相符的資料區塊。注意 WHERE 用到的欄位(這裡的 order_date)也算在讀取的欄位裡。

🎮 互動實驗室一:查詢掃描量計算器

晴空食品的 orders 資料表有 10 個欄位、三年共 1,096 天、每天 500 萬筆,每列平均約 302 位元組(示意,依 BigQuery 的資料型別大小估算:DATE、TIMESTAMP、INT64 各 8 位元組,NUMERIC 16 位元組,STRING 為 2 位元組加文字長度)。請切換資料表設計(要不要依日期分區、要不要依門市叢集)與查詢寫法(日期範圍、SELECT * 或指定欄位、看全部或單一門市、有沒有 LIMIT),右邊即時算出試算會顯示的處理量、實際計費的處理量,以及用示意單價(每 TiB 100 點)換算的成本。示意單價不是實際價格,實際費用請以 BigQuery 定價頁與 Google Cloud Pricing Calculator 為準。每個情境下方有一題「先猜再看」。

一、資料表設計與查詢寫法

分區
叢集
日期範圍(WHERE order_date …)
選取的欄位
門市條件(WHERE store_id …)
LIMIT
儀表板或排程每天跑這支查詢幾次

二、計算結果

處理量 = 每天 500 萬列 × 讀到的分區天數 × 讀到的欄位位元組(每列)
叢集修剪:只看 1 家門市且依 store_id 叢集時,示意為只需讀約 2% 的區塊
示意成本 = 處理量(TiB)× 100 點;每個被引用的資料表至少以 10 MB 計
試算(dry run)顯示—
實際計費的處理量—
每次查詢示意成本—每 TiB 100 點(示意)
每月示意成本—
讀到的欄位(每列位元組)
讀到的分區(1,096 天中)
每個分區內實際讀的區塊

    隨選計價 vs Editions 容量計價:同一支查詢在兩種模式下怎麼算

    隨選(on-demand)依處理的 TiB 計費,每月前 1 TiB 免費(查證日期 2026-10-08)。上面算的就是這一種。
    Standard edition依 slot 使用時數計費,只能自動擴縮、單一預留最多 1,600 slots,不能買承諾;沒有 BigQuery ML、BI Engine。
    Enterprise edition可設基準容量加自動擴縮,可買 1 年(20% 折扣)或 3 年(40% 折扣)承諾;有 BigQuery ML、BI Engine。
    Enterprise PlusEnterprise 的功能,再加受管災難復原與 Assured Workloads 合規控制。

    先猜再看

    畫面說明:載入中。

    規則查證:2026 年 10 月,依 BigQuery 官方文件(隨選計價依所選欄位的資料量計費、即使有 LIMIT 也一樣;叢集資料表的 LIMIT 可能讓掃描提早停止;叢集資料表的試算是上限;每個被引用的資料表與每支查詢至少以 10 MB 計)。資料量、2% 的叢集修剪比例與每 TiB 100 點都是示意;真實的修剪效果取決於資料分布與區塊大小。

    🎮 互動實驗室二:最佳化手段分診台

    每張卡是一個虛構公司的需求,請從九個選項裡挑出最直接解決問題的一個:三種分區(時間單位欄位、擷取時間、整數範圍)、叢集、具體化檢視表、BI Engine、Editions 預留、BigQuery sharing(原 Analytics Hub),或外部資料表/Lakehouse。答完會說明理由;選錯時會告訴你你選的那一項在做什麼、為什麼不是這題的答案。下方(桌機在右邊)的對照卡會亮起這題用得到的事實。

    得分 0 / 0
    連續答對 0
    畫面說明:先判斷問題出在哪:讀太多資料(分區、叢集)、重複算同樣的東西(具體化檢視表)、互動延遲(BI Engine)、帳單形態(Editions)、要給別人用(sharing),還是資料根本不在 BigQuery 儲存裡(外部資料表/Lakehouse)。

    事實查證:2026 年 10 月,依 BigQuery 官方文件(分區類型與「分區平均 10 GB 以上才划算」的建議、每張資料表最多 10,000 個分區、叢集最多 4 欄、editions 功能差異、BigQuery sharing 與 Lakehouse 文件)。BigQuery sharing 原名 Analytics Hub,Lakehouse 原名 BigLake(2026-04-20 改名),考試大綱可能仍寫舊名。

    🛠️ 操作教學:建立分區叢集資料表,再試算查詢

    不用登入 Google Cloud,也能先把流程走一遍。左邊是簡化的主控台:選專案、建立資料集、建立依日期分區並依門市叢集的資料表,再到查詢編輯器看預估處理量、設定最大計費位元組後執行;右邊同步顯示等效的 bq/gcloud 指令、Terraform 與 SQL(DDL),黃色底的那幾行就是目前這一步對應的寫法。你可以故意填錯看看驗證訊息,也可以改資料集 ID、位置、分區方式或叢集欄位,看三個分頁怎麼跟著變。

    示意畫面:簡化重繪,只保留和本主題有關的欄位;實際畫面以 Google Cloud 控制台為準。
    雲端主控台選取專案搜尋資源、文件、產品
    同一件事的多種做法:控制台、bq 指令列工具、gcloud、Terraform 與 SQL 的 DDL(CREATE SCHEMA、CREATE TABLE),最後都呼叫同一組 BigQuery API,由 IAM 檢查權限後建立資料集與資料表,所以結果相同。控制台適合第一次摸索、看欄位說明;bq 適合寫成腳本或排程,試算與設定計費上限也最常用它;SQL 的 DDL 讓分析師直接在查詢編輯器裡建表;Terraform 是宣告式的基礎架構即程式碼,適合把資料集、資料表的結構與分區設定納入版本控管與審查。BigQuery 的 gcloud 指令主要用在專案與 API 這一層,資料集、資料表與查詢的日常操作以 bq 為主。terraform destroy 會刪除這份設定建立的資源;資料表在 provider 裡預設開啟 deletion_protection,資料集刪除時若還有資料表會失敗,範例為了練習分別設成 false 與 delete_contents_on_destroy = true,正式環境請三思。想讓 Google 代管 Terraform 的執行環境與 state,可以用 Infrastructure Manager;舊的 Cloud Deployment Manager 已在 2026 年 3 月底結束支援,新設計不要再用。

    自己動手時要注意

    權限:建立資料集需要專案層級的 bigquery.datasets.create 權限,例如 BigQuery 使用者(roles/bigquery.user,可以建立資料集並執行查詢工作)或 BigQuery 管理員(roles/bigquery.admin);建立資料表與寫入資料需要資料集上的 BigQuery 資料編輯者(roles/bigquery.dataEditor);只讀資料的人給 BigQuery 資料檢視者(roles/bigquery.dataViewer),要執行查詢還需要專案上的 BigQuery 工作使用者(roles/bigquery.jobUser)。依最小權限原則,把資料權限給在資料集上、查詢權限給在專案上。

    API 與費用:BigQuery API 在新專案通常已預設啟用,沒有的話用 gcloud services enable bigquery.googleapis.com。BigQuery 每月有免費額度:查詢處理前 1 TiB、儲存前 10 GiB(以帳單帳戶計算,查證日期 2026-10-08);超過後依隨選或 editions 計價,儲存另外計費,資料表或分區連續 90 天沒有修改會自動轉為長期儲存、價格約降一半。新帳戶的 Free Trial 是 90 天、300 美元抵用金。練習時建議替查詢設定最大計費位元組,或在專案設定每日查詢用量配額,避免意外的大查詢。

    練習完怎麼刪:刪除資料集時加上 -r 會連同裡面的資料表一起刪;整個專案只拿來練習時,刪除專案最乾淨。

    # 刪除練習用資料集(-r 連同資料表一起刪,-f 不再詢問確認)
    bq rm -r -f -d my-project-id:qingkong_sales
    
    # 用 Terraform 建立的就用 Terraform 刪
    terraform destroy
    
    # 整個專案只拿來練習時,刪除專案最乾淨(PROJECT_ID 換成你的專案 ID)
    gcloud projects delete PROJECT_ID

    範例裡的專案 ID 與資料都是佔位或示意。不要把服務帳戶金鑰寫進排程腳本或筆記本:自己操作用 gcloud auth login 的使用者憑證;排程查詢、Dataflow 或 Cloud Run 這些執行環境直接用附加的服務帳戶身分;從外部 CI/CD 或其他雲端存取 BigQuery,用 Workload Identity Federation 換取短期憑證,不要下載服務帳戶金鑰。

    ☁️ 對照 AWS 與 Azure 的做法:AWS 上最接近的是 Amazon Redshift 與 Amazon Athena。Redshift 是要管理叢集或選 Serverless 的資料倉儲,靠排序鍵與分布鍵安排資料,計價看節點或運算容量;Athena 直接查 S3 上的檔案、依掃描量計費,省錢的方法和 BigQuery 很像:用 Parquet 等欄式格式、依日期等欄位分割資料、只選需要的欄位。Azure 這邊則是 Microsoft Fabric:資料倉儲與 Lakehouse 共用 OneLake,以 Fabric 容量(capacity)計費,和 BigQuery editions 的容量概念比較接近,而不是依掃描量收費。
    AWS 服務地圖:Amazon Redshift ↗ AWS 服務地圖:Amazon Athena ↗ Azure 服務地圖:Microsoft Fabric ↗

    📘 原理補完

    BigQuery 怎麼算錢:儲存和運算分開計

    BigQuery 是無伺服器的資料倉儲,儲存層和運算層分開,帳單也分成兩塊。儲存依資料量計費,資料表或分區連續 90 天沒有被修改,就自動轉為長期儲存,價格約降一半、效能不變;這也是分區的附帶好處之一,舊分區可以各自進入長期儲存。運算(分析)有兩種模式:隨選依查詢處理的 TiB 計費,每月前 1 TiB 免費;editions 依 slot(BigQuery 的虛擬運算單位)的使用時數計費。兩種模式可以依專案混用。

    隨選模式的處理量有幾條規則要記住:依所選欄位的資料量計算,每個欄位的大小依資料型別而定;即使加了 LIMIT 也照選到的欄位計費(沒有叢集的資料表完全不會因此少讀;叢集資料表的 LIMIT 可能讓掃描提早停止);每個被引用的資料表、每支查詢至少以 10 MB 計;命中快取的查詢與失敗的查詢不收費;查詢別人分享給你的資料,由執行查詢的一方付費。

    寫好查詢SQL 試算 dry run不收費、得到預估 超過計費上限?maximum bytes billed 直接失敗不執行、不收費 執行:分區修剪+叢集區塊修剪叢集能跳過多少,執行時才知道 依實際處理量計費每表、每查詢至少 10 MB;命中快取不收費 是否 試算看得到「讀哪些分區、哪些欄位」,看不到叢集能跳過多少區塊 所以叢集資料表的試算與計費上限檢查都以上限值為準,實際計費可能更少
    從寫查詢到收費的路線。試算與最大計費位元組是兩道免費的防線:前者讓你事先知道代價,後者讓超過預算的查詢直接失敗。實驗室一的「試算顯示」與「實際計費」兩格,就是這張圖左上與左下的差別。

    三種分區

    分區是資料表層級的設定,查詢條件篩到分區欄位時,BigQuery 只讀符合的分區,而且在執行前就能精準知道要讀哪些分區,所以試算很準。三種類型:時間單位欄位分區依資料本身的 DATE、TIMESTAMP 或 DATETIME 欄位切分(以 UTC 計),TIMESTAMP 與 DATETIME 可以選每小時、每日、每月、每年,DATE 欄位只能每日、每月、每年;擷取時間分區依資料寫進 BigQuery 的時間切分,查詢用 _PARTITIONTIME 或 _PARTITIONDATE 虛擬欄位篩選;整數範圍分區依 INT64 欄位切分,要指定起點、終點與間隔。每張資料表最多 10,000 個分區(查證時間 2026 年 10 月),可以替分區設定到期時間自動刪除舊資料,也可以啟用要求分區篩選器。

    時間單位欄位分區:依資料裡的 order_date 09-2709-2809-2909-30 DAY/MONTH/YEAR 擷取時間分區:依資料寫進 BigQuery 的日期 寫入 09-27寫入 09-28寫入 09-29寫入 09-30 _PARTITIONTIME 晚到的舊事件也會落在「寫入那天」的分區,適合沒有可靠時間欄位的資料 整數範圍分區:依 customer_no(每 10,000 號一段,示意) 0~9,99910,000~20,000~30,000~ RANGE_BUCKET 範圍以外的值會落到另外的分區;範圍數上限 10,000 個
    三種分區差在「依什麼切」。挑選時先問:查詢最常拿什麼條件篩?那個欄位可不可靠?每一格的資料量夠不夠大?

    叢集:在分區裡再依欄位排序

    叢集讓資料依最多 4 個欄位排序存放在儲存區塊裡。查詢篩這些欄位時,BigQuery 用區塊的中繼資料判斷哪些區塊不可能有符合的資料,直接跳過。欄位順序有意義:先依第一個欄位排序,再依第二個,所以最常篩選或彙總的欄位放第一個;只篩第二個欄位時效果會打折。叢集欄位必須是頂層、非重複的欄位,可以用 STRING、INT64、DATE、TIMESTAMP、NUMERIC 等型別。資料持續寫入後,BigQuery 會在背景自動重新叢集,不另外收費;建立後也可以修改叢集欄位。叢集可以單獨使用,也可以和分區一起用:先分區,每個分區內再叢集。

    沒有叢集:TPE012 散在每個區塊 KHH…TPE012TPE012TXG…TNN…TPE012TPE012KHH…TXG…TPE012TPE012TNN…KHH…TPE012TPE012TXG… 8 個區塊全部要讀 依 store_id 叢集:資料依門市排序 KHH…KHH…TNN…TPE001~TPE020~TXG…TXG… TPE012 只讀 1 個區塊,其餘 7 個依中繼資料跳過(比例為示意) 執行前不知道能跳過幾個,所以試算顯示的是 8 個區塊的上限
    同一個分區裡的資料,排序前後讀取量差很多。真實的區塊數量與修剪比例取決於資料分布,這裡只是示意;門市越多、分布越平均,單一門市查詢能跳過的比例越高。

    分區和叢集怎麼選

    官方的建議是:一般情況先考慮叢集;以下情況才用分區(可以再加叢集):需要在查詢執行前精準估算費用、每個分區平均至少約 10 GB、想要整個分區到期或刪除、想讓舊分區各自適用長期儲存價格。反過來,分區會太小、篩選欄位基數很高(例如客戶編號)、常同時篩好幾個欄位、DML 常常改動大部分分區時,叢集比較合適。下表整理差異(查證時間 2026 年 10 月):

    比較分區叢集
    依什麼組織一個欄位(時間單位、擷取時間或整數範圍)最多 4 個欄位,依順序排序
    省讀取的方式分區修剪:只讀符合的分區區塊修剪:跳過不可能符合的區塊
    試算準不準精準:執行前就知道讀哪些分區只是上限:實際可能更少
    數量限制每張資料表最多 10,000 個分區沒有分區數的問題,適合高基數欄位
    資料生命週期可設分區到期、可整個分區刪除,舊分區各自進入長期儲存沒有依叢集值到期的機制
    防呆可要求分區篩選器沒有對應的強制條件
    適合常篩日期、每段資料量大、要依時間管理資料高基數、多欄位條件、分區會太小

    還有一種常見但不建議的做法:依日期分片成很多張表(例如 orders_20260930),再用萬用字元查詢。每張分片表都有自己的結構定義與中繼資料,BigQuery 要逐一檢查權限與結構,管理與效能都不如一張分區資料表,官方建議改用分區資料表。

    防呆:讓「掃整張表」很難發生

    技術上能省,還要讓人不會不小心花錢。資料表層級用要求分區篩選器:查詢沒有可用於修剪分區的條件就直接被拒絕。查詢層級用最大計費位元組(bq 的 --maximum_bytes_billed、控制台的查詢設定):預估超過上限的查詢直接失敗、不收費,但叢集資料表的預估是上限,設太緊可能擋下其實很便宜的查詢。專案或使用者層級可以設定每日查詢用量的自訂配額。另外,想看資料長什麼樣子,用資料表的「預覽」分頁,不要用 SELECT * … LIMIT。

    隨選還是 editions

    隨選適合用量小、不固定、剛起步的團隊:不用規劃容量,用多少算多少,每月前 1 TiB 免費。用量大而且穩定時,可以改用 BigQuery editions:以 slot 的使用時數計費,透過預留(reservation)把容量分配給專案,預設最少計 1 分鐘。三個版本:Standard 只能自動擴縮、單一預留最多 1,600 slots、不能買容量承諾,沒有 BigQuery ML、BI Engine、continuous queries,月 SLO 99.9%;Enterprise 可設基準容量加自動擴縮,可買 1 年(20% 折扣)或 3 年(40% 折扣)承諾,有 BigQuery ML、BI Engine、continuous queries,99.99%;Enterprise Plus 再加受管災難復原與 Assured Workloads 合規控制。要改預留的版本,必須刪除再重建預留。不論哪種模式,讀得少都會跑得快:隨選直接少付錢,editions 則是少用 slot 時間、讓同一份容量做更多事。

    每月處理量(示意)→ 每月運算費(示意) 隨選:依處理的 TiB(斜線) editions:依 slot 時數 基準容量(承諾可打折) 交叉點(示意)因工作負載而異
    隨選的費用直接跟著處理量走;editions 的費用跟著你預留與實際用掉的容量走,形狀比較平、比較好預測。交叉點在哪裡沒有固定答案,要用實際的查詢量、尖峰形態與定價計算機評估;兩種模式也能依專案混用。

    其他最佳化工具各解決什麼

    具體化檢視表(materialized view)預先計算並保存查詢結果,最常見的是彙總;基礎資料變動時 BigQuery 在背景重新整理,同一個彙總被反覆查詢時,不必每次重掃原始資料。BI Engine 是記憶體內的分析加速服務,替儀表板這類反覆、互動式的查詢縮短回應時間,Standard edition 沒有。BigQuery sharing(原 Analytics Hub)處理「把資料給別的組織或部門用」:建立交換與刊登項目,訂閱者拿到唯讀的連結資料集,不複製資料、永遠是最新版,發布者付儲存費、訂閱者付自己的查詢費,可以設定外流限制。外部資料表與 Lakehouse(原 BigLake,2026-04-20 改名)資料表讓 BigQuery 直接查 Cloud Storage 上的檔案,資料不必載入;Lakehouse 以 Apache Iceberg 等開放格式讓 BigQuery、Spark 等引擎共用同一份資料與目錄,並套用一致的存取控制。代價是部分功能與效能不如原生資料表。如果是要做機器學習,資料已經在 BigQuery 裡,BigQuery ML 可以直接用 SQL 建模,不必把資料搬出去。

    問題出在哪一層? 查詢讀了太多資料同一個彙總一直被重算儀表板點擊要即時回應帳單起伏大、想要可預測要把資料給其他組織用資料留在 Cloud Storage、多引擎共用 分區/叢集/只選欄位具體化檢視表BI Engineeditions 預留+承諾BigQuery sharing外部資料表/Lakehouse
    這就是實驗室二的九個選項分成的六類問題。考題常把它們放在一起當干擾選項;先判斷問題在「讀取量」「重複計算」「延遲」「帳單形態」「分享」還是「資料位置」,答案通常就很明顯。
    晴空食品的 BigQuery 專案 orders日期分區+門市叢集 具體化檢視表各門市每日營收 Lakehouse 資料表(指向 Cloud Storage) 經銷商的專案唯讀連結資料集 Cloud StorageParquet/Iceberg 檔案 Spark 等其他引擎讀同一份資料 BigQuery sharing
    三種「不複製資料」的做法放在同一張圖:sharing 讓別的組織查你的資料表、具體化檢視表讓同組織的報表少重算、Lakehouse 讓資料留在 Cloud Storage 給多個引擎共用。

    判斷步驟

    1. 先看查詢寫法:只選需要的欄位(或 SELECT * EXCEPT),不要用 LIMIT 控制成本,執行前先試算。
    2. 看最常用的篩選條件:有可靠的日期欄位、每天資料量大,就依它做時間單位欄位分區;沒有可靠時間欄位、在乎寫入時間,用擷取時間分區;依整數編號範圍管理,用整數範圍分區。
    3. 分區會太小(平均遠低於約 10 GB)、篩選欄位基數高或要同時篩多個欄位,改用或加上叢集,最常篩的欄位放第一個,最多 4 個。
    4. 加上防呆:分區資料表啟用要求分區篩選器,查詢設最大計費位元組,必要時設定每日查詢配額。
    5. 同一個彙總反覆計算,用具體化檢視表;儀表板要互動延遲,用 BI Engine;用量大而穩定、想要可預測帳單,評估 Enterprise edition 預留與承諾。
    6. 資料要給其他組織用,選 BigQuery sharing;資料要留在 Cloud Storage 並給多個引擎共用,選外部資料表或 Lakehouse。

    容易考錯的地方

    LIMIT 省錢:這是最常見的干擾選項。沒有叢集的資料表,LIMIT 完全不減少讀取量;想控制成本靠的是欄位選擇、分區、叢集與計費上限。

    WHERE 一定省錢:只有條件落在分區欄位(分區修剪)或叢集欄位(區塊修剪)上才會少讀。篩一般欄位只會少回傳結果,不會少讀;而且 WHERE 用到的欄位本身也要讀。

    高基數欄位拿來分區:客戶編號、訂單編號這種數百萬種值的欄位,不可能每個值一個分區(上限 10,000 個),答案通常是叢集。反過來,每天資料很小卻依日期每日分區,也是官方不建議的設計。

    DATE 欄位每小時分區:DATE 欄位只能每日、每月、每年;要每小時分區得用 TIMESTAMP 或 DATETIME 欄位,或擷取時間分區。

    試算數字就是帳單數字:分區資料表的試算很準,叢集資料表的試算是上限。題目問「為什麼實際費用比預估少」,答案通常是叢集的區塊修剪。

    Editions 能減少讀取量:editions 改變的是計價方式,不會讓查詢少讀資料;「查詢太慢太貴」先處理分區與叢集,「帳單不可預測」才是 editions 的題目。另外 Standard edition 沒有 BigQuery ML 與 BI Engine、不能買承諾,這是常見的細節題。

    舊名:考試大綱與舊教材可能寫 Analytics Hub(現稱 BigQuery sharing)、BigLake(現稱 Lakehouse)、Looker Studio(現稱 Data Studio)、Dataplex(Knowledge Catalog),指的都是現行產品。

    相關考試:PDE 大綱點名 BigQuery、BigQuery Editions 與 reservations、BigQuery sharing(Analytics Hub)、BI Engine 與 BigLake(現稱 Lakehouse),是這一頁最直接對應的考試;ADP 考 BigQuery 的查詢分析、BigQuery ML 與資料分享;ACE 會考 BigQuery 工作狀態與成本估算這類操作面的題目。

    ✅ 自我檢測

    6 題原創題,選完立即顯示對錯與解析,全部作答後會出現總分。目前得分:0 / 6