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

#postgresql #time-series #grafana #distinct-on

#postgresql #временные ряды #графана #distinct-on

Вопрос:

Я совсем новичок в 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
  

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

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

1. Что такое $__time ?

Ответ №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.