Журнал изменений Cloud v25.12
Изменения, нарушающие обратную совместимость
Изменения типов данных
- Добавлен тип
Geometry. Для него добавлена поддержка чтения форматовWKBиWKT. В предыдущих версиях типGeometryбыл псевдонимом дляString, но теперь это полнофункциональный тип. #83344 (Konstantin Vedernikov). - Удалён устаревший тип данных Object. #85718 (Pavel Kruglov).
- Теперь экранируются имена файлов, создаваемые для подстолбцов типа Variant в широкой части данных таблиц MergeTree. Это изменение нарушает совместимость со старыми таблицами с типами данных Variant/Dynamic/JSON. Исправлено хранение типов со специальными символами внутри Variant (например, DateTime с конкретным часовым поясом, который содержит
\). Экранирование можно отключить, изменив настройку MergeTreeescape_variant_subcolumn_filenames(для сохранения совместимости отключите эту настройку в конфиге для MergeTree или установите настройкуcompatibilityна предыдущую версию перед обновлением). Решена проблема #69590. #87300 (Pavel Kruglov).
Изменения запросов и функций
- Теперь
ALTER MODIFY COLUMNтребует явногоDEFAULTпри преобразовании Nullable-столбцов в типы, не допускающиеNULL. Ранее такие операцииALTERмогли «зависать» с ошибкамиcannot convert null to not null, теперь значенияNULLзаменяются выражением значения по умолчанию для столбца. Устраняет проблему #5985. #84770 (Vladimir Cherkasov). - Удалены настройки
allow_not_comparable_types_in_order_by/allow_not_comparable_types_in_comparison_functions. Разрешение несравнимых типов вORDER BYили в функциях сравнения может приводить к логическим ошибкам и неожиданным результатам. Устраняет проблему #90028. #90527 (Pavel Kruglov). - Исправлены функции
bitShiftLeftиbitShiftRight, чтобы возвращать 0 или пустое значение в случае сдвига ровно на размер типа. #91943 (Pablo Marcos). - Токенизатор ngram больше не будет возвращать n-граммы короче длины
N, с которой он был настроен. Поиск по тексту не будет возвращать ни одной строки, если поисковые токены пустые. #89757 (George Larionov).
Изменения в хранилище и индексах
- Удалена устаревшая функциональность
LIVE VIEW. Если вы используетеLIVE VIEW, обновление до новой версии будет невозможно. #88706 (Alexey Milovidov). - Запрещено создание нескольких дисков
plain-rewritableповерх общего пути объектного хранилища, так как это может приводить к неопределенному поведению при коллизиях разных транзакций записи метаданных. #89038 (Mikhail Artemenko). - Теперь запрещено создавать специальные таблицы
MergeTree(такие какReplacingMergeTree,CollapsingMergeTreeи т.д.) с пустым ключомORDER BY, поскольку поведение слияний (merge) в таких таблицах неопределено. Если вам все же необходимо создать такую таблицу, включите настройкуallow_suspicious_primary_key. #91569 (Anton Popov). - Несколько исправлений в работе с неявными индексами. Схема, отображаемая или сохраняемая (метаданные в Keeper), больше не будет включать неявные индексы, такие как индексы, создаваемые настройками
add_minmax_index_for_numeric_columnsилиadd_minmax_index_for_string_columns. Это может привести к ошибкам метаданных, когда таблица ReplicatedMergeTree создается или обновляется в новой версии, в то время как одна из реплик работает на более старом релизе. #91429 (Raúl Marín).
Изменения в настройках и конфигурации
- Добавлена поддержка тегирования исключений в HTTP-ответах, чтобы клиенты могли более надёжно разбирать исключения. Исправляет #75175. Настройка
http_write_exception_in_output_formatпо умолчанию отключена для обеспечения согласованности между форматами. #88818 (Kaviraj Kanagaraj). - Исправлён приоритет настроек SASL в хранилище Kafka. Настройки SASL на уровне таблицы, указанные в запросах CREATE TABLE, теперь корректно переопределяют настройки consumer/producer из конфигурационных файлов. #89401 (János Benjamin Antal).
- Переименованы параметры конфигурации ACME:
refresh_certificates_task_intervalвrefresh_certificates_task_interval_secondsиrefresh_certificates_beforeвrefresh_certificates_before_seconds. Параметрrefresh_certificates_task_interval_secondsтеперь ожидает значение в секундах. #92211 (Konstantin Bogdanov). - Отключённые позиционные аргументы в проекциях теперь считаются обратно несовместимым изменением. Дополнительно введена настройка
enable_positional_arguments_for_projectionsдля обеспечения безопасного обновления кластера ClickHouse, когда в проекциях используются позиционные аргументы. #92007 (Dmitry Novik).
Изменения в клиенте
- Обновлён
clickhouse-client, чтобы возвращать ненулевой код выхода (159 — TIMEOUT_EXCEEDED), когда запрос завершается по таймауту из‑заreceive_timeout. Ранее при превышении времени ожидания возвращался код выхода 0 (успех), что затрудняло скриптам и системам автоматизации обнаружение сбоев по таймауту. #91432 (Sav).
Изменения формата статистики
- При изменении типа столбца с
StringнаNullable(String)мутация данных выполняться не будет. Однако для агрегатной функцииuniqиспользуется иная структура данных: для nullable-столбца будет использоватьсяAggregateFunctionNullсо вложенным агрегатором uniq.AggregateFunctionNullбудет сериализовывать дополнительный флаг типа bool. Это приведёт к несовместимости файла статистики. Формат статистики изменился, сервер аварийно завершится, если существуют статистики в старом формате. Чтобы избежать исключения, выполнитеALTER TABLE [db.]table MATERIALIZE STATISTICS ALLдля пересоздания статистики. #90311 (Han Fei).
Другие критические изменения
- Исправлена фатальная ошибка (
Fatal) при сжатии данных, размер которых не выровнен по размеру элемента (в кодеке T64). Устраняет проблему #89282. #89432 (yanglongwei).
Новые возможности
Functions
- Добавлен новый SQL-оператор EXECUTE AS для поддержки выдачи полномочий от имени другого пользователя (user impersonation). Исправляет #39048. #70775 (Shankar).
- Добавлена функция
flipCoordinates, которая разворачивает требуемое количество измерений в массиве и меняет местами указатели внутри столбца Tuple. Исправляет #79469. #79634 (Sachin Kumar Singh). - Расширен оператор
IS NOT DISTINCT FROM(<=>): добавлена поддержка обратногоIS DISTINCT FROM, а также поддержка совместимых числовых операндов разных типов (например,Nullable(UInt32)иNullable(Int64)). #87581 (yanglongwei). - Добавлена поддержка оконной функции
cume_dist. Исправляет #86920. #88102 (Manuel). - Добавлены функции для вычисления площади и периметра для типа Geometry. #89047 (Konstantin Vedernikov).
- Реализована функция
dictGetKeys, которая возвращает ключ(и) словаря, атрибут которого равен заданному значению. Она использует кэш обратного поиска в рамках одного запроса, который настраивается с помощью параметраmax_reverse_dictionary_lookup_cache_size_bytes, чтобы ускорить повторяющиеся обращения. #89197 (Nihal Z. Miaji). - Добавлена поддержка
arrayRemove(arr, elem)для удаления всех элементов, равныхelem, из массиваarr. Исправляет #52099. #89585 (tiwarysaurav). - Добавлена скалярная функция
midpoint, которая вычисляет среднее значение. Исправляет #89029. #89679 (simonmichal). - Теперь вы можете получать как аргумент, так и соответствующее ему минимальное или максимальное значение с помощью новых функций
argAndMinиargAndMax. #89884 (AbdAlRahman Gad). - Добавлена SQL-функция
HMAC(algorithm, message, key)как часть #73900 и #38775. #90837 (Mikhail f. Shiryaev). - Добавлена поддержка использования первичного ключа и индексов пропуска данных в функции
has(), когда первый аргумент является константным массивом. Закрывает #90980. #91023 (Nihal Z. Miaji).
Системные таблицы
- Добавлена таблица
system.unicode, содержащая список символов Unicode и их свойства. Закрывает #80055. #80857 (wxybear). - Добавлена новая системная таблица
shared_merge_tree_condemned_parts, аналогичнаяshared_merge_tree_outdated_parts, которая перечисляет части, помеченные к удалению потоком PartsKillerThread. (Smita Kulkarni).
Движки таблиц и хранилище
- Поддержка части Prometheus HTTP Query API. Чтобы включить её, добавьте правило с типом
query_apiв секцию<prometheus>конфигурационного файла. Поддерживаемые обработчики:/api/v1/query_rangeи/api/v1/query. #86132 (Nikita Mikhaylov). - Пользователи теперь могут настраивать таблицы S3/Azure Queue для перемещения или добавления тегов к обработанным файлам, помимо прежних вариантов — оставлять или удалять файлы. Закрывает #72944. #86907 (Murat Khairulin).
- Добавлена новая настройка MergeTree
merge_max_dynamic_subcolumns_in_wide_part, позволяющая ограничивать количество динамических подстолбцов в Wide‑части после слияния независимо от параметров, заданных в типе данных. #87646 (Pavel Kruglov). - Интеграция с каталогом Microsoft OneLake. #89366 (Konstantin Vedernikov).
- Поддержка синтаксиса
CREATE OR REPLACEдля временных таблиц. Закрывает #35888. #89450 (Aleksandr Musorin). - Поддержка
direct(nested loop) join для таблиц MergeTree. Чтобы использовать его, укажите его как единственный вариант в настройке:join_algorithm = 'direct'. #89920 (Vladimir Cherkasov). - Этот PR добавляет настройки на уровне проекций, доступные через новую конструкцию
WITH SETTINGSвALTER TABLE ... ADD PROJECTION. Эти настройки позволяют проекциям переопределять отдельные параметры хранения MergeTree (например, index_granularity, index_granularity_bytes) для каждой проекции. #90158 (Amos Bird).
Iceberg и озера данных
- Поддержка
ORDER BYв операцииCREATEдля Iceberg + сортировка вINSERT. Решает #89916. #90141 (Konstantin Vedernikov).
Возможности SQL и запросов
- Добавлен параметр
allow_reentryв агрегатную функциюwindowFunnel. При включении вместе с strict_order он игнорирует события, нарушающие порядок, вместо того чтобы останавливать анализ воронки. Это позволяет корректно обрабатывать пользовательские сценарии с обновлением страницы (A->A->B) или возвратом назад (A->B->A->C) без занижения показателей конверсии. #86916 (Lee ChaeRok). - Теперь пользователь может добавить новый аргумент
preprocessorпри построении текстового индекса. Аргумент представляет собой произвольное выражение, которое трансформирует каждый документ перед токенизацией. #88272 (Jimmy Aguilar Mena). - Добавлена поддержка дробных значений
LIMITиOFFSETдля выбора части таблицы. Закрывает задачу #81892. #88755 (Ahmed Gouda). - Добавлена настройка
into_outfile_create_parent_directoriesдля автоматического создания родительских директорий дляINTO OUTFILE, что предотвращает ошибки при отсутствии выходных путей. Решает задачу #88610. #88795 (Saksham). - Добавлена настройка
type_json_skip_invalid_typed_pathsдля отключения исключений при вставках/преобразованиях типов в тип JSON, когда входной JSON не может быть приведён к явно типизированным путям в типе JSON. В таком случае используется значение null/0 для типизированного пути. Закрывает задачу #86917. #89886 (Max Justus Spransy).
Возможности клиента и CLI
- CLI-клиент теперь может подавлять сообщение «ClickHouse server version is older than ClickHouse client. It may indicate that the server is out of date and can be upgraded.» с помощью параметра
--no-server-client-version-messageили значенияfalse. #87784 (Larry Snizek). - Доступ к экземплярам ClickHouse Cloud с использованием учетных данных Cloud с помощью параметра
--login. #89261 (Krishna Mannem). - Веб-интерфейс теперь предоставляет кнопку скачивания. Она скачивает полный результат, даже если в интерфейсе отображается только его часть. #89768 (Alexey Milovidov).
Конфигурация и мониторинг сервера
- Добавлено поле
memory_usageвX-ClickHouse-ProgressиX-ClickHouse-Summary. Его можно использовать для сбора данных об использовании памяти запросами в режиме реального времени на стороне клиента. #88393 (Christoph Wurm). - Добавлена настройка
send_profile_events, которая позволяет клиентам сократить объём сетевого трафика, когда profile events не используются. #89588 (Kaviraj Kanagaraj).
Keeper
- Совместимость Keeper с ZooKeeper: создание с использованием статистики. #88797 (Konstantin Vedernikov).
- Поддержка постоянных наблюдателей (persistent watches) ZooKeeper в ClickHouse Keeper. #88813 (Konstantin Vedernikov).
Форматы ввода/вывода
- Реализован новый формат ввода/вывода
Buffers. Этот формат аналогиченNative, однако, в отличие отNative, он не сохраняет имена столбцов, их типы или какие-либо дополнительные метаданные. Закрывает #84017. #91156 (Nihal Z. Miaji). - Добавлена настройка
arrow_flight_request_descriptor_typeдля поддержки Dremio и других серверов Arrow Flight, которые требуют дескрипторов командного стиля. Исправляет #89523. #89826 (Shreyas Ganesh). - В движок таблиц Kafka добавлена настройка
kafka_schema_registry_skip_bytesдля пропуска байт заголовка оболочки (например, 19-байтового префикса AWS Glue Schema Registry) перед разбором полезной нагрузки сообщения. #89621 (Taras Polishchuk).
Другие новые возможности
- Добавлена настройка
max_streams_for_files_processing_in_cluster_functionsдля управления количеством потоков при параллельном чтении файлов в табличных функциях Cluster. Закрывает #90223. #91323 (Pavel Kruglov). - Добавлена возможность отключать фоновую загрузку данных соседних частей на уровне отдельного запроса. Исправляет #89524. #89668 (tanner-bruce).
- Экспериментальная поддержка архитектуры e2k (Elbrus-2000) в качестве новой платформы для ClickHouse. #90159 (Ramil Sattarov).
Экспериментальные функции
- Поддержка получения TLS-сертификатов от ACME-провайдеров, RFC 8555. #66315 (Konstantin Bogdanov).
- Введён новый механизм автоматического выполнения запросов с использованием параллельных реплик, управляемый настройкой
automatic_parallel_replicas_mode. #87541 (Nikita Taranov). - Полнотекстовый поиск теперь доступен в режиме закрытого предварительного доступа (ранее находился на экспериментальной стадии). #88928 (Robert Schulze).
Aliasпереведён в категорию экспериментальных функций; его можно включить с помощьюallow_experimental_alias_table_engine=1. #89712 (Kai Zhu).
Повышение производительности
Выполнение и оптимизация запросов
- Прерывать выполнение запросов при достижении лимитов по строкам. Решает #61872. #62804 (Sean Haynes).
- Добавлена оптимизация для удаления неиспользуемых столбцов в планах запросов. Решает #75152. #76487 (János Benjamin Antal).
- Оптимизация для больших значений в ConstantNode. Закрывает #72880. #81104 (Yakov Olkhovskiy).
- Предвыборка ключей при итерации хеш-таблицы для минимизации промахов кэша. #84708 (lgbo).
- Повышена скорость декомпрессии LZ4 за счёт упрощения кода и настройки алгоритма выбора. #88360 (Raúl Marín).
- Реализовано ленивое дублирование столбцов в JOIN и ARRAY JOIN. Избегается преобразование специальных представлений столбцов, таких как Sparse и Replicated, в полные столбцы в некоторых форматах вывода. Это предотвращает ненужное копирование данных в памяти. #88752 (Pavel Kruglov).
- Используются расширенные SIMD-операции для логических функций через динамическую диспетчеризацию. #90432 (Raúl Marín).
- Улучшена производительность JIT-функций за счёт отказа от ненужной инициализации результирующего столбца нулями. #90449 (Raúl Marín).
- Ускорена декомпрессия T64 через динамическую диспетчеризацию. #90610 (Raúl Марín).
- Ускорено преобразование столбцов к типу bool (в
WHERE-условиях) через динамическую диспетчеризацию. #91203 (Raúl Марин). - Ускорена сортировка одиночного числового блока через динамическую диспетчеризацию. #91213 (Raúl Марин).
Оптимизации JOIN
RIGHT JOINиFULL JOINтеперь используютConcurrentHashJoin; это означает, что эти типы join теперь выполняются с более высокой степенью параллелизма. Повышает производительность различных сценариев для RIGHT и FULL JOIN до 2 раз. Исправляет #78027. #78462 (Yarik Briukhovetskyi).- Добавлена возможность переписывать
ANY LEFT JOINилиANY RIGHT JOINвALL INNER JOINв некоторых случаях. #89403 (Dmitry Novik). - Добавлена поддержка runtime-фильтров
JOINдляANTIJOIN. Также переработана реализация runtime-фильтров для уменьшения конкуренции за блокировки. #89710 (Dmitry Novik). - Добавлена поддержка сохранения порядка чтения из левой таблицы в операциях
LEFT/INNER JOIN, что может быть использовано на последующих шагах. #89815 (Vladimir Cherkasov).
Оптимизации MergeTree и подсистемы хранения
- До 8-кратного ускорения
SELECT-запросов с интенсивным отсечением партиций на таблицах с более чем 10K частей. #85535 (James Morrison). - Когда запрос использует фиксированную хэш-таблицу для состояния агрегации (GROUP BY по небольшому целому числу), ClickHouse выполняет слияние состояния агрегации параллельно, ускоряя выполнение запроса. Исправляет #63666. #87366 (Jianfei Hu).
- Parquet reader v3 включён по умолчанию. #88827 (Michael Kolupaev).
- Запросы теперь могут одновременно использовать преимущества
optimize_read_in_orderиquery_plan_optimize_lazy_materialization. Исправляет #88767. #88866 (Manuel). - Теперь для запросов с
DISTINCTиспользуются агрегатные PROJECTION. Закрывает #86925. #88894 (Nihal Z. Miaji). - Выполняется потоковое преобразование
LIMIT BYв случаях, когда порядок сортировки входных данных совпадает с ключами LIMIT BY. #88969 (Eduard Karacharov). - Добавлена поддержка разреженной сериализации для столбцов типа Nullable. #88999 (Amos Bird).
- Оптимизировано inplace-фильтрование в MergeTree reader. Исправляет #87119. #90630 (Xiaozhe Yu).
- Добавлена дополнительная эвристика для уменьшения ширины выбранных вариантов слияния. #91163 (Mikhail Artemenko).
Оптимизации индексов и полнотекстового поиска
- ClickHouse теперь использует skip-индексы для анализа индексов в предикатах
WHEREс комбинированными условиями фильтрации, связанными черезANDиOR. Ранее для использования skip-индексов выражение WHERE должно было представлять собой конъюнкцию (AND) условий фильтрации. Новая настройкаuse_skip_indexes_for_disjunctions(по умолчанию: on) управляет этой возможностью. #87781 (Shankar Iyer). - Повышена производительность фильтрации для предикатов с функциями
like,equals,hasи другими за счёт использования дополнительного предварительного фильтра, построенного на основе текстового индекса. Эта оптимизация включается с помощью настройкиquery_plan_text_index_add_hint. #88550 (Anton Popov). - Улучшена производительность текстового индекса за счёт кэширования блоков словаря и использования хеш-таблиц для поиска токенов вместо двоичного поиска. #88786 (Elmi Ahmadov).
- Поскольку posting lists (списки вхождений) занимают наибольший объём данных, их кэширование улучшает производительность при последовательных запусках. #88912 (Elmi Ahmadov).
- Оптимизированы повторяющиеся обратные обращения к словарю за счёт более быстрых поисков в предвычисленном наборе возможных ключевых значений. Исправляет #7968. #88971 (Nihal Z. Miaji).
- Оптимизированы запросы
ORDER BY...LIMIT Nс использованием skip-индекса и динамического порогового фильтра для существенного сокращения количества обрабатываемых строк. #89835 (Shankar Iyer). - Пользователи должны заметить меньшую задержку при анализе индексов при наличии крупных индексов
minmax(с миллионами гранул). #90428 (Shankar Iyer).
Оптимизации агрегации
- Оптимизирован
AggregateFunctionHistogramза счёт сортировки только хвоста массива точек и пропуска сортировки для монотонных входных данных, что даёт примерно 10% ускорения. #85760 (MakarDev). - Незначительно ускорены некоторые операции countDistinct за счёт сокращения накладных расходов
HashSetTable::merge. #89727 (Raúl Marín). - Улучшена производительность и поведение topK. #90091 (Raúl Marín).
- Улучшена производительность операций сравнения значений типа Decimal. Закрывает #28192. #90153 (Konstantin Bogdanov).
Оптимизации S3 и резервного копирования
- S3 внутренне распределяет объекты по партициям на основе префиксов в именах ключей и автоматически масштабируется для обработки большого числа запросов на партицию. Это изменение добавляет два новых параметра BACKUP: data_file_name_generator и data_file_name_prefix_length. Когда data_file_name_generator=checksum, файлы данных резервной копии именуются на основе хеша их содержимого. #88418 (Julia Kartseva).
- Повышена производительность запросов для таблиц S3, созданных с использованием glob-шаблона, за счет проталкивания значений фильтра
_path, что позволяет избежать операций перечисления в S3. Управляется настройкойs3_path_filter_limit. #91165 (Eduard Karacharov).
Оптимизации озера данных
- Распределённое выполнение: задачи теперь разбиваются по идентификаторам групп строк, а не по файлам. #87508 (Konstantin Vedernikov).
- Поддержка отсечения партиций для функций Paimon. #90253 (JIaQi Tang).
Улучшения
Оптимизация и выполнение запросов
- Разрешена команда
FETCH PARTITIONпри наличии неисправных дисков в реплицируемых таблицах MergeTree. #58663 (Duc Canh Le). - Добавлена функция
h3PolygonToCells, заполняющая геометрию h3‑шестиугольниками. Решает #33991. #66262 (Zacharias Knudsen). - Все DDL-запросы
ON CLUSTERтеперь выполняются в контексте исходного пользователя, выполнившего запрос, для более корректной проверки прав доступа. #71334 (pufit). - Добавлен параллельный режим выполнения для запросов
ALTER TABLE ... FREEZE. #71743 (Kirill). - Позволяет использовать неконстантные вторые аргументы для
IN. Также поддерживает кортеж в качестве второго аргумента. #77906 (Yarik Briukhovetskyi). - Этот PR позволяет использовать обычные проекции в качестве вторичного индекса. При включении некоторые предикаты запроса могут использоваться для чтения данных из частей проекций и генерации битовых карт для эффективной фильтрации строк на этапе PREWHERE. #81021 (Amos Bird).
- Включена по умолчанию настройка
enable_shared_storage_snapshot_in_queryдля обеспечения более строгих гарантий согласованности. #82634 (Alexey Milovidov). - UNION должен при необходимости унифицировать типы с Variant. Исправляет #82772. #83246 (Mithun p).
- Записывать внутренние запросы (те, которые выполняются внутри сервера словарями, refreshable materialized views и т.п.) и добавить новый столбец
is_internalвsystem.query_log. #83277 (Miсhael Stetsyuk). - Добавляет поддержку выполнения
INSERTв столбцы типаALIAS(столбцы, которые просто ссылаются на физический столбец без какого-либо выражения). Закрывает #80060. #84154 (Shaurya Mohan). - Теперь в clickhouse-client для запросов
CREATE OR REPLACE TABLEсSELECTотображаются индикатор хода выполнения, логи и статистика производительности. Решена #38416. #87247 (Diskein). - Добавлена поддержка типов данных JSON и Dynamic в хеш-функциях. Решает проблему из #87734. #87791 (Pavel Kruglov).
- Значение по умолчанию параметра
query_plan_optimize_join_order_limitизменено на 10. #89312 (Alexey Milovidov). - Оптимизация enable_lazy_columns_replication теперь используется по умолчанию, что позволит сократить потребление памяти при выполнении операций
JOIN. #89316 (Alexey Milovidov). - Включить по умолчанию настройку
allow_statistics_optimize, чтобы оптимизатор JOIN использовал статистику по столбцам. #89332 (Alexey Milovidov). - Теперь по умолчанию включена настройка
create_table_empty_primary_key_by_default. Это улучшает удобство использования. #89333 (Alexey Milovidov). - Параметр
enable_time_time64_typeтеперь включён по умолчанию. #89345 (Yarik Briukhovetskyi). - Настройка
allow_special_serialization_kinds_in_output_formatsтеперь включена по умолчанию. #89402 (Pavel Kruglov). - Теперь в запросах, выполняемых через Shared Catalog, игнорируется
ON CLUSTER. (Nikolay Degterinsky). - Добавлена поддержка
ALTER DATABASE MODIFY COMMENTв Shared Catalog. (Nikolay Degterinsky). - Добавлена поддержка
CREATE OR REPLACEдля SharedSet/SharedJoin в базах данных Shared. (Tuan Pham Anh). - Исключено ожидание других запросов при выполнении
SYNC REPLICAв SharedMergeTree. (Raúl Marín).
Улучшения хранилища и MergeTree
- Добавлен новый виртуальный столбец
_tags(Map(String, String)) со всеми тегами, связанными с объектом (blob) в S3. Решает #72945. #77773 (Zicong Qu). - Добавлено сообщение об ошибке о том, что часть была дедуплицирована. #80264 (Aleksandr Musorin).
- Используется OpenSSL 3.5.4. #81389 (Константин Богданов).
- Добавлен кэш для аутентификации с использованием bcrypt. #87115 (Nikolay Degterinsky).
- Метки времени Parquet без часового пояса (isAdjustedToUTC=false) теперь читаются как DateTime64(..., 'UTC') вместо DateTime64(...). #87872 (Michael Kolupaev).
- Роли, определённые в SQL, теперь могут быть выданы пользователям, определённым в
users.xml. #88139 (c-end). - Если пропускающий индекс, используемый в запросе с FINAL, находится на столбце, который является частью первичного ключа, дополнительный шаг проверки пересечения по первичному ключу в других частях не требуется и теперь не выполняется. Решает #85897. #88368 (Shankar Iyer).
- Разрешена вставка в удалённые таблицы и таблицы озера данных, когда включён
disable_insertion_and_mutation. #88549 (Alexander Tokmakov). - Добавлено кэширование статистики на уровне таблицы, добавлены две настройки: настройка MergeTree
refresh_statistics_intervalи настройка сессииuse_statistics_cache. #88670 (Han Fei). - Добавлена настройка MergeTree
alter_column_secondary_index_modeдля управления тем, что делать с индексами во время мутаций. Возможные значения: throw, drop, rebuild и compatibility. Закрывает #77797. #89335 (Raúl Marín). - Введён кэш
ColumnsDescriptionдля частей на уровне таблицы, что снижает использование памяти, когда таблицы содержат много частей и много столбцов. #89352 (Azat Khuzhin).
Системные таблицы и мониторинг
- Добавлено несколько гистограммных метрик для сервера и Keeper для измерения длительности этапов выполнения запросов Keeper. #88158 (Miсhael Stetsyuk).
- В
system.columnsдобавлен новый столбецstatistics, указывающий типы статистик, построенных для этой таблицы. #89086 (Han Fei). - HTTP-интерфейс будет предоставлять заголовки
AgeиExpiresпри использовании кэша результатов запроса. Добавлены новые profile events:QueryCacheAgeSeconds,QueryCacheReadRows,QueryCacheReadBytes,QueryCacheWrittenRows,QueryCacheWrittenBytes. #89759 (Alexey Milovidov). - В Web UI отображаются свойства таблиц. Щелчок по числу строк или байт откроет запрос к
system.tables. #89771 (Alexey Milovidov). - В таблицу
system.error_logдобавлены поляlast_error_time,last_error_message,last_error_query_idиlast_error_trace. #89879 (Narasimha Pakeer). - Идентификаторы блоков дедупликации сохраняются в
system.part_logs. #89928 (Sema Checherinda). - Значение настройки
check_query_single_value_resultпо умолчанию изменено сtrueнаfalse. Это приводит к тому, чтоCHECK TABLEвозвращает детализированные результаты по каждой части вместо агрегированного результата. #90150 (Robert Schulze). - В
system.mutationsдобавлен новый столбецparts_in_progress_namesдля улучшения диагностики. #90155 (Shaohua Wang). - Добавлены таблицы
system.background_schedule_pool{,_log}для улучшения анализа фоновых задач. #91157 (Azat Khuzhin). - Добавлены profile events
FailedInitialQueryиFailedInitialSelectQuery. #91172 (RinChanNOW). - В
system.tablesдобавлены три столбца для метрик «висячих» частей. (Han Fei). - Значение
distributed_cache_client.connection_pool_sizeэкспортировано в виде метрики. (Francesco Ciocchetti).
Улучшения клиента и интерфейса
- Пользователь теперь может отменить запрос, нажав Ctrl-C при работе постраничного вывода (pager). Исправляет #80778. #88935 (Grigorii Sokolik).
- Web UI будет отображать столбики в таблице даже при отрицательных значениях. #89016 (Alexey Milovidov).
- Запросы, начинающиеся с пробельных символов, больше не сохраняются в историю. #89116 (Konstantin Bogdanov).
clickhouse-clientиclickhouse-localв интерактивном режиме будут подсвечивать в командной строке идентификаторы с тем же именем, что и текущий под курсором. #89689 (Alexey Milovidov).- Ползунок изменения размера текстовой области запроса в Web UI теперь занимает всю ширину. #89457 (Alexey Milovidov).
- Подсказки типов в Web UI больше не «наезжают» на заголовок таблицы. #89753 (Alexey Milovidov).
- Теперь вы можете быстро комментировать или раскомментировать выделенные строки в редакторе запросов Web UI с помощью
Ctrl+/(илиCmd+/на Mac). #91160 (Samuel K.). - Добавлена поддержка загрузки конфигурации ClickHouse Client из каталогов XDG Base Directory. Исправляет #89882. #90306 (Wujun Jiang).
Улучшения S3 и облачных хранилищ
- Добавлена возможность автоматически использовать opt-in регионы AWS для S3, когда регион не указан в endpoint. #88930 (Andrey Zvonov).
- Значение по умолчанию для
s3_retry_attemptsустановлено равным 500 в версии 25.6, чтобы гарантировать успешное создание резервных копий при репартиционировании в S3. #89051 (Nikita Mikhaylov). - Кэшируются учетные данные S3 при взаимодействии с endpoint STS, чтобы их можно было переиспользовать для разных вызовов функций. #89734 (Antonio Andelic).
- Теперь предварительно подписанные (pre-signed) URL-адреса работают с S3. Закрывает #65032. #90827 (Yarik Briukhovetskyi).
Улучшения для озёр данных
- Поддержка чтения DeltaLake CDF через табличную функцию
deltaLakeс настройкамиdelta_lake_snapshot_start_version,delta_lake_snapshot_end_version. #90431 (Kseniia Sumarokova). - Поддержка настроек хранилища в операторе
INSERT INTOтабличной функции для согласованности сSELECT. Закрывает #89386. #91707 (Kseniia Sumarokova). - Теперь для запроса
TRUNCATEпо озёрам данных генерируется ошибка «not implemented» вместо того, чтобы молча ничего не делать. Закрывает #86604. #91713 (Kseniia Sumarokova).
Улучшения Kafka
- Настройки
kafka_compression_codecиkafka_compression_levelтеперь можно использовать для указания сжатия для продюсеров Kafka. #89073 (János Benjamin Antal). - Добавлен
kafka_consumer_reschedule_msкак настраиваемый параметр движка таблицKafka. Устраняет проблему #89204. #90112 (Jeremy Aguilon).
Улучшения Keeper
- Добавлен лимит на размер в байтах для пакета запросов append в Keeper. Лимит контролируется с помощью
keeper_server.coordination_settings.max_requests_append_bytes_size. #90342 (Antonio Andelic). - Добавлена проверка на стороне keeper-server во время handshake для отклонения клиентов, если
last_zxid_seen (provided by the client) > last_processed_zxid. #90016 (Miсhael Stetsyuk). - Используется более низкий лимит на число узлов для запроса RemoveRecursive Keeper во время очистки S3Queue. #90201 (Antonio Andelic).
Улучшения форматов ввода/вывода
- Добавлена поддержка UUID в Parquet, когда он представлен типом
FixedString(16)с логическим типом UUID. #74484 (alekseev-maksim). - Добавлена поддержка массива строк в качестве входного параметра для функций
hasAnyTokensиhasAllTokens. #89124 (Elmi Ahmadov). - В формате Pretty именованные кортежи теперь отображаются как Pretty JSON. Это закрывает #65022. #91779 (Mostafa Mohamed Salah).
- Добавлено ограничение на максимальный размер сообщения CapnProto. Его можно изменить с помощью
format_capn_proto_max_message_size. #91888 (Antonio Andelic).
Улучшения текстового индекса
- Текстовый индекс теперь работает с таблицами ReplacingMergeTree. #90908 (Elmi Ahmadov).
- Добавлена возможность использовать инвертированный индекс в
PREWHERE. Закрывает #89975. #89977 (Peng Jian). - Токенизатор Ngrams теперь можно собирать с
ngram_length = 1. #91529 (George Larionov). - Добавлен кэш для десериализованного заголовка текстового индекса для уменьшения операций ввода-вывода (I/O) и улучшения производительности запросов. #89513 (Elmi Ahmadov).
Другие улучшения
- Исправлена бинарная десериализация
ArrayиMap, чтобы при проверке ограничений по размеру использовалась настройкаmax_binary_array_sizeвместоmax_binary_string_size. #88744 (Raufs Dunamalijevs). - Если объем системной памяти меньше 5 ГБ, по умолчанию не выполнять mlock исполняемого файла. #89751 (Alexey Milovidov).
- Уменьшено потребление памяти во время слияний в таблице
system.metric_logпутем установкиmin_bytes_for_wide_partиvertical_merge_algorithm_min_bytes_to_activateв 128 МБ. #89811 (filimonov). - Повторять попытки при сетевых ошибках, когда библиотека S3 разбирает XML-ответ. #90216 (Sema Checherinda).
- Обновлены предупреждения при приближении к ограничениям guardrails: теперь отображаются текущее значение и значение, при котором выбрасывается исключение. #90438 (Nikita Fomichev).
- Передавать фрагменты потоком в таблице
system.filesystem_cacheвместо создания одного фрагмента со всем состоянием кеша. #90508 (Kseniia Sumarokova). - Элементы в кеше индекса векторного сходства теперь удаляются, когда части таблицы удаляются или заменяются более новыми частями. #90750 (Shankar Iyer).
- Исключено раскрытие версии сервера ClickHouse в HTTP-ошибках, возвращаемых до прохождения аутентификации. #91003 (filimonov).
- Добавлены новые настройки
apply_row_policy_after_finalиapply_prewhere_after_final, позволяющие применять политики строк и условияPREWHEREпосле обработкиFINAL. Исправляет #90986. #91065 (Yarik Briukhovetskyi). - Добавлена поддержка типа JSON в функции tupleElement. Закрывает #81630. #91327 (Pavel Kruglov).
- Добавлена поддержка отрицательных индексов для доступа к элементу кортежа (например, tuple.-1). #91665 (Amos Bird).
- Разрешено неявное приведение типа при приведении
ArrayкQBit. #91846 (Raufs Dunamalijevs). - Добавлен новый столбец
elapsed_time_microsecondsвsystem.blob_storage_log. #92322 (Alexey Milovidov). - Добавлена новая настройка
database_shared_drop_table_delay_seconds, позволяющая пользователям управлять задержкой удаления таблиц в базе данных Shared. (Nikolay Degterinsky). - Добавлена отложенная загрузка зашифрованных ключей для именованных коллекций. (Pablo Marcos).
- Добавлена возможность отключать кеш клиентов по буферу для распределенного кеша. (Kseniia Sumarokova).
- Добавлен общий лимит для подключений к распределенному кешу. (Kseniia Sumarokova).
Исправления ошибок
Примечание
В этом разделе приведён выбранный набор важных исправлений. Полный список всех исправлений в этом выпуске см. в полном журнале изменений
Исправления выполнения запросов
- Исправлена некорректная величина
rows_before_limit_at_least, когда в распределённой агрегирующей выборке с объединением участвуют несколько удалённых сегментов. #63511 (Amos Bird). - Исправлено появление сообщения
0 rows in setпосле запросаINSERT INTO ... SELECT. Закрывает #47800. #79462 (Engel Danila). - Исправлена работа
multiIfс константными аргументами и ленивой (short-circuit) оценкой. Закрывает #72714. #84546 (Yakov Olkhovskiy). - Исправлена ошибка
LogicalErrorпри выборке из таблицы с подзапросом вCONSTRAINT. Решает #84190. #85575 (Pervakov Grigorii). - Исправлена логическая ошибка при переупорядочивании
cross join, когдаquery_plan_optimize_join_order_limit> 1. Закрывает #89409. #88286 (Vladimir Cherkasov). - Исправлены некорректные результаты
JOINпри использовании условийORс уникальными ключами правой таблицы. Решает #89391. #89512 (Vladimir Cherkasov). - Исправлена логическая ошибка в
full_sorting_mergejoin с дублирующимися столбцами. Решает #86957. #89495 (Vladimir Cherkasov). - Исправлена возможная ошибка
Invalid number of rows in ChunkвJOINс дублирующимися столбцами. Решает #89411. #90053 (Vladimir Cherkasov). - Исправлена проблема с дублированием данных в
RIGHT JOINс distributed таблицей при включённых параллельных репликах. #90806 (zoomxi). - Исправлена логическая ошибка при использовании
join_use_nullsс несколькими объединениями иcross join. #91853 (Vladimir Cherkasov).
Исправления типов данных и JSON
- Исправлено чтение подстолбцов из столбца, в имени которого есть точка, в ряде случаев. Исправляет #81261, #82058, #88169. #87205 (Pavel Kruglov).
- Исправлено чтение смешанного массива Floats и Bools из JSON. Ранее вставка таких данных приводила к исключению. #88008 (Pavel Kruglov).
- Исправлено приведение типа из
LowCardinality(Nullable(T))к Dynamic. #86365 (Pavel Kruglov). - Исправлена возможная логическая ошибка при чтении путей и их подстолбцов в расширенном режиме общей сериализации данных JSON. Исправляет #89805. #89819 (Pavel Kruglov).
- Исправлено возможное переполнение стека при двоичной десериализации типов данных. Исправляет #88710. #89822 (Pavel Kruglov).
- Исправлено возможное несогласованное состояние общих данных и динамических путей в JSON, которое могло приводить к логическим ошибкам и неожиданным результатам. #90816 (Pavel Kruglov).
- Исправлено слияние JSON-столбцов в Summing/Aggregating/Coalescing MergeTree. #91151 (Pavel Kruglov).
Исправления MergeTree и хранилища
- Исправлено несколько проблем, вызванных ранним удалением столбцов в TTL. Исправляет #88002. #88860 (Amos Bird).
- Исправлен некорректный результат min(PK)/max(PK), когда PK отсортирован в обратном порядке. Это исправляет #83619. #88796 (Amos Bird).
- Исправлено некорректное распределение по сегментам в оптимизации
JOIN, когда первичный ключ отсортирован по убыванию. Исправляет #88512. #88794 (Amos Bird). - Исправлено условие гонки при чтении индекса проекций. Исправляет #89497. #89762 (Peng Jian).
- Исправлена некорректная обработка слияния частей, очищенных с помощью TTL, с непустыми проекциями при использовании
deduplicate_merge_projection_mode='ignore'. Исправляет #89430. #89458 (Amos Bird). - Исправлена ошибка
TOO_MANY_MARKS, которая могла возникать после некоторых запросовALTERдля компактных частей. #91980 (alesapin).
Исправления для Parquet и форматов
- Исправлена ошибка сегментации в Parquet-ридере, когда
input_format_parquet_local_file_min_bytes_for_seekустановлено в 0. Закрывает #78456. #88784 (Animesh). - В Parquet-райтере строка
created_byтеперь выводится в корректном формате. #87735 (Michael Kolupaev). - Исправлена проблема, из‑за которой запись в формате Parquet не сохраняла исходный порядок при использовании однопоточной записи с нативным райтером. #90126 (Arthur Passos).
- Исправлена ошибка ORC-ридера при чтении строковых столбцов, закодированных с помощью DICTIONARY_V2 и содержащих только значения NULL. #91889 (Peng Jian).
- Исправлено переполнение при чтении из формата ORC для типов Date и DateTime64. Закрывает #70976. #91572 (Yarik Briukhovetskyi).
Исправления для Iceberg и озера данных
- Исправлен протокол icebergS3Cluster. Теперь поддерживается эволюция схемы, позиционные и удаления по равенству в кластерной функции
iceberg. Исправляет #88287. #88919 (Yang Jiang). - Исправлено исключение JSON в таблице iceberg со столбцом
timestampпри использовании каталога Glue. Исправляет #90210. #90209 (Alsu Giliazova). - Теперь ClickHouse не будет использовать оптимизацию
read-in-orderдля iceberg, если порядок сортировки не указан в файлах манифеста. Исправляет #89178. #90304 (alesapin).
Исправления функций
- Исправлена ошибка в функции
reverseUTF8. В предыдущих версиях она некорректно обращала порядок байт UTF-8 кодовых точек длиной 4. Закрывает #88913. #88914 (Alexey Milovidov). - Исправлено вычисление phi-squared, приводившее к некорректным результатам в
cramersV,cramersVBiasCorrected,theilsUиcontingency. #87831 (Nihal Z. Miaji). - Исправлено поведение
top_k, чтобы параметр порога учитывался при вызове с одним аргументом. Закрывает #88757. #88867 (Manuel). - Исправлено некорректное усечение аргументов
countIf(*). Закрывает #89372. #89373 (Manuel). - Исправлена проблема, из‑за которой функции
trim,ltrim,rtrimне работали с двумя аргументами. Закрывает #90170. #90305 (Nihal Z. Miaji). - Исправлена работа функции
arrayFilterпри использовании пустого массива совместно с функциейisNull. Закрывает #73849. #91105 (Nihal Z. Miaji).
Исправления, связанные с памятью и сбоями
- Исправлен возможный сбой во время выполнения удалённого запроса с
ARRAY JOINвнутриINи включённой настройкойenable_lazy_columns_replication. Исправляет #90361. #89997 (Pavel Kruglov). - Исправлен сбой при корректном завершении работы сервера из‑за неверного порядка уничтожения объектов. Исправляет #82420. #90076 (Nikita Mikhaylov).
- Исправлен сбой в случае, если состояние агрегатной функции содержит сериализованное значение столбца типа LowCardinality(String). #89550 (Pavel Kruglov).
- Исправлен сбой в StorageDistributed при разборе некорректных имён директорий сегментов. #90243 (Aleksandr Musorin).
- Исправлены ложные ошибки превышения лимита памяти при включённом кэше страниц в пользовательском пространстве. #91361 (Michael Kolupaev).
- Исправлен возможный сбой в агрегатных функциях после
MEMORY_LIMIT_EXCEEDED. #92390 (Azat Khuzhin). - Улучшено отслеживание использования памяти при формировании результата хеш-соединений. #89560 (Azat Khuzhin).
Исправления в области безопасности и доступа
- Исправлена ошибка
ACCESS_ENTITY_NOT_FOUNDпри попытке выполнитьclusterAllReplicasот пользователя с несуществующей ролью. Устраняет проблему #87670. #89068 (pufit). - Исправлена проверка прав доступа для запросов
ALTER UPDATE, когда функция таблицыremoteиспользуется сlocalhostв качестве целевого хоста. #90761 (pufit). - Исправена проверка грантов с подстановочными символами (wildcard) при частичном отзыве привилегий. #90922 (pufit).
- Исправлена обработка глобальных грантов при их отзыве с использованием подстановочных символов (wildcard). #90928 (pufit).
Исправления для Replicated database
- После восстановления реплика базы данных Replicated могла надолго зависать, постоянно выводя сообщения вроде
Failed to marked query-0004647339 as finished. Это исправлено. #88671 (Alexander Tokmakov). - Исправлена ошибка use-after-free в Distributed из-за гонки между завершением работы и фоновыми
INSERT. Решает #88640. #89136 (Azat Khuzhin). - Refreshable materialized view: исправлен редкий сбой сервера, если исходная таблица была полностью удалена во время обновления. #89203 (Michael Kolupaev).
Исправления в Keeper
- Исправлено чтение журналов изменений при запуске Keeper в случаях, когда какой‑либо журнал не был корректно переименован во время ротации. #89496 (Antonio Andelic).
Прочие важные исправления
- Исправлено ухудшение производительности при анализе пропускающих индексов. #89004 (Anton Popov).
- Исправлена несовместимость Hive-партиционирования, мешавшая плавному обновлению на 25.8. #90202 (Kseniia Sumarokova).
- Исправлен запрос
WITH FILLс бесконечными значениямиnan/inf. Исправляет #69261. #90255 (Konstantin Bogdanov). - Time и Time64 теперь корректно учитывают часовые пояса при преобразовании из DateTime и DateTime64. Закрывает #89896. #90310 (Yarik Briukhovetskyi).
- Исправлены потенциально некорректные результаты запросов
SELECTпосле легковесных обновлений при включённом кэше условий запроса. Исправляет #90176. #90204 (Anton Popov). - Исправлена совместимость сериализации состояния агрегации типа String в памяти. #90880 (Antonio Andelic).
- Исправлена агрегация
SummingMergeTreeдля столбцовNestedс типомLowCardinality. #90927 (Ivan Babrou). - Исправлена проблема, из-за которой
system.view_refreshesзавершался с ошибкойNo macro 'replica' in config. #92203 (Michael Kolupaev). - Исправлена репликация ALTER-запроса, который косвенно добавляет столбец в MV с Shared Catalog. (Nikolay Degterinsky).
- Исправлена проблема, из-за которой неудачный коммит MV приводил к зависанию применения состояния Shared Catalog. (Nikolay Degterinsky).
- Исправлена проверка ограничений настроек в командах
ALTERна вторичных репликах с Shared Catalog. (Nikolay Degterinsky). - Комментарий базы данных теперь сохраняется при миграции SharedCatalog. (Alexander Tokmakov).
- Исправлена проблема, из-за которой materialized view заменялись на вторичных репликах в Shared Catalog. (Nikolay Degterinsky).
- Исправлены счетчики system.distributed_cache_usage. (Kseniia Sumarokova).
- Исправлено зависание операции DROP таблицы, создание которой завершилось с исключением
ILLEGAL_COLUMNв Shared Catalog. (Nikolay Degterinsky). - Отключена поддержка использования
CREATE OR REPLACEдля SharedSet/SharedJoin в реплицируемых базах данных. (Tuan Pham Anh). - Исправлены исключения
UNFINISHED, возникавшие при обновлении RMV в базе данных Shared. (Nikolay Degterinsky). - Исправлен сбой при ошибке
TABLE_ALREADY_EXISTSв общих базах данных. (Nikolay Degterinsky). - Исправлена миграция таблиц с некорректными запросами создания в Shared Catalog. (Nikolay Degterinsky).
- Всегда использовать виртуальные части из памяти в функции
getStatus. (Mikhail Artemenko). - Добавлены повторные попытки при запуске приложения состояния Shared catalog. (Nikolay Degterinsky).
- Исправлена проблема, из-за которой команда
DROP DATABASEзависала после возникновения исключения во время создания таблицы. (Nikolay Degterinsky). - Исправлена логическая ошибка в распределённом кэше. (Kseniia Sumarokova).
- Исправлено некорректное сообщение об ошибке в распределённом кэше. (Kseniia Sumarokova).
- Исправлен
LOGICAL_ERRORв ~TemporaryLockForUUIDDirectory в Shared Catalog. (Nikolay Degterinsky). - Исправлена ошибка, из-за которой кэш метаданных возвращал некорректные зависимости после переименования базы данных. (Nikolay Degterinsky).
- Shared Catalog: Исправлена проблема с удалением больших таблиц командой DROP на вторичных репликах. (Raúl Marín).
- Распределённый кеш: исправлена логическая ошибка в
processWriteRequest. (Kseniia Sumarokova). - Удалены проверки операций
ALTERнад MV на вторичных репликах. (Nikolay Degterinsky).