Spec-Zone.ru › Redis

TS.RANGE

TS.RANGE
Синтаксис
TS.RANGE 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.0.0
Временная сложность:
O(n/m+k), где n = Количество данных, m = Размер блока (количество данных в блоке), k = Количество данных в запрошенном диапазоне

Запрос диапазона в прямом направлении

Примеры

Обязательные аргументы

key

— имя ключа для временного ряда.

fromTimestamp

— начальная метка времени для запроса диапазона (целое число UNIX-временной метки в миллисекундах) или -, чтобы указать метку времени самого раннего образца во временном ряду.

toTimestamp

— конечная метка времени для запроса диапазона (целое число UNIX-временной метки в миллисекундах) или +, чтобы указать метку времени самого позднего образца во временном ряду.

Примечание: При сжатии временного ряда последнее сжатое значение может агрегировать исходные значения с временной меткой за пределами toTimestamp. Это происходит потому, что toTimestamp ограничивает только метку времени сжатого значения, которая является начальным временем исходного блока, который был сжат.

Дополнительные аргументы

LATEST (с версии RedisTimeSeries v1.8)

используется, когда временной ряд является сжатым. С помощью LATEST, TS.RANGE также сообщает о сжатом значении последнего, возможно, частичного, блока, если начальное время этого блока попадает в [fromTimestamp, toTimestamp]. Без LATEST, TS.RANGE не сообщает о последнем, возможно, частичном, блоке. Если временной ряд не является сжатым, 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. Он контролирует временные метки блоков времени, изменяя эталонную временную метку, на основе которой определяется блок.

Значения align включают:

  • 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.RANGE в будущем может быть улучшена с помощью бинарного поиска для определения начала диапазона, что делает её 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.RANGE temp:TLV - + FILTER_BY_VALUE -100 100
1) 1) (integer) 1000
   2) 30
2) 1) (integer) 1010
   2) 35
3) 1) (integer) 1030
   2) 40

Теперь получите среднее значение, игнорируя значения вне диапазона.

TS.RANGE 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.RANGE stock:A - + AGGREGATION min 20
1) 1) (integer) 1000
   2) 100
2) 1) (integer) 1020
   2) 120
3) 1) (integer) 1040
   2) 210
4) 1) (integer) 1060
   2) 300
5) 1) (integer) 1080
   2) 320

И теперь установим ALIGN в 10, чтобы начало блока было в 10, и выровняем все блоки с продолжительностью 20 миллисекунд.

127.0.0.1:6379> TS.RANGE stock:A - + ALIGN 10 AGGREGATION min 20
1) 1) (integer) 990
   2) 100
2) 1) (integer) 1010
   2) 110
3) 1) (integer) 1990
   2) 200
4) 1) (integer) 2010
   2) 210
5) 1) (integer) 2990
   2) 300
6) 1) (integer) 3010
   2) 310

Когда начальная временная метка для запроса диапазона явно указана (не -), можно установить ALIGN на эту метку, задав выравнивание - или start.

127.0.0.1:6379> TS.RANGE stock:A 5 + ALIGN - AGGREGATION min 20
1) 1) (integer) 985
   2) 100
2) 1) (integer) 1005
   2) 110
3) 1) (integer) 1985
   2) 200
4) 1) (integer) 2005
   2) 210
5) 1) (integer) 2985
   2) 300
6) 1) (integer) 3005
   2) 310

Аналогично, когда конечная временная метка для запроса диапазона явно указана, можно установить ALIGN на эту метку, задав выравнивание + или end.

См. также

TS.MRANGE | TS.REVRANGE | TS.MREVRANGE

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

RedisTimeSeries

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

Spec-Zone.ru

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