在使用dbt进行增量操作时,如果该行存在,我希望进行聚合,否则插入



我使用DBT将数据从红移中的一个模式增量加载到另一个模式以创建报告。在DBT中,有一种直接的方法可以使用upstart增量加载数据。但不是做传统的追加销售。如果目标表中的传入行和旧行已经存在,我想对它们求和(在表中其余列的唯一id上(,否则请插入它们。比如说我有一张桌子。

T1(userid, total_deposit, total_withdrawal)

我已经创建了一个计算用户总存款和总提款的表,当我进行增量查询时,我可能会为现有用户获得新的存款或提款,在这种情况下,我必须在现有表中添加值,而不是使用upstart替换它。如果用户是新用户,我只需要做简单的插入。关于如何处理这个问题,有什么建议吗?

dbt非常坚持dbt的调用应该是幂等的。这意味着您可以反复运行相同的命令,结果将是相同的。

您描述的操作不是幂等的,所以您将很难让它开箱即用地使用dbt。

作为替代方案,我将把它分解为两个步骤:

  1. 构建一个增量模型,在其中添加新活动
  2. 创建一个下游模型,该模型引用增量模型并执行要为每个客户计算余额的聚合。您可以非常小心地将其作为一个增量模型,将user_id作为unique_key(因为您在#1中有所有的原始事务(,但我会从没有这一点开始,并确保出于性能原因这是绝对必要的,因为这会增加相当多的复杂性

关于复杂增量物化的更多信息,我建议由创始人兼首席执行官Tristan Handy撰写这篇文章;dbt实验室首席执行官

相关内容

  • 没有找到相关文章

最新更新