Grafana PostgreSQL отличается от () с временными рядами

Я новичок в Grafana и Postgres, и мне нужна помощь с этим. У меня есть набор данных в PostgreSQL с прогнозами температуры. Несколько прогнозов публикуются в разные моменты дня (обозначены dump_date) на одну и ту же базовую дату. Скажем: сегодня в 06:00 и сегодня в 12:00 публикуется прогноз на завтра (где время указано start_time). Теперь я хочу визуализировать прогноз температуры в виде временного ряда с помощью Grafana. Однако я хочу визуализировать только последний опубликованный прогноз (12:00), а не оба прогноза. Я думал, что использую DISTINCT ON (), чтобы выбрать только последний опубликованный прогноз из этого набора данных, но почему-то с Grafana это не отвечает. Мой код в Grafana выглядит следующим образом:

SELECT
  $__time(distinct on(t_ID.start_time)),
  concat('Forecast')::text as metric,
  t_ID.value
FROM
  forecast_table t_ID
WHERE
  $__timeFilter(t_ID.start_time)
  and t_ID.start_time >= (current_timestamp - interval '30 minute')
  and t_ID.dump_date >= (current_timestamp - interval '30 minute')
ORDER BY
  t_ID.start_time asc, 
  t_ID.dump_date desc

Однако это не работает, так как я получаю сообщение: «Синтаксическая ошибка в AS или рядом с ним». Что я должен делать?


person Wouter    schedule 25.09.2020    source источник
comment
Что такое $__time?   -  person GMB    schedule 25.09.2020


Ответы (1)


Вы используете макрос Grafana $__time, поэтому ваш запрос в редакторе:

SELECT
  $__time(distinct on(t_ID.start_time)),

генерирует SQL:

SELECT
  distinct on(t_ID.start_time AS "time"),

что является неправильным синтаксисом SQL.

Я бы не стал использовать макрос. Я бы написал правильный SQL напрямую, например

SELECT
  distinct_on(t_ID.start_time) AS "time",

Также используйте функции Generated SQL и Query inspector Grafana для отладки и разработки запросов. Убедитесь, что Grafana генерирует правильный SQL для Postgres.

person Jan Garaj    schedule 26.09.2020