如何在Redshift中创建自定义聚合UDF功能?

时间:2016-01-26 11:05:12

标签: amazon-web-services amazon-redshift

是否可以在Redshift中创建自定义聚合UDF功能? 如果是,我在哪里可以找到该教程或文档?

我的数据看起来像

A     B     time_series

a1    b1    "[1,2,3]"
a1    b2    "[2,3,4]"
a2    b1    "[2,2,2]"

我想通过A或B分组并获得平均时间序列。

例如,按A

分组
a1   "[1.5, 2.5, 3.5]"
a2   "[2,2,2]"

1 个答案:

答案 0 :(得分:1)

截至今天,UDF只能应用于单行。因此,要实现您想要的功能,您需要在单行中预先组合值,然后应用UDF进行数学运算。

例如:

创建UDF:

CREATE FUNCTION f_mean(time_series VARCHAR)
RETURNS varchar
IMMUTABLE AS $$
import json
data = [json.loads(x.replace('"', '')) for x in time_series.split('""')]
return json.dumps([sum(e)/float(len(e)) for e in zip(*data)])
$$ LANGUAGE plpythonu;

使用LISTAGG函数将值组合成单行。然后应用UDF。

mydb=> select A, f_mean(listagg(time_series)) within group (order by A) from my_table group by A;
 a  |     f_mean      
----+-----------------
 a2 | [2.0, 2.0, 2.0]
 a1 | [1.5, 2.5, 3.5]
(2 rows)