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 语句的派生表还具有 数据组sql_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 文档页面中的派 erived tables in 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。
  • Looker 连接具有数据库中临时架构的 CREATE TABLE 权限。这是创建 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 语句的派生表还具有 数据组sql_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 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
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