开源软件DBT中文社区
微信号:DBT_CN
QQ群:551308350
快照Snapshots使用说明
-
什么是快照?
分析师通常需要“及时回顾”其可变表中以前的数据状态。虽然某些源数据系统的构建方式使访问历史数据成为可能,但情况并非总是如此。DBT 提供了一种机制,即快照,它记录对可变对象的更改桌子随着时间的推移。快照在可变源表上实现类型 2 缓慢变化的维度。这些缓慢变化的维度(或 SCD)标识表中的行如何随时间变化。假设您有一个表,其中的status状态字段,在处理订单时可以覆盖该字段。
id status updated_at
1 pending 2019-01-01
现在,假设订单从“待处理”变为“已发货”。相同的记录现在将如下所示:
id status updated_at
1 shipped 2019-01-02
此订单现在处于“已发货”状态,但我们丢失了有关订单上次处于“待处理”状态的时间的信息。这使得很难(或不可能)分析订单发货需要多长时间。dbt 可以“快照”这些更改,以帮助您了解行中的值如何随时间变化。下面是上一示例的快照表示例:
id status updated_at dbt_valid_from dbt_valid_to
1 pending 2019-01-01 2019-01-01 2019-01-02
1 shipped 2019-01-02 2019-01-02 null
在 dbt 中,快照是在快照配置文件(通常在snapshots目录中)的快照块中定义的语句。您还需要配置快照以告知 dbt 如何检测记录更改。
snapshots/orders.sql
{% snapshot orders_snapshot %}{{
config(
target_database='analytics',
target_schema='snapshots',
unique_key='id',strategy='timestamp', updated_at='updated_at', )
}}
select * from {{ source('jaffle_shop', 'orders') }}
{% endsnapshot %}
运行 dbt snapshot命令时:-
第一次运行时:dbt 将创建初始快照表 — 这将是语句的结果集,其他列包括 和 。所有记录都将有一个 .selectdbt_valid_fromdbt_valid_todbt_valid_to = null
-
在后续运行中:dbt 将检查哪些记录已更改或是否创建了任何新记录:
-
对于已更改的任何现有记录,将更新该列dbt_valid_to
-
更新的记录和任何新记录都将插入到快照表中。这些记录现在将具有dbt_valid_to = null
快照可以在下游模型中使用 ref 函数引用。
-