Presto - 减少结构数组

Presto - reducing an array of structs

我正在尝试减少复杂类型的数组,但是我 运行 遇到语法错误(也许这甚至不受支持?)。

SYNTAX_ERROR: line 2:1: Unexpected parameters (array(row(count 
double,name varchar)), integer, 
com.facebook.presto.sql.analyzer.TypeSignatureProvider@16881774, 
com.facebook.presto.sql.analyzer.TypeSignatureProvider@1718b83d) for 
function reduce. Expected: reduce(array(T), S, function(S,T,S), 
function(S,R)) T, S, R

复杂类型在table中定义为counters array<struct<count:double,name:string>>。我试过选择 reduce(counters, 0, (state, counter) -> state + counter.count , s -> s)reduce(counters, 0, (state, counter) -> state + counter['count'] , s -> s),但是都不起作用。

您的方法是正确的(使用 Presto 0.205 测试):

presto:default> desc t;
  Column  |                  Type                  | Extra | Comment
----------+----------------------------------------+-------+---------
 counters | array(row(count double, name varchar)) |       |


presto:default> select * from t;
                  counters
--------------------------------------------
 [{count=1.0, name=a}, {count=2.0, name=b}]

presto:default> select reduce(
        counters, 0,
        (state, counter) -> state + counter.count,
        state -> state) from t;
 _col0
-------
   3.0
(1 row)

您标记了问题 prestodbamazon-athena。如果您在 Athena 上尝试此操作,请记住 Athena is based on Presto 0.172(2017 年 4 月发布)