如何使用 dbt union_relations 宏通过算术运算重新定义列?

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

我正在使用 dbt 宏 union_relations 将多个视图合并为一个。在此过程中,我想在创建这个新视图时重新定义现有列。具体来说,我想对“成本”列执行算术运算。更准确地说,我想将增值税添加到“成本”列,以获得一个新列来表示包括增值税的成本。

这是我到目前为止所拥有的临时代码片段:

{{ dbt_utils.union_relations(
    relations=[
      ref('ADS.ALL_ADVERTISEMENTS_V'),
      ref('ADS.ALL_OOH_V'),
    ],
    exclude=['_DBT_SOURCE_RELATION']
) }}

此代码成功对所选关系执行 UNION 操作。但是,我需要有关如何在同一操作中重新定义“成本”列的指导,如下所示:

  • 将“成本”重命名为“costs_no_vat”。
  • 将“costs_vat”计算为“costs * 1.077”。

如何使用 dbt 框架实现这种转换?

snowflake-cloud-data-platform dbt union-all
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.