#sql #clickhouse
#sql #clickhouse
Вопрос:
Я наблюдаю странную вещь в базе данных ClickHouse
Когда я указываю дату и время в WHERE условие, clichhouse сдвигает мой запрос на один час. Это происходит с каждой таблицей, имеющей тип DateTime
Моя машина, расположенная в московском часовом поясе, сервер UTC 3 расположен в часовом поясе CET UTC 1 В Москве нет перехода на летнее время, но проблема возникла некоторое время назад, и я думаю, это потому, что Европа сдвинула время на час
Например, дайте мне запись между 23:59 и 00:19 столбец datetime имеет тип DateTime
select datetime from ticker_arch
where
datetime <= '2020-11-23 00:10:00' and
datetime >= '2020-11-22 23:59:00'
order by datetime desc
результат дает записи между 22:59 и 23:10
2020-11-22 23:09:46
2020-11-22 23:09:46
2020-11-22 23:09:46
2020-11-22 23:09:46
Это происходит, когда я запускаю запрос в Datagrip и из моего кода DbContext
Пожалуйста, предложите
Комментарии:
1. Тип данных столбца?
2. @jarlh Дата и время
Ответ №1:
Это ожидаемое поведение для драйвера CH JDBC.
Драйвер JDBC преобразует значения даты и времени (в их строковые представления) из часового пояса сервера CH в локальный (для JVM) часовой пояс.
https://github.com/ClickHouse/ClickHouse/issues/17387
То же самое для CH-клиента:
# clickhouse-client --use_client_time_zone=1 -q "select now(), toString(now())"
2020-11-25 19:02:31 2020-11-25 20:02:31
# TZ=Europe/Moscow clickhouse-client --use_client_time_zone=1 -q "select now(), toString(now())"
2020-11-25 22:02:59 2020-11-25 20:02:59
now() — отображается в строку клиентом с использованием localtimezone
toString(now()) — преобразуется в строку сервером, использующим servertimezone