在 Unique_Key 中使用多个列在 DBT 中进行增量加载

Using multiple columns in a Unique_Key for incremental loading in DBT

对于增量模型,DBT 文档 here 说:

The unique_key should be supplied in your model definition as a string representing a simple column or a list of single quoted column names that can be used together, for example, ['col1', 'col2', …])

我用这个增量定义在 DBT 中构建了一个增量模型

{{
  config(
    materialized='incremental',
    unique_key = ['Col1', 'Col2', 'Col3']
  )
}}

在 Snowflake 中编译成这个合并语句:

using DW_DEV.dbt_dgarrison_DATA_STAGING.MY_TABLE__dbt_tmp as DBT_INTERNAL_SOURCE
    on 
        DBT_INTERNAL_SOURCE.['Col1', 'Col2', 'Col3'] = DBT_INTERNAL_DEST.['Col1', 'Col2', 'Col3']
...

这合理地引发了一个 SQL 抱怨括号的错误:

SQL compilation error: syntax error line 4 at position 32 unexpected '['. syntax error line 4 at position 45 unexpected ','. syntax error line 4 at position 98 unexpected '['. syntax error line 4 at position 111 unexpected ','.

我找不到任何其他以这种方式使用多列的好例子。 (有涉及连接列的选项,我愿意接受有关最佳方法的建议,但我正在尝试弄清楚如何使用 DBT 推荐的语法)

作为 dbt-core 1.1.0, we can now pass a list to the unique_key statement in incremental models. See the original issue here 的一部分。

这意味着您应该能够通过在本地更新 dbt-core 和您的 dbt-<adapter> 版本来实现您的目标;或相应地将您的 dbt Cloud 版本更新为 1.1.0,因为给定您收到的错误,看起来 unique_key 仍在寻找单个字符串而不是数组。