如何在Dataform增量表中自定义合并逻辑实现求和而非覆盖?
在Dataform中修改增量表的合并逻辑(求和替代默认覆盖)
我正在Dataform中创建增量表,默认的重复行合并逻辑是用新行覆盖现有行,但我需要改为将新重复行的数值与现有行数值求和。
源表是销售数据,其中insert_date为数据插入日期,transaction_date为交易发生日期——部分交易数据会在发生日期之后才被插入到源表中。
示例数据
源表数据
| insert_date | transaction_date | sales_quantity |
|---|---|---|
| 2023-12-01 | 2023-12-01 | 10 |
| 2023-12-02 | 2023-12-02 | 20 |
| 2023-12-03 | 2023-12-01 | 5 |
预期增量更新结果
我希望基于insert_date增量生成以transaction_date为唯一键的汇总表,最终结果如下:
| transaction_date | sales_quantity |
|---|---|
| 2023-12-01 | 15 |
| 2023-12-02 | 20 |
当前实现及问题
使用默认增量逻辑的SQLX代码如下:
config { type: "incremental", uniqueKey: ["transaction_date"] } pre_operations { DECLARE insert_date_checkpoint DEFAULT ( ${when(incremental(), `SELECT MAX(insert_date) FROM ${self()}`, `SELECT DATE("2000-01-01")`)} ) } SELECT transaction_date, SUM(sales_quantity) AS sales_quantity FROM ${ref("table")} WHERE insert_date > insert_date_checkpoint GROUP BY transaction_date
分别在2023-12-01、2023-12-02、2023-12-03执行增量任务后,得到的结果是新行覆盖了原有数据,而非求和:
| transaction_date | sales_quantity |
|---|---|
| 2023-12-01 | 5 |
| 2023-12-02 | 20 |
疑问
是否可以修改增量表的合并逻辑来替代默认的覆盖行为?还是需要创建特定的operations SQLX文件来实现?
注:销售表数据量庞大,且按insert_date分区,全量刷新成本过高,不可行。
内容的提问来源于stack exchange,提问作者Matt Kocak
相关产品推荐
相关产品推荐

