在DBT Jinja宏的for循环中获取对应表的flag列表问题
解决方法:匹配每个表对应的Flag值
你之前的写法错误在于把table和flag当成独立列表通过索引关联,但从{{ model }}查询返回的是包含行对象的集合,每行同时携带table、columns、flag三个字段,无法通过flag[n]的方式对应关联。
正确的Jinja遍历实现
方式1:先存储查询结果再遍历
先将查询结果赋值给变量,再逐行遍历处理:
{% set table_flag_data = run_query(" select table, columns, flag from " ~ model ~ " ") %} {% set table_flag_rows = table_flag_data.rows %} {% for row in table_flag_rows %} {% set target_table = row.table %} {% set target_flag = row.flag %} {% if target_flag == 'False' %} # 这里编写你的业务逻辑,比如针对该表的处理代码 处理表:{{ target_table }},Flag值为{{ target_flag }} {% endif %} {% endfor %}
方式2:直接遍历模型结果(dbt场景)
如果是在dbt模型文件中使用,可直接遍历当前模型的结果行:
{% for row in this.rows %} {% if row.flag == 'False' %} 表{{ row.table }}的Flag为False,执行对应处理逻辑 {% endif %} {% endfor %}
注意事项
- 若
flag字段是布尔类型而非字符串,判断时要改为{% if not row.flag %},避免类型不匹配导致的判断失效。
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

