具體化檢視表簡介
Materialized view 是預先運算的檢視區塊,會定期儲存 SQL 查詢的結果。具體化檢視區塊可儲存查詢結果,減少每次查詢掃描的資料量,進而縮短總處理時間,並降低查詢相關費用。BigQuery 會在背景計算更新項目,確認具體化檢視表提供的是最新資料。這項程序會逐步執行,只使用基底資料表中的變更資料,但須遵守多項考量。您可以直接查詢具體化檢視區塊,也可以讓 BigQuery 運用這些檢視區塊,最佳化對基礎資料表的查詢。
具體化檢視區塊的主要特徵包括:
- 免維護。基礎資料表變更時,系統會在背景預先運算具體化檢視表。基礎資料表中的任何增量資料變更都會自動新增至具體化檢視區塊,使用者無需採取任何動作。
- 提供最新資料:具體化檢視表會傳回最新資料。如果基本資料表的變更可能會導致具體化檢視失效,系統會直接從基本資料表讀取資料。如果基本資料表的變更不會使具體化檢視失效,系統就會從具體化檢視讀取其餘資料,並只從基本資料表讀取變更。
- 智慧微調。 如果查詢基本資料表的任何部分可透過查詢具體化檢視表來解析,BigQuery 就會重新導向查詢,改用具體化檢視表,以提升效能和效率。
與邏輯檢視區塊比較
下表摘要列出 BigQuery 邏輯檢視表和具體化檢視表的異同之處。
元件 | 邏輯檢視表 | 具體化檢視表 |
---|---|---|
最佳化運算 | 否 | 是 |
查詢支援 | 全部 | 受限1 |
分區與分群 | 不適用 | 是 |
增量重新整理 | 否 | 是 |
額外儲存空間 | 否 | 是 |
查詢重寫 | 否 | 是 |
維護費用 | 否 | 是 |
資料過時 | 都不符合 | 選用步驟 2 |
1「--allow_non_incremental_definition
」選項支援更多 SQL 查詢,可建立具體化檢視表。
2 --max_staleness
選項可處理大型且經常變更的資料集,並維持高效能和控制成本。
用途
對於運算成本高且資料集結果較小的查詢,具體化檢視可進行最佳化。受益於具體化檢視區塊的程序包括線上分析處理 (OLAP) 作業,這類作業需要大量處理,且查詢可預測並重複,例如擷取、轉換、載入 (ETL) 程序或商業智慧 (BI) 管道中的查詢。
下列用途可突顯具體化檢視區塊的價值。如果您經常需要下列項目,具體化檢視區塊可提高查詢效能:
- 預先匯總資料:匯總串流資料。
- 預先篩選資料。執行查詢,只讀取資料表的特定子集。
- 預先加入資料。查詢聯結,尤其是大型和小型資料表之間的聯結。
- 重新叢集資料。執行查詢,從與基本資料表不同的叢集架構獲益。
智慧微調
您可以使用具體化檢視表,在不修改查詢的情況下,透明地提升查詢效能。您可以運用具體化檢視表,針對具有常見模式的查詢集 (例如 BI 工具產生的查詢集) 進行最佳化。詳情請參閱「使用具體化檢視區塊」。
授權具體化檢視表
您可以建立授權具體化檢視表,將來源資料集的部分資料分享至次要資料集的檢視表。接著,您可以將這個檢視畫面分享給特定使用者和群組 (主體),讓他們查看您分享的資料。主體可以查詢您在檢視區塊中提供的資料,但無法直接存取來源資料集。
授權檢視表和授權具體化檢視表的授權方式相同。詳情請參閱「授權檢視表」。
與其他 BigQuery 功能互動
下列 BigQuery 功能可與具體化檢視表順暢搭配運作:
查詢計畫說明:查詢計畫會反映掃描的具體化檢視表 (如有),並顯示從具體化檢視表和基本資料表讀取的位元組總數。
查詢快取:BigQuery 使用具體化檢視表重寫查詢時,查詢結果會受到一般限制 (使用確定性函式、不串流至基本資料表等),因此可以快取。
費用限制: 如果您已設定計費位元組數上限,且查詢讀取的位元組數超出上限,查詢就會失敗,不會產生費用,無論查詢是使用具體化檢視區塊、基本資料表或兩者皆是。
使用模擬測試估算費用: 模擬測試會使用可用的具體化檢視區塊重複查詢重寫邏輯,並提供費用估算值。您可以使用這項功能測試特定查詢是否使用任何具體化檢視區塊。
啟用 BigLake 中繼資料快取的資料表
已啟用 BigLake 中繼資料快取的資料表具體化檢視區塊,可參照儲存在 Cloud Storage 和 Amazon Simple Storage Service (Amazon S3) 的結構化資料。這些具體化檢視表的功能與 BigQuery 管理的儲存空間資料表具體化檢視表類似,包括自動重新整理和智慧調整等優點。其他優點包括預先彙整、預先篩選及預先聯結儲存在 BigQuery 外部的資料。BigLake 資料表的具體化檢視表會儲存在 BigQuery 代管儲存空間中,並具備該儲存空間的所有特性。
在 Amazon S3 BigLake 資料表上建立具體化檢視表時,具體化檢視表中的資料無法與 BigQuery 資料聯結。如要讓 materialized view 中的 Amazon S3 資料可供聯結,請建立 materialized view 的副本。您只能在授權的具體化檢視表上建立具體化檢視表副本。
限制
- 可能適用基本資料表參照限制和其他限制。 如要進一步瞭解具體化檢視限制,請參閱「配額和限制」。
- 您無法使用
COPY
、EXPORT
、LOAD
、WRITE
等作業或資料操縱語言 (DML) 陳述式,直接更新或操縱具體化檢視表的資料。 - 您無法以同名的具體化檢視表取代現有的具體化檢視表。
- 建立具體化檢視表後,就無法更新檢視表 SQL。
- 實體化檢視區必須與其基本資料表位於同一機構,或位於同一專案 (如果專案不屬於任何機構)。
- 具體化檢視表使用受限的 SQL 語法和一組有限的匯總函式。詳情請參閱「支援的具體化檢視區塊」。
- 具體化檢視表無法巢狀內嵌於其他具體化檢視表。
- 具體化檢視表無法查詢外部或萬用字元資料表、邏輯檢視表1或快照。
- 實體化檢視區塊僅支援 GoogleSQL 方言。
- 您可以為具體化檢視區塊設定說明,但無法為具體化檢視區塊中的個別資料欄設定說明。
- 如果未先刪除具體化檢視表就刪除基礎資料表,具體化檢視表的查詢和重新整理作業就會失敗。如果重新建立基礎資料表,也必須重新建立具體化檢視區塊。
- 如果具體化檢視表有啟用變更資料擷取的基礎資料表,則該資料表無法在與具體化檢視表相同的查詢中參照。
1邏輯檢視畫面參照支援功能目前為預先發布版。詳情請參閱參考邏輯檢視區塊。
BigLake 資料表的具體化檢視表限制
- 系統不支援具體化檢視表的分區功能。基礎資料表可以使用 Hive 分區,但具體化檢視區塊儲存空間無法在 BigLake 資料表中分區。也就是說,如果刪除基礎資料表中的任何內容,具體化檢視就會全面重新整理。詳情請參閱增量更新。
- 具體化檢視區塊的
-max_staleness
選項值必須大於 BigLake 基本資料表的值。 - 單一具體化檢視定義不支援 BigQuery 代管資料表與 BigLake 資料表之間的聯結。
- BigQuery BI Engine 不支援加速處理 BigLake 資料表上的具體化檢視表。
具體化檢視表定價
具體化檢視表的費用與下列項目相關:
- 查詢具體化檢視表。
- 維護具體化檢視表,例如重新整理具體化檢視表。自動重新整理的費用會計入檢視區塊所在的專案。手動重新整理的費用會計入執行手動重新整理工作的專案。如要進一步瞭解如何控管維護費用,請參閱「重新整理工作維護」。
- 儲存具體化檢視表。
元件 | 以量計價 | 以容量為基礎的定價方式 |
---|---|---|
查詢 | 具體化檢視區塊處理的位元組數,以及基本資料表的任何必要部分。1 | 查詢期間會消耗運算單元。 |
維護 | 在重新整理期間處理的位元組數。 | 系統會在重新整理期間消耗運算單元。 |
儲存空間 | 儲存在具體化檢視表中的位元組數。 | 儲存在具體化檢視表中的位元組數。 |
1 盡可能只讀取上次重新整理檢視區塊後發生的變更。詳情請參閱「增量更新」。
儲存空間費用詳細資料
對於具體化檢視中的 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
。