Поток InfluxDB — фильтр, в котором поле соответствует значению

#influxdb #influxql

#Поток influxdb #influxql

Вопрос:

Я использую InfluxDB с Grafana, и у меня есть вызываемое измерение items с некоторыми тегами и вызываемым полем itemType . Мне нужно отфильтровать строки, в которых itemType есть определенная строка. Следующий запрос InfluxQL делает именно то, что мне нужно:

 SELECT * FROM "items" WHERE "itemType" = 'example'
  

Как я могу сделать то же самое в Flux?

В настоящее время у меня есть следующий запрос, который выполняет все, кроме фильтрации по полю:

 from(bucket: "dbname/autogen")
    |> range(start: 2020-10-12T01:56:34Z, stop: 2020-10-12T02:54:10Z)
    |> filter(fn:(r) => r._measurement == "items")
    |> aggregateWindow(every: 5m, fn: count)
  

Но замена filter функции на filter(fn:(r) => r._measurement == "items" and r.itemType == "example") возвращает никаких результатов, хотя приведенный выше запрос InfluxQL возвращает данные при использовании в командной строке InfluxDB.

Ответ №1:

Указанный вами запрос потока будет работать, если ItemType является тегом, однако, поскольку это поле, один из способов заставить запрос работать — задать условия для имени поля и его значения следующим образом:

 from(bucket: "dbname/autogen")
    |> range(start: 2020-10-12T01:56:34Z, stop: 2020-10-12T02:54:10Z)
    |> filter(fn:(r) => r._measurement == "items" and r._field == "itemType" and r._value == "example")
    |> aggregateWindow(every: 5m, fn: count)