TS.REVRANGE
TS.REVRANGE
TS.REVRANGE key fromTimestamp toTimestamp [LATEST] [FILTER_BY_TS TS...] [FILTER_BY_VALUE min max] [COUNT count] [[ALIGN align] AGGREGATION aggregator bucketDuration [BUCKETTIMESTAMP bt] [EMPTY]]
- Доступно в:
- Redis Stack / TimeSeries 1.4.0
- Сложность по времени:
- O(n/m+k), где n = Количество точек данных, m = Размер блока (количество точек данных в блоке), k = Количество точек данных в запрошенном диапазоне
Запрос диапазона в обратном порядке
Обязательные аргументы
key
является именем ключа для временного ряда.
fromTimestamp
является начальной отметкой времени для запроса диапазона (целое число Unix-временной метки в миллисекундах) или -, чтобы указать временную метку самого раннего образца во временном ряду.
toTimestamp
является конечной временной меткой для запроса диапазона (целое число Unix-временной метки в миллисекундах) или +, чтобы указать временную метку последнего образца во временном ряду.
toTimestamp. Это происходит потому, что toTimestamp ограничивает только временную метку сжатого значения, которая является начальным временем сжатого блока.
Дополнительные аргументы
LATEST (с RedisTimeSeries v1.8)
используется, когда временной ряд представляет собой сжатие. С LATEST, TS.REVRANGE также сообщает о сжатом значении последнего, возможно, частичного, блока, при условии, что начальное время этого блока находится в [fromTimestamp, toTimestamp]. Без LATEST, TS.REVRANGE не сообщает о последнем, возможно, частичном, блоке. Если временной ряд не является сжатием, LATEST игнорируется.
Данные в последнем блоке сжатия могут быть частичными. Блок считается «закрытым» и сжатым только при поступлении нового образца, который «открывает» новый «последний» блок. Однако в некоторых случаях требуется и сжатое значение последнего, возможно, частичного, блока. В таком случае используйте LATEST.
FILTER_BY_TS ts... (с RedisTimeSeries v1.6)
фильтрует образцы по списку конкретных временных меток. Образец проходит фильтр, если его точная временная метка указана и находится в [fromTimestamp, toTimestamp].
FILTER_BY_VALUE min max (с RedisTimeSeries v1.6)
фильтрует образцы по минимальным и максимальным значениям.
COUNT count
ограничивает количество возвращаемых образцов. ALIGN align (с RedisTimeSeries v1.6)
является параметром выравнивания блоков времени для AGGREGATION. Он управляет временными метками блоков времени, изменяя эталонную временную метку, на которой определяется блок. Значения включают:
-
startили-: Эталонная временная метка будет временной меткой начального интервала запроса (fromTimestamp), которая не может быть- -
endили+: Эталонная временная метка будет временной меткой конечного интервала запроса (toTimestamp), которая не может быть+ - Конкретная временная метка: выравнивание эталонной временной метки по конкретной временной метке
0.
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— продолжительность каждого блока в миллисекундах.
Без ALIGN, начальные временные метки блоков являются кратными bucketDuration.
С ALIGN align, начальные временные метки блоков являются кратными bucketDuration с остатком align % bucketDuration.
Первая временная метка начала блока меньше или равна fromTimestamp.
[BUCKETTIMESTAMP bt] (с RedisTimeSeries v1.8)
управляет тем, как отслеживаются временные метки блоков.
bt | Отслеживаемая временная метка для каждого блока |
|---|---|
- или low
| начальное время блока (по умолчанию) |
+ или high
| конечное время блока |
~ или mid
| среднее время блока (округляется вниз, если не является целым числом) |
[EMPTY] (с RedisTimeSeries v1.8)
— флаг, который, если указан, сообщает об агрегациях также для пустых блоков. aggregator | Отчетное значение для каждого пустого блока |
|---|---|
sum, count
| 0 |
last | Значение последнего образца перед началом блока. NaN если такого образца нет. |
twa | Среднее значение за период блока на основе линейной интерполяции последнего образца перед началом блока и первого образца после окончания блока. NaN если таких образцов нет. |
min, max, range, avg, first, std.p, std.s
| NaN |
Независимо от значений fromTimestamp и toTimestamp, данные не сообщаются для блоков, которые заканчиваются до самого раннего образца или начинаются после самого позднего образца во временном ряду.
Возвращаемое значение
- Массив ответов пар (Целое значение, Строковое значение), представляющих (временная метка, значение(двойное))
- Ошибка (например, при недопустимом значении фильтра)
Сложность
Сложность TS.REVRANGE в будущем может быть улучшена за счет использования бинарного поиска для поиска начала диапазона, что делает эту операцию O(Log(n/m)+k*m). Однако, поскольку m невелика, можно пренебречь ею и рассматривать операцию как O(Log(n)+k).
Примеры
Фильтровать результаты по временной метке или значению образца
Рассмотрим метрику, где допустимые значения находятся в диапазоне от -100 до 100, а значение 9999 используется для обозначения плохих измерений.
127.0.0.1:6379> TS.CREATE temp:TLV LABELS type temp location TLV
OK
127.0.0.1:6379> TS.MADD temp:TLV 1000 30 temp:TLV 1010 35 temp:TLV 1020 9999 temp:TLV 1030 40
1) (integer) 1000
2) (integer) 1010
3) (integer) 1020
4) (integer) 1030Теперь извлечь все значения, кроме значений вне диапазона.
TS.REVRANGE temp:TLV - + FILTER_BY_VALUE -100 100
1) 1) (integer) 1030
2) 40
2) 1) (integer) 1010
2) 35
3) 1) (integer) 1000
2) 30Теперь извлечь среднее значение, игнорируя значения вне диапазона.
TS.REVRANGE temp:TLV - + FILTER_BY_VALUE -100 100 AGGREGATION avg 1000
1) 1) (integer) 1000
2) 35Выравнивание блоков агрегации
Для демонстрации выравнивания создадим инструмент «акции» и добавим цены в три разные временные метки.
127.0.0.1:6379> TS.CREATE stock:A LABELS type stock name A
OK
127.0.0.1:6379> TS.MADD stock:A 1000 100 stock:A 1010 110 stock:A 1020 120
1) (integer) 1000
2) (integer) 1010
3) (integer) 1020
127.0.0.1:6379> TS.MADD stock:A 2000 200 stock:A 2010 210 stock:A 2020 220
1) (integer) 2000
2) (integer) 2010
3) (integer) 2020
127.0.0.1:6379> TS.MADD stock:A 3000 300 stock:A 3010 310 stock:A 3020 320
1) (integer) 3000
2) (integer) 3010
3) (integer) 3020Далее, выполним агрегацию без использования ALIGN, по умолчанию выравнивание установлено в 0.
127.0.0.1:6379> TS.REVRANGE stock:A - + AGGREGATION min 20
1) 1) (integer) 3020
2) 320
2) 1) (integer) 3000
2) 300
3) 1) (integer) 2020
2) 220
4) 1) (integer) 2000
2) 200
5) 1) (integer) 1020
2) 120
6) 1) (integer) 1000
2) 100И теперь установим ALIGN в 10, чтобы начать блок в момент времени 10, и выровняем все блоки с продолжительностью 20 миллисекунд.
127.0.0.1:6379> TS.REVRANGE stock:A - + ALIGN 10 AGGREGATION min 20
1) 1) (integer) 3010
2) 310
2) 1) (integer) 2990
2) 300
3) 1) (integer) 2010
2) 210
4) 1) (integer) 1990
2) 200
5) 1) (integer) 1010
2) 110
6) 1) (integer) 990
2) 100Если начальная временная метка для диапазона запроса явно указана (а не -), можно установить ВЫРАВНИВАНИЕ на это время, установив align на - или start.
127.0.0.1:6379> TS.REVRANGE stock:A 5 + ALIGN - AGGREGATION min 20
1) 1) (integer) 3005
2) 310
2) 1) (integer) 2985
2) 300
3) 1) (integer) 2005
2) 210
4) 1) (integer) 1985
2) 200
5) 1) (integer) 1005
2) 110
6) 1) (integer) 985
2) 100Аналогично, если конечная временная метка для диапазона запроса явно указана, можно установить ВЫРАВНИВАНИЕ на это время, установив align на + или end.
См. также
TS.RANGE | TS.MRANGE | TS.MREVRANGE
Связанные темы
© 2006–2022 Salvatore Sanfilippo
Licensed under the Creative Commons Attribution-ShareAlike License 4.0.
https://redis.io/commands/ts.revrange/