materialized_view

用量

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

接受
布林值 (yesno)

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

定義

具體化檢視功能屬於進階功能。視方言而定,具體化檢視區塊可能會耗用大量資源,因此請務必瞭解方言的具體化檢視區塊實作方式。如要瞭解方言的行為,以及方言更新具體化檢視表資料的頻率,請參閱方言的說明文件。

您可以運用資料庫功能,在 Looker 專案中保留衍生資料表。如果資料庫方言支援具體化檢視區塊,且Looker 連線已啟用「持續性衍生資料表」選項,您就可以為衍生資料表指定 materialized_view: yes,建立具體化檢視區塊。具體化檢視表支援原生衍生資料表以 SQL 為基礎的衍生資料表

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

  • 如果是 PDT,保存策略是在 Looker 中定義,並由 Looker 管理保存作業。
  • 如果是具體化檢視區塊,資料庫會負責維護及重新整理資料表中的資料。

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

如果含有 materialized_view: yes 陳述式的衍生資料表也具有 datagroupsql_trigger_valuepersist_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 建立具體化檢視表的時間

Looker 產生具體化檢視表的方式與其他 PDT 相同。如果您在開發模式中建立及查詢具體化檢視表,Looker 會建立具體化檢視表的開發版本,該版本也可用於正式環境。詳情請參閱「Looker 中的衍生資料表」說明頁面的「開發模式中的持續性資料表」一節。

否則,在相關聯衍生資料表的 LookML 部署至正式環境後,系統會在 Looker 重新產生器的下一個週期建立具體化檢視表。materialized_view: yes

具體化檢視表的穩定資料庫檢視畫面

Looker 會自動為每個具體化檢視區塊建立穩定資料庫檢視區塊。穩定資料庫檢視區塊是在資料庫本身建立,因此可以在 Looker 以外的地方查詢。這與 publish_as_db_view 參數使用的穩定檢視畫面功能相同。

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

管理員或具備 see_pdts 權限的使用者,可以透過 Looker「管理」部分的「永久衍生資料表」頁面,在「PDT 詳細資料」模式中取得穩定資料庫檢視名稱

如要直接查詢具體化檢視區塊,只要在資料表名稱前加上暫存結構定義名稱即可。舉例來說,如果穩定版資料庫檢視區塊名稱為 NN_e_redflight_e_redflight_publish_as_db,而暫時性結構定義名稱為 tmp,您可以使用類似下列的指令查詢穩定版資料庫檢視區塊:


SELECT * from tmp.NN_e_redflight_e_redflight_publish_as_db

具體化檢視表的需求條件

如要在 Looker 專案中使用具體化檢視區塊,您需要:

  • 支援具體化檢視區塊的資料庫方言。如需支援具體化檢視區塊的方言清單,請參閱本頁面的「支援具體化檢視區塊的方言」一節。
  • 資料庫的暫存結構定義。這可以是資料庫中的任何結構定義,但建議您建立僅用於此用途的新結構定義。資料庫管理員必須為 Looker 資料庫使用者設定具有寫入權限的結構定義。
  • 已啟用「永久衍生資料表」選項的 Looker 連線。通常在您首次設定 Looker 連線時,就會設定這個選項 (如需資料庫方言的相關操作說明,請參閱「Looker 方言」文件頁面),但您也可以在首次設定後,為連線啟用 PDT。
  • 具有資料庫臨時結構定義 CREATE TABLE 權限的 Looker 連線。這與建立 PDT 時所需的權限相同。此外,如要為具體化檢視區塊建立穩定的資料庫檢視區塊,連線必須具備資料庫中暫時結構定義的 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" 等結果。

具體化檢視表的重要注意事項

使用具體化檢視區塊時,Looker 不會維護及重新整理資料表中的資料。因此,如要使用具體化檢視區塊功能,必須具備方言及其功能的進階知識。建立具體化檢視區塊時,請注意下列事項:

  • 部分方言對具體化檢視區塊設有限制,例如預設最長重新整理間隔,以及支援的聯結。Looker 不會針對具體化檢視表的方言專屬功能產生 LookML 錯誤。如果具體化檢視區塊建構失敗,Looker 會產生錯誤,並以 PDT 事件記錄中的事件形式呈現,或在您嘗試查詢具體化檢視區塊時,以執行階段錯誤的形式呈現。如要瞭解具體化檢視區塊的限制,請參閱方言的說明文件。
  • 部分方言會在查詢具體化檢視區塊時檢查查詢新鮮度,這可能會導致取得查詢結果時出現些微延遲。請參閱方言的說明文件,確認是否適用於您的方言。
  • 部分方言會嘗試以遞增方式重新整理具體化檢視區塊,而不是完全重建。如需相關資訊,請參閱方言的說明文件。
  • 如果具體化檢視區塊使用的基礎資料表已從資料庫中刪除,您可能無法查詢具體化檢視區塊,且新版本將無法建構。
  • 如果含有 materialized_view: yes 陳述式的衍生資料表也具有 datagroupsql_trigger_valuepersist_for 參數,系統會優先採用 materialized_view: yes 陳述式。
  • 具體化檢視區塊支援衍生表格一般支援的方言專屬參數,例如分割排序鍵索引
  • 如果是層疊衍生資料表,具體化檢視表可以依附於 Looker PDT,但須注意下列事項:
    • 您無法在含有 materialized_view: yes 的衍生資料表定義中,使用 persist_for 持續性策略搭配衍生資料表。如果是具體化檢視表,資料庫中必須一律有具體化檢視表的來源資料表。persist_for 衍生資料表會在 persist_for 參數指定的時間過後從資料庫中刪除,因此無法保證資料庫中會有這些資料表。
    • PDT 會以不重複的名稱重建,因此如果具體化檢視區塊在定義中使用 PDT,每當 PDT 重建時,具體化檢視區塊就會更新,指向 PDT 的新版本。也就是說,如果依附元件完全重建,具體化檢視畫面基本上會從頭重建,這可能會影響效能。在這種情況下,較好的做法是參照僅供附加的基礎資料表,或是參照使用 Looker 定義的漸進式 PDT

方言支援具體化檢視表

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

方言 是否支援?
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
Apache Druid
Apache Druid 0.13+
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
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+
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
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
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