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

Остальное не замечает такого измерения.

Но опять же, если вы можете настроить свои метрики для отправки таким образом - лучше сделайте это.

Другие вопросы по тегам