TS.CREATERULE
Syntax
TS.CREATERULE sourceKey destKey AGGREGATION aggregator bucketDuration [alignTimestamp]
- Available in:
- Redis Stack / TimeSeries 1.0.0
- Time complexity:
- O(1)
创建一个压缩规则
必需的参数
sourceKey
是源时间序列的键名。
destKey
是目标(压缩)时间序列的键名。必须在调用TS.CREATERULE之前创建。
AGGREGATION aggregator bucketDuration
将结果聚合到时间桶中。
-
aggregator接受以下聚合类型之一:aggregator描述 avg所有值的算术平均值 sum所有值的总和 min最小值 max最大值 range最高值和最低值之间的差值 count值的数量 first桶中时间戳最低的值 last桶中时间戳最高的值 std.p值的总体标准差 std.s值的样本标准差 var.p值的总体方差 var.s值的样本方差 twa桶时间范围内的加权平均值(自 RedisTimeSeries v1.8 起) -
bucketDuration是每个桶的持续时间,以毫秒为单位。
- 只有在规则创建后添加到源系列中的新样本才会被聚合。
- 调用
TS.CREATERULE时,如果destKey不为空,可能会导致原始数据和压缩数据之间的不一致。 - 显式地向压缩的时间序列添加样本(使用
TS.ADD,TS.MADD,TS.INCRBY, 或TS.DECRBY)可能会导致原始数据和压缩数据之间的不一致。压缩过程可能会覆盖这些样本。 - 如果在桶周期内没有向源时间序列添加样本,则不会向目标时间序列添加压缩样本。
- 添加到目标时间序列的压缩样本的时间戳设置为适当压缩桶的开始时间戳。例如,对于没有对齐的10分钟压缩桶,压缩样本的时间戳为
x:00、x:10、x:20,依此类推。 - 删除
destKey将导致压缩规则也被删除。
可选参数
alignTimestamp (since RedisTimeSeries v1.8)
确保有一个桶正好从alignTimestamp开始,并相应地调整所有其他桶。它以毫秒表示。默认值为0:与Unix纪元对齐。
例如,如果bucketDuration是24小时(24 * 3600 * 1000),将alignTimestamp设置为Unix纪元后的6小时(6 * 3600 * 1000)可以确保每个时间段的时间范围为[06:00 .. 06:00)。
返回值
返回以下回复之一:
- Simple string reply -
OK如果正确执行 - [] 在错误情况下(无效参数、错误的键类型等),当
sourceKey不存在时,当destKey不存在时,当sourceKey已经是压缩规则的目标时,当destKey已经是压缩规则的源或目标时,或者当sourceKey和destKey相同时
示例
Create a compaction rule
创建一个时间序列来存储特拉维夫测量的温度。
127.0.0.1:6379> TS.CREATE temp:TLV LABELS type temp location TLV
OK接下来,创建一个名为dailyAvgTemp的压缩时间序列,每24小时包含一个压缩样本:从午夜到下一个午夜所有测量的时间加权平均值。
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 现在,还要创建一个名为dailyDiffTemp的压缩时间序列。这个时间序列将包含每24小时的一个压缩样本:即从06:00到次日06:00之间测量的最低温度和最高温度之间的差值。 这里,86400000是24小时内的毫秒数,21600000是6小时内的毫秒数。
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