Presto - 获取数组元素的总和

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

有办法做到吗?

Pio*_*sen 5

这是 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))。