如何在dbt中使用Jinja块实现CASE WHEN语句?
在dbt中用Jinja实现CASE WHEN状态映射
直接用Jinja的循环功能可以快速生成你要的CASE WHEN语句,而且后续维护状态映射会更方便,具体实现如下:
- 先在dbt模型文件里定义状态映射的Jinja字典
{% set status_map = { 0: 'pending', 1: 'ordered', 2: 'shipped', 3: 'received', 4: 'delivered' } %}
- 用Jinja循环生成CASE WHEN分支
CASE status {% for code, label in status_map.items() %} WHEN {{ code }} THEN '{{ label }}' {% endfor %} ELSE NULL END as status_mapping
这样编译后的SQL就是你想要的目标语句。如果之后需要新增或修改状态,只需要调整status_map里的键值对就行,不用手动修改每个WHEN分支,效率更高。
内容的提问来源于stack exchange,提问作者kimi
相关产品推荐
相关产品推荐

