Spec-Zone.ru › Redis

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

Связанные темы

RedisTimeSeries

© 2006–2022 Salvatore Sanfilippo
Licensed under the Creative Commons Attribution-ShareAlike License 4.0.
https://redis.io/commands/ts.revrange/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API