Cassandra:具有复杂用户定义类型的聚合函数 INITCOND
Cassandra: aggregate function INITCOND with complex user defined type
对于 Cassandra 中用户定义的聚合函数,什么可以作为 INITCOND 放置?我只看过简单类型的例子(例如元组)。
我在聚合函数中有以下类型的状态对象:
create type avg_type_1 (
accum tuple<text,int,double>, // source, count, sum
avg_map map<text,double> // source, average
);
当我省略 INITCOND 时,我得到一个 Java NullPointerException。
问题中的 UDT 以下内容适用:
INITCOND ((null, 0, 0.0), null)
accum字段(元组):第一个元素(source,String)设置为null,第二个元素(count,int)设置为0(零) , 第三个也是最后一个元素 (sum, double) 设置为 0.0(零)。
avg_map字段(地图):设置为空(还没有地图)。
字段也可以通过名称来引用,如下(来自 describe ...)所示。
INITCOND {accum: (null, 0, 0.0), avg_map: null};
对于命名字段,使用大括号“{}”(因为它们表示为地图)。
最后,这里还有一个初始化地图的例子。
INITCOND {accum: (null, 0, 0.0), avg_map: {'i1': 23.5, 'i2': 1.2}};
对于 Cassandra 中用户定义的聚合函数,什么可以作为 INITCOND 放置?我只看过简单类型的例子(例如元组)。
我在聚合函数中有以下类型的状态对象:
create type avg_type_1 (
accum tuple<text,int,double>, // source, count, sum
avg_map map<text,double> // source, average
);
当我省略 INITCOND 时,我得到一个 Java NullPointerException。
问题中的 UDT 以下内容适用:
INITCOND ((null, 0, 0.0), null)
accum字段(元组):第一个元素(source,String)设置为null,第二个元素(count,int)设置为0(零) , 第三个也是最后一个元素 (sum, double) 设置为 0.0(零)。
avg_map字段(地图):设置为空(还没有地图)。
字段也可以通过名称来引用,如下(来自 describe ...)所示。
INITCOND {accum: (null, 0, 0.0), avg_map: null};
对于命名字段,使用大括号“{}”(因为它们表示为地图)。
最后,这里还有一个初始化地图的例子。
INITCOND {accum: (null, 0, 0.0), avg_map: {'i1': 23.5, 'i2': 1.2}};