我正在使用 dbt 宏 union_relations 将多个视图合并为一个。在此过程中,我想在创建这个新视图时重新定义现有列。具体来说,我想对“成本”列执行算术运算。更准确地说,我想将增值税添加到“成本”列,以获得一个新列来表示包括增值税的成本。
这是我到目前为止所拥有的临时代码片段:
{{ dbt_utils.union_relations(
relations=[
ref('ADS.ALL_ADVERTISEMENTS_V'),
ref('ADS.ALL_OOH_V'),
],
exclude=['_DBT_SOURCE_RELATION']
) }}
此代码成功对所选关系执行 UNION 操作。但是,我需要有关如何在同一操作中重新定义“成本”列的指导,如下所示:
如何使用 dbt 框架实现这种转换?
dbt_utils.union_relations
宏仅返回一条SQL语句。考虑到这一点,您可以将宏放入 CTE 中并像任何 SQL 语句一样对其进行查询。此外,我们可以使用新的 Snowflake select * rename
功能 来重命名该列。
with unioned as (
{{ dbt_utils.union_relations(
relations=[
ref('ADS.ALL_ADVERTISEMENTS_V'),
ref('ADS.ALL_OOH_V'),
],
exclude=['_DBT_SOURCE_RELATION']
) }}
)
select * rename (costs as costs_no_vat)
, costs * 1.077 as costs_vat
from unioned