Команда 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/