Неверное время, возвращенное из Clickhouse

#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