如何在 DBT 中编写增量模型?

MYK*_*MYK 1 dbt

我有两个大表,我正在尝试使用 dbt 连接和过滤。

SQL很简单,大致如下:

SELECT
   u.user_id, t.transaction_id
FROM users u
JOIN transactions t ON t.user_id = u.user_id
WHERE u.active = 1
Run Code Online (Sandbox Code Playgroud)

目前我正在使用“表”具体化,但这相当浪费,因为表底层的表在每次运行时都是 99.99% 相同的。

但是,我从 DBT 文档中不明白如何将此模型设置为“增量”。

有任何想法吗?

附言。我在 SQL Server 上运行。

Leo*_*own 5

正如 @anders-swanson 在他的评论中所写,如果transaction_id绝对是唯一的,您可以将其设置为unique_key并将您的模型具体化为增量表。

dbt 的文档解释了如何执行此操作。使用您的示例,它可能是:

{{
    config(
        materialized='incremental',
        unique_key='transaction_id'
    )
}}

select
   u.user_id, t.transaction_id
from users u
join transactions t ON t.user_id = u.user_id
where u.active = 1
Run Code Online (Sandbox Code Playgroud)

如果transaction_id不是唯一的但是transaction_id|| user_id是,您可以尝试创建一个新列,将这些列连接到上游 dbt 模型中,然后将其分配为unique_key

{{
    config(
        materialized='incremental',
        unique_key='pkey'
    )
}}

select
   u.user_id, 
   t.transaction_id,
   u.user_id||t.transaction_id as pkey
from users u
join transactions t ON t.user_id = u.user_id
where u.active = 1
Run Code Online (Sandbox Code Playgroud)

否则,您必须拉入a)唯一的列,或b)具有可用于应用过滤器的有序质量的列is_incremental()(如@viacheslav-nefedov所写)。