我正在尝试使用sql语法在snowflake中构建一个查询。虽然它基本上是可接近的,但我在创建一个特定的查询时遇到了问题。snowflake似乎不支持嵌套的select语句,并返回错误“unsupported subquery type cannot be evaluation”。
如果您能就如何着手解决这个问题提供任何反馈或意见,我将不胜感激。
下面是我希望查询按逻辑运行的方式:
create function demofunc(id varchar)
returns table(
float,
float
)
as
$$
SELECT
a.value1 as value1,
func_other(id, a.value2) as value2 --where func_other returns a float and works fine
FROM
(
SELECT
SUM(table1.value1) as value1,
table1.value2 as value2
FROM demotable table1
WHERE
table1.id = id
GROUP BY value2
) a
$$;
运行此命令会产生“不支持的子查询类型无法计算”,因此我尝试使用snowflake文档上的建议来重做它,如下所示,https://docs.snowflake.com/en/sql-reference/udf-sql.html#troubleshooting,他们建议将所有的东西分离成各自的功能,但仍然没有帮助。
create function func_1(id varchar)
returns table(
value1 float,
value2 date
)
as
$$
SELECT
SUM(table1.value1) as value1,
table1.value2 as value2
FROM demotable table1
WHERE
table1.id = id
GROUP BY value2
$$;
----------------------------------------
create function func_2(id varchar)
returns table(
value1 float,
value2 float
)
as
$$
SELECT
a.value1 as value1,
func_other(id, a.value2) as value2 --where func_other returns a float and works fine
FROM
TABLE(func_1(id)) a
$$;
----------------------------------------
select * from TABLE(func_2('AAAAA'))
有人知道一个好的攻击计划或解决方法吗?谢谢您。
编辑:我在下面添加了另一个函数func\u other。最初的子查询问题似乎是因为我在func\u other中的select语句的where子句中包含了一个函数调用。然而,在试图改善这一点时,我导致了一个新的错误,即处理被简单地中止。结果,我现在从snowflake的方面得到了一个执行错误,目前正在等待解决。
为了解决这个问题,我选择了两个值,而不是在where子句中使用函数调用,然后调用一个单独的函数step\u func\u other,而不是func\u other,它只选择新func\u other返回的一个值。所有这些都是独立工作的,但是当合并到主调用(func2)中时,执行就会中断。
旧的:
create function func_other(id varchar, value2 date)
returns float
as
$$
SELECT value3 as value3
FROM table2
WHERE
p_id = id
AND p_date = func_prev(id, value2)
$$;
其中func_prev定义为:
create function func_prev(id varchar, value2 date)
returns date
as
$$
SELECT
MAX(p_date) as p_date
FROM
table2
WHERE
p_id = id
AND p_date < value2
$$;
新增:
create function func_other(id varchar, value2 date)
returns TABLE(value3 float, p_date date)
as
$$
SELECT
value3 as value3,
func_prev(id, value2) as p_date
FROM
table2
WHERE
p_id = id
AND p_date = p_date
$$;
-----------
create function step_func_other(id varchar, value2 date)
returns float
as
$$
SELECT
CASE
WHEN value2 IS NULL
THEN NULL
ELSE value3
END AS value3
FROM
TABLE(func_other(id, value2))
$$;
暂无答案!
目前还没有任何答案,快来回答吧!