在模型中使用变量数组

Using variable arrays in models

是否可以在 vars 部分定义一个数组并在模型的 SQL 语法中使用它?

像这样

dbt_project.yml:

vars:
  active_country_codes: ['it','ge']

model.sql

SELECT ... 
  FROM TABLE WHERE country_code IN ('{{ var("active_country_codes") }}')

我已经尝试使用单个值,即:['it'],并且有效,但如果我添加另一个值,它就会开始失败。

我正在使用 SQL 服务器数据连接器。

我有根据的猜测是 {{ var("active_country_codes") }} 的结果是插入逗号分隔的字符串。在这种情况下,您将需要一个字符串拆分函数。如果您还没有,则必须自己推出,除非您拥有 SQL Server 2016 或更高版本。然后你可以使用string_split。下面是使用它的代码。由于性能原因,我使用 exists 方法而不是 in

select    ...
from      table t
where     exists (
              select   0
              from     string_split('{{ var("active_country_codes") }}', ',') ss
              where    t.country_code = ss.value
          )

您所写的查询是正确的。您只需要将变量作为带逗号的字符串也作为字符串字符传递。

vars:
  active_country_codes: 'it'',''ge'

你可以这样做:

SELECT ... 
  FROM TABLE WHERE country_code IN ('{{ var("active_country_codes") }}')

它会像这样为您创建查询:

SELECT ... 
  FROM TABLE WHERE country_code IN ('it,'ge')

我已经测试过了,它工作正常。我正在使用 Bigquery Connection,但它不重要,因为它是 dbt 生成。

我会使用:

vars:
   var_name: "'one','two','three'"
where field_name in ({{ var("var_name") }})

看起来比

更清楚一点
  active_country_codes: 'it'',''ge'