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