Запрашивать InfluxDB с помощью оператора CASE или IF?

#grafana #influxdb #influxql #chronograf

#графана #influxdb #influxql #хронограф

Вопрос:

Я собираю показатели из своего philips hue bridge и помещаю их в InfluxDB. Я хотел бы иметь возможность отображать некоторые из этих показателей на панели мониторинга.

Базовый запрос выглядит следующим образом:

 SELECT mean("state.bri") AS "mean_state.bri" FROM "telegraf_hue"."autogen"."hue" WHERE time > :dashboardTime: AND "lamp"='Couch' GROUP BY time(:interval:) FILL(null)
  

Это возвращает хороший график, который показывает уровень яркости источника света.

Основные результаты запроса

Проблема с этим запросом заключается в том, что индикатор фактически не горит все это время. Мост оттенков возвращает последний уровень яркости, даже если он выключен.

Я могу увидеть, включено ли оно, проверив "state.on" значение true или false .

 SELECT mean("state.bri") AS "mean_state.bri" FROM "telegraf_hue"."autogen"."hue" WHERE "state.on" = true AND time > :dashboardTime: AND "lamp"='Couch' GROUP BY time(:interval:) FILL(null)
  

Это возвращает только точки, в которых горит индикатор.

Запрос, который освещает результаты

Что я хотел бы сделать что-то вроде CASE инструкции, подобной в MySQL:

 SELECT CASE WHEN "state.on" = true THEN mean("state.bri") ELSE 0 END FROM "telegraf_hue"."autogen"."hue" WHERE time > :dashboardTime: AND "lamp"='Couch' GROUP BY time(:interval:) FILL(null)
  

Это не работает. Сбой с:

 Request failed with status code 400
  

Как я могу выполнить нечто подобное с помощью InfluxDB? В конечном счете, я буду создавать панели мониторинга в Grafana, если это имеет значение.

Комментарии:

1. Во influxql нет case или if эквивалентов mysql. Что не так с вашим вторым вариантом? Он показывает, что вы хотите: нет света <-> нет данных на графике. Если вам действительно нужны нулевые точки данных на графике для state.on = false, вам придется использовать select ... from (select ...) ... синтаксис с fill(0) во внешнем запросе.