具體化檢視表簡介
具體化檢視表是預先計算的檢視表,會定期儲存 SQL 查詢的結果。在某些情況下,具體化檢視區會減少每項查詢掃描的資料量,進而縮短總處理時間並降低相關費用。您可以像查詢其他資料資源一樣查詢具體化檢視表。
以下用途可突顯具體化檢視區塊的價值:
- 預先處理資料。準備匯總、篩選器、聯結和叢集,提高查詢效能。
- 資訊主頁加速。為 Looker 等商業智慧工具提供支援,這些工具經常查詢相同的匯總指標,例如每日活躍使用者。
- 對大型串流進行即時分析。可針對接收高速串流資料的表格,提供更快速的回應。
- 成本管理。減少對大型資料集重複執行昂貴查詢的成本。
具體化檢視區塊的主要特徵包括:
- 免維護。基礎資料表變更時,具體化檢視表會在背景預先計算。基礎資料表中的任何增量資料變更都會自動新增至具體化檢視區塊,使用者不需採取任何動作。
- 提供最新資料:具體化檢視表會傳回最新資料。如果底層資料表的變更可能會導致具體化檢視失效,系統會直接從底層資料表讀取資料。如果基本資料表的變更不會使具體化檢視失效,系統就會從具體化檢視讀取其餘資料,並只從基本資料表讀取變更。
- 智慧調整。如果查詢基本資料表的任何部分可透過查詢具體化檢視表來解決,BigQuery 就會重新導向查詢,改用具體化檢視表,以提升效能和效率。如要瞭解智慧微調功能如何以及何時能改善查詢,請參閱「使用具體化檢視區塊」。
漸進式和非漸進式具體化檢視表
具體化檢視區塊基本上有兩種類型:
- 增量具體化檢視表僅支援部分功能。如要進一步瞭解系統支援的具體化檢視表 SQL 語法,請參閱「建立具體化檢視表」。只有增量具體化檢視畫面可以運用智慧微調。
- 非遞增函式支援大多數遞增具體化檢視表不支援的語法。
建立具體化檢視表時,BigQuery 預設只允許您根據增量查詢建立檢視表。如要建立非累加檢視區塊,您可以在具體化檢視區塊的定義中指定 allow_non_incremental_definition = true。
要使用哪種具體化檢視區塊,取決於您的情況。下表比較遞增和非遞增具體化檢視區塊的功能:
| 類別 | 增量 | 非增量 |
|---|---|---|
| 支援查詢 | 受限 | 最多查詢 |
| 維護費用 | 可降低常用查詢的成本。如要瞭解具體化檢視區塊的更新方式,請參閱增量更新。 | 每次重新整理都會執行完整查詢。 |
| 智慧微調支援 | 支援大部分的瀏覽次數查詢。 | 否 |
| 一律顯示最新結果 | 支援。即使基礎資料表在上次重新整理後有所變更,增量檢視區塊仍會傳回最新的查詢結果。 | 否 |
授權具體化檢視表
您可以建立授權具體化檢視表,將來源資料集中的部分資料分享至次要資料集的檢視表。接著,您可以將這個檢視畫面分享給特定使用者和群組 (主體),讓他們查看您分享的資料。主體可以查詢您在檢視區塊中提供的資料,但無法直接存取來源資料集。
授權 view 和授權 materialized view 的授權方式相同。詳情請參閱「授權檢視表」。
與其他 BigQuery 功能互動
下列 BigQuery 功能可與具體化檢視區塊透明地搭配運作:
查詢計畫說明:查詢計畫會反映掃描的具體化檢視表 (如有),並顯示從具體化檢視表和基本資料表讀取的位元組總數。
查詢快取:BigQuery 使用具體化檢視表重新編寫的查詢結果,可根據一般限制條件進行快取 (使用確定性函式、不串流至基本資料表等)。
費用限制: 如果您已設定計費位元組數上限,且查詢讀取的位元組數超過上限,查詢就會失敗,不會產生費用,無論查詢是使用具體化檢視區塊、基本資料表或兩者皆是。
使用模擬測試估算費用: 模擬測試會使用可用的具體化檢視區塊重複查詢重寫邏輯,並提供費用估算值。您可以使用這項功能測試特定查詢是否使用任何具體化檢視區塊。
跨區域資料複製: 您可以在已啟用跨區域複製功能的 BigQuery 資料表上建立具體化檢視區塊,但只能在主要區域建立。如果使用次要區域,您可能會看到下列錯誤訊息:
The dataset replica of the cross region dataset {PROJECT}:{DATASET} in region {REGION} is read-only because it's not the primary replica.
具體化檢視表定價
具體化檢視表的費用與下列項目相關:
- 查詢具體化檢視表。
- 維護具體化檢視表,例如重新整理具體化檢視表。自動重新整理的費用會計入檢視區塊所在的專案。手動重新整理的費用會計入執行手動重新整理工作的專案。如要進一步瞭解如何控管維護費用,請參閱「重新整理作業維護」。
- 儲存具體化檢視表。
| 元件 | 以量計價 | 以容量為基礎的定價方式 |
|---|---|---|
| 查詢 | 具體化檢視區塊處理的位元組數,以及基本資料表的任何必要部分。1 | 查詢期間會消耗運算單元。 |
| 維護 | 重新整理期間處理的位元組數。 | 系統會在重新整理期間消耗運算單元。 |
| 儲存空間 | 儲存在具體化檢視表中的位元組數。 | 儲存在具體化檢視表中的位元組數。 |
1 盡可能只讀取上次重新整理檢視區塊後所做的變更。詳情請參閱「增量更新」。
儲存空間費用詳細資料
對於 materialized view 中的 AVG、ARRAY_AGG 和 APPROX_COUNT_DISTINCT 匯總值,系統不會直接儲存最終值。BigQuery 會在內部將具體化檢視區塊儲存為中介草圖,並使用該草圖產生最終值。
舉例來說,請參考以下指令建立的具體化檢視區塊:
CREATE MATERIALIZED VIEW project-id.my_dataset.my_mv_table AS SELECT date, AVG(net_paid) AS avg_paid FROM project-id.my_dataset.my_base_table GROUP BY date
雖然 avg_paid 欄會向使用者顯示為 NUMERIC 或 FLOAT64,但內部會儲存為 BYTES,內容則是專有格式的中間草稿。如要瞭解資料量的計算方式,請將該欄視為 BYTES。