ClickHouse 26.6: skip-индексы до миграций, каскадные обновления и потоковые запросы

от автора

Команда ClickHouse выпустила версию 26.6. Релиз получился заметным: 56 новых возможностей, 79 оптимизаций производительности и 366 исправлений. К тому же он вышел к 10-летию с момента открытия исходного кода ClickHouse.

Главные изменения — гипотетические индексы пропуска данных, переработка зависимостей для обновляемых материализованных представлений, экспериментальные непрерывные запросы, встроенная справка в CLI, улучшения для геоданных и новые функции для работы с эмбеддингами.

Гипотетические skip-индексы

В ClickHouse 26.6 появилась возможность проверить, насколько полезен будет skip-индекс, не создавая его физически.

Теперь можно описать гипотетический индекс через CREATE HYPOTHETICAL INDEX, а затем посмотреть оценку через EXPLAIN WHATIF. Такой индекс существует только в текущей сессии, не виден другим пользователям и удаляется после завершения сессии.

Практический смысл простой: перед изменением схемы можно понять, стоит ли вообще добавлять индекс и какие параметры выбрать. Например, для фильтрации по колонке town в тесте на наборе данных почти в 500 млн строк ClickHouse показал, какую долю гранул сможет пропустить индекс с разной гранулярностью: в одном варианте — 77%, в другом — 92%.

Это не заменяет полноценного нагрузочного тестирования, но даёт быстрый способ проверить гипотезу до изменения таблицы.

Каскадные обновляемые материализованные представления

В релизе переработали зависимости для обновляемых материализованных представлений (refreshable materialized views).

Раньше представления могли зависеть друг от друга, но при этом каждое запускалось по собственному расписанию. Из-за этого между этапами могла накапливаться задержка: одно представление уже обновилось, другое ещё ждёт свой таймер, третье может отстать на целый цикл.

Теперь зависимые представления можно обновлять каскадно. Таймер задаётся только для первого представления в цепочке, а следующие запускаются по зависимости через REFRESH DEPENDS ON. Это полезно для пайплайнов, где данные проходят несколько стадий агрегации или подготовки и важно не ловить рассинхрон между слоями.

Упрощённое добавление значений в Enum

Для колонок типа Enum добавили синтаксис ADD ENUM VALUES.

Раньше при добавлении нового значения нужно было заново указывать весь список существующих значений. Теперь можно добавить только новое:

ALTER TABLE ... MODIFY COLUMN ... ADD ENUM VALUES(...)

Изменение небольшое, но для рабочих схем с длинными Enum это снижает риск ошибок и делает миграции менее шумными.

Справка прямо в CLI

В клиенте ClickHouse появилась встроенная справка. Теперь можно выполнить help с нужной темой и получить документацию прямо в командной строке.

Под капотом это работает через новую системную таблицу system.documentation. Её можно запрашивать напрямую: например, смотреть доступные функции, настройки, типы данных, движки таблиц и другие сущности.

Для тех, кто часто работает в консоли, это удобнее, чем каждый раз уходить в браузер за документацией.

clickhouse-local можно временно превратить в сервер

clickhouse-local используют для разового анализа данных без полноценного сервера ClickHouse. В 26.6 его можно заставить слушать TCP- и HTTP-подключения:

SYSTEM START LISTEN TCP;
SYSTEM START LISTEN HTTP;

После этого к локальному экземпляру можно подключаться как к серверу ClickHouse — через клиент или веб-интерфейс. В веб-интерфейсе также появился визуализатор схемы (Schema visualizer), который показывает связи между таблицами, материализованными представлениями и словарями.

Когда сетевой доступ больше не нужен, его можно остановить через SYSTEM STOP LISTEN.

Меньше накладных расходов при запуске запросов

В 26.6 уменьшили накладные расходы на запуск простых запросов. Особенно это заметно на глубоко вложенных запросах.

В примере из анонса один и тот же искусственно усложнённый запрос в 26.5 выполнялся минимум за 98 мс, а в 26.6 — за 30 мс. То есть лучший результат стал примерно в три раза быстрее.

Такие улучшения важны не только для синтетических примеров. Накладные расходы на анализ и запуск запроса могут быть заметны в системах с большим числом коротких запросов, где каждая миллисекунда влияет на общую задержку.

Экспериментальные непрерывные запросы

В ClickHouse появились экспериментальные потоковые запросы. Если добавить к запросу STREAM, он не завершится после текущего результата, а будет продолжать отдавать новые строки по мере их вставки в таблицу.

Примерно так:

SELECT id, msg FROM live_events STREAM;

Это похоже на подписку на поток новых данных. В более продвинутом варианте можно использовать курсоры и продолжать чтение с определённого блока и смещения.

Функция пока экспериментальная, но направление понятное: ClickHouse постепенно закрывает сценарии, где нужна не только быстрая аналитика по накопленным данным, но и работа с непрерывно поступающими событиями.

Вывод результата в PNG

Добавлен формат вывода PNG. Теперь результат запроса можно отрендерить как изображение: одна строка результата соответствует одному пикселю с координатами и цветом.

Это скорее нишевая, но любопытная возможность. На её основе уже показали трассировщик лучей, написанный на SQL-запросах ClickHouse и выводящий результат сразу в PNG.

Улучшения для геоданных

В 26.6 расширили поддержку геоданных. ClickHouse теперь умеет читать коллекции объектов GeoJSON так, чтобы каждый объект становился отдельной строкой.

Нативно поддерживаются Point, LineString, MultiLineString, Polygon и MultiPolygon. Также появились функции MVT для работы с картографическими тайлами: можно проецировать координаты в пространство тайла, кодировать геометрию и строить ограничивающие рамки для условий в WHERE.

Это полезно для сценариев, где ClickHouse используют не только как аналитическую СУБД, но и как движок для геоаналитики и картографических данных.

aiEmbed и квантизация эмбеддингов

В набор экспериментальных ИИ-функций ClickHouse добавили aiEmbed. Функция позволяет получать эмбеддинги прямо из запроса. В примере из анонса её настраивают на локальную Ollama через совместимый с OpenAI API endpoint и модель qwen3-embedding.

Также появились функции квантизации для эмбеддингов. Они позволяют сжимать компоненты эмбеддингов до 8 бит и ниже. По оценке авторов релиза, это может уменьшить размер векторных индексов в четыре раза и более, что снижает стоимость поиска по близости.

Резервирование памяти для рабочих нагрузок

Планировщик рабочих нагрузок ClickHouse уже управлял CPU, вводом-выводом и конкурентностью. В 26.6 к этому добавилось управление памятью.

Теперь можно создать ресурс памяти, описать рабочие нагрузки и задать для них ограничения, например max_memory. Запрос затем можно направить в нужную нагрузку через настройку workload.

Это полезно для кластеров, где в одной инсталляции живут разные типы задач: продакшен-запросы, отчёты, ad hoc-аналитика, эксперименты. Резервирование памяти помогает не давать менее приоритетным задачам вытеснять критичные.

Что в итоге

ClickHouse 26.6 выглядит как релиз, затрагивающий несколько направлений сразу.

Для администраторов и инженеров данных важны гипотетические skip-индексы, каскадные обновляемые представления и управление памятью для рабочих нагрузок. Для разработчиков, которые используют ClickHouse в аналитических приложениях, интересны непрерывные запросы, улучшения для геоданных и возможность временно поднимать clickhouse-local как сервер. Для задач вокруг LLM и векторного поиска — aiEmbed и функции квантизации эмбеддингов.

Часть возможностей пока экспериментальная, поэтому тащить их сразу в критичный продакшен без проверки не стоит. Но сам релиз хорошо показывает, куда движется ClickHouse: меньше ручной возни с оптимизацией, больше инструментов для потоковых данных, геоаналитики и векторных сценариев.

Когда релизы выходят быстрее, чем успеваешь всё попробовать руками, помогают короткие практические разборы. Собрали бесплатные уроки июля по разработке, данным, инфраструктуре и AI в одном дайджесте.

ссылка на оригинал статьи https://habr.com/ru/articles/1055192/