具體化檢視表簡介

Materialized view 是預先運算的檢視區塊,會定期儲存 SQL 查詢的結果。在某些情況下,具體化檢視區會減少每項查詢掃描的資料量,進而縮短總處理時間並降低相關費用。您可以像查詢其他資料資源一樣查詢具體化檢視區塊。

以下用途可突顯具體化檢視區塊的價值:

  • 預先處理資料。準備匯總、篩選器、聯結和叢集,提高查詢效能。
  • 資訊主頁加速。為 Looker 等商業智慧工具提供支援,這些工具經常查詢相同的匯總指標,例如每日活躍使用者。
  • 對大型串流進行即時分析。可針對接收高速串流資料的表格,提供更快速的回應。
  • 成本管理。減少對大型資料集重複執行昂貴查詢的成本。

具體化檢視區塊的主要特徵包括:

  • 免維護。當基礎資料表變更時,系統會在背景預先運算具體化檢視表。基礎資料表中的任何增量資料變更,都會自動新增至具體化檢視區塊,使用者無需採取任何動作。
  • 提供最新資料。具體化檢視表會傳回最新資料。如果底層資料表的變更可能會導致具體化檢視失效,系統會直接從底層資料表讀取資料。如果基本資料表的變更不會使具體化檢視失效,系統就會從具體化檢視讀取其餘資料,並只從基本資料表讀取變更。
  • 智慧調整。如果查詢基本資料表的任何部分可透過查詢具體化檢視表來解決,BigQuery 就會重新導向查詢,改用具體化檢視表,以提升效能和效率。如要瞭解智慧微調功能如何及何時能改善查詢,請參閱「使用具體化檢視區塊」。

漸進式和非漸進式具體化檢視表

具體化檢視區塊基本上有兩種類型:

  • 增量具體化檢視表僅支援部分功能。如要進一步瞭解系統支援的具體化檢視表 SQL 語法,請參閱「建立具體化檢視表」。只有增量具體化檢視畫面可以運用智慧微調
  • 非遞增函式支援大多數遞增實體化檢視區塊不支援的語法。

建立具體化檢視表時,BigQuery 預設只允許您根據增量查詢建立檢視表。如要建立非遞增檢視區塊,您可以在具體化檢視區塊的定義中指定 allow_non_incremental_definition = true

要使用哪種具體化檢視區塊,取決於您的情況。下表比較遞增和非遞增具體化檢視區塊的功能:

類別 增量 非增量
支援查詢 有限制 最多查詢
維護費用 可降低常用查詢的成本。如要瞭解具體化檢視區塊的更新方式,請參閱增量更新 每次重新整理都會執行完整查詢。
智慧微調支援 適用於大多數瀏覽查詢。
一律顯示最新結果 支援。即使基礎資料表在上次重新整理後有所變更,增量檢視區塊仍會傳回最新的查詢結果。

授權具體化檢視表

您可以建立授權具體化檢視表,將來源資料集中的部分資料分享至次要資料集的檢視表。接著,您可以將這個檢視畫面分享給特定使用者和群組 (主體),讓他們查看您分享的資料。主體可以查詢您在檢視區塊中提供的資料,但無法直接存取來源資料集。

授權 view 和授權 materialized view 的授權方式相同。詳情請參閱「授權檢視區塊」。

與其他 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 的副本。您只能在已授權的具體化檢視表上建立副本。

限制

  • 可能須遵守基本表格參照限制和其他限制。 如要進一步瞭解具體化檢視限制,請參閱「配額和限制」。
  • 您無法使用 COPYEXPORTLOADWRITE 等作業或資料操縱語言 (DML) 陳述式,直接更新或操縱具體化檢視表的資料。
  • 您無法以同名的具體化檢視表取代現有的具體化檢視表。
  • 建立 materialized view 後,就無法更新 materialized view SQL。
  • 具體化檢視區塊必須與其基本資料表位於同一個機構,如果專案不屬於任何機構,則必須位於同一個專案。
  • 具體化檢視表使用受限的 SQL 語法和一組有限的匯總函式。詳情請參閱「支援的具體化檢視區塊」。
  • 具體化檢視表無法巢狀內嵌在其他具體化檢視表中。
  • 實體化檢視表無法查詢外部或萬用字元資料表、邏輯檢視表1或快照。
  • 實體化檢視區塊僅支援 GoogleSQL 方言。
  • 您可以為具體化檢視區塊設定說明,但無法為具體化檢視區塊中的個別資料欄設定說明。
  • 如果刪除基礎資料表時未先刪除具體化檢視區塊,查詢和重新整理具體化檢視區塊就會失敗。如果重新建立基礎資料表,也必須重新建立具體化檢視區塊。
  • 如果具體化檢視表有啟用變更資料擷取的基礎資料表,則該資料表無法在與具體化檢視表相同的查詢中參照。
  • 只有非遞增式具體化檢視表可以有 Spanner 外部資料集基本資料表。 如果非增量具體化檢視表的上次重新整理時間不在 max_staleness 間隔內,查詢就會讀取基礎 Spanner 外部資料集資料表。如要進一步瞭解 Spanner 外部資料集資料表,請參閱「透過 Spanner 外部資料集建立具體化檢視區塊」。

1邏輯檢視參照支援功能目前為預先發布版。詳情請參閱參考邏輯檢視畫面

BigLake 資料表的具體化檢視表限制

  • 系統不支援具體化檢視表的分區。基礎資料表可以使用 Hive 分區,但具體化檢視儲存空間無法在 BigLake 資料表中分區。也就是說,如果刪除基礎資料表中的任何資料,具體化檢視就會完整重新整理。詳情請參閱「增量更新」。
  • 實體化檢視區塊的 --max_staleness 選項值必須大於 BigLake 基本資料表的值。
  • 單一具體化檢視定義不支援 BigQuery 代管資料表與 BigLake 資料表之間的聯結。
  • BigQuery BI Engine 不支援加速處理 BigLake 資料表上的具體化檢視表。

具體化檢視表定價

具體化檢視表的費用與下列項目相關:

  • 查詢具體化檢視表。
  • 維護具體化檢視表,例如重新整理具體化檢視表。自動重新整理的費用會計入檢視區塊所在的專案。手動重新整理的費用會計入執行手動重新整理工作的專案。如要進一步瞭解如何控管維護費用,請參閱「重新整理作業維護」。
  • 儲存具體化檢視表。
元件 以量計價 以容量為基礎的定價方式
查詢 具體化檢視區塊和基礎資料表任何必要部分處理的位元組數。1 查詢期間會消耗運算單元。
維護 重新整理期間處理的位元組數。 系統會在重新整理期間消耗運算單元。
儲存空間 儲存在 materialized view 中的位元組數。 儲存在 materialized view 中的位元組數。

1 盡可能只讀取上次重新整理檢視區塊後發生的變更。詳情請參閱「增量更新」。

儲存空間費用詳細資料

對於具體化檢視中的 AVGARRAY_AGGAPPROX_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 欄會向使用者顯示為 NUMERICFLOAT64,但內部會儲存為 BYTES,內容為專有格式的中間草圖。如要計算資料量,系統會將該欄視為 BYTES

後續步驟