InfluxDB: группировать строки с одинаковой отметкой времени
Предположим, БД со следующими записями данных:
2018-04-12T00:00:00Z value=1000 [series=distance]
2018-04-12T00:00:00Z value=10 [series=signal_quality]
2018-04-12T00:01:00Z value=1100 [series=distance]
2018-04-12T00:01:00Z value=0 [series=signal_quality]
Есть одно поле с именем value
, Квадратные скобки обозначают теги (дальнейшие теги опущены). Как видите, данные записываются в разные записи данных вместо использования нескольких полей в одной и той же записи.
Учитывая вышеупомянутую структуру, как я могу запросить временные ряды расстояний, отфильтрованных по качеству сигнала? Цель состоит в том, чтобы вернуть точки данных расстояния только тогда, когда качество сигнала превышает фиксированный порог (например, 5).
1 ответ
"Учитывая вышеописанную структуру", нет простого способа сделать это в простом InfluxDB.
Пожалуйста, имейте в виду, что Influx - это НЕТ реляционной БД, он другой, несмотря на то, что язык запросов выглядит знакомым.
Опять же, учитывая эту структуру - вы можете перейти к Kapacitor, как это уже упоминалось.
Но я настоятельно рекомендую вам переосмыслить структуру, если это возможно, если вы можете контролировать способ сбора метрик.
Если это не вариант - вот способ: закрутить простую работу в Kapacitor, которая просто соединиет две точки в одну, основываясь на времени ( проверьте это как), а затем добавьте ее в новое измерение.
Точка данных будет выглядеть следующим образом:
DistanceQualityTogether,tag1=if,tag2=you,tag2=need,tag4=em distance=1000,signal_quality=10 2018-04-12T00:00:00Z
Остальное не замечает такого измерения.
Но опять же, если вы можете настроить свои метрики для отправки таким образом - лучше сделайте это.