首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >源中记录不唯一的DBT快照

源中记录不唯一的DBT快照
EN

Stack Overflow用户
提问于 2021-11-24 00:37:24
回答 2查看 143关注 0票数 0

我很想知道这里是否有人在处理DBT中的快照时遇到过源并不总是唯一的情况。

我有一个数据湖,数据只在追加的基础上到达。每次源被更新时,都会在数据湖中的相应表上创建一个新的记录。

在运行DBT解决方案时,我的源可能有超过1行具有唯一id的行,因为自上次运行以来,数据已经更改了不止一次。

理想情况下,我希望使用源中最早的dbt_valid_to记录来更新快照表中的各个updated_at列,然后将新记录添加到快照表中,使最新的updated_at记录成为当前记录。我知道如何使用窗口函数来实现这一点,但不确定如何使用dbt来处理这种情况。我想知道以前是否有人遇到过同样的问题。

代码语言:javascript
复制
Snapshot Table

| **id** |   **some_attribute** |   **valid_from**      |   **valid_to**          |
|  123   |      ABCD            |   2021-01-01 00:00:00 |    2021-06-30 00:00:00  | 
|  123   |      ZABC            |   2021-06-30 00:00:00 |      null               |

Source Table

|**id**|**some_attribute**|   **updated_at**    |
| 123  |   ABCD           | 2021-01-01 00:00:00 |-> already been loaded to snapshot
| 123  |   ZABC           | 2021-06-30 00:00:00 |-> already been loaded to snapshot
 -------------------------------------------
| 123  |   ZZAB           | 2021-11-21 00:10:00 |
| 123  |   FXAB           | 2021-11-21 15:11:00 |

Snapshot Desired Result

| **id** |   **some_attribute** |   **valid_from**      |   **valid_to**          |
|  123   |      ABCD            |   2021-01-01 00:00:00 |    2021-06-30 00:00:00  | 
|  123   |      ZABC            |   2021-06-30 00:00:00 |    2021-11-21 00:10:00  |
|  123   |      ZZAB            |   2021-11-21 00:10:00 |    2021-11-21 15:11:00  | 
|  123   |      FXAB            |   2021-11-21 15:11:00 |    null                 | 
EN

回答 2

Stack Overflow用户

发布于 2021-11-30 22:19:55

标准快照的运行假设是,我们正在拍摄的源表在没有存储历史的情况下被更改。这与我们在这里的行为是相反的(基本上,我们正在快照的源表只不过是事件的仅附加日志)-这意味着我们可以简单地使用一个无聊的旧incremental模型来实现与快照给我们的相同的SCD2结果。

我在这里有一些样例代码,可能会对https://gist.github.com/jeremyyeo/3a23f3fbcb72f10a17fc4d31b8a47854有所帮助

票数 0
EN

Stack Overflow用户

发布于 2021-11-24 01:37:59

我同意,如果dbt快照有一个可以涉及重复数据删除的策略,那将是非常方便的,但目前还不支持。

最简单的变通方法是源代码下游的stage视图,它具有您所描述的窗口函数。然后,您可以为该视图创建快照。

然而,我确实看到了处理仅追加源代码的新快照策略的潜力。也许您想仔细阅读现有策略的dbt Snapshot docsstrategies source code,看看是否想要创建新的策略!

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70089476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档