RedisTimeSeries: Support TS.MRANGE/MREVRANGE GROUPBY <label> REDUCE <reducer>
filipecosta90 opened this issue · 1 comments
filipecosta90 commented
The following PR RedisTimeSeries/RedisTimeSeries#617 added support for multi-series aggregations to RedisTimeSeries.
It adds GROUPBY <label> REDUCE <reducer>
to TS.MRANGE/TS.MREVRANGE
. It accepts SUM
, MIN
, MAX
reducers and works with unaligned series.
Sample request:
TS.MRANGE 1451679382646 1451682982646 WITHLABELS
AGGREGATION MAX 60000
FILTER measurement=cpu
fieldname=usage_user
hostname=(host_9,host_3,host_5,host_1,host_7,host_2,host_8,host_4)
GROUPBY hostname REDUCE MAX
Reply labels array structure
Labels:
<label>=<groupbyvalue>
__reducer__=<reducer>
__source__=key1,key2,key3
Sample output:
127.0.0.1:6379> ts.add ts1 1 90 labels metric cpu name system
(integer) 1
127.0.0.1:6379> ts.add ts1 2 45 labels metric cpu name system
(integer) 2
127.0.0.1:6379> ts.add ts2 2 99 labels metric cpu name user
(integer) 2
127.0.0.1:6379> ts.add ts3 2 02 labels metric cpu name system
(integer) 2
MAX reducer sample output
127.0.0.1:6379> ts.mrange - + withlabels filter metric=cpu groupby name reduce max
1) 1) "name=system"
2) 1) 1) "name"
2) "system"
2) 1) "__reducer__"
2) "max"
3) 1) "__source__"
2) "ts1,ts3"
3) 1) 1) (integer) 1
2) 90
2) 1) (integer) 2
2) 45
2) 1) "name=user"
2) 1) 1) "name"
2) "user"
2) 1) "__reducer__"
2) "max"
3) 1) "__source__"
2) "ts2"
3) 1) 1) (integer) 2
2) 99
MIN reducer sample output
127.0.0.1:6379> ts.mrange - + withlabels filter metric=cpu groupby name reduce min
1) 1) "name=system"
2) 1) 1) "name"
2) "system"
2) 1) "__reducer__"
2) "min"
3) 1) "__source__"
2) "ts1,ts3"
3) 1) 1) (integer) 1
2) 90
2) 1) (integer) 2
2) 2
2) 1) "name=user"
2) 1) 1) "name"
2) "user"
2) 1) "__reducer__"
2) "min"
3) 1) "__source__"
2) "ts2"
3) 1) 1) (integer) 2
2) 99
xdev-developer commented
I will try add support of this. This is really nice feature.