[ https://issues.apache.org/jira/browse/CASSANDRA-18060?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andres de la Peña updated CASSANDRA-18060: ------------------------------------------ Description: The new mechanism for dynamically building native functions introduced by CASSANDRA-17811 can be used to provide within-collection aggregation functions. We can use that mechanism to add new CQL functions to get: * The number of items in a collection. * The max/min items of a collection. * The sum/avg of the items of a numeric collection. * The keys or the values of a map. For example: {code:java} CREATE TABLE k.t (k int PRIMARY KEY, l list<int>, m map<int, int>); INSERT INTO t(k, l, m) VALUES (0, [1, 2, 3], {1:10, 2:20, 3:30}); > SELECT map_keys(m), map_values(m) FROM t; system.map_keys(m) | system.map_values(m) --------------------+---------------------- {1, 2, 3} | [10, 20, 30] > SELECT collection_count(m), collection_count(l) FROM t; system.collection_count(m) | system.collection_count(l) ----------------------------+---------------------------- 3 | 3 > SELECT collection_min(l), collection_max(l) FROM t; system.collection_min(l) | system.collection_max(l) --------------------------+-------------------------- 1 | 3 > SELECT collection_sum(l), collection_avg(l) FROM t; system.collection_sum(l) | system.collection_avg(l) --------------------------+-------------------------- 6 | 2 {code} Note that this type of aggregation is different from the kind of aggregation provided by {{min}}, {{max}}, {{sum}} and {{avg}}, which aggregate entire collections across rows. Here we only aggregate the items of a collection row per row. was: The new mechanism for dynamically building native functions introduced by CASSANDRA-17811 can be used to provide within-collection aggregation functions. We can use that mechanism to add new CQL functions to get: * The number of items in a collection. * The max/min items of a collection. * The sum/avg of the items of a numeric collection. * The keys or the values of a map. For example: {code:java} CREATE TABLE k.t (k int PRIMARY KEY, l list<int>, m map<int, int>); INSERT INTO t(k, l, m) VALUES (0, [1, 2, 3], {1:10, 2:20, 3:30}); > SELECT map_keys(m), map_values(m) FROM t; system.map_keys(m) | system.map_values(m) --------------------+---------------------- {1, 2, 3} | [10, 20, 30] > SELECT collection_count(m), collection_count(l) FROM t; system.collection_count(m) | system.collection_count(l) ----------------------------+---------------------------- 3 | 3 > SELECT collection_min(l), collection_max(l) FROM t; system.collection_min(l) | system.collection_max(l) --------------------------+-------------------------- 1 | 3 > SELECT collection_sum(l), collection_avg(l) FROM t; system.collection_sum(l) | system.collection_avg(l) --------------------------+-------------------------- 6 | 2 {code} > Add aggregation scalar functions on collections, tuples and UDTs > ---------------------------------------------------------------- > > Key: CASSANDRA-18060 > URL: https://issues.apache.org/jira/browse/CASSANDRA-18060 > Project: Cassandra > Issue Type: New Feature > Components: CQL/Semantics > Reporter: Andres de la Peña > Assignee: Andres de la Peña > Priority: Normal > > The new mechanism for dynamically building native functions introduced by > CASSANDRA-17811 can be used to provide within-collection aggregation > functions. We can use that mechanism to add new CQL functions to get: > * The number of items in a collection. > * The max/min items of a collection. > * The sum/avg of the items of a numeric collection. > * The keys or the values of a map. > For example: > {code:java} > CREATE TABLE k.t (k int PRIMARY KEY, l list<int>, m map<int, int>); > INSERT INTO t(k, l, m) VALUES (0, [1, 2, 3], {1:10, 2:20, 3:30}); > > SELECT map_keys(m), map_values(m) FROM t; > system.map_keys(m) | system.map_values(m) > --------------------+---------------------- > {1, 2, 3} | [10, 20, 30] > > SELECT collection_count(m), collection_count(l) FROM t; > system.collection_count(m) | system.collection_count(l) > ----------------------------+---------------------------- > 3 | 3 > > SELECT collection_min(l), collection_max(l) FROM t; > system.collection_min(l) | system.collection_max(l) > --------------------------+-------------------------- > 1 | 3 > > SELECT collection_sum(l), collection_avg(l) FROM t; > system.collection_sum(l) | system.collection_avg(l) > --------------------------+-------------------------- > 6 | 2 > {code} > Note that this type of aggregation is different from the kind of aggregation > provided by {{min}}, {{max}}, {{sum}} and {{avg}}, which aggregate entire > collections across rows. Here we only aggregate the items of a collection row > per row. -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org