Автоматически выбирать пропорциональное время для time_bucket (), зависит от выбранного временного окна запроса и ожидаемого количества точек - PullRequest
1 голос
/ 05 марта 2020

Я использую timescaleDB особенный метод time_bucket () в таких запросах.

SELECT time_bucket('**1 day**', time) AS datetime, temp.inside_t FROM temp where serial in ('77777777777', '77777777778')   and time > '2020-**02-03** 13:54:46.768000'  and time < '2020-**03-04** 13:53:46.768000'  GROUP BY datetime   ORDER BY datetime DESC;

Или

SELECT time_bucket('**1 hour**', time) AS datetime, temp.inside_t FROM temp where serial in ('77777777777', '77777777778')   and time > '2020-**03-03** 13:54:46.768000'  and time < '2020-**03-04** 13:53:46.768000' GROUP BY datetime   ORDER BY datetime DESC;

Зависит от временного окна запроса и количества ожидаемых точек. вручную рассчитать соответствующий период времени ( 1 день или 6 час , из 15 минут )

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

SELECT time_bucket(**100**) AS datetime, temp.inside_t FROM temp where serial in ('77777777777', '77777777778')   and time > '2020-02-03 13:54:46.768000'  and time < '2020-03-04 13:53:46.768000' GROUP BY datetime   ORDER BY datetime DESC;

Или какая-то подходящая альтернатива для time_bucket ().

Я прочитал эту статью , но оштрафовать ничего интересного.

Обновление Какой API обрабатывает этот запрос enter image description here

1 Ответ

0 голосов
/ 05 марта 2020

Простое решение пришло из рассмотрения того, как работает Графана. Должны быть вычтены из и разделены на количество желаемых баллов, поэтому определите количество секунд, за которое вы можете получить желаемое количество баллов.

    List get(long from, long until, long maxDataPoints) {
    final String query = String.format("SELECT time_bucket('%s seconds', time) AS dateTime, avg(temp.inside), avg(temp.outside) FROM temp where serial in ('777777777') and time > '2020-03-03 13:54:46.768000' and time < '2020-03-04 13:54:46.768000' GROUP BY dateTime ORDER BY dateTime DESC;",
        round((until - from) / maxDataPoints));
    return jdbcTemplate.query(query, new RowMapper());

Кстати, вот еще один полезный метод .

...