Grafana - Как создать переменную / макрос части запроса sql для источника данных Mysql - PullRequest
0 голосов
/ 25 января 2019

У меня есть следующий запрос в Grafana, который поддерживается MySql DataSource.

SELECT
  $__timeGroupAlias(ts,$__interval),
  sum(total) AS "total"
FROM hp
WHERE
  $__timeFilter(ts) 
  AND customer_type IN ($CustomerType) AND age IN ($age) AND gender IN ($gender)
GROUP BY 1
ORDER BY $__timeGroup(ts,$__interval)

В Dashboard есть несколько singleStat / panel / graphs, которые используют разные параметры выбора, но условие WHERE остается одинаковым во всехих.

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

Я пытался построить свой запрос следующим образом.

SELECT
  $__timeGroupAlias(ts,$__interval),
  sum(total) AS "total"
FROM hp
$where_condition
GROUP BY 1
ORDER BY $__timeGroup(ts,$__interval)

и объявил where_condition как WHERE $__timeFilter(ts) AND customer_type IN ($CustomerType) AND age IN ($age) AND gender IN ($gender).

Но запрос не выполняется, поскольку внутренние переменные ($ CustomerType, $ age, $ пол) не разрешаются генератором запросов, и сгенерированный запрос выглядит следующим образом.

SELECT
  UNIX_TIMESTAMP(ts) DIV 900 * 900 AS "time",
  sum(total) AS "total"
FROM hp
ts BETWEEN FROM_UNIXTIME(1548311714) AND FROM_UNIXTIME(1548398114) 
AND customer_type IN ($CustomerType) AND age IN ($age) AND gender IN ($gender)
GROUP BY 1
ORDER BY UNIX_TIMESTAMP(ts) DIV 900 * 900

Есть лиспособ разрешения переменных, которые содержатся в других переменных.Или есть ли другой способ вывести часть запроса, содержащую переменные?

1 Ответ

0 голосов
/ 25 января 2019

constant тип переменной генерирует только статическую строку.Он не заменял никаких переменных.Переключитесь на тип query и используйте MySQL для возврата строки, которая будет иметь точное строковое значение для вашей переменной where_condition.Запрос:

SELECT 'WHERE $__timeFilter(ts) AND customer_type IN ($CustomerType) AND age IN ($age) AND gender IN ($gender)'

ИМХО: подстановка переменной должна работать и для типа constant.Вы можете открыть запрос функции для этого https://github.com/grafana/grafana/issues.

...