由于 300010:2077141494,内部 SQL 错误 (000603 (XX000))

Internal SQL error (000603 (XX000)) due to 300010:2077141494

我在使用 snowflake 的 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 

我有一个暂存 table,当我打开文件并手动 运行 时 运行 宁 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

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

我觉得Mincho是对的

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

在这里,Snowflake 遇到了困难,因为您有两个同名的 CTE(常见 table 表达式)- renamed。看起来您有一个名为 dw_bank_balance_base 的上游模型,它是短暂的,因此它被作为 CTE 注入。

您可以:

  • 将您的一个 renamed CTE 重命名为其他名称
  • 通过更改 materialized config
  • 创建 dw_bank_balance_base 视图或 table

如果问题解决了请告诉我!

发现问题 - dbt 不希望我将 table 加入到它自己。 因此,我使用 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