Byr*_*ziu 3 presto amazon-athena
我正在使用 Athena 并尝试获取双精度数组元素的总和,但 reduce 函数似乎只适用于整数:
SELECT reduce(ARRAY [5.0, 20.0, 50.4], 0, (s, x) -> s + x, s -> s);
会抛出错误:
Unexpected parameters (array(double), integer, com.facebook.presto.sql.analyzer.TypeSignatureProvider@762f0fa7, com.facebook.presto.sql.analyzer.TypeSignatureProvider@29dfe267) for function reduce. Expected: reduce(array(T), S, function(S,T,S), function(S,R)) T, S, R
有办法做到吗?
这是 Presto 中的一个已知错误。您可以跟踪https://github.com/prestosql/presto/issues/2760。
作为解决方法,您可以将您的转换array(decimal(..))为array(decimal(38,..))或array(double):
presto> SELECT reduce(cast(ARRAY[5.0, 20.0, 50.4] as array(decimal(38,5))), 0, (s, x) -> s + x, s -> s);
_col0
----------
75.40000
presto> SELECT reduce(cast(ARRAY[5.0, 20.0, 50.4] as array(double)), 0, (s, x) -> s + x, s -> s);
_col0
-------
75.4
Run Code Online (Sandbox Code Playgroud)
Athena 基于较旧的 Presto 版本(目前为 0.172,已有 3 年历史),显然上述内容在 Athena 中都不起作用(基于您的数组已经是的事实array(double))。