BI Consult Desktop Logo BI Consult Mobile Logo
  • Russian BI Исследование российских bi
  • Перейти на Fine BI
  • Контакты
  • +7 812 334-08-01
    +7 499 608-13-06
  • Отправить сообщение
  • Главная
  • Продукты Эксперт-BI
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Сельское хозяйство
    • Энергетика
    • FMCG
    • Девелоперы
    • Маркетплейсы
    • Пищевая промышленность
    • Фармацевтика
    • Построение Data Platform
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и FP&A
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • IBP
    • ИТ (CIO)
    • Закупки
  • Платформы
    • Системы бизнес-анализа (BI)
    • Интегрированное бизнес-планирование (IBP)
    • Хранилища данных (DWH / Lakehouse)
    • Каталоги данных (Data Catalog)
    • Системы ETL и ELT
    • AI / Исскуственный интеллект
    • Шина данных (ESB)
    • Система управления мастер-данными (MDM)
    • Семантический слой
  • Услуги
    • Переход на отечественные BI и DWH системы
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений и DWH
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Курсы
    • Учебный курс Информационная грамотность (Data Literacy)
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Greenplum
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt (Data Build Tool)
  • Компания
    • Руководство
    • Новости
    • Клиенты
    • Карьера
    • Скачать
    • Контакты

BI

  • FineBI
  • FineReport
  • FineDataLink
  • FineChatBI (FineAI)
  • Коннекторы данных из 1С в BI
  • Airflow / Nifi
  • Visiology
  • PIX BI
  • Modus BI
  • Yandex.DataLens
  • Open-source BI: Superset/Metabase
  • Luxms BI
  • AW BI + Alpha BI
  • FlyBI + Форсайт. Аналитическая Платформа
  • Loginom
  • Триафлай
  • AI / Исскуственный интеллект
  • Optimacros
  • Навигатор BI
  • Семантический слой

СУБД

  • Arenadata
  • ClickHouse
  • Greenplum
  • Postgres Professional
  • TData

Другое

  • Построение Data Platform
    • Аналитическое хранилище данных
    • Data Lake и Data Engineering
    • Подробнее про Data Lake
    • Внедрение Lakehouse
      • Apache Doris
      • StarRocks
      • Trino
    • Миграция витрин из пропиетарных DWH на новый стек
    • Учебный курс "Современная архитектура хранилища данных"
Главная » Курсы по системам бизнес-анализа и методологии » Учебный курс по ClickHouse » Энциклопедия ClickHouse » clickhouse datetime

clickhouse datetime

 

Краткое введение

Тематика работы со временем в ClickHouse лежит в основании множества аналитических сценариев: от событийной ленты до временных агрегаций и ретроспектив. Глава посвящена темпоральной стороне данных: как правильно моделировать, хранить и обрабатывать временные метки, какие типы использовать, какие операции поддерживаются и какие архитектурные решения успешно работают на больших объемах. В рамках курса Clickhouse данная тема служит связующим звеном между концепциями хранения, архитектуры и практическими паттернами запроса.

 

Введение

Дата и время в аналитике - не простая примета календаря, а целый институт данных. В ClickHouse работа со временем реализуется через несколько ключевых концепций: базовые типы DateTime и DateTime64, механизмы конвертации и приведения временных меток, а также методы агрегации и хранения в контексте распределённых и масштабируемых архитектур. Важно понимать, что DateTime в ClickHouse - это временная метка без явного сохранения временной зоны, а DateTime64 добавляет точность до долей секун и пригоден для высокопроизводительных потоков инсерций. Временная зона играет роль на уровне форматирования и вычислений через функции конвертации и настройки сервера; это ключ к корректной работе в распределённых системах и глобальных бизнес-процессах.

 

Теоретические основы и терминология

  • DateTime и DateTime64. DateTime представляет временную метку с секундной точностью; DateTime64(N) расширяет точность до N знаков после запятой в секундах, позволяя хранить субсекундные значения. В ClickHouse сам по себе тип DateTime не сохраняет временную зону, а отображение зависит от настройки часового пояса сервера или запроса.
  • Временная зона и локализация. Временная зона - концептуальная обёртка вокруг временной метки, которая влияет на представление времени и на логику преобразований. В ClickHouse используется настройка timezone на сессии/сервере и функции-конверторы, например toTimeZone, чтобы интерпретировать и конвертировать timestamp в нужную зону.
  • Форматы и функции преобразования. Основные операции включают:
    • toDateTime, toDateTime64 - приведение строк к временным меткам;
    • toDate - извлечение даты из временной метки;
    • toStartOfHour, toStartOfDay - агрегационные "водители" для bucketing;
    • now(), now64(N) - текущая временная метка с разной точностью;
    • toTimeZone, toUnixTimestamp, fromUnixTimestamp - конвертации между временными зонами и unix-временем.
  • Архитектурное значение. Время - один из главных параметров мердж-дерева: PARTITION BY, TTL, индексация по времени влияют на производительность. Для больших потоков данных критично выбрать между DateTime и DateTime64 в зависимости от требований к точности и объему хранения.

Таблица сравнения характеристик DateTime и DateTime64

Характеристика DateTime DateTime64(N)
Точность секундная до N знаков после запятой
Диапазон времени по умолчанию секундная эпоха аналогично, но с субсекундной точностью
Хранение часовых зон без явной зоны внутри типа зависит от конвертаций и настроек TZ
Потребление памяти меньше, чем DateTime64 при той же нагрузке больше из-за дополнительной точности
Рекомендовано использовать обычные события с секундной точностью дата-события с субсекундной регистрацией и требованием точности

 

Методологии и подходы

  • Выбор типа. Для большинства обычных событий дневного масштаба будет достаточно DateTime64 с малой точностью, например DateTime64(3). Для высокочастотных событий или платёжных потоков с субсекундной точностью предпочтителен DateTime64(6) или DateTime64(9). Важно помнить: DateTime64 требует чуть большего объема памяти и вычислительной мощности.
  • Единая политика временной зоны. Рекомендуется хранить все внутренние данные в UTC, минимизируя различия между инстансами кластера. Конвертации выполняются на уровне запроса или через преобразователь в Materialized View, если бизнес-логика требует локальной зоны.
  • Bucketing и партиционирование. Часто используют PARTITION BY toYYYYMM(event_time) или по ближе к бизнес-ритму (hour/day). Это обеспечивает эффективные TTL-операции и ускоряет запросы по диапазонам времени.
  • TTL и ретеншн. TTL применяется к DateTime-колонкам для автоматического удаления старых данных. Время TTL следует подбирать под бизнес-юнит: архивация по дням/месяцам, хранение событий в течение 3-12 месяцев, а затем удаление.
  • Интеграционные паттерны. Потоковые системы (Kafka) и пайплайн обработки через Materialized Views позволяют отделить «сырые» данные от агрегатов и аналитических таблиц, минимизируя влияние высоких задержек на ingestion.

     

Архитектура и технологическая реализация

  • Общая схема ingestion и хранения
    • Источник данных: Kafka, прямые вставки, файлы или API.
    • Сырые данные: таблица raw_events с DateTime64(N) (или DateTime64(3)) для максимальной точности инсерций.
    • Материализованные представления (Materialized Views): преобразование в hourly/daily агрегаты, колонки-агрегаты, денормализация и т. п.
    • Производственные таблицы-агрегаты: SummingMergeTree/AggregatingMergeTree или обычный MergeTree с итогами.
    • Distribued-слой: Distributed таблицы для разделения нагрузки по нодам.
  • Пример архитектурной конфигурации
    • ReplicatedMergeTree для хранения сырых событий.
    • Materialized View для агрегаций по часу и по дню.
    • Distributed таблицы для фронтального доступа.
    • TTL на сырых данных и архивирование старых записей.
  • Пример DDL и сценарий
    1. Сырые данные:
      
           CREATE TABLE IF NOT EXISTS analytics.events_raw
           (
             event_time DateTime64(3),
             user_id UInt64,
             action String,
             location String
           )
           ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/analytics.events_raw', '{replica}')
           PARTITION BY toYYYYMM(event_time)
           ORDER BY (event_time, user_id);
      
  1. Материализованное представление для агрегаций по часу:

    
         CREATE MATERIALIZED VIEW analytics.events_by_hour TO analytics.events_by_hour
         AS SELECT
           toStartOfHour(event_time) AS hour,
           user_id,
           count() AS event_count
         FROM analytics.events_raw
         GROUP BY hour, user_id;
    
  2. Таблица-агрегат:

    
         CREATE TABLE analytics.events_by_hour
         (
           hour DateTime,
           user_id UInt64,
           event_count UInt64
         )
         ENGINE = SummingMergeTree()
         ORDER BY (hour, user_id);
    
  3. Распределение запросов:

    
         CREATE TABLE analytics.events_by_hour_dist
    ## AS analytics.events_by_hour
         ENGINE = Distributed(cluster01, 'analytics', 'events_by_hour', rand());
    
  • Работа с временными зонами

    • Вводим в модель единый UTC-таймзон и конвертации делаем на слой представления/клиента:
      
          SELECT toTimeZone(event_time, 'Europe/Moscow') AS msk_time
      ## FROM analytics.events_raw
          WHERE event_time >= now() - INTERVAL 1 DAY;
      
  • Для чтения хранение в DateTime64(3) или DateTime64(9) с последующим переходом в желаемую зону выполняются через функции toTimeZone, некоторыми настройками сессии timezone, или через внешнюю обработку в BI.

  • Интеграции и open-source/российские продукты

    • Open-source:
      • ClickHouse (ядро) - база данных для аналитики с поддержкой DateTime/DateTime64 и продвинутыми функциями времени.
      • chproxy - лёгкий прокси для маршрутизации запросов к ClickHouse, полезен в микросервисных архитектурах и для балансировки.
      • ClickHouse Keeper - замена ZooKeeper для координации кластера; обеспечивает консистентность распределённых операций.
      • Kafka engine и интеграции через Kafka - прямой поток данных в сырые таблицы.
    • Российские продукты и практики:
      • Яндекс.Облако предлагает managed ClickHouse и готовые решения по оркестрации времени, мониторингу и резервному копированию, что особенно ценно для крупных корпоративных клиентов.
      • Российские компании активно разворачивают локальные инсталляции ClickHouse на кластерах (ReplicatedMergeTree, Distributed) с поддержкой TTL, партиционирования по времени и интеграций с системами мониторинга и логирования.
      • В локальных проектах часто применяются open-source инструменты в связке с отечественными системами мониторинга и визуализации, что обеспечивает соответствие требованиям безопасности и нормативам.

         

Организационные и процессные аспекты

  • Политика времени и консистентности. В бизнес-процессах принято держать исходные временные метки в UTC и конвертировать их для пользователей и локальных вычислений. Это снижает риск несоответствий между регионами и системами.
  • Моделирование данных во времени. В проектной документации следует четко прописать правила по выбору типа (DateTime vs DateTime64), уровню точности, зоне времени, агрегациям и TTL, чтобы новые компоненты системы синхронно следовали принятым стандартам.
  • Мониторинг и качество данных. Включайте в пайплайны проверки содержания временных меток: дубликаты, пропуски, коррекции по часовым поясам, коррекции DST и т. п. Это критично для корректной аналитики по временному контексту.
  • Управление изменениями и миграциями типов. При смене типа (например, переход с DateTime на DateTime64) используйте Materialized View или миграцию с минимальной задержкой, ожидая согласованных обновлений в PROD-окружении.
  • Безопасность и соответствие требованиям. В российском контексте особое внимание уделяется хранению резервных копий, локализации данных, сетевой безопасности и аудиту доступа к данным.

     

Технические детали реализации (алгоритмы, схемы, протоколы, интеграции)

  • Алгоритм ingestion-пути:

    • Источник данных формирует поток событий с временными метками.
    • В ClickHouse данные попадают в сырую таблицу (raw) с DateTime64(N).
    • Materialized View превращает данные в агрегаты по часу/суткам и отправляет их в целевые таблицы-агрегаты.
    • Вопросы к аналитике идут к Distributed таблицам, собирающим данные по нодам кластера.
  • Протоколы и интеграции:

    • Kafka → ClickHouse через Kafka engine или через внешние конверторы с сериализацией (JSONEachRow, Protobuf, Avro).
    • Временные конвертации: toStartOfHour(event_time) для агрегаций, toDate(event_time) для группировки по дате и т. п.
    • Форматирование и представление: toTimeZone(event_time, 'Europe/Moscow') для локализации на уровне запросов.
  • Примеры кода

    • Создание сырых данных:
      
          CREATE TABLE IF NOT EXISTS analytics.events_raw
          (
            event_time DateTime64(3),
            user_id UInt64,
            action String,
            location String
          )
          ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/analytics.events_raw', '{replica}')
          PARTITION BY toYYYYMM(event_time)
          ORDER BY (event_time, user_id);
      
  • Материализованное представление и агрегаты по часу:

    
        CREATE MATERIALIZED VIEW analytics.events_by_hour
    ## TO analytics.events_by_hour AS
        SELECT toStartOfHour(event_time) AS hour,
               user_id,
               count() AS event_count
        FROM analytics.events_raw
        GROUP BY hour, user_id;
    
  • Таблица-агрегат:

    
        CREATE TABLE analytics.events_by_hour
        (
          hour DateTime,
          user_id UInt64,
          event_count UInt64
        )
        ENGINE = SummingMergeTree()
        ORDER BY (hour, user_id);
    
  • Пример запросов для временных окон:

    
        SELECT
          toStartOfHour(event_time) AS hour,
          count(*) AS total_events
    ## FROM analytics.events_raw
        WHERE event_time >= now() - INTERVAL 24 HOUR
        GROUP BY hour
        ORDER BY hour;
    
  • Конвертация временной зоны на запросах:

    
    ## SELECT event_time,
               toTimeZone(event_time, 'Europe/Moscow') AS mosk_time
        FROM analytics.events_raw
        LIMIT 10;
    

    Риски, ограничения и типовые ошибки

  • Неправильная работа с временными зонами. Распространённая проблема - несовпадение зоны хранения и зоны представления. Решение: держать данные в UTC на уровне хранения и выполнять конвертации на уровне выборок.

  • Смешивание DateTime и DateTime64. Если в проекте используются оба типа, может возникнуть несовместимость функций и несоответствие агрегаций. Рекомендуется единая политика по выбору типа для всего времени события.

  • Неправильный выбор партиционирования. Слишком мелкие партиции ведут к перегруженным метаданным, слишком крупные - к неэффективной фильтрации. Рекомендуется умеренно детализировать партиции по ключевым временным интервалам (час/день) в зависимости от объема данных и требований к retention.

  • TTL без учёта бизнес-логики. TTL может приводить к потере важных временных контекстов, если не скорректированы бизнес-требования. Важно документировать правила удаления и их влияние на агрегации.

  • DST и переходы. В регионах, где происходят переходы на летнее/зимнее время, некорректные конвертации могут привести к ошибкам в агрегатах. Всегда тестируйте переходы на тестовой выборке.

  • Инструменты мониторинга. Недостаточно видеть только задержки. Нужно отслеживать задержку ingestion, частоту тайм-окон и "skew" между сырыми и агрегированными данными.

     

Заключение

Работа с datetime в ClickHouse требует системного подхода: правильный выбор типа (DateTime vs DateTime64), внимательное отношение к зонам времени и формату хранения, грамотная архитектура партиционирования и TTL, а также продуманная схема ingestion и агрегаций. В сочетании с современным стеком инструментов - как open-source, так и российскими решениями - можно построить высокоскоростные и надёжные аналитические системы, которые точно отражают временной контекст бизнеса и позволяют оперативно отвечать на вопросы пользователей.

 

FAQ

  1. Что выбрать: DateTime или DateTime64 для сырых событий?**
  • Ответ: если ваши события приходят с субсекундной точностью или вы планируете точную временную идентификацию, используйте DateTime64(N). Для обычных событий с секундной точностью хватит DateTime. В любом случае храните в UTC и конвертируйте по необходимости.

 

  1. Какой подход к временным зонам лучше применить в кластере ClickHouse?
  • Ответ: держать хранение в UTC, выполнять конвертации на уровне представления (SQL-запросов или Materialized Views) и в BI-слое. Это минимизирует риск расхождений между узлами и регионами.

 

  1. Какие типовые сценарии используют DateTime64(3) и DateTime64(9)?

DateTime64(3) годится для нагрузки с миллисекундной точностью, например клики и события UI. DateTime64(9) полезен,\nкогда важна нано-скорость событий в системах мониторинга и финансовых потоках. Выбор зависит от бизнес-требований к точности и объему хранения.

 

  1. Как эффективно организовать хранение и агрегацию временных данных?

разделяйте данные по времени через PARTITION BY toYYYYMM(event_time) (или hour/ day, в зависимости от сценария). Используйте TTL для старых данных и Materialized Views для быстрых агрегатов (hourly/daily). Применяйте Distributed-слой для балансировки запросов.

 

  1. Какие паттерны внедрения в архитектуру ClickHouse применимы к datetime-данным?
  • Ответ: паттерны включают:
  • сырые таблицы + агрегаты через Materialized Views;
  • параллельные таблицы и Distributed-кластеры;
  • MX- и TTL-архитектуры для retention;
  • использование Kafka engine для ingestion;
  • хранение и конвертация в UTC, затем локализация на этапе визуализации.

 

  1. Какие риски при миграции типов времени в проде?
  • Ответ: основная сложность** - миграция существующих данных и совместимость функций. Необходимо подготовить тестовый пайплайн, используя тот же набор функций и временных зон, и проводить миграцию через Materialized Views, чтобы минимизировать простой сервиса.

 

  1. Какие примеры реального использования в открытом исходном коде можно привести?
  • Ответ: архитектура из секций выше, работа с DateTime64 в сырых таблицах и агрегированных представлениях, примеры использования TTL и партиционирования - это типичные паттерны в проектах ClickHouse, доступные в открытом исходном коде и демо-проектax.

 

  1. Какие российские практики и решения стоит учитывать?
  • Ответ: в России активно внедряют ClickHouse в рамках крупных корпораций и госструктур; практики включают использование Yakov-ориентированных инструментов мониторинга, локальные инфраструктуры и использование managed-сервисов в рамках Яндекс.Облако. Также применяются отечественные прокси и координационные решения, такие как ClickHouse Keeper, для устойчивого кластера и поддержки репликации.

 

  1. Как проверить корректность временных меток при запросах?
  • Ответ: используйте тестовые наборы с известными временными метками, сравнивайте результаты агрегаций по часам и суткам в разных зонах, проверяйте корректность конвертации через toTimeZone и сравнивайте с локальными источниками времени. Включайте в тесты DST-перы и равномерную загрузку по времени.

 

← Предыдущая статья
clickhouse примеры
Следующая статья →
ClickHouse System

 

Узнать стоимость решенияЗапросить видео презентацию

Решения

Анализировать ФинансыУвеличивайте ПродажиОптимальный Склад и ЛогистикаМаркетинговые Метрики

Клиенты
  • С объединением компании Savencia Fromage & Dairy и молочного комбината в г.Белебей, одного из лидеров по производству твердых сычужных сыров в России, Savencia выходит на российский рынок не только как импортер, но и как производитель молочной продукции.

  • ООО "Уральская транспортная компания" — это транспортно-логистическая компания, специализирующаяся на железнодорожных перевозках грузов, создана в 2009 году.

  • Компания ООО "Комус" - один из лидеров российского рынка оптовых продаж офисных товаров и техники. Компания поставляет широкий ассортимент продукции - от канцелярских принадлежностей до компьютерной техники и офисной мебели.

  • «ПрофХолод» — крупнейший в России производитель сэндвич-панелей с пенополиуретаном. 

  • Решения
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Энергетика
    • Фармацевтика
  • Услуги
    • Переход на отечественные BI и DWH
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Техническая поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Платформы
    • FineBI
    • FineReport
    • FineDataLink
    • Коннекторы данных из 1С в BI
    • Airflow + NiFi
    • Visiology
    • Luxms BI
    • Modus BI
    • PIX BI
    • Arenadata
    • ClickHouse
    • Greenplum
    • Postgres Professional
    • Open-source BI: Superset/Metabase
    • Loginom
    • Yandex.DataLens
    • AI / Исскуственный интеллект
    • Optimacros
    • Шины данных
  • Курсы
    • Учебный курс Информационная грамотность
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt
  • Функциональные решения
    • Создание Data Lake
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и прогнозная аналитика
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • Сквозная аналитика
  • Компания
    • О нас
    • Руководство
    • Новости
    • Клиенты
    • Скачать
    • Контакты
    • Политика конфиденциальности
RutubeVkontakteLinkedInYouTube
ООО "Би Ай Консалт",
ИНН: 7811437757,
ОГРН: 1097847154184
199178, Россия,
Санкт-Петербург,
6-ая линия В.О., Д. 63, 4 этаж
Тел: +7 (812) 334-08-01
Тел: +7 (499) 608-13-06
E-mail: info@biconsult.ru

 

 

 

 

 

×

Пользуясь сайтом, вы соглашаетесь с использованием cookies и политикой конфиденциальности.