问题描述
我想使用 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_relation
返回一个 Column objects 的列表,其中包含列名和类型,所以上面的代码会确认列和它们的类型是一样的。如果您只想确认列名匹配,则需要添加逻辑来比较 if 语句开头的 name 属性。
...
{% set columns2_cleaned = [] %}
{% for column in columns2 %}
{{ columns2_cleaned.append(column.name) }}
{% endfor %}
{% for column in columns1 %}
{% if column.name in columns2_cleaned %}
...