我有两个大表,我正在尝试使用 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 上运行。
正如 @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所写)。
| 归档时间: |
|
| 查看次数: |
9490 次 |
| 最近记录: |