Clickhouse: тип DateTime64(N)
DateTime64(N)
— это расширенный тип данных в ClickHouse, предназначенный для хранения даты и времени с высокой точностью, вплоть до микросекунд и даже наносекунд. Этот тип особенно полезен для систем, где требуется высокая точность временных меток, например, в финансовых приложениях, логах или telemetry.
Основные характеристики DateTime64(N)
- Точность дробной части (N):
N
указывает на количество знаков после десятичной точки в значении времени. Возможные значения:0
— секунда.1
— десятые доли секунды.2
— сотые доли секунды.3
— миллисекунды.6
— микросекунды.9
— наносекунды.
- Например:
DateTime64(3)
хранит значения вида2025-01-09 12:34:56.789
.DateTime64(6)
хранит значения вида2025-01-09 12:34:56.789123
.
- Диапазон значений:
- Аналогичен типу
DateTime
, то есть с 1970-01-01 00:00:00 до 2106-02-07 06:28:15 (дляDateTime64(0)
).
- Аналогичен типу
- Хранение часового пояса:
- Значения
DateTime64
по умолчанию интерпретируются в UTC. При необходимости можно указать часовой пояс для представления значений в локальном времени. - Часовой пояс задается либо для всей таблицы, либо при преобразовании данных через функции.
- Значения
- Формат хранения:
- Значения хранятся в формате 64-битного целого числа, где дробная часть представляет собой дополнительные знаки после запятой.
Примеры использования DateTime64(N)
Создание таблицы с DateTime64
:
1 2 3 4 5 6 7 |
CREATE TABLE example ( event_time DateTime64(3), -- миллисекундная точность event_description String ) ENGINE = MergeTree() ORDER BY event_time; |
1 2 3 |
INSERT INTO example VALUES ('2025-01-09 12:34:56.789', 'Event 1'); INSERT INTO example VALUES ('2025-01-09 12:34:56.123', 'Event 2'); |
1 2 3 4 |
SELECT event_time, event_description FROM example WHERE event_time >= '2025-01-09 12:34:56.000'; |
Использование временных функций:
ClickHouse поддерживает функции для работы с DateTime64
:
toDateTime64
: Преобразование строки или числового значения вDateTime64
.
12SELECT toDateTime64('2025-01-09 12:34:56.789', 3) AS dt64;now64(N)
: Возвращает текущую временную метку с указанной точностью.
12SELECT now64(6) AS current_time;extract
: Извлечение дробной части времени.
12SELECT extract('millisecond', toDateTime64('2025-01-09 12:34:56.789', 3)) AS ms;
Особенности и рекомендации
- Сравнение с
DateTime
:DateTime64
используется там, где требуется высокая точность времени. Если точность до секунд достаточна, используйтеDateTime
.
- Учет часовых поясов:
- Для работы с локальными часовыми поясами используйте опцию
toDateTime64(<значение>, <точность>, <часовой пояс>)
.
Пример:
12SELECT toDateTime64('2025-01-09 12:34:56.789', 3, 'Asia/Yekaterinburg'); - Для работы с локальными часовыми поясами используйте опцию
- Хранение и производительность:
- Тип
DateTime64
требует больше памяти по сравнению сDateTime
, поскольку хранит дополнительную точность. - Для индексации времени рекомендуется использовать
ORDER BY
илиPRIMARY KEY
.
- Тип
- Работа с внешними источниками:
- При загрузке данных из форматов вроде CSV или JSON убедитесь, что временные метки имеют корректный формат, поддерживающий дробные секунды.
Заключение
DateTime64(N)
— мощный инструмент для работы с точным временем в ClickHouse. Он особенно актуален для:
- Анализа логов,
- Трейдинга и финансовых данных,
- Научных и инженерных приложений.
Однако из-за увеличенного объема данных и требований к обработке его стоит применять только тогда, когда это действительно необходимо.
Recommended Posts
clickhouse-go лучшие практики
16.04.2024