publish_as_db_view

用法

view: my_view {
  derived_table: {
    publish_as_db_view: yes
    ...
  }
}
层次结构
publish_as_db_view

- 或 -

publish_as_db_view
默认值
no

接受
布尔值(yesno

特殊规则
  • 在持久化表的 LookML 部署到生产环境后,稳定数据库视图会在 Looker 再生器的下一个周期发布(创建)publish_as_db_view: yes
  • 稳定数据库视图仅适用于使用 datagroup 或 sql_trigger_value 持久性策略的持久表。不支持使用 persist_for 的持久表。
  • 只有当数据库连接对临时架构具有 CREATE VIEW 权限时,才支持稳定的数据库视图。

定义

借助 publish_as_db_view 参数,您可以标记持久化表(包括持久化派生表汇总表),以便在 Looker 之外查询这些表。对于将 publish_as_db_view 设置为 yes 的持久表,Looker 会在数据库中为该持久表创建一个稳定的数据库视图。稳定的数据库视图是在数据库本身上创建的,因此可以在 Looker 之外进行查询。稳定的数据库视图的概念与 LookML 视图不同,因为 LookML 视图存在于 Looker 实例中,而不是数据库本身中。

在持久化表的 LookML 部署到生产环境并带有 publish_as_db_view: yes 后,稳定数据库视图将在下一个 Looker 再生器周期中发布(创建)。

示例

为 PDT 创建稳定的数据库视图

创建 e_flights_pdt PDT,并在数据库中为其创建稳定的数据库视图:


view: e_flights_pdt {
  derived_table: {
    publish_as_db_view: yes
    datagroup_trigger: e_flights_default_datagroup
    explore_source: ontime {
      timezone: "America/Los_Angeles"
      column: flight_num {}
      column: carrier {}
      column: arr_date {}
    }
  }
  dimension: flight_num {}
  dimension: carrier {}
  dimension: arr_date {
    type: date
  }
}

在 PDT 的 LookML 部署到生产环境后,e_flights_pdt 的稳定数据库视图将在下一个 Looker 再生器周期中发布。Looker 构建 PDT 后,您就可以查询数据库中的稳定数据库视图了。

为汇总表创建稳定的数据库视图

创建 weekly_orders 汇总表,并在数据库中为其创建稳定的数据库视图:

explore: orders {
  aggregate_table: weekly_orders {
    materialization: {
      sql_trigger_value: SELECT CURDATE() ;;
      publish_as_db_view:  yes
    }
    query: {
      dimensions: [orders.status, orders.created_week]
      measures: [orders.count]
    }
  }
}

在将汇总表的 LookML 部署到生产环境后,weekly_orders 汇总表的稳定数据库视图将在 Looker 再生器的下一个周期发布。Looker 构建汇总表后,您就可以查询数据库中稳定的数据库视图了。

访问稳定的数据库视图

为持久表发布稳定数据库视图后,您可以在获得稳定名称后直接查询该视图。您可以通过以下两种方式获取持久化表的稳定视图名称:

PDT 详情模态窗口

如果您是管理员或拥有 see_pdts 权限的用户,则可以使用 Looker 的管理部分中的永久性派生表页面获取持久化表的稳定数据库视图名称:

  1. 点击 Looker 主菜单图标 ,然后选择管理(如果管理菜单尚未显示)。(如果您位于 Looker 主菜单探索开发部分,可能需要点击返回箭头才能看到管理菜单。)
  2. 管理菜单中,选择永久性派生表
  3. 永久性派生表页面上,搜索持久化表的名称。
  4. 点击持久化表对应的三点状菜单,然后选择 PDT 详情
  5. PDT 详情模态框中,找到稳定名称字段。

如需直接查询稳定视图表,请在表名称前添加临时架构名称。例如,如果临时架构名称为 tmp,您可以使用如下命令查询稳定数据库视图:


SELECT * from tmp.CL_e_redlook_e_redlook_inc_pdt

探索的“SQL”标签页

如果您无权访问永久性派生表管理页面,可以使用“探索”的 SQL 标签页中包含的信息来确定持久化表的稳定视图名称。稳定视图名称采用以下格式:

[scratch schema name].[connection registration key]_[model_name]_[view_name]

例如,如果您有一个名为 faa 的模型中的持久表和一个名为 e_flights_pdt 的视图,则只需要临时架构名称和连接注册密钥。您可以在持久化表的查询的数据部分的 SQL 标签页中找到这两者。在 SQL 标签页的 CREATE TABLEFROM 语句中,您可以按如下方式查找信息:

  • 连接注册密钥为两个字符;根据数据库方言,它将位于持久化表名称中的美元符号或第一个下划线之后。
  • 临时架构名称是 CREATE TABLEFROM 之后的字符串开头,位于“.”之前

在以下所有示例查询中,连接注册密钥为 LB,临时架构名称为 tmp

下面是一个 Looker 生成的 SQL 查询示例,其中包含 CREATE TABLE 语句,适用于在连接注册密钥前使用美元符号的方言。视图名称为 e_flights_pdt,生成的派生表名称为 tmp.LR$LBC5Q1576702903774_e_flights_pdt

generate derived table e_flights_pdt
Building e_flight::e_flights_pdt in dev mode on instance b6ff28049851f1954156526c66ca9912
CREATE TABLE tmp.LR$LBC5Q1576702903774_e_flights_pdt (INDEX(flight_num)) SELECT
  ontime.flight_num AS `flight_num`
  ontime.carrier AS `carrier,
    (TIMESTAMP(DATE (CONVERT_TZ(ontime.arr_time, 'UTC', 'America/Los_Angeles')))) AS
      `arr_date``
FROM `flightstats`.`ontime` AS `ontime`
GROUP BY
  1,
  2,
  3
-- finished e_flights_pdt => tmp.LR$LBC5Q1576702903774_e_flights_pdt

SELECT
  e_flights_pdt.flight_num AS `e_flights_pdt.flight_num`,
  e_flights_pdt.carrier AS `e_flights_pdt.carrier`
FROM tmp.LR$LBC5Q1576702903774_e_flights_pdt AS e_flights_pdt
GROUP BY
  1,
  2
ORDER BY
  e_flights_pdt.flight_num
LIMIT 5

下面是一个 Looker 生成的 SQL 查询示例,其中包含 FROM 语句,适用于在连接注册密钥之前使用下划线的方言。视图名称为 e_flights_pdt,生成的派生表名称为 tmp.LR_LBFIM1580333699953_e_flights_pdt


--use existing e flights pdt in tmp.LR_LBFIM1580333699953_e_flights_pdt

SELECT
  e_flights_pdt.id AS `e_flights_pdt.id`,
  DATE(e_flights_pdt.faa_event_date) AS `e_flights_pdt. faa_event_date`
FROM tmp.LR_LBFIM1580333699953_e_flights_pdt AS e_flights_pdt

GROUP BY 1,2
ORDER BY DATE(e_flights_pdt.faa_event_date) DESC
LIMIT 5

同样,稳定数据库视图采用以下格式:

[scratch schema name].[connection registration key]_[model_name]_[view_name]

以下是所有值:

  • [scratch schema name]tmp
  • [connection registration key]LB
  • [model_name]faa
  • [view_name]e_flights_pdt

这样一来,持久化表的稳定数据库视图名称就是:

tmp.LB_faa_e_flights_pdt

获得稳定的数据库视图名称后,您可以直接查询该视图。例如:


SELECT * from tmp.LB_faa_e_flights_pdt

注意事项

某些方言需要额外的语法

如果连接注册密钥以数字开头,某些方言要求在稳定数据库视图名称的第二部分周围使用双引号、反引号、方括号或类似语法。例如,Amazon Redshift 需要使用双引号;因此,如果您的连接注册密钥以数字开头,则格式应如下所示:

[scratch schema name]."[connection registration key]_[model_name]_[view_name]"

例如,如果连接注册密钥为 84,您需要在稳定表名称的第二部分(句点之后)添加英文引号。因此,您对数据库的查询将如下所示:


SELECT * from tmp."84_faa_e_flights_pdt"

如需了解所需的具体语法,请参阅相应方言的文档。

数据库连接必须具有 CREATE VIEW 权限

如需在数据库中创建视图,Looker 用于连接到数据库的账号必须具有数据库临时架构的 CREATE VIEW 权限。

当您将 Looker 连接到数据库时,系统会配置数据库用户名、密码和临时架构。

您可以测试连接,看看您的连接是否支持稳定的视图名称。如果您的方言支持稳定的视图名称,并且连接上启用了 PDT,Looker 将测试连接,以确定它是否允许稳定的视图:

  • 如果连接允许稳定视图,连接测试将返回类似 Can use stable views in temp schema "docsexamples_scratch" in database "flightstats" 的结果。
  • 如果连接不允许稳定观看,连接测试将返回 Cannot use stable views in temp schema "docsexamples" in database "flightstats" 等结果,以及 CREATE VIEW command denied to user 'docsexamples' 等更多详细信息。

针对稳定数据库视图的方言支持

能否创建持久化表稳定数据库视图取决于 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