开源软件DBT中文社区
微信号:DBT_CN
QQ群:551308350
增强模型:增量模型
-
增量模型
概述
增量模型在数据仓库.首次运行模型时,桌子通过转换源数据的所有行来构建。在后续运行中,dbt 仅转换源数据中您告诉 dbt 过滤的行,并将它们插入到目标表中,即已构建的表。通常,在增量运行中筛选的行将是源数据中自上次运行 dbt 以来创建或更新的行。因此,在每次 dbt 运行时,您的模型都会以增量方式生成。
使用增量模型会限制需要转换的数据量,从而大大减少转换的运行时间。这可以提高仓库性能并降低计算成本。
使用增量物化
像另一个一样物化增量模型内置于 DBT 中,使用语句定义,具体化定义在配置块中。select{{
config(
materialized='incremental'
)
}}select ...
要使用增量模型,您还需要告诉 dbt:
- 如何在增量运行中筛选行
- 模型的唯一键(如果有)
筛选增量行
若要告知 dbt 应在增量运行时转换哪些行,请在宏中包装筛选这些行的有效 SQL。is_incremental()通常,您需要筛选“新”行,例如自上次 dbt 运行此模型以来创建的行。查找此模型最近运行的时间戳的最佳方法是检查目标表中的最新时间戳。DBT 使使用“{{ this }}”变量查询目标表变得容易。
同样常见的是想要同时捕获新记录和更新的记录。对于更新的记录,您需要定义一个唯一键,以确保不会将修改后的记录作为重复项引入。您的代码将检查自上次 dbt 运行此模型以来创建或修改的行。is_incremental()
定义唯一键(可选)
A 允许更新现有行,而不仅仅是追加新行。如果现有 的新信息到达,则该新信息可以替换当前信息,而不是追加到表中。如果到达重复行,则可以忽略它。有关管理此更新行为的更多选项,请参阅特定于策略的配置,例如仅选择要更新的特定列。unique_keyunique_key不指定 将导致仅追加行为,这意味着 dbt 会将模型的 SQL 返回的所有行插入到预先存在的目标表中,而不考虑这些行是否表示重复项。unique_key
可选参数指定定义模型粒度的字段(或字段组合)。也就是说,字段标识单个唯一行。您可以在模型顶部的配置块中定义,它可以是单个列名称或列名称列表。unique_keyunique_key
应在模型定义中以表示单个列的字符串或可一起使用的单引号列名称列表的形式提供,例如 。以这种方式使用的列不应包含任何 null,否则增量模型运行可能会失败。确保每列没有空值(例如 ),或者定义单列代理键。
定义 时,对于 dbt 模型返回的每一行“新”数据,您将看到以下行为:unique_key- 如果“新”和“旧”模型数据中存在相同的数据,dbt 将用新数据行更新/替换旧行。更新/替换如何发生的确切机制将根据您的数据库、增量策略和特定于策略的配置而有所不同。
- 如果 “旧”数据中不存在,dbt 会将整行插入到表中。
请注意,如果现有目标表或新增量行中存在多行,则增量模型运行将失败。您的数据库和增量策略将确定您看到的特定错误,因此,如果您在运行增量模型时遇到问题,最好仔细检查唯一键在现有数据库表和新增量行中是否真正唯一。