是否可以在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]"
答案 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)