【发布时间】:2020-07-08 11:22:54
【问题描述】:
我定义了以下 UDTF,我已确认查询与函数分开工作。
CREATE OR REPLACE FUNCTION UDF_RETAINED_CUST(period_end date)
RETURNS TABLE(RETAINED_CUSTOMERS number)
LANGUAGE SQL
AS
$$
SELECT count(DISTINCT po.id_customer)
FROM STR_PS_ORDERS po
INNER JOIN (
SELECT DISTINCT ID_CUSTOMER
FROM STR_PS_ORDERS po
WHERE CURRENT_STATE NOT IN (6, 7, 8)
AND ORDER_TYPE_ID NOT IN (2, 7)
AND DATE_ADD >= dateadd(DAY, -181, period_end)
AND DATE_ADD <= dateadd(DAY, -91, period_end)
) prev ON prev.id_customer = po.ID_CUSTOMER
WHERE CURRENT_STATE NOT IN (6, 7, 8)
AND ORDER_TYPE_ID NOT IN (2, 7)
AND DATE_ADD >= dateadd(DAY, -90, period_end)
AND DATE_ADD <= period_end
$$
我也可以用单个值成功运行函数
SELECT * FROM TABLE(UDF_RETAINED_CUST(CURRENT_DATE()))
问题是在尝试将此函数与来自另一个表的列输入一起使用时。
SELECT dd.DATE_SPK, x.retained_customers
FROM DIM_DATE dd
JOIN TABLE(UDF_RETAINED_CUST(dd.DATE_SPK))) x
这会提示如下错误:
SQL 错误 [2031] [42601]:SQL 编译错误: 无法评估不受支持的子查询类型
【问题讨论】:
-
尝试使用 WITH
-
您的意思是在函数内部使用 CTE,还是代替 UDF?
标签: snowflake-cloud-data-platform