具體化檢視表簡介
Materialized view 是預先運算的檢視區塊,會定期儲存 SQL 查詢的結果。在某些用途中,具體化檢視區會減少每項查詢掃描的資料量,進而縮短總處理時間並降低相關費用。您可以像查詢其他資料資源一樣查詢具體化檢視表。
具體化檢視表的優點
以下用途可突顯具體化檢視區塊的價值:
- 預先處理資料。準備匯總、篩選器、聯結和叢集,提高查詢效能。
- 資訊主頁加速。為 Looker 等商業智慧工具提供支援,這些工具經常查詢相同的匯總指標,例如每日活躍使用者。
- 對大型串流進行即時分析。可針對接收高速串流資料的表格,提供更快速的回覆。
- 成本管理。減少對大型資料集進行重複且昂貴查詢的費用。
主要特性
具體化檢視區塊的主要特徵包括:
- 免維護。當基礎資料表變更時,BigQuery 會在背景預先計算具體化檢視表。BigQuery 會自動將基礎資料表中的增量資料變更新增至具體化檢視區塊,不需要使用者採取任何動作。
- 提供最新資料。具體化檢視表會傳回最新資料。如果基礎資料表的變更可能會導致具體化檢視區失效,BigQuery 就會直接從基礎資料表讀取資料。如果基礎資料表的變更不會使具體化檢視區失效,BigQuery 會從具體化檢視區讀取其餘資料,並只從基礎資料表讀取變更。
- 智慧調整。如果查詢基本資料表的任何部分可透過查詢具體化檢視表來解決,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.
除了這些功能,您也可以針對具有特定功能的資料表建立具體化檢視區塊,詳情請參閱下列章節。
已啟用變更資料擷取的資料表
您可以透過啟用變更資料擷取 (CDC) 功能的資料表建立具體化檢視區塊。這些具體化檢視區塊的功能與 BigQuery 資料表的具體化檢視區塊類似,包括自動重新整理的優點。具體化檢視表無法執行執行階段合併查詢,因此您必須使用足夠的 max_staleness 設定具體化檢視表,避免執行階段合併工作。詳情請參閱「Limitations of materialized views over 資料表 with active 變更資料擷取」。
具體化檢視表定價
具體化檢視表會產生下列費用:
- 查詢具體化檢視表。
- 維護具體化檢視表,例如重新整理具體化檢視表。自動重新整理的費用會計入檢視區塊所在的專案。手動重新整理的費用會計入執行手動重新整理工作的專案。如要進一步瞭解如何控管維護費用,請參閱「重新整理作業維護」一文。
- 儲存具體化檢視表。
下表列出具體化檢視區塊的定價項目:
| 元件 | 以量計價 | 以容量為基礎的定價方式 |
|---|---|---|
| 查詢 | 具體化檢視區塊處理的位元組數,以及基本資料表的任何必要部分。1 | 查詢期間會消耗運算單元。 |
| 維護 | 重新整理期間處理的位元組數。 | 系統會在重新整理期間消耗運算單元。 |
| 儲存空間 | 儲存在 materialized view 中的位元組數。 | 儲存在 materialized view 中的位元組數。 |
1 盡可能只讀取上次重新整理檢視區塊後發生的變更。詳情請參閱「增量更新」。
儲存費用詳細資料
BigQuery 儲存特定匯總值的方式會影響儲存空間大小的計算方式。對於具體化檢視區塊中的 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。