TS.CREATERULE
语法
TS.CREATERULE sourceKey destKey AGGREGATION aggregator bucketDuration [alignTimestamp]
- 可用版本
- Redis Open Source / TimeSeries 1.0.0
- 时间复杂度
- O(1)
- ACL 类别
-
@timeseries,@write,@fast,
创建压缩规则
必选参数
sourceKey
是源时间序列的键名。
destKey
是目标(压缩后)时间序列的键名。在调用 TS.CREATERULE 之前必须创建该键。
AGGREGATION aggregator bucketDuration
将结果聚合到时间桶中。
-
aggregator参数接受以下聚合类型之一聚合器描述 avg所有值的算术平均值 sum所有值的总和 min最小值 max最大值 range最高值与最低值之间的差 count值的数量 first桶中时间戳最低的值 last桶中时间戳最高的值 std.p值的总体标准差 std.s值的样本标准差 var.p值的总体方差 var.s值的样本方差 twa桶时间范围内的时加权平均值(自 RedisTimeSeries v1.8 起) -
bucketDuration是每个桶的持续时间,以毫秒为单位。
- 只有在创建规则后添加到源时间序列中的新样本才会被聚合。
- 使用非空
destKey调用TS.CREATERULE可能会导致原始数据和压缩数据之间不一致。 - 显式地向压缩时间序列添加样本(使用
TS.ADD、TS.MADD、TS.INCRBY或TS.DECRBY)可能会导致原始数据和压缩数据之间不一致。压缩过程可能会覆盖此类样本。 - 如果在桶期间没有向源时间序列添加样本,则不会向目标时间序列添加压缩样本。
- 添加到目标时间序列的压缩样本的时间戳设置为相应压缩桶的起始时间戳。例如,对于一个没有对齐的 10 分钟压缩桶,压缩样本的时间戳是
x:00、x:10、x:20等。 - 删除
destKey也会导致压缩规则被删除。
可选参数
alignTimestamp(自 RedisTimeSeries v1.8 起)
确保有一个桶正好从 alignTimestamp 开始,并相应地对齐所有其他桶。以毫秒表示。默认值为 0:与 Unix 纪元对齐。
例如,如果 bucketDuration 是 24 小时 (24 * 3600 * 1000),将 alignTimestamp 设置为 Unix 纪元后 6 小时 (6 * 3600 * 1000) 可确保每个桶的时间范围是 [06:00 .. 06:00)。
返回值
返回以下回复之一
- 简单字符串回复 - 如果执行成功则返回
OK - [] 错误时返回(无效参数、错误的键类型等),当
sourceKey不存在时,当destKey不存在时,当sourceKey已经是压缩规则的目标时,当destKey已经是压缩规则的源或目标时,或当sourceKey和destKey相同时
示例
创建压缩规则
创建一个时间序列以存储在特拉维夫测量的温度。
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