- разреженный первичный индекс - Упорядочивает данные на диске по выбранному ключу, благодаря чему ClickHouse может пропускать большие диапазоны нерелевантных строк при выполнении запросов.
- Расширенные типы данных - Встроенная поддержка таких типов, как JSON, LowCardinality и Enum, обеспечивает более компактное хранение и более быструю обработку.
- Индексы пропуска и полнотекстовые индексы - Вторичные индексные структуры, которые позволяют ClickHouse пропускать гранулы, не соответствующие предикатам фильтра в запросе; это особенно эффективно для рабочих нагрузок текстового поиска.
- Быстрые вставки с автоматической компакцией - ClickHouse рассчитан на вставки с высокой пропускной способностью и автоматически выполняет слияние частей данных в фоновом режиме, аналогично compaction в открытых табличных форматах.
- Оптимизировано для параллельного чтения - Столбцовая структура хранения MergeTree в сочетании с несколькими уровнями кэширования поддерживает аналитические рабочие нагрузки в реальном времени с высоким параллелизмом — то, для чего открытые табличные форматы не предназначены.
INSERT INTO SELECT, чтобы ускорить аналитику.
Подключение к каталогу
Список таблиц
Изучите схему
Запрос к таблице озера данных
logger_name может быть слишком высокая мощность, чтобы партиционирование было эффективным. У нас также нет индексов, таких как Текстовые индексы, чтобы ещё сильнее отсекать данные. Именно здесь MergeTree показывает себя лучше всего.
Загрузите данные в MergeTree
Создание оптимизированной таблицы
- Без обёрток
Nullable— отказ отNullableповышает эффективность хранения и производительность запросов. LowCardinality(String)для столбцовlevel,instance_type,thread_nameиcheck_name— использует словарное кодирование для столбцов с небольшим числом различных значений, что улучшает сжатие и ускоряет фильтрацию.- полнотекстовый индекс для столбца
message— ускоряет полнотекстовый поиск по токенам, напримерhasToken(message, 'error'). - Ключ
ORDER BY(instance_type, thread_name, toStartOfMinute(event_time))— организует данные на диске в соответствии с типичными условиями фильтрации, чтобы разреженный первичный индекс мог пропускать нерелевантные гранулы.
Вставка данных из каталога
INSERT INTO SELECT, чтобы загрузить ~300 млн строк из таблицы озера данных в нашу таблицу ClickHouse:
Выполните запрос повторно
- Разреженный первичный индекс - ключ
ORDER BY (instance_type, thread_name, ...)означает, что ClickHouse может сразу перейти к гранулам, соответствующимinstance_type = 'm6i.4xlarge'иthread_name = 'TCPHandler', сократив число обрабатываемых строк с 283 миллионов до всего 14 миллионов. - Полнотекстовый индекс - индекс
text_idxдля столбцаmessageпозволяет обрабатыватьhasToken(message, 'error')по индексу, а не сканировать каждое сообщение целиком, что ещё больше уменьшает объём данных, которые ClickHouse нужно прочитать.