You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Andres de la Peña (Jira)" <ji...@apache.org> on 2022/11/18 12:47:00 UTC

[jira] [Updated] (CASSANDRA-18060) Within collection aggregation functions

     [ 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}

  was:
The new mechanism for 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}
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}


> Within collection aggregation functions
> ---------------------------------------
>
>                 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}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org