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