【发布时间】:2023-01-13 06:18:28
【问题描述】:
我正在创建 Snowflake SQL UDF。我一直遇到SQL 编译错误:无法计算不支持的子查询类型.我已经尝试做几件事来解决这个问题,这是我最近的尝试。
我怎样才能摆脱子查询错误?
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
$$;
【问题讨论】:
-
您对 ANY_VALUE 的过度使用很奇怪,您能解释一下为什么要添加这些值吗?
-
无论如何,主要问题是您将在 WHERE 或 SELECT 部分中使用此 UDF,并且鉴于它是一个子选择,这意味着结果代码是一个 COROLATED SUBQUERY,并且这些支持有限。因此,在某种程度上,您需要展开它并仅使用 UDF 来进行混乱的数学运算,而无需从 RATES 表中进行选择,这些应该被传入。
标签: sql subquery snowflake-cloud-data-platform user-defined-functions