You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么我的dbt snapshot同天会产生大量不同的dbt_from_date值?

dbt Snapshot 运行逻辑及问题解答

核心原理:timestamp 策略快照的运行规则

你使用的是dbt snapshot的timestamp策略,运行逻辑如下:

  • 每次快照执行时,dbt会拉取源表全量数据,和快照表中当前有效的(即dbt_to_date为无穷大值)记录做比对,比对规则基于你配置的unique_key和updated_at字段
  • 对同一个id(你的unique_key),如果源表中该记录的updated_at值大于快照表中当前有效记录的dbt_from_date,则判定为该记录有更新
  • 触发更新后,dbt会把快照表中旧的有效记录的dbt_to_date更新为当前快照的运行时间,同时插入一条新的有效记录:新记录的dbt_from_date直接复用源表该记录的updated_at值,dbt_to_date设为无穷大值

观测到的现象属于预期结果

你查询到2021-10-07当天有993个不同的dbt_from_date、时间跨度长达8小时,是正常结果:

  • 这些dbt_from_date不是快照的运行时间,是源表XYZ.ABC中对应记录的实际更新时间
  • 说明2021-10-07当天你的源表一共有993条不同时间更新的记录,这些更新在10月7日之后的第一次快照运行时被批量捕获,生成了对应的快照版本,就出现了你看到的查询结果
  • 你可以任意取一个查询返回的dbt_from_date值和对应的id,去源表查询该id的updated_at,二者会完全匹配

补充说明

如果你希望所有同批次生成的快照版本的dbt_from_date统一为快照的运行时间,可以修改snapshot策略为check,同时指定要比对的字段即可。不过timestamp策略本身就是为了精准追踪记录实际更新时间设计的,更符合大多数缓慢变化维的构建需求。

内容的提问来源于stack exchange,提问作者thedre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:06:04