我目前正在使用 dbt 并尝试构建 PSA(持久暂存区域),在我看来,快照功能非常适合此目的。但是,我在源中没有时间戳,所以我必须使用“检查”策略。
对于“check_cols”,我想使用哈希值,所以我想到了 dbt_utils.surrogate_key()。
但我想计算除始终相同的两列之外的所有列的哈希值。
所以我的模型看起来像这样:
{% snapshot Item_hist %}
{{
config(
unique_key='item_id',
strategy='check',
check_cols=['diff_hash'],
target_database='PSA',
target_schema='sourceA',
alias= 'Item',
invalidate_hard_deletes=True
)
}}
select {{ dbt_utils.surrogate_key(['Tenant','ItemNo']) }} as item_id,
{{ dbt_utils.surrogate_key( dbt_utils.star(from=source('sourceA', 'item'), except=["fieldA", "fieldB"]) ) }} as diff_hash,
*
from {{ source('sourceA', 'item') }}
{% endsnapshot %}
Run Code Online (Sandbox Code Playgroud)
不幸的是,dbt_utils.surrogate_key() 无法处理 dbt_utils.star() 的返回值。我该如何继续,以便 surrogate_key() 可以根据返回值计算哈希值?