Типы данных даты и времени
Наличие комплексного набора типов даты и времени необходимо для эффективного управления данными временных рядов, и ClickHouse предлагает именно это. От компактных представлений даты до временных меток с высокой точностью и точностью в наносекундах, эти типы разработаны так, чтобы сбалансировать эффективность хранения с практическими требованиями для различных приложений временных рядов.
Работая с историческими финансовыми данными, показаниями IoT-датчиков или событиями с будущими датами, типы даты и времени ClickHouse обеспечивают гибкость, необходимую для обработки различных временных данных. Диапазон поддерживаемых типов позволяет вам оптимизировать как пространство хранения, так и производительность запросов, одновременно сохраняя точность, которую требует ваш случай использования.
-
Тип
Date
должен быть достаточен в большинстве случаев. Этот тип требует 2 байта для хранения даты и ограничивает диапазон до[1970-01-01, 2149-06-06]
. -
Date32
охватывает более широкий диапазон дат. Он требует 4 байта для хранения даты и ограничивает диапазон до[1900-01-01, 2299-12-31]
. -
DateTime
хранит значения даты и времени с точностью до секунд и диапазоном[1970-01-01 00:00:00, 2106-02-07 06:28:15]
. Он требует 4 байта на значение. -
В случаях, когда требуется большая точность, можно использовать
DateTime64
. Это позволяет хранить время с точностью до наносекунд, с диапазоном[1900-01-01 00:00:00, 2299-12-31 23:59:59.99999999]
. Он требует 8 байт на значение.
Давайте создадим таблицу, которая хранит различные типы даты:
Мы можем использовать функцию now()
, чтобы вернуть текущее время, и now64()
, чтобы получить его с указанной точностью через первый аргумент.
Это заполнит наши колонки временем в соответствии с типом колонки:
Часовые пояса
Многие случаи использования требуют также хранения часовых поясов. Мы можем установить часовой пояс как последний аргумент для типов DateTime
или DateTime64
:
Определив часовой пояс в нашем DDL, мы можем теперь вставлять временные значения, используя разные часовые пояса:
А теперь давайте посмотрим, что в нашей таблице:
В первой строке мы вставили все значения, используя часовой пояс America/New_York
.
dt_1
иdt64_1
автоматически конвертируются вEurope/Berlin
во время выполнения запроса.dt_2
иdt64_2
не имели указанного часового пояса, поэтому они используют локальный часовой пояс сервера, который в данном случае являетсяEurope/London
.
Во второй строке мы вставили все значения без указания часового пояса, поэтому был использован локальный часовой пояс сервера.
Как и в первой строке, dt_1
и dt_3
конвертируются в Europe/Berlin
, тогда как dt_2
и dt64_2
используют локальный часовой пояс сервера.
Функции даты и времени
ClickHouse также предоставляет набор функций, которые позволяют нам конвертировать различные типы данных.
Например, мы можем использовать toDate
, чтобы конвертировать значение DateTime
в тип Date
:
Мы можем использовать toDateTime64
, чтобы конвертировать DateTime
в DateTime64
:
И мы можем использовать toDateTime
, чтобы перейти от Date
или DateTime64
обратно к DateTime
: