用量
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"等結果。
- 如果連線已啟用 PDT,且具備
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 |