materialized_view

用量

view: my_view {
  derived_table: {
    materialized_view: yes
    ...
  }
}
階層
materialized_view
預設值
no

接受
布林值 (yes 或 no)

特殊規則
materialized_view僅支援特定方言

定義

materialized view 是一項進階功能。視方言而定,materialized view 可能會耗用大量資源,因此請務必瞭解方言如何實作 materialized view。如要瞭解方言的行為,以及方言重新整理 materialized view 資料的頻率,請參閱方言的說明文件。

materialized view 可讓您運用資料庫功能,在 Looker 專案中保留永久衍生資料表。如果資料庫方言支援 materialized view,且 Looker 連線已啟用「永久衍生資料表」選項,您就能為衍生資料表指定 materialized_view: yes,建立 materialized view。原生衍生資料表和以 SQL 為基礎的衍生資料表都支援 materialized view。

與永久衍生資料表 (PDT) 類似,materialized view 是查詢結果,以資料庫臨時結構定義中的資料表形式儲存。PDT 和 materialized view 的主要差異在於資料表的重新整理方式:

  • 如果是 PDT,保存策略是在 Looker 中定義,並由 Looker 管理。
  • 如果是 materialized view,資料庫會負責維護及重新整理資料表中的資料。

因此,如要使用 materialized view 功能,您必須具備方言及其功能的進階知識。在多數情況下,只要資料庫偵測到 materialized view 查詢的資料表中有新資料,就會重新整理 materialized view。materialized view 最適合用於需要即時資料的情境。

如果含有 materialized_view: yes 陳述式的衍生資料表也包含 datagroup、sql_trigger_value 或 persist_for 參數,系統會優先採用 materialized_view: yes 陳述式。

範例

這個 e_flights_pdt 衍生資料表含有 materialized_view: yes 陳述式,因此會在資料庫的臨時結構定義中建立具體化檢視表:


view: e_flights_pdt {
  derived_table: {
    materialized_view: yes
    explore_source: ontime {
      column: flight_num {}
      column: carrier {}
      column: arr_date {}
    }
  }
  dimension: flight_num {}
  dimension: carrier {}
  dimension: arr_date {
    type: date
  }
}

Looker 建立 materialized view 時

Looker 生成 materialized view 的方式與其他 PDT 相同。如果您在開發模式中建立並查詢 materialized view,Looker 會建立 materialized view 的開發中版本,這個版本也能用於正式環境。詳情請參閱「Looker 中的衍生資料表」說明文件頁面的「開發模式中的永久資料表」一節。

否則,系統會在 Looker 重新產生器的下一個週期,使用 materialized_view: yes 將相關衍生資料表的 LookML 部署至正式環境後,建立 materialized view。

materialized view 的穩定資料庫檢視表

Looker 會自動為每個 materialized view 建立穩定的資料庫檢視表。穩定的資料庫檢視表是在資料庫本身建立,因此可在 Looker 外部查詢。這與 publish_as_db_view 參數使用的穩定檢視畫面功能相同。

將 materialized view 的 LookML 部署至正式環境後,Looker 會在 Looker 重新產生器的下一個週期建立穩定檢視表。發布穩定的資料庫檢視表後,即可直接查詢。

管理員或具備 see_pdts 權限的使用者,可以前往 Looker「管理」部分的「永久衍生資料表」頁面,在「永久衍生資料表詳細資料」互動視窗中取得穩定的資料庫檢視表名稱。

如要直接查詢 materialized view,只要在資料表名稱前加上臨時結構定義名稱即可。舉例來說,如果穩定資料庫檢視表名稱為 NN_e_redflight_e_redflight_publish_as_db,臨時結構定義名稱為 tmp,您可以使用類似下列的指令查詢穩定資料庫檢視表:


SELECT * from tmp.NN_e_redflight_e_redflight_publish_as_db

materialized view 的規定

如要在 Looker 專案中使用 materialized view,您需要:

  • 支援 materialized view 的資料庫方言。如要查看支援 materialized view 的方言清單,請參閱本頁的「materialized view 的方言支援」一節。
  • 資料庫中的臨時結構定義。這可以是資料庫中的任何結構定義,但建議您建立新的結構定義,並僅用於此用途。資料庫管理員必須設定結構定義,並授予 Looker 資料庫使用者寫入權限。
  • Looker 連線已設定並啟用「永久衍生資料表」選項。這項設定通常是在初次設定 Looker 連線時完成 (如需資料庫方言的操作說明,請參閱「Looker 方言」說明文件頁面),但您也可以在初始設定後,為連線啟用 PDT。
  • Looker 連線,且具備資料庫臨時結構定義的 CREATE TABLE 權限。這項權限與建立 PDT 所需的權限相同。此外,如要為 materialized view 建立穩定的資料庫檢視表,連線必須具備資料庫暫時結構定義的 CREATE VIEW 權限。您可以測試連線,確認連線具備下列權限:
    • 如果連線已啟用 PDT,且具備 CREATE TABLE 權限,連線測試會傳回 Can use persistent derived tables in temp schema "docsexamples_scratch" in database "demo_db" 等結果。
    • 如果連線允許穩定檢視表,且連線具備 CREATE VIEW 權限,連線測試會傳回 Can use stable views in temp schema "docsexamples_scratch" in database "flightstats" 等結果。

materialized view 的重要注意事項

使用 materialized view 時,Looker 不會維護及重新整理資料表中的資料。因此,如要使用 materialized view 功能,您必須對方言及其功能有深入瞭解。建立 materialized view 時,請考量下列事項:

  • 部分方言對 materialized view 有所限制,例如預設重新整理間隔上限和 join 支援。Looker 不會針對 materialized view 的方言專屬功能產生 LookML 錯誤。如果 materialized view 無法建立,Looker 會產生錯誤,並在 PDT 事件記錄中顯示為事件,或在您嘗試查詢 materialized view 時顯示為執行階段錯誤。請參閱方言說明文件,瞭解 materialized view 的限制。
  • 部分方言會在查詢 materialized view 時檢查查詢時效性,因此取得查詢結果的時間可能會稍微延遲。請參閱方言說明文件,確認是否適用於您的方言。
  • 部分方言會嘗試逐步重新整理 materialized view,而非完全重建。詳情請參閱方言說明文件。
  • 如果 materialized view 使用的基礎資料表已從資料庫中刪除,您可能無法查詢 materialized view,也無法建構新版本。
  • 如果含有 materialized_view: yes 陳述式的衍生資料表也包含 datagroup、sql_trigger_value 或 persist_for 參數,系統會優先採用 materialized_view: yes 陳述式。
  • Materialized view 支援的方言專屬參數與衍生資料表一般支援的參數相同,例如分區、排序鍵和索引。
  • 如果是串聯衍生資料表,materialized view 可能會依附於 Looker PDT,但請注意下列事項:
    • 在採用 materialized_view: yes 的衍生資料表定義中,您無法使用採用 persist_for 保留策略的衍生資料表。如果是 materialized view,其來源資料表必須一律存在於資料庫中。persist_for 衍生資料表會在 persist_for 參數指定的時間過後從資料庫中刪除,因此不保證會存在於資料庫中。
    • PDT 會以不重複的名稱重建,因此如果 materialized view 的定義使用 PDT,則每次重建 PDT 時,materialized view 都會更新,指向新版本的 PDT。也就是說,如果依附元件完全重建,materialized view 基本上會從頭重建,這可能會影響效能。在這種情況下,更好的做法是參照僅限附加的基礎資料表,或參照使用 Looker 定義的增量 PDT。

materialized view 支援的方言

能否將衍生資料表轉換為 materialized view,取決於 Looker 連線使用的資料庫方言。在目前的 Looker 版本中,下列方言支援 materialized view:

方言 是否支援?
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
Apache Druid
Apache Druid 0.13.x - 0.17.x
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
ClickHouse 26+
Cloudera Impala 3.1+
Cloudera Impala 3.1+ with Native Driver
Cloudera Impala with Native Driver
DataVirtuality
Databricks
Denodo 7
Denodo 8 & 9
Dremio
Dremio 11+
Dremio 26+ with Arrow Flight SQL
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud AlloyDB for PostgreSQL
Google Cloud PostgreSQL
Google Cloud SQL
Google Spanner
Greenplum
HyperSQL
IBM Netezza
MariaDB
Microsoft Azure PostgreSQL
Microsoft Azure SQL Database
Microsoft Azure Synapse Analytics
Microsoft SQL Server 2008+
Microsoft SQL Server 2012+
Microsoft SQL Server 2016
Microsoft SQL Server 2017+
MongoBI
MongoSQL
MySQL
MySQL 8.0.12+
Oracle
Oracle ADWC
PostgreSQL 9.5+
PostgreSQL pre-9.5
PrestoDB
PrestoSQL
SAP HANA
SAP HANA 2+
SingleStore
SingleStore 7+
Snowflake
Teradata
Trino
Vector
Vertica