DBT中文社区

    • Register
    • Login
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • 达之云

    开源软件DBT中文社区

    微信号:DBT_CN

    QQ群:551308350

    快照Snapshots使用说明

    使用指南
    1
    1
    963
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      dazdata last edited by dazdata

      什么是快照?
      分析师通常需要“及时回顾”其可变表中以前的数据状态。虽然某些源数据系统的构建方式使访问历史数据成为可能,但情况并非总是如此。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 函数引用。

      1 Reply Last reply Reply Quote 0
      • First post
        Last post
      Powered by Dazdata MDS | 武汉达之云计算有限公司