2

我在 dbt 中收到以下错误,使用雪花,我无法弄清楚问题是什么。

Database Error in model stg_bank_balances2 (models/staging/cas/vpapay/finance/stg_bank_balances.sql)
  000603 (XX000): SQL execution internal error:
  Processing aborted due to error 300010:2077141494; incident 5570604.
  compiled SQL at target/run/cas_datawarehouse/staging/cas/vpapay/finance/stg_bank_balances.sql 

当我打开文件并手动运行它时,我有一个 100% 运行的临时表。但是,当我运行它时, dbt run --models +stg_bank_balances 我得到了这个错误......有什么想法吗?


编译的SQL代码:


with
 __dbt__CTE__dw_bank_balance_base as (
with
 source as (select * from CAS_RAW.BANK_BALANCE_INFORMATION_FOR_DATAWAREHOUSE.FACILITY_DATA),

renamed as (
    select 
        to_date(date) as date
        ,FACILITY_BALANCE as facility_balance
        ,FACILITY_LIMIT as facility_limit
        ,LVR as loan_to_value_ratio_expected
        ,UNENCUMBERED_CASH as unencumbered_cash
    from source
)

select *
 from renamed
),data_sheet as ( select * 
                    ,row_number() over (order by date) as row_num
                from __dbt__CTE__dw_bank_balance_base
                ),
calendar as ( select * 
                from ANALYTICS.dev_avanwyk.stg_calendar 
                where date >= (select min(date) from data_sheet)
                    and date <= current_date()
                ),

creating_leads as (
    select a.*
        ,a.date as date_from
        ,case
            when b.date is null then current_date()
          else b.date
         end as date_to
     from data_sheet a
     left join data_sheet b on a.row_num = b.row_num-1
),

renamed as (

    select cal.date as cal_date
        ,ds.date_from, ds.date_to
        ,ds.facility_balance
        ,ds.facility_limit
        ,ds.loan_to_value_ratio_expected
        ,ds.unencumbered_cash

    from calendar cal
    left join creating_leads ds on 
                                ds.date_from <= cal.date
                                and 
                                cal.date < ds.date_to

)

select *
 from renamed

4

3 回答 3

3

您的 cte 名称相同,请尝试在您的模型中使用唯一的 cte(公用表表达式)名称。您可以看到您引用了两次名为“重命名”的 cte。尝试更改此设置并写回 Snowflake 吐出的内容。

于 2020-07-20T08:53:05.553 回答
1

我认为明乔是对的。

首先要注意的是这是一个Database Error( docs ) — 这意味着 Snowflake 正在返回错误,而 dbt 只是将其传递。

在这里,Snowflake 遇到了困难,因为您有两个同名的 CTE(公用表表达式)—— renamed. 看起来您有一个名为dw_bank_balance_baseephemeral 的上游模型,因此它被作为 CTE 注入。

你可以:

  • renamed将您的一个CTE重命名为其他名称
  • dw_bank_balance_base通过更改物化配置创建视图或表格

让我知道是否可以解决它!

于 2020-07-20T17:30:04.793 回答
1

发现问题 - dbt 不希望我将表加入到自身中。因此,我使用 prev_row_num = row_num -1 创建了另一个 CTE 来促进这一点。


with
 __dbt__CTE__dw_bank_balance_base as (
with
 source as (select * from CAS_RAW.BANK_BALANCE_INFORMATION_FOR_DATAWAREHOUSE.FACILITY_DATA),

renamed as (
    select 
        to_date(date) as date
        ,FACILITY_BALANCE as facility_balance
        ,FACILITY_LIMIT as facility_limit
        ,LVR as loan_to_value_ratio_expected
        ,UNENCUMBERED_CASH as unencumbered_cash
    from source
)

select *
 from renamed
),data_sheet as ( select * 
                    ,row_number() over (order by date) as row_num
                    ,(row_number() over (order by date))-1 as prev_row_num
                from __dbt__CTE__dw_bank_balance_base
                ),
data_sheet1 as ( select * 
                    ,(row_number() over (order by date))-1 as prev_row_num
                from __dbt__CTE__dw_bank_balance_base
                ),
calendar as ( select * 
                from ANALYTICS.dev_avanwyk.stg_calendar 
                where date >= (select min(date) from data_sheet)
                    and date <= current_date()
                ),

creating_leads as (
    select 
         a.date as date_from
        ,a.facility_balance
        ,a.facility_limit
        ,a.loan_to_value_ratio_expected
        ,a.unencumbered_cash
        ,case
            when b.date is null then current_date()
          else b.date
         end as date_to
     from data_sheet a
     left join data_sheet1 b on a.row_num = b.prev_row_num
),

staging as (

    select cal.date as cal_date
        ,ds.date_from
        , ds.date_to
        ,ds.facility_balance
        ,ds.facility_limit
        ,ds.loan_to_value_ratio_expected
        ,ds.unencumbered_cash

    from calendar cal
    left join creating_leads ds on 
                                ds.date_from <= cal.date
                                and 
                                cal.date < ds.date_to

)

select *
 from staging
于 2020-07-21T06:52:07.183 回答