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 部署到生产环境并使用 materialized_view: yes 后,具体化视图会在 Looker 再生器的下一个周期内创建。

用于具体化视图的稳定数据库视图

Looker 会自动为每个物化视图创建一个稳定的数据库视图。稳定的数据库视图是在数据库本身上创建的,因此可以在 Looker 之外进行查询。这与使用 publish_as_db_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