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