我使用DBT将数据从红移中的一个模式增量加载到另一个模式以创建报告。在DBT中,有一种直接的方法可以使用upstart增量加载数据。但不是做传统的追加销售。如果目标表中的传入行和旧行已经存在,我想对它们求和(在表中其余列的唯一id上(,否则请插入它们。比如说我有一张桌子。
T1(userid, total_deposit, total_withdrawal)
我已经创建了一个计算用户总存款和总提款的表,当我进行增量查询时,我可能会为现有用户获得新的存款或提款,在这种情况下,我必须在现有表中添加值,而不是使用upstart替换它。如果用户是新用户,我只需要做简单的插入。关于如何处理这个问题,有什么建议吗?
dbt非常坚持dbt的调用应该是幂等的。这意味着您可以反复运行相同的命令,结果将是相同的。
您描述的操作不是幂等的,所以您将很难让它开箱即用地使用dbt。
作为替代方案,我将把它分解为两个步骤:
- 构建一个增量模型,在其中添加新活动
- 创建一个下游模型,该模型引用增量模型并执行要为每个客户计算余额的聚合。您可以非常小心地将其作为一个增量模型,将
user_id
作为unique_key
(因为您在#1中有所有的原始事务(,但我会从没有这一点开始,并确保出于性能原因这是绝对必要的,因为这会增加相当多的复杂性
关于复杂增量物化的更多信息,我建议由创始人兼首席执行官Tristan Handy撰写这篇文章;dbt实验室首席执行官