在 dbt 模型中使用 if 块

Posted

技术标签:

【中文标题】在 dbt 模型中使用 if 块【英文标题】:Using if block in dbt models 【发布时间】:2021-01-07 14:20:46 【问题描述】:

抱歉提出愚蠢的问题。但我尝试了许多不同的方法,但似乎都没有奏效。

我需要根据变量从 2 个不同的表中选择数据。我正在尝试使用 if 语句在 dbt 模型中执行此操作,但它似乎不起作用。

模型看起来很瘦:

SELECT 
*
FROM
% if enable_whitelisting == 'true' %
     ref('accounts_whitelisted')     accounts
% else %
         ref('accounts')    accounts
% endif %

感谢任何帮助。

提前致谢。

【问题讨论】:

嘿拉维。你能分享更多信息吗?运行时是否出现错误?你能分享一下编译后的代码是什么样的吗?你是如何传递变量的? 嗨@dylanbaker,我解决了我的问题。我在下面回答。变量名必须放在 var() 【参考方案1】:

我最终得到了这个工作。必须将变量名放在 var()

SELECT 
*
FROM
% if var('enable_whitelisting') == 'true' %
     ref('accounts_whitelisted')     accounts
% else %
         ref('accounts')    accounts
% endif %

【讨论】:

您能解释一下原因吗?

以上是关于在 dbt 模型中使用 if 块的主要内容,如果未能解决你的问题,请参考以下文章

DBT模型挂

DBT构建和部署机器学习模型预测订单退货

DBT - dbt 部署模型应属于的架构的最佳实践?

使用本地包编译 dbt 时出错

为啥在 dbt 中运行模型时出现“关系 <y> 的列 <x> 不存在”错误,但在 SQL 客户端中运行时却没有?

使用 dbt for-loop 在 BigQuery 中创建多个表