使用 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_relation
returns一个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 %}
...
我想使用 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
returns一个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 %}
...