Типы данных для даты и времени
Наличие обширного набора типов данных для даты и времени необходимо для эффективного управления временными рядами, и 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 и dt64_1 преобразуются в Europe/Berlin, тогда как dt_2 и dt64_2 используют локальный часовой пояс сервера.
Функции даты и времени
ClickHouse также предоставляет набор функций, которые позволяют преобразовывать значения между различными типами данных.
Например, мы можем использовать toDate, чтобы преобразовать значение типа DateTime в тип Date:
Для преобразования DateTime в DateTime64 можно использовать функцию toDateTime64:
Также можно использовать toDateTime, чтобы преобразовать Date или DateTime64 обратно в DateTime: