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)
您标记了问题 prestodb
和 amazon-athena
。如果您在 Athena 上尝试此操作,请记住 Athena is based on Presto 0.172(2017 年 4 月发布)
我正在尝试减少复杂类型的数组,但是我 运行 遇到语法错误(也许这甚至不受支持?)。
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)
您标记了问题 prestodb
和 amazon-athena
。如果您在 Athena 上尝试此操作,请记住 Athena is based on Presto 0.172(2017 年 4 月发布)