如何在 DBT 中使用 Jinja 循环遍历所有列?

问题描述 投票:0回答:3

我想使用 dbt 迭代所有列。

sql dbt
3个回答
8
投票

您可以使用内置的

adapter
包装器和 adapter.get_columns_in_relation:

{% for col in adapter.get_columns_in_relation(ref('<<your model>>')) -%}
    ... {{ col.column }} ...
{% endfor %}

2
投票

我认为 dbt-utils 包中的星号宏 + 一些 for 循环逻辑可能对您有帮助?这取决于您正在使用的确切用例和仓库(如评论中指出的)。

star 宏在提供的表中生成列列表。

因此,一种可能的方法是:

{% for col in adapter.get_columns_in_relation(ref('my_model')) }}] %}
...operation...
{% endfor %}


2
投票

如果您有

model
节点,并且将列定义为 模型属性,则这将起作用:

{% for col in model.columns.values() %}
  ... {{ col.name }}  ... {{ col.data_type }} ... 
{% endfor %}

您可以从graph获取模型节点:

{% set model = graph.nodes.values()
        | selectattr("resource_type", "equalto", "model")
        | selectattr("name", "equalto", model_name)
        | first %}
© www.soinside.com 2019 - 2024. All rights reserved.