DBT合并多个unique_keys如何使用jinja引用唯一键?



根据dbt文档,它声明:

在需要多个列组合以惟一地识别每一行,我们建议您将这些列作为列表传递(unique_key = ['user_id', 'session_number']),而不是字符串表达式(unique_key = 'concat(user_id, session_number)').

所以我创建了一个小的增量模型,我需要使用多个唯一的键。

{{ config(materialized='table',
incremental_strategy='merge', 
unique_key=['col1', 'col2', 'col3']
) 
}}
WITH using_clause AS (
SELECT ...
FROM tbl
{% if is_incremental() %}
WHERE ingested_dt > (SELECT MAX(ingested_dt ) FROM {{ this }})
{% endif %}
)
, updates AS (
SELECT ...
FROM using_clause
{% if is_incremental() %}
WHERE my_unique_keys IN (SELECT unique_keys FROM {{ this }})
{% endif %}
) 
, inserts AS (
SELECT ..
FROM using_clause
WHERE unique_keys NOT IN (select unique_keys from updates)
) 
SELECT * FROM updates UNION inserts 

选择多列的正确方法是什么?我假设是沿着{ref(unique_keys)}的线?但是我在文档中找不到任何东西。

我当前的方法只是散列(md5),但我想知道是否有一个本地方法来做到这一点,因为unique_key参数接受多列。

您可以在DBT Jinja上下文中使用config对象。见https://docs.getdbt.com/reference/dbt-jinja-functions/config

如果你想在你的模型中使用unique_key,你可以这样做

SELECT {{ config.get("unique_key")|join(',') }}, ...
FROM {{ this }}

编译后,它看起来像这样

SELECT col1,col2,col3, ...
FROM my_model

最新更新