从Redshift中的用户定义函数返回一个表

问题描述 投票:0回答:1

我有一个复杂的查询,它给出了两个日期的多行 - 开始日期和结束日期。

现在我想创建一个函数,以便我可以为不同的日期组合返回多行。

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;

我跑了这个查询。它说:

Amazon无效操作:“TABLE”或其附近的语法错误

amazon-web-services amazon-redshift
1个回答
2
投票

在Redshift中,您只能定义标量函数,即返回单个值的函数。遗憾的是,Redshift不支持基于集合的函数(返回表的函数)。

可能的原因是Redshift是一个分布式数据库,并且函数在计算节点上并行运行,彼此独立。基于集合的函数需要能够从数据库中读取数据,但有些数据可能位于给定节点上,而另一部分位于另一个节点上。此类函数无法独立地在特定计算节点上运行。您只需要在主节点上运行此类功能。你不想这样做,因为它违背了并行的整个概念。

尝试在SQL查询中表达相同的逻辑。从您的代码看起来它可以作为常规查询/子查询。

© www.soinside.com 2019 - 2024. All rights reserved.