用量
max_cache_age: “24 小时”
sql_trigger: SELECT max(id) FROM my_tablename ;;
interval_trigger: “12 小时”
“”
层次结构
datagroup |
默认值
无接受
数据组的标识符,以及定义数据组属性的子参数。 |
定义
使用 datagroup
为探索和/或永久性派生表 (PDT) 分配缓存政策。如果您想为不同的探索和/或 PDT 使用不同的缓存政策,请使用单独的 datagroup
参数来指定各项政策。
label
:为数据组指定可选标签。如需了解详情,请参阅本页面中的label
和description
部分。description
:为数据组指定可选说明,用于解释数据组的用途和机制。如需了解详情,请参阅本页面中的label
和description
部分。
使用 datagroup
子参数指定缓存政策的详细信息:
max_cache_age
:指定用于定义时间段的字符串。当查询的缓存时长超过该时间段后,Looker 会使缓存失效。下次发出查询时,Looker 会将查询发送到数据库以获取最新结果。如需了解详情,请参阅本页面中的max_cache_age
部分。sql_trigger
:指定一个可返回一行且其中一列的 SQL 查询。如果查询返回的值与之前的结果不同,则数据组将进入触发状态。如需了解详情,请参阅本页面中的sql_trigger
部分。interval_trigger
:指定触发数据组的时间表,例如"24 hours"
。如需了解详情,请参阅本页面中的interval_trigger
部分。
通常,最好的解决方案是将 max_cache_age
与 sql_trigger
或 interval_trigger
结合使用。指定与数据加载 (ETL) 到数据库中相匹配的 sql_trigger
或 interval_trigger
值,然后指定一个 max_cache_age
值,使其在 ETL 失败时使旧数据失效。max_cache_age
参数可确保即使 sql_trigger
或 interval_trigger
未清除数据组的缓存,缓存条目也会在一定时间内过期。这样,数据组的故障模式将是查询数据库,而不是从 Looker 缓存传送过时的数据。
一个数据组不能同时包含
sql_trigger
和interval_trigger
参数。如果您同时使用两个参数定义一个数据组,则数据组将使用interval_trigger
值并忽略sql_trigger
值,因为sql_trigger
参数在查询数据库时需要使用数据库资源。对于使用用户属性来指定连接参数的连接,如果您想使用 SQL 查询触发器定义数据集缓存政策,则必须使用 PDT 覆盖字段创建单独的连接。
在 PDT 覆盖下,您仍可以使用模型及其“探索”功能的数据组,前提是您只使用max_cache_age
(而非sql_trigger
)定义数据组的缓存政策。
max_cache_age
max_cache_age
参数会指定一个字符串,其中包含一个整数,后跟“秒”、“分钟”或“小时”。此时间段是指使用该数据组的“探索”查询将使用缓存结果的最长时间。
当查询的缓存存在时长超过 max_cache_age
时,Looker 会使缓存失效。下次发出查询时,Looker 会将查询发送到数据库以获取最新结果。当查询的缓存存在时长超过 max_cache_age
时,Looker 会使缓存失效。下次发出查询时,Looker 会将查询发送到数据库以获取最新结果。如需了解数据在缓存中存储的时长,请参阅使用 datagroups 缓存查询和重建 PDT 文档页面。
如果启用了即时信息中心 Looker Labs 功能,从信息中心运行的查询将始终针对数据库运行;过往的运行数据会一直显示在信息中心,直到返回查询结果(无论 max_cache_age
值是多少)。
仅当缓存失效时,max_cache_age
参数才会定义;它不会触发重建 PDT。如果您定义仅包含 max_cache_age
的数据集,则在为该数据集分配任何派生表时,您会收到 LookML 验证警告。如果您将派生表保留给仅使用 max_cache_age
参数的 datagroup,那么系统会在首次查询派生表时构建该派生表,但派生表将无限期地置于暂存架构中,并且永远不会重新构建,即使再次查询也是如此。如果您希望在特定时间间隔内重新构建 PDT,则应向数据组添加 interval_trigger
参数来定义 PDT 重新构建时间表。
sql_trigger
使用 sql_trigger
参数可指定 SQL 查询,此查询会返回仅包含一列的一行。Looker 以数据库连接的 PDT 和 Datagroup 维护时间表字段中指定的间隔运行 SQL 查询。如果查询返回的值与之前的结果不同,则数据组会进入已触发状态。触发该数据组后,Looker 会使用其 datagroup_trigger
参数中指定的该数据组重建任何 PDT。PDT 重建完成后,数据组将进入就绪状态,并且 Looker 会使使用该数据组的任何探索的缓存结果无效。
通常,sql_trigger
会指定一个 SQL 查询,用于指示新的数据加载 (ETL) 何时发生,例如通过查询表中的 max(ID)
。您也可以使用 sql_trigger
指定当前时间,具体方法是查询当前日期,然后根据需要向相应时间戳添加额外的营业时间(例如凌晨 4 点)。
Looker 不会对
sql_trigger
执行时区转换。如果您希望在一天中的特定时间触发数据组,请将该触发器设置为数据库配置的时区。
如需了解如何设置 SQL 查询以触发数据组,请参阅 sql_trigger
参数中的这些示例。
interval_trigger
您可以使用可选的 interval_trigger
子参数来指定重新构建的时长。在 interval_trigger
参数中,您可以传递包含整数的字符串,后跟“秒”、“分钟”或“小时”。
label
和 description
您可以使用可选的 label
和 description
子参数来添加自定义标签以及数据组的说明。您也可以使用语言区域字符串文件对这些子参数进行本地化。
这些子参数会显示在 Admin 面板的 Database 部分中的 Datagroups 页面上。如需详细了解如何显示这些设置,请参阅管理设置 - 数据组文档页面。
示例
以下示例重点介绍 datagroup
的用例,包括:
创建缓存政策,以便在有新数据可用时或至少每 24 小时检索新结果
如需创建缓存策略以在有新数据可用时或至少每 24 小时检索新结果,请执行以下操作:
- 使用(模型文件中)的
orders_datagroup
数据组来命名缓存政策。 - 使用
sql_trigger
参数可指定表明存在最新数据的查询:select max(id) from my_tablename
。每当数据更新时,此查询都会返回一个新数字。 - 如果数据已缓存 24 小时,请使用
max_cache_age
设置使数据失效。 - 使用可选的
label
和description
参数可添加自定义标签以及数据组的说明。
datagroup: orders_datagroup {
sql_trigger: SELECT max(id) FROM my_tablename ;;
max_cache_age: "24 hours"
label: "ETL ID added"
description: "Triggered when new ID is added to ETL log"
}
如需将 orders_datagroup
缓存政策用作模型中“探索”的默认政策,请在模型级别使用 persist_with
参数,并指定 orders_datagroup
:
persist_with: orders_datagroup
若要为特定探索使用 orders_datagroup
缓存政策,请在 explore
参数下添加 persist_with
参数,并指定 orders_datagroup
。如果在模型级指定了默认数据集,您可以使用 explore
下的 persist_with
参数来替换默认设置。
explore: customer_facts {
persist_with: orders_datagroup
...
}
如需使用 orders_datagroup
数据组缓存政策重建 PDT,您可以在 derived_table
参数下添加 datagroup_trigger
,并指定 orders_datagroup
:
view: customer_order_facts {
derived_table: {
datagroup_trigger: orders_datagroup
...
}
}
创建数据组以安排在每月的最后一天送达
您可能希望创建一个时间表,以便在每个月末发送内容。但是,并非所有月份都有相同的天数。您可以创建一个数据组,以便在每个月末(无论特定月份的天数是多少)触发内容分发。
- 使用每个月末触发的 SQL 语句创建数据组:
datagroup: month_end_datagroup {
sql_trigger: SELECT (EXTRACT(MONTH FROM DATEADD( day, 1, GETDATE()))) ;;
description: "Triggered on the last day of each month"
}
此示例位于 Redshift SQL 中,可能需要对不同的数据库略作调整。
此 SQL 语句会返回明天所在的月份(在该月的最后一天,明天是下个月),因此会触发数据组。对于其他每一天,明天是同一月,因此不会触发数据组。
- 选择新的或现有的时间表中的数据组。
只有在使用相应数据组参数持久保留所有 PDT 的重新生成过程完成后,基于数据组的时间表才会发送,以确保您的传送包含最新的数据。
使用具有级联 PDT 的数据组
对于持久的级联派生表(在另一个定义中引用了一个持久派生表 (PDT)),您可以使用数据组为级联 PDT 链指定持久策略。
例如,以下模型文件的一部分定义了一个名为 user_facts_etl
的数据组和一个名为 user_stuff
的探索。“user_facts_etl
”数据组的“user_stuff
”探索会保留:
datagroup: user_facts_etl {
sql_trigger: SELECT max(ID) FROM etl_jobs ;;
}
explore: user_stuff {
persist_with: user_facts_etl
from: user_facts_pdt_1
join: user_facts_pdt_2 {
...
}
...
}
user_stuff
探索会将 user_facts_pdt_1
视图与 user_facts_pdt_2
视图联接起来。这两个视图都基于使用 user_facts_etl
数据组作为持久性触发器的 PDT。user_facts_pdt_2
派生表引用 user_facts_pdt_1
派生表,因此它们是级联 PDT。以下是这些 PDT 的视图文件中的一些 LookML:
view: user_facts_pdt_1 {
derived_table: {
datagroup_trigger: user_facts_etl
explore_source: users {
column: customer_ID {field:users.id}
column: city {field:users.city}
...
}
}
}
view: user_facts_pdt_2 {
derived_table: {
sql:
SELECT ...
FROM ${users_facts_pdt_1.SQL_TABLE_NAME} ;;
datagroup_trigger: user_facts_etl
}
}
如果您有级联 PDT,则必须确保这些 PDT 没有不兼容的数据组缓存政策。
Looker 重新生成器会检查状态并启动这些 PDT 的重新构建,如下所示:
- 默认情况下,Looker 的重新生成程序每五分钟检查一次数据组的
sql_trigger
查询(您的 Looker 管理员可以使用数据库连接的 PDT 和 Datagroup 维护时间表设置指定此时间间隔)。 - 如果
sql_trigger
查询返回的值与之前检查中的查询结果不同,则数据组会进入已触发状态。在此示例中,如果etl_jobs
表有新的ID
值,则会触发user_facts_etl
数据组。 触发
user_facts_etl
数据组后,Looker 重新生成程序会重建使用该数据组的所有 PDT(即使用datagroup_trigger: user_facts_etl
定义的所有 PDT)。在此示例中,重新生成程序会重建user_facts_pdt_1
,然后重新构建user_facts_pdt_2
。当 PDT 共享同一
datagroup_trigger
时,重新生成器会按照依赖关系顺序重建 PDT,先构建其他表引用的表。如需详细了解 Looker 如何重新构建级联派生表,请参阅 Looker 中的派生表文档页面。当重新生成器重建数据组中的所有 PDT 时,重新生成器会将
user_facts_etl
数据组从触发状态中移除。一旦“
user_facts_etl
”数据组不再处于触发状态,Looker 就会为使用user_facts_etl
数据组的所有模型和探索重置缓存(也就是说,所有使用persist_with: user_facts_etl
定义的模型和探索)。在本例中,这意味着 Looker 会为user_stuff
“探索”重置缓存。系统会发送任何基于
user_facts_etl
数据组的定时内容提交。在此示例中,如果包含user_stuff
探索的查询的计划传送,系统将从数据库中检索计划查询以获取最新结果。
在模型文件之间共享数据组
以下示例展示了如何与多个模型文件共享数据组。此方法的优势在于,如果您需要修改数据组,只需在一个位置修改该数据组,即可使这些更改在所有模型中生效。
如需与多个模型文件共享数据组,请先创建一个仅包含数据组的单独文件,然后使用 include
参数include
模型文件中的数据组文件。
创建 datagroups 文件
创建一个单独的 .lkml
文件来包含您的数据组。您可以按照与创建单独的 .lkml
探索文件相同的方式创建 .lkml
数据组文件。
在此示例中,datagroups 文件名为 datagroups.lkml
:
datagroup: daily {
max_cache_age: "24 hours"
sql_trigger: SELECT CURRENT_DATE();;
}
在模型文件中添加 datagroups 文件
现在,您已经创建了 datagroups 文件,接下来可以在两个模型中分别 include
该文件并使用 persist_with
将 datagroup 应用于模型中的各个探索,或者将数据组应用于模型中的所有探索。
例如,以下两个模型文件均 include
和 datagroups.lkml
文件。
此文件的名称为 ecommerce.model.lkml
。daily
数据组在 explore
级别使用,因此仅适用于 orders
探索:
include: "datagroups.model.lkml"
connection: "database1"
explore: orders {
persist_with: daily
}
下一个文件名为 inventory.model.lkml
。daily
数据组在 model
级别使用,因此它将应用于模型文件中的所有探索:
include: "datagroups.model.lkml"
connection: "database2"
persist_with: daily
explore: items {
}
explore: products {
}