使用 DBT 查找两个表的 INTERSECT

Find INTERSECT of two tables using DBT

我想使用 DBT 查找 2 个表之间的公共列。但我无法找到正确的方法来做到这一点。 有人可以帮忙吗?提前致谢

您可以创建一个使用 adapter.get_columns_in_relation() 和 jinja 的宏。

{% macro compare_columns(table1, table2) %}
    {% set columns1 = adapter.get_columns_in_relation(ref(table1)) %}
    {% set columns2 = adapter.get_columns_in_relation(ref(table2)) %}
    {% for column in columns1 %}
        {% if column in columns2 %}
            {{ log("Column: " ~ column.name, info=true) }}
        {% endif %}
    {% endfor %}
{% endmacro %}

get_columns_in_relationreturns一个Column objects的列表,里面包含了列名和类型,所以上面的代码会确认列和它们的类型是一样的。如果您只是想确认列名称匹配,那么您需要添加逻辑来比较 if 语句开头的名称属性。

   ...
    {% set columns2_cleaned = [] %}
    {% for column in columns2 %}
        {{ columns2_cleaned.append(column.name) }}
    {% endfor %}
    {% for column in columns1 %}
        {% if column.name in columns2_cleaned %}
   ...