Udi*_*dey 4 amazon-web-services amazon-redshift
我有一个复杂的查询,它为某些两个日期(开始日期和结束日期)提供多行。
现在我想创建一个函数,以便可以为不同的日期组合返回多行。
CREATE FUNCTION submit_cohort(DATE, DATE)
RETURNS TABLE(Month VARCHAR(10), Name1 VARCHAR(20), Name2 VARCHAR(20), x INTEGER)
STABLE
AS $$
SELECT
to_char((date + interval '330 minutes')::date, 'YYYY/MM') "Month",
Name1,
Name2,
count(*) "x"
FROM xyz
WHERE date > $1
AND date < $2
GROUP BY 1,2,3
ORDER BY 1,2,3
END
$$ LANGUAGE sql;
Run Code Online (Sandbox Code Playgroud)
我运行了这个查询。它说:
亚马逊无效操作:“TABLE”处或附近的语法错误
在 Redshift 中,您只能定义标量函数,即返回单个值的函数。遗憾的是,Redshift 不支持基于集合的函数(返回表的函数)。
可能的原因是Redshift是一个分布式数据库,函数在计算节点上并行运行,彼此独立。基于集合的函数需要能够从数据库读取数据,但有可能某些数据位于给定节点上,而另一部分数据位于另一个节点上。该函数不能独立运行在特定的计算节点上。您必须仅在主节点上运行此类功能。您不想这样做,因为它违背了并行性的整个概念。
尝试在 SQL 查询中表达相同的逻辑。从您的代码来看,它似乎可以用作常规查询/子查询。
| 归档时间: |
|
| 查看次数: |
5187 次 |
| 最近记录: |