用量
view: my_view {
derived_table: {
materialized_view: yes
...
}
}
|
階層
materialized_view |
預設值
no
接受
布林值 (yes 或 no)
特別規則
materialized_view 僅支援特定方言
|
定義
具體化檢視功能屬於進階功能。視方言而定,具體化檢視區塊可能會耗用大量資源,因此請務必瞭解方言的具體化檢視區塊實作方式。如要瞭解方言的行為,以及方言更新具體化檢視表資料的頻率,請參閱方言的說明文件。
您可以運用資料庫功能,在 Looker 專案中保留衍生資料表。如果資料庫方言支援具體化檢視區塊,且Looker 連線已啟用「持續性衍生資料表」選項,您就可以為衍生資料表指定 materialized_view: yes,建立具體化檢視區塊。具體化檢視表支援原生衍生資料表和以 SQL 為基礎的衍生資料表。
與永久衍生資料表 (PDT) 類似,具體化檢視表是查詢結果,以資料庫臨時結構定義中的資料表形式儲存。PDT 和具體化檢視區別的主要差異在於資料表的重新整理方式:
- 如果是 PDT,保存策略是在 Looker 中定義,並由 Looker 管理保存作業。
- 如果是具體化檢視區塊,資料庫會負責維護及重新整理資料表中的資料。
因此,如要使用具體化檢視區塊功能,必須具備方言及其功能的進階知識。在大多數情況下,只要資料庫偵測到具體化檢視表查詢的資料表中有新資料,就會重新整理具體化檢視表。具體化檢視表最適合需要即時資料的情境。
如果含有 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 建立具體化檢視表的時間
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"等結果。
- 如果連線已啟用 PDT,且連線具有
具體化檢視表的重要注意事項
使用具體化檢視區塊時,Looker 不會維護及重新整理資料表中的資料。因此,如要使用具體化檢視區塊功能,必須具備方言及其功能的進階知識。建立具體化檢視區塊時,請注意下列事項:
- 部分方言對具體化檢視區塊設有限制,例如預設最長重新整理間隔,以及支援的聯結。Looker 不會針對具體化檢視表的方言專屬功能產生 LookML 錯誤。如果具體化檢視區塊建構失敗,Looker 會產生錯誤,並以 PDT 事件記錄中的事件形式呈現,或在您嘗試查詢具體化檢視區塊時,以執行階段錯誤的形式呈現。如要瞭解具體化檢視區塊的限制,請參閱方言的說明文件。
- 部分方言會在查詢具體化檢視區塊時檢查查詢新鮮度,這可能會導致取得查詢結果時出現些微延遲。請參閱方言的說明文件,確認是否適用於您的方言。
- 部分方言會嘗試以遞增方式重新整理具體化檢視區塊,而不是完全重建。如需相關資訊,請參閱方言的說明文件。
- 如果具體化檢視區塊使用的基礎資料表已從資料庫中刪除,您可能無法查詢具體化檢視區塊,且新版本將無法建構。
- 如果含有
materialized_view: yes陳述式的衍生資料表也具有 datagroup、sql_trigger_value或persist_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 |