materialized_view

用法

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 通过 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 语句的派生表还具有 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.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