簡體   English   中英

Snowflake SQL UDF - 不支持的子查詢錯誤

[英]Snowflake SQL UDF - Unsupported Subquery Error

我正在創建雪花 SQL UDF。 我一直遇到 SQL compilation error: Unsupported subquery type cannot be evaluated 我已經嘗試圍繞這個問題對 go 做幾件事,這是我最近的嘗試。

我怎樣才能擺脫子查詢錯誤?

UDF 應該允許輸入他們喜歡的年份。 如果未提供年份,則考慮創建解決方案,默認為當前年份。

create or replace function new_value(PRICE float, TYPE varchar, YR_CREATED int, YEAR int)

returns float

as
$$

 
with AGE_OF_PRODUCT as (
    select any_value((YEAR - YR_CREATED)) as AGE ),



  FORMULA as (
    select any_value(AGE) as AGE,
    any_value(case
        when AGE <= 1 then 1
        else 2
    end) as FUNCTION
    from AGE_OF_PRODUCT

  )
  
  select
     any_value(case
        when F.FUNCTION = 1 then (PRICE - (PRICE * R.R1))
        else (PRICE * (1 - (R.R1))) * pow((1-(R.R2)), ((F.AGE - YR_CREATED)-1))
    end) as VALUE
  from FORMULA as F, RATES as R
  where TYPE = R.TYPE_OF_PRODUCT

  
                                      
$$;

所以主要問題是你可能使用 function 像:

select v.*,
    new_value(v.price, v.type, v.yr_create, v.year) as awesome
from table_with_values as v

您的 UDF 也可以重寫為:

create or replace function new_value(
    PRICE float, 
    TYPE varchar, 
    YR_CREATED int, 
    YEAR int)
returns float
as
$$

    select
        YEAR - YR_CREATED as age,
        case age <= 1
            when true then (PRICE - (PRICE * r.r1))
            else (PRICE * (1 - (r.r1))) * pow((1-(r.r2)), ((age - YR_CREATED)-1))
        end as value
    from rates as r
    where TYPE = r.type_of_product
                      
$$;

但是如果我們將聯接移動到 UDF 之外的速率

create or replace function new_value(
    PRICE float, 
    YR_CREATED int, 
    YEAR int,
    rate1 float,
    rate2 float)
returns float
as
$$
    select
        case (YEAR - YR_CREATED) <= 1
            when true then (PRICE - (PRICE * r.r1))
            else (PRICE * (1 - (rate1))) * pow((1-(rate2)), (((YEAR - YR_CREATED) - YR_CREATED)-1))
        end as value;                     
$$;

然后我們可以這樣稱呼它:

select v.*,
    new_value(v.price, v.yr_create, v.year, r.r1, r.r2) as awesome
from table_with_values as v
join rates as r 
    on v.type = r.type_of_product

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM