因此,我们有一个名为dim_merchant.sql的表和这个表的快照,称为dim_merchant_snapshot。
{% snapshot dim_merchant_snapshot %}
{{
config
(
target_schema='snapshots',
unique_key='id',
strategy='check',
check_cols='all'
)
}}
select * from {{ ref('dim_merchant') }}
{% endsnapshot %}我们从没有遇到过问题,但是从昨天开始,我们在使用以下错误消息运行快照时遇到了失败:
Database Error in snapshot dim_merchant_snapshot (snapshots/dim_merchant_snapshot.sql)
100090 (42P18): Duplicate row detected during DML action此错误发生在快照的这一步骤中:
On snapshot.analytics.dim_merchant_snapshot: merge into "X"."SNAPSHOTS"."DIM_MERCHANT_SNAPSHOT" as DBT_INTERNAL_DEST
using "X"."SNAPSHOTS"."DIM_MERCHANT_SNAPSHOT__dbt_tmp" as DBT_INTERNAL_SOURCE
on DBT_INTERNAL_SOURCE.dbt_scd_id = DBT_INTERNAL_DEST.dbt_scd_id
when matched
and DBT_INTERNAL_DEST.dbt_valid_to is null
and DBT_INTERNAL_SOURCE.dbt_change_type in ('update', 'delete')
then update
set dbt_valid_to = DBT_INTERNAL_SOURCE.dbt_valid_to
when not matched
and DBT_INTERNAL_SOURCE.dbt_change_type = 'insert'我们意识到一些值在快照中被插入和更新了两次(从昨天起),这导致了快照的失败,但是我们不知道为什么。
请注意,对dim_merchant上的id键进行了唯一性测试,并且没有重复该键。同时,快照表包含第一次快照运行后的重复(这不会导致任何失败),但是在感染重复项的快照表上的后续运行正在失败。
我们最近刚刚将dbt从0.20.0更新到1.0.3,但没有发现这些版本之间的快照定义有任何变化。
设置:
dbt-core==1.0.3,
dbt-snowflake==1.0.0,
dbt-extractor==0.4.0,
Snowflake version: 6.7.1 谢谢!
发布于 2022-10-19 17:12:05
我知道这事已经有一段时间了。我也想报告说我也看到了这种奇怪的行为。我有一张表,我正在用timestamp策略进行快照。unique_key由几个列组成。目的是在每次运行模型时,这是一个完整的快照。被快照的表具有所有唯一的行,这意味着dbt_scd_id是唯一的键。通过将updated_at列添加到unique_key配置中,解决了这个问题。从理论上讲,这不重要,因为dbt_scd_id已经是unique_key和updated_at的连接。无论如何,它已经解决了这个问题。
https://stackoverflow.com/questions/71504541
复制相似问题