Предположим, БД со следующими записями данных:

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) .

0
theDmi 4 Дек 2018 в 10:08

1 ответ

Лучший ответ

«Учитывая приведенную выше структуру», в обычном InfluxDB это невозможно сделать.

Имейте в виду - Influx НЕТ реляционной БД, он другой, несмотря на то, что язык запросов выглядит знакомым.

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

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

Если это не вариант - вот способ: создайте простую задачу в Kapacitor, которая просто соединит две точки в одну на основе времени (узнайте, как это сделать,), а затем перенесите его в новое измерение.

Тогда точка данных будет выглядеть так:

DistanceQualityTogether,tag1=if,tag2=you,tag2=need,tag4=em distance=1000,signal_quality=10 2018-04-12T00:00:00Z

Остальные не обращают внимания на такое измерение.

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

2
Yuri G 4 Дек 2018 в 16:05