在模型中使用变量数组
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'
是否可以在 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'