Что такое части таблицы в ClickHouse?
Данные каждой таблицы ClickHouse из семейства движков MergeTree хранятся на диске в виде набора неизменяемых
data parts.
Чтобы проиллюстрировать это, используем эту таблицу (адаптированную из датасета с ценами на недвижимость в Великобритании), в которой содержатся данные о дате продажи, городе, улице и цене проданной недвижимости в Соединённом Королевстве:
Когда сервер ClickHouse обрабатывает пример вставки 4 строк (например, с помощью оператора INSERT INTO), показанный на диаграмме выше, он выполняет несколько шагов: ① Сортировка: Строки сортируются по ключу сортировки таблицы
(town, street), и для отсортированных строк создается разреженный первичный индекс.
② Разделение: Отсортированные данные разбиваются на столбцы.
③ Сжатие: Каждый столбец сжимается.
④ Запись на диск: Сжатые столбцы сохраняются как бинарные файлы столбцов в новом каталоге, соответствующем части данных этой вставки. Разреженный первичный индекс также сжимается и сохраняется в том же каталоге.
В зависимости от конкретного движка таблицы помимо сортировки могут выполняться и дополнительные преобразования.
Части данных самодостаточны и включают все метаданные, необходимые для интерпретации их содержимого без обращения к центральному каталогу. Помимо разреженного первичного индекса, части содержат дополнительные метаданные, такие как вторичные индексы пропуска данных, статистика столбцов, контрольные суммы, min-max индексы (если используется партиционирование) и не только.
Слияние частей
Чтобы свести к минимуму количество исходных частей и накладные расходы на слияние, клиентам баз данных рекомендуется либо выполнять пакетную вставку кортежей, например по 20 000 строк за раз, либо использовать асинхронный режим вставки, при котором ClickHouse буферизует строки из нескольких входящих INSERT в одну и ту же таблицу и создает новую часть только после того, как размер буфера превысит настраиваемый порог или истечет тайм-аут.
Мониторинг частей таблицы
_part: