Перейти к основному содержимому
Перейти к основному содержимому

Типы данных даты и времени

Наличие комплексного набора типов даты и времени необходимо для эффективного управления данными временных рядов, и 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: