用法
view: my_view {
derived_table: {
increment_key: "created_date"
...
}
}
|
层次结构
increment_key- 或 - increment_key |
默认值
无
接受
基于时间的 LookML 维度的名称
特殊规则
increment_key 仅支持持久表,且仅适用于特定方言
|
定义
如果您的 dialect 支持增量 PDT,您可以在项目中创建增量 PDT。增量 PDT 是一种永久性派生表 (PDT),Looker 通过将最新数据附加到该表来构建它,而不是重建整个表。如需了解详情,请参阅增量 PDT 文档页面。
increment_key 参数用于指定应查询哪些时间增量的新鲜数据并将其附加到 PDT,从而将 PDT 转换为增量 PDT。除了 increment_key 之外,您还可以选择提供 increment_offset 来指定重新构建的先前时间段数(以增量键的粒度为单位),以考虑迟到的数据。
PDT 的
increment_key与 PDT 的持久性触发器无关。如需查看一些示例场景,了解increment_key、increment_offset和持久性策略的互动,请参阅增量 PDT 文档页面。
increment_key参数仅适用于受支持的方言,并且仅适用于具有持久性策略的表,例如 PDT 和汇总表(一种 PDT)。
increment_key 必须指定基于时间的 LookML 维度:
- 对于 基于 LookML 的 PDT,
increment_key必须基于在 PDT 的explore_source所基于的视图中定义的 LookML 维度。如需查看示例,请参阅本页面上的创建基于 LookML 的增量 PDT 部分。 - 对于汇总表,
increment_key必须基于在汇总表的探索所基于的视图中定义的 LookML 维度。如需查看示例,请参阅本页面上的创建增量汇总表部分。 - 对于基于 SQL 的 PDT,
increment_key必须基于在 PDT 的视图文件中定义的 LookML 维度。如需查看示例,请参阅此页面上的创建基于 SQL 的增量 PDT。
此外,increment_key 必须:
- 截断的绝对时间,例如天、月、年、财政季度等。不支持“星期几”等时间范围。
- 随着新数据的增加而可预测地增加的时间戳,例如订单创建日期。换句话说,只有当添加到表中的最新数据也具有最新时间戳时,才应将时间戳用作增量键。用户生日等时间戳不适合作为增量键,因为随着向表中添加新用户,生日时间戳不会可靠地增加。
创建基于 LookML 的增量 PDT
如需将 基于 LookML(原生)的 PDT 转换为增量 PDT,请使用 increment_key 参数指定基于时间的 LookML 维度的名称。维度必须在 PDT 的 explore_source 所基于的视图中定义。
例如,以下是基于 LookML 的 PDT 的视图文件,其中使用了 explore_source LookML 参数。PDT 是根据 flights 探索创建的,在本示例中,该探索基于 flights 视图:
view: flights_lookml_incremental_pdt {
derived_table: {
indexes: ["id"]
increment_key: "departure_date"
increment_offset: 3
datagroup_trigger: flights_default_datagroup
distribution_style: all
explore_source: flights {
column: id {}
column: carrier {}
column: departure_date {}
}
}
dimension: id {
type: number
}
dimension: carrier {
type: string
}
dimension: departure_date {
type: date
}
}
首次对此表运行查询时,系统会完整构建此表。之后,系统会以一天 (increment_key: departure_date) 为增量重建 PDT,最多回溯三天 (increment_offset: 3)。
departure_date 维度实际上是 departure 维度组中的 date 时间范围。(如需简要了解维度组的工作原理,请参阅 dimension_group 参数文档页面。)维度组和时间范围均在 flights 视图中定义,该视图是相应 PDT 的 explore_source。以下是 departure 维度组在 flights 视图文件中的定义方式:
...
dimension_group: departure {
type: time
timeframes: [
raw,
date,
week,
month,
year
]
sql: ${TABLE}.dep_time ;;
}
...
创建基于 SQL 的增量 PDT
Looker 建议您使用基于 LookML 的(原生)派生表作为增量 PDT 的基础,而不是使用基于 SQL 的派生表。原生派生表本身可以处理增量 PDT 所需的复杂逻辑。基于 SQL 的 PDT 依赖于手动创建的逻辑,在与高度复杂的功能搭配使用时容易出错。
如需定义增量 SQL 型 PDT,请像使用基于 LookML 的 PDT 一样使用 increment_key 和(可选)increment_offset。不过,由于基于 SQL 的 PDT 不是基于 LookML 视图文件,因此要将基于 SQL 的 PDT 转换为增量 PDT,还需要满足以下额外要求:
- 您必须根据在 PDT 的视图文件中定义的时间型 LookML 维度来确定增量键。
- 您必须在 PDT 中提供
Liquid 过滤条件,以将增量键连接到增量键所基于的数据库时间列。{% incrementcondition %} 过滤条件必须指定数据库中列的名称,而不是 SQL 别名或基于该列的维度的名称(请参阅以下示例)。{% incrementcondition %}
Liquid 过滤器的基本格式如下:
WHERE {% incrementcondition %} database_table_name.database_time_column {% endincrementcondition %}
例如,以下是基于 SQL 的 PDT 的视图文件,该 PDT 以一天为增量 (increment_key: "dep_date") 进行重建,其中最近三天的数据将在重建时添加到表中 (increment_offset: 3):
view: sql_based_incremental_date_pdt {
derived_table: {
datagroup_trigger: flights_default_datagroup
increment_key: "dep_date"
increment_offset: 3
distribution_style: all
sql: SELECT
flights.id2 AS "id",
flights.origin AS "origin",
DATE(flights.leaving_time ) AS "departure"
FROM public.flights AS flights
WHERE {% incrementcondition %} flights.leaving_time {% endincrementcondition %}
;;
}
dimension_group: dep {
type: time
timeframes: [date, week, month, year]
datatype: date
sql: ${TABLE}.departure
;;
}
dimension: id {
type: number
}
dimension: origin {
type: string
}
}
请注意有关此示例的以下事项:
- 派生表基于 SQL 语句。此 SQL 语句会在派生表中创建一个基于数据库中
flights.leaving_time列的列。该列的别名为departure。 - PDT 的视图文件定义了一个名为
dep的维度组。- 维度组的
sql参数表示该维度组基于派生表中的departure列。 - 维度组的
timeframes参数包含date作为时间范围。
- 维度组的
- 派生表的
increment_key使用dep_date维度,该维度基于dep维度组的date时间范围。(如需简要了解维度组的工作原理,请参阅dimension_group参数文档页面。) Liquid 过滤条件用于将增量键与数据库中的{% incrementcondition %}flights.leaving_time列相关联。 必须指定数据库中{% incrementcondition %}TIMESTAMP列的名称(或必须评估为数据库中的TIMESTAMP列)。 必须根据{% incrementcondition %}FROM子句(用于定义 PDT)中可用的内容进行评估,例如FROM子句中指定的表中的列。 不能引用{% incrementcondition %}SELECT语句的结果,例如 SQL 语句中指定给列的别名,或基于该列的维度的名称。在此示例中, 为{% incrementcondition %}flights.leaving_time。由于FROM子句指定了flights表,因此 可以引用{% incrementcondition %}flights表中的列。 必须指向用于增量密钥的同一数据库列。在此示例中,增量键为{% incrementcondition %}dep_date,这是一个由 PDT 中的departure列定义的维度,该列是数据库中flights.leaving_time列的别名。因此,过滤条件指向flights.leaving_time:
WHERE {% incrementcondition %} flights.leaving_time {% endincrementcondition %}
您可以向 WHERE 子句添加内容,以创建其他过滤条件。例如,如果数据库表中的数据可追溯到很多年前,您可以创建一个过滤条件,以便 PDT 的初始构建仅使用特定日期之后的数据。以下 WHERE 会创建一个包含 2020 年 1 月 1 日之后数据的 PDT:
WHERE {% incrementcondition %} flights.leaving_time {% endincrementcondition %}
AND flights.leaving_time > '2020-01-01'
您还可以使用 WHERE 子句在 SQL 中将数据解析为时间戳,然后为其指定别名。例如,以下增量 PDT 使用基于 text_column 的 15 分钟增量,text_column 是已解析为时间戳数据的字符串数据:
view: sql_based_incremental_15min_pdt {
derived_table: {
datagroup_trigger: flights_default_datagroup
increment_key: "event_minute15"
increment_offset: 1
sql: SELECT PARSE_TIMESTAMP("%c", flights.text_column) as parsed_timestamp_column,
flights.id2 AS "id",
flights.origin AS "origin",
FROM public.flights AS flights
WHERE {% incrementcondition %} PARSE_TIMESTAMP("%c", flights.text_column)
{% endincrementcondition %} ;;
}
dimension_group: event {
type: time
timeframes: [raw, minute15, hour, date, week, month, year]
datatype: timestamp
sql: ${TABLE}.parsed_timestamp_column ;;
}
dimension: id {
type: number
}
dimension: origin {
type: string
}
}
您可以在维度组 sql 定义中使用 SQL 的别名,但必须在 WHERE 子句中使用 SQL 表达式。然后,由于 minute15 在 event 维度组中设置为时间范围,因此您可以使用 event_minute15 作为增量键,以获取 PDT 的 15 分钟增量。
创建增量汇总表
如需创建增量汇总表,请在 aggregate_table 参数的 materialization 参数下添加 increment_key 和(可选)increment_offset。使用 increment_key 参数指定基于时间的 LookML 维度的名称。维度必须在汇总表的探索所基于的视图中定义。
例如,此汇总表基于 accidents 探索,在本例中,该探索基于 accidents 视图。汇总表以一周 (increment_key: event_week) 为增量重建,最长可追溯到两周前 (increment_offset: 2):
explore: accidents {
. . .
aggregate_table: accidents_daily {
query: {
dimensions: [event_date, id, weather_condition]
measures: [count]
}
materialization: {
datagroup_trigger: flights_default_datagroup
increment_key: "event_week"
increment_offset: 2
}
}
}
增量键使用 event_week 维度,该维度基于 event 维度组中的 week 时间范围。(如需简要了解维度组的工作原理,请参阅 dimension_group 参数文档页面。)维度组和时间范围均在 accidents 视图中定义:
. . .
view: accidents {
. . .
dimension_group: event {
type: time
timeframes: [
raw,
date,
week,
year
]
sql: ${TABLE}.event_date ;;
}
. . .
}
注意事项
针对基于时间的查询优化源表
确保增量 PDT 的源表已针对基于时间的查询进行了优化。具体而言,用于增量键的时间列必须具有优化策略,例如分区、排序键、索引或您的方言支持的任何优化策略。强烈建议您优化源表,因为每次更新增量表时,Looker 都会查询源表,以确定用作增量键的时间列的最新值。如果源表未针对这些查询进行优化,Looker 查询最新值的速度可能会很慢,而且费用很高。
增量 PDT 支持的数据库方言
为了让 Looker 支持 Looker 项目中的增量 PDT,您的数据库方言必须支持可用于删除和插入行的数据定义语言 (DDL) 命令。
下表显示了 Looker 最新版本中哪些方言支持增量 PDT:
| 方言 | 是否支持? |
|---|---|
| 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 |