TS.CREATERULE sourceKey destKey AGGREGATION aggregator bucketDuration [alignTimestamp]
- Available in:
- Redis Stack / TimeSeries 1.0.0
- Time complexity:
Create a compaction rule
is key name for the source time series.
is key name for destination (compacted) time series. It must be created before
TS.CREATERULE is called.
AGGREGATION aggregator bucketDuration
aggregates results into time buckets.
aggregatortakes one of the following aggregation types:
Arithmetic mean of all values
Sum of all values
Difference between the highest and the lowest value
Number of values
Value with lowest timestamp in the bucket
Value with highest timestamp in the bucket
Population standard deviation of the values
Sample standard deviation of the values
Population variance of the values
Sample variance of the values
Time-weighted average over the bucket's timeframe (since RedisTimeSeries v1.8)
bucketDurationis duration of each bucket, in milliseconds.
- Only new samples that are added into the source series after the creation of the rule will be aggregated.
TS.CREATERULEwith a nonempty
destKeymay result in inconsistencies between the raw and the compacted data.
- Explicitly adding samples to a compacted time series (using
TS.DECRBY) may result in inconsistencies between the raw and the compacted data. The compaction process may override such samples.
- If no samples are added to the source time series during a bucket period. no compacted sample is added to the destination time series.
- The timestamp of a compacted sample added to the destination time series is set to the start timestamp the appropriate compaction bucket. For example, for a 10-minute compaction bucket with no alignment, the compacted samples timestamps are
x:20, and so on.
destKeywill cause the compaction rule to be deleted as well.
- On a clustered environment, hash tags should be used to force
destKeyto be stored in the same hash slot.
alignTimestamp (since RedisTimeSeries v1.8)
ensures that there is a bucket that starts exactly at
alignTimestamp and aligns all other buckets accordingly. It is expressed in milliseconds. The default value is 0 aligned with the epoch. For example, if
bucketDuration is 24 hours (
24 * 3600 * 1000), setting
alignTimestamp to 6 hours after the epoch (
6 * 3600 * 1000) ensures that each bucket’s timeframe is
[06:00 .. 06:00).
Simple string reply -
OK if executed correctly, or Error reply otherwise.
Create a compaction rule
Create a time series to store the temperatures measured in Tel Aviv.
127.0.0.1:6379> TS.CREATE temp:TLV LABELS type temp location TLV OK
Next, create a compacted time series named dailyAvgTemp containing one compacted sample per 24 hours: the time-weighted average of all measurements taken from midnight to next midnight.
127.0.0.1:6379> TS.CREATE dailyAvgTemp:TLV LABELS type temp location TLV 127.0.0.1:6379> TS.CREATERULE temp:TLV dailyAvgTemp:TLV AGGREGATION twa 86400000
Now, also create a compacted time series named dailyDiffTemp. This time series will contain one compacted sample per 24 hours: the difference between the minimum and the maximum temperature measured between 06:00 and 06:00 next day. Here, 86400000 is the number of milliseconds in 24 hours, 21600000 is the number of milliseconds in 6 hours.
127.0.0.1:6379> TS.CREATE dailyDiffTemp:TLV LABELS type temp location TLV 127.0.0.1:6379> TS.CREATERULE temp:TLV dailyDiffTemp:TLV AGGREGATION range 86400000 21600000