用法
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"等结果。
- 如果连接已启用 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 |