首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在雪花中使用dbt_utils.union_relations?

如何在雪花中使用dbt_utils.union_relations?
EN

Stack Overflow用户
提问于 2021-11-22 21:40:01
回答 2查看 196关注 0票数 1

我有以下代码:

代码语言:javascript
运行
复制
{{
    config(
        materialized='table',
        unique_key='dbt_scd_id'
    )
}}

with unioned as (
  {{ dbt_utils.union_relations(
    relations=[
      ref('blaze_inventory_stg'),
    ],
    include=[
      "source_name",
      "location_id_ext",
      "product_name",
      "brand",
      "strain_name",
      "category",
      "product_weight_grams",
      "product_unit_of_measure",
      "purchase_category",
      "quantity",
      "sku",
      "dbt_updated_at",
      "dbt_valid_from",
      "dbt_valid_to",
      "dbt_scd_id"
    ]
  )}}
)

select * from unioned

它生成以下sql

代码语言:javascript
运行
复制
      create or replace transient table POS_DATA.dbt_dev.retail_inventory_snapshot_stg  as
      (

with unioned as (
  

        (
            select

                cast('POS_DATA.dbt_dev.blaze_inventory_stg' as 
    varchar
) as _dbt_source_relation,
                

            from POS_DATA.dbt_dev.blaze_inventory_stg
        )

        
)

select * from unioned
      );

显然,它并不是从该表中获取所有的列名并插入它们。为什么会这样呢?我读到过here,dbt_utils.union_relation依赖于信息模式来构建它的查询。也许雪花信息模式是dbt无法发现的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-25 15:15:36

我遇到了同样的问题--或者似乎是同样的问题,也是在Snowflake上使用DBT。

在我的例子中,我在创建源代码时没有引用列,所以案例是Snowflake default (大写)。这与包含列表不匹配,因为它都是小写的。

因此,在我的情况下,我首先删除了包含列表(创建了源表的副本)。这很管用。

然后我尝试了包含列表,但大小写,瞧-它按预期工作。

票数 2
EN

Stack Overflow用户

发布于 2021-11-23 17:07:14

我的猜测是,宏无法从您正在命名的关系(macro source code)中获取列名,这是我不确定的原因。你已经打电话给dbt run -m blaze_inventory_stg了吗?

为了证明我的假设,使用以下代码创建一个新的模型文件big_boy.sql,然后运行dbt run -m big_boy。我的猜测是列不能解析。

代码语言:javascript
运行
复制
-- big_boy.sql
{% if execute %}
  {%- set cols = adapter.get_columns_in_relation(ref('blaze_inventory_stg')) -%}
  {{ log('colums: ' ~ cols, info=True) }}
{% endif %}

SELECT 1 as my_col

如果上面的模型文件确实获取列并将其打印到控制台,那么一定是发生了其他事情。为了进一步调试,我建议将上面链接的default__union_relations宏重命名为新名称,然后在模型中调用新宏。然后,您可以散布log语句,以获得有关错误位置的更多信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70072706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档