Как выбрать только первое значение в последовательностях InfluxDB? - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть измерение, которое указывает на процесс изменения состояния чего-либо. Каждую секунду система спрашивает, меняется ли что-то, если это так, она хранит 1 в дБ, иначе ничего. Таким образом, у меня есть последовательности "единицы". Как здесь. Расстояние между точками составляет 1 с

Я хочу получить только время первой точки каждой «одной» последовательности. В этом конкретном примере это будет

Time                Value
2019-01-01 11:46:55 1
2019-01-01 12:36:45 1

В красных квадратах

Есть ли способ сделать это с помощью запросов? Или может быть простой python шаблон?

PS first() селектор требует GROUP BY, но я не могу предположить, что последовательности меньше some_time_interval

1 Ответ

0 голосов
/ 26 февраля 2020

Вероятно, вы можете достичь того, что вам нужно, с помощью вложенного запроса и функции difference. https://docs.influxdata.com/influxdb/v1.7/query_language/functions/#difference
Например:
Допустим, ваше измерение называется change, а поле называется value

SELECT diff FROM
 (SELECT difference(value) as diff FROM
  (SELECT value FROM change WHERE your_time_filter GROUP BY time(1s) fill(0))
 )
 WHERE diff > 0

Итак, вы сначала заполните пустые места с нулями. Затем возьмите difference s между последующими значениями. Затем выберите различия, которые являются положительными. Если разница равна 0, то она между двумя нулями или двумя, без изменений. Если это 1, то изменение от нуля до единицы (что вам нужно). Если оно равно -1, то это изменение от одного до нуля, конец последовательности единиц.

Возможно, вам потребуется немного изменить запрос с помощью временных интервалов и группировок.

...