Spec-Zone.ru › Redis

TS.MRANGE

TS.MRANGE
Синтаксис
TS.MRANGE fromTimestamp toTimestamp
  [LATEST]
  [FILTER_BY_TS ts...]
  [FILTER_BY_VALUE min max]
  [WITHLABELS | SELECTED_LABELS label...]
  [COUNT count]
  [[ALIGN align] AGGREGATION aggregator bucketDuration [BUCKETTIMESTAMP bt] [EMPTY]]
  FILTER filterExpr...
  [GROUPBY label REDUCE reducer]
Доступно в:
Redis Stack / TimeSeries 1.0.0
Временная сложность:
O(n/m+k), где n = Количество данных, m = Размер фрагмента (количество данных в фрагменте), k = Количество данных в запрошенных диапазонах

Запрос диапазона по нескольким временным рядам с фильтрами в прямом направлении

Примеры

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

fromTimestamp

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

toTimestamp

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

FILTER filterExpr...

фильтрует временные ряды на основе их меток и значений меток. Каждое выражение фильтра имеет один из следующих синтаксисов:

  • label=value, где label равно value
  • label!=value, где label не равно value
  • label=, где у key нет метки label
  • label!=, где у key есть метка label
  • label=(value1,value2,...), где у key с меткой label равно одному из значений в списке
  • label!=(value1,value2,...), где ключ с меткой label не равен ни одному из значений в списке

Примечания:

  • Требуется по крайней мере один label=value фильтр.
  • Фильтры являются конъюнктивными. Например, фильтр type=temperature room=study означает, что временной ряд — это временной ряд температуры из учебной аудитории.
  • Не используйте пробелы в выражении фильтра.

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

LATEST (с RedisTimeSeries v1.8)

используется, когда временной ряд является сжатым. С помощью LATEST, TS.MRANGE также сообщает сжатое значение последнего, возможно, частичного бакета, при условии, что начало этого бакета попадает в [fromTimestamp, toTimestamp]. Без LATEST, TS.MRANGE не сообщает о последнем, возможно, частичном бакете. Если временной ряд не является сжатым, LATEST игнорируется.

Данные в последнем бакете сжатия могут быть частичными. Бакет закрывается и сжимается только при поступлении нового образца, который открывает новый последний бакет. Однако есть случаи, когда требуется сжатое значение последнего, возможно, частичного бакета. В таком случае используйте LATEST.

FILTER_BY_TS ts... (с RedisTimeSeries v1.6)

фильтрует образцы по списку определенных меток времени. Образец проходит фильтр, если его точная метка времени указана и попадает в [fromTimestamp, toTimestamp].

FILTER_BY_VALUE min max (с RedisTimeSeries v1.6)

фильтрует образцы по минимальным и максимальным значениям.

WITHLABELS

включает в ответ все пары имя-значение, представляющие метки метаданных временных рядов. Если WITHLABELS или SELECTED_LABELS не указаны, по умолчанию сообщается пустой список пар имя-значение.

SELECTED_LABELS label... (с RedisTimeSeries v1.6)

возвращает подмножество пар имя-значение, которые представляют метки метаданных временного ряда. Используйте, когда существует большое количество меток на серию, но требуются только значения некоторых из меток. Если WITHLABELS или SELECTED_LABELS не указаны, по умолчанию сообщается пустой список пар имя-значение.

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, данные не сообщаются для бакетов, которые заканчиваются до самого раннего образца или начинаются после самого позднего образца во временном ряду.

END_OF_DOCUMENT_MARKER
GROUPBY label REDUCE reducer (с RedisTimeSeries v1.6)

разделяет временные ряды на группы, каждая группа содержит временные ряды, которые имеют одинаковое значение для указанного имени метки, затем агрегирует результаты в каждой группе.

В сочетании с AGGREGATION применяется GROUPBY/REDUCE на этапе после агрегации.

  • label — это имя метки. Группа создается для всех временных рядов, которые имеют одинаковое значение для этой метки.

  • reducer — это тип агрегации, используемый для агрегирования результатов в каждой группе.

    reducer Описание
    avg Среднее арифметическое всех значений, не равных NaN (с RedisTimeSeries v1.8)
    sum Сумма всех значений, не равных NaN
    min Минимальное значение, не равное NaN
    max Максимальное значение, не равное NaN
    range Разница между максимальным и минимальным значениями, не равными NaN (с RedisTimeSeries v1.8)
    count Количество значений, не равных NaN (с RedisTimeSeries v1.8)
    std.p Среднеквадратическое отклонение генеральной совокупности всех значений, не равных NaN (с RedisTimeSeries v1.8)
    std.s Среднеквадратическое отклонение выборочной совокупности всех значений, не равных NaN (с RedisTimeSeries v1.8)
    var.p Дисперсия генеральной совокупности всех значений, не равных NaN (с RedisTimeSeries v1.8)
    var.s Дисперсия выборочной совокупности всех значений, не равных NaN (с RedisTimeSeries v1.8)

Примечания:

  • Полученный временной ряд называется <label>=<value>
  • Полученный временной ряд содержит две метки со следующей структурой массива меток:
    • __reducer__, используемый редуктор (например, "count")
    • __source__, список ключей временных рядов, используемых для вычисления сгруппированного ряда (например, "key1,key2,key3")

Примечание: Команда MRANGE не может быть частью транзакции при выполнении в кластере Redis.

Возвращаемое значение

Если GROUPBY label REDUCE reducer не указано:

  • Массив ответов: для каждого временного ряда, соответствующего указанным фильтрам, сообщается следующее:
    • строка-ответ: имя ключа временного ряда
    • Массив ответов: пары метка-значение (строковый ответ, строковый ответ)
      • По умолчанию сообщается пустой массив
      • Если WITHLABELS указано, сообщаются все метки, связанные с этим временным рядом
      • Если SELECTED_LABELS label... указано, сообщаются выбранные метки (значение null, если такая метка не определена)
    • Массив ответов: пары временная метка-значение (целое число ответа, простой строковый ответ (двойное)): все примеры/агрегации, соответствующие диапазону

Если GROUPBY label REDUCE reducer указано:

  • Массив ответов: для каждой группы временных рядов, соответствующих указанным фильтрам, сообщается следующее:
    • строка-ответ с форматом label=value где label — аргумент метки GROUPBY
    • Массив ответов: пары метка-значение (строковый ответ, строковый ответ):
      • По умолчанию сообщается пустой массив
      • Если WITHLABELS указано, сообщаются аргумент метки GROUPBY и его значение
      • Если SELECTED_LABELS label... указано, сообщаются выбранные метки (значение null, если такая метка не определена или метка не имеет одинакового значения для всех сгруппированных временных рядов)
    • Массив ответов: либо одна пара (строковый ответ, строковый ответ): аргумент метки GROUPBY и его значение, или пустой массив, если
    • Массив ответов: одна пара (строковый ответ, строковый ответ): строка __reducer__ и аргумент редуктора
    • Массив ответов: одна пара (строковый ответ, строковый ответ): строка __source__ и имена ключей временных рядов, разделенные ,
    • Массив ответов: пары временная метка-значение (целое число ответа, простой строковый ответ (двойное)): все примеры/агрегации, соответствующие диапазону

Примеры

Получение максимальной цены акций на каждый момент времени

Создайте две акции и добавьте их цены в три разные момента времени.

127.0.0.1:6379> TS.CREATE stock:A LABELS type stock name A
OK
127.0.0.1:6379> TS.CREATE stock:B LABELS type stock name B
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:B 1000 120 stock:B 1010 110 stock:B 1020 100
1) (integer) 1000
2) (integer) 1010
3) (integer) 1020

Теперь вы можете получить максимальную цену акций для каждого момента времени.

127.0.0.1:6379> TS.MRANGE - + WITHLABELS FILTER type=stock GROUPBY type REDUCE max
1) 1) "type=stock"
   2) 1) 1) "type"
         2) "stock"
      2) 1) "__reducer__"
         2) "max"
      3) 1) "__source__"
         2) "stock:A,stock:B"
   3) 1) 1) (integer) 1000
         2) 120
      2) 1) (integer) 1010
         2) 110
      3) 1) (integer) 1020
         2) 120

Оператор FILTER type=stock возвращает один временной ряд, представляющий цены акций. Оператор GROUPBY type REDUCE max разделяет временные ряды на группы с одинаковыми типами значений и затем для каждого момента времени агрегирует все ряды, которые имеют одинаковое значение типа, используя агрегатор max.

Расчет средней цены акций и получение максимального среднего значения

Создайте две акции и добавьте их цены в девять разных моментов времени.

127.0.0.1:6379> TS.CREATE stock:A LABELS type stock name A
OK
127.0.0.1:6379> TS.CREATE stock:B LABELS type stock name B
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:B 1000 120 stock:B 1010 110 stock:B 1020 100
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:B 2000 220 stock:B 2010 210 stock:B 2020 200
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
127.0.0.1:6379> TS.MADD stock:B 3000 320 stock:B 3010 310 stock:B 3020 300
1) (integer) 3000
2) (integer) 3010
3) (integer) 3020

Теперь для каждой акции рассчитайте среднюю цену акций за 1000-миллисекундный период, а затем получите акцию с максимальным средним значением за этот период.

127.0.0.1:6379> TS.MRANGE - + WITHLABELS AGGREGATION avg 1000 FILTER type=stock GROUPBY type REDUCE max
1) 1) "type=stock"
   2) 1) 1) "type"
         2) "stock"
      2) 1) "__reducer__"
         2) "max"
      3) 1) "__source__"
         2) "stock:A,stock:B"
   3) 1) 1) (integer) 1000
         2) 110
      2) 1) (integer) 2000
         2) 210
      3) 1) (integer) 3000
         2) 310
Группировка результатов запроса

Запросите все временные ряды с меткой метрики, равной cpu, затем сгруппируйте временные ряды по значению метки metric_name и для каждой группы верните максимальное значение и ключи временных рядов (источник) с этим значением.

127.0.0.1:6379> TS.ADD ts1 1548149180000 90 labels metric cpu metric_name system
(integer) 1548149180000
127.0.0.1:6379> TS.ADD ts1 1548149185000 45
(integer) 1548149185000
127.0.0.1:6379> TS.ADD ts2 1548149180000 99 labels metric cpu metric_name user
(integer) 1548149180000
127.0.0.1:6379> TS.MRANGE - + WITHLABELS FILTER metric=cpu GROUPBY metric_name REDUCE max
1) 1) "metric_name=system"
   2) 1) 1) "metric_name"
         2) "system"
      2) 1) "__reducer__"
         2) "max"
      3) 1) "__source__"
         2) "ts1"
   3) 1) 1) (integer) 1548149180000
         2) 90
      2) 1) (integer) 1548149185000
         2) 45
2) 1) "metric_name=user"
   2) 1) 1) "metric_name"
         2) "user"
      2) 1) "__reducer__"
         2) "max"
      3) 1) "__source__"
         2) "ts2"
   3) 1) 1) (integer) 1548149180000
         2) 99
Фильтрация результатов запроса по значению

Запросите все временные ряды с меткой метрики, равной cpu, затем отфильтруйте значения, большие или равные 90.0 и меньшие или равные 100.0.

127.0.0.1:6379> TS.ADD ts1 1548149180000 90 labels metric cpu metric_name system
(integer) 1548149180000
127.0.0.1:6379> TS.ADD ts1 1548149185000 45
(integer) 1548149185000
127.0.0.1:6379> TS.ADD ts2 1548149180000 99 labels metric cpu metric_name user
(integer) 1548149180000
127.0.0.1:6379> TS.MRANGE - + FILTER_BY_VALUE 90 100 WITHLABELS FILTER metric=cpu
1) 1) "ts1"
   2) 1) 1) "metric"
         2) "cpu"
      2) 1) "metric_name"
         2) "system"
   3) 1) 1) (integer) 1548149180000
         2) 90
2) 1) "ts2"
   2) 1) 1) "metric"
         2) "cpu"
      2) 1) "metric_name"
         2) "user"
   3) 1) 1) (integer) 1548149180000
         2) 99
Запрос с использованием метки

Запросите все временные ряды с меткой метрики, равной cpu, но верните только метку команды.

127.0.0.1:6379> TS.ADD ts1 1548149180000 90 labels metric cpu metric_name system team NY
(integer) 1548149180000
127.0.0.1:6379> TS.ADD ts1 1548149185000 45
(integer) 1548149185000
127.0.0.1:6379> TS.ADD ts2 1548149180000 99 labels metric cpu metric_name user team SF
(integer) 1548149180000
127.0.0.1:6379> TS.MRANGE - + SELECTED_LABELS team FILTER metric=cpu
1) 1) "ts1"
   2) 1) 1) "team"
         2) "NY"
   3) 1) 1) (integer) 1548149180000
         2) 90
      2) 1) (integer) 1548149185000
         2) 45
2) 1) "ts2"
   2) 1) 1) "team"
         2) "SF"
   3) 1) 1) (integer) 1548149180000
         2) 99

См. также

TS.RANGE | TS.MREVRANGE | TS.REVRANGE

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

RedisTimeSeries

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

Spec-Zone.ru

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