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
Связанные темы
© 2006–2022 Salvatore Sanfilippo
Licensed under the Creative Commons Attribution-ShareAlike License 4.0.
https://redis.io/commands/ts.range/