Перейти к основному содержанию

Несовместимые с предыдущими версиями изменения

Изменения типов данных

  • Добавлен тип Geometry с поддержкой чтения форматов WKB и WKT. В предыдущих версиях тип Geometry был псевдонимом String, а теперь это полноценный тип. #83344 (Konstantin Vedernikov).
  • Удалён устаревший тип Object. #85718 (Pavel Kruglov).
  • Экранируются имена файлов, создаваемых для подстолбцов типа Variant в частях данных Wide таблиц MergeTree. Это изменение нарушает совместимость со старыми таблицами с типами данных Variant/Dynamic/JSON. Оно исправляет хранение типов со специальными символами внутри Variant (например, DateTime с определённым часовым поясом, содержащим \). Экранирование можно отключить, изменив настройку MergeTree escape_variant_subcolumn_filenames (чтобы сохранить совместимость, отключите эту настройку в конфигурации MergeTree или перед обновлением установите для настройки compatibility значение предыдущей версии). Решает проблему #69590. #87300 (Pavel Kruglov).

Изменения запросов и функций

  • ALTER MODIFY COLUMN теперь требует явного DEFAULT при преобразовании столбцов с типом Nullable в типы, не допускающие NULL. Ранее такие ALTER могли зависать из-за ошибок cannot convert null to not null; теперь значения NULL заменяются выражением DEFAULT для столбца. Исправляет #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, поскольку поведение слияния в таких таблицах не определено. Если вам всё же нужно создать такую таблицу, включите настройку 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_before переименованы в refresh_certificates_task_interval_seconds и refresh_certificates_before_seconds соответственно. Параметр refresh_certificates_task_interval_seconds теперь ожидает значение в секундах. #92211 (Konstantin Bogdanov).
  • Отключение позиционных аргументов в PROJECTION помечено как обратно несовместимое изменение. Кроме того, добавлена настройка enable_positional_arguments_for_projections, которая позволяет безопасно обновлять кластер ClickHouse, если в PROJECTION используются позиционные аргументы. #92007 (Dmitry Novik).

Изменения клиента

  • В clickhouse-client внесено изменение: теперь при тайм-ауте запроса из-за receive_timeout он возвращает ненулевой код выхода (159 - TIMEOUT_EXCEEDED). Ранее при тайм-ауте возвращался код выхода 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).

Новые возможности

Функции

  • Добавлен новый SQL-оператор EXECUTE AS для выполнения от имени другого пользователя. Решает проблему #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).
  • Добавлены функции для вычисления площади и периметра геометрического типа. #89047 (Konstantin Vedernikov).
  • Реализована функция dictGetKeys, которая возвращает ключи словаря, чей атрибут равен указанному значению. Она использует обратный кэш поиска на уровне запроса, настраиваемый параметром max_reverse_dictionary_lookup_cache_size_bytes, чтобы ускорить повторные обращения. #89197 (Nihal Z. Miaji).
  • Добавлена поддержка arrayRemove(arr, elem) для удаления из массива arr всех элементов, равных elem. Решает проблему #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).
  • Поддержка JOIN direct (вложенный цикл) для таблиц MergeTree. Чтобы использовать его, укажите его как единственное значение настройки: join_algorithm = 'direct'. #89920 (Vladimir Cherkasov).
  • Добавлены настройки на уровне PROJECTION, доступные через новую конструкцию WITH SETTINGS в ALTER TABLE ... ADD PROJECTION. Эти настройки позволяют PROJECTION переопределять некоторые параметры хранилища MergeTree (например, index_granularity, index_granularity_bytes) для каждой PROJECTION отдельно. #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/ноль для типизированного пути. Закрывает #86917. #89886 (Max Justus Spransy).

Возможности клиента и CLI

  • Клиент CLI теперь может скрывать сообщение ‘Версия сервера ClickHouse старее, чем версия клиента ClickHouse. Это может указывать на то, что сервер устарел и его можно обновить.’, если указать --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, которая позволяет клиентам сократить сетевой трафик, если события профилирования не используются. #89588 (Kaviraj Kanagaraj).

Keeper

Форматы ввода/вывода

  • Добавлен новый формат ввода/вывода 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).
  • Добавлен prefetch ключей при итерации хеш-таблицы, чтобы минимизировать промахи кэша. #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 Marín).
  • Ускорено преобразование столбцов в bool (в секциях WHERE) через динамическую диспетчеризацию. #91203 (Raúl Marín).
  • Ускорена сортировка одного числового блока через динамическую диспетчеризацию. #91213 (Raúl Marín).

Оптимизации JOIN

  • RIGHT и 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 filters для ANTI JOIN. Также переработана реализация runtime filters, чтобы снизить конкуренцию за блокировки. #89710 (Dmitry Novik).
  • Добавлена поддержка сохранения упорядоченного чтения из левой table в операциях LEFT/INNER JOIN, что может использоваться на последующих шагах. #89815 (Vladimir Cherkasov).

MergeTree и оптимизации хранилища

  • До 8 раз более быстрые запросы SELECT при интенсивном partition pruning на таблицах с 10K+ частями. #85535 (James Morrison).
  • Когда запрос использует фиксированную hash map для состояния агрегации (GROUP BY по небольшому целому числу), ClickHouse может выполнять слияние состояния агрегации параллельно, чтобы ускорить запрос. Исправлено в #63666. #87366 (Jianfei Hu).
  • ридер Parquet v3 включен по умолчанию. #88827 (Michael Kolupaev).
  • Теперь запросы могут одновременно использовать optimize_read_in_order и query_plan_optimize_lazy_materialization. Исправлено в #88767. #88866 (Manuel).
  • Использование aggregate PROJECTION для запросов с DISTINCT. Закрывает #86925. #88894 (Nihal Z. Miaji).
  • Потоковое преобразование LIMIT BY теперь запускается в случаях, когда порядок сортировки входных данных соответствует ключам LIMIT BY. #88969 (Eduard Karacharov).
  • Добавлена поддержка разреженной сериализации для столбцов типа Nullable. #88999 (Amos Bird).
  • Оптимизирована встроенная фильтрация в ридере MergeTree. Исправлено в #87119. #90630 (Xiaozhe Yu).
  • Добавлена дополнительная эвристика для уменьшения ширины выбранных вариантов слияния. #91163 (Mikhail Artemenko).

Оптимизации индексов и текстового поиска

  • ClickHouse теперь использует индексы пропуска данных для анализа индексов в предложениях WHERE со смешанными условиями фильтрации, соединенными через AND и OR. Ранее для использования индексов пропуска данных предложение WHERE должно было быть конъюнкцией (AND) условий фильтрации. Этой возможностью управляет новая настройка use_skip_indexes_for_disjunctions (по умолчанию: включена). #87781 (Shankar Iyer).
  • Улучшена производительность фильтрации для предикатов с функциями вроде like, equals, has и других за счет использования дополнительного предварительного фильтра, построенного на основе текстового индекса. Эта оптимизация включается настройкой query_plan_text_index_add_hint. #88550 (Anton Popov).
  • Улучшена производительность текстового индекса за счет кэширования блоков словаря и использования хеш-таблиц для поиска токенов вместо двоичного поиска. #88786 (Elmi Ahmadov).
  • Поскольку списки вхождений занимают больше всего места по объему данных, их кэширование повышает производительность при повторных запусках. #88912 (Elmi Ahmadov).
  • Оптимизированы повторные обратные обращения к словарю за счет более быстрого поиска в предварительно вычисленном наборе возможных значений ключей. Закрывает #7968. #88971 (Nihal Z. Miaji).
  • Оптимизированы запросы ORDER BY...LIMIT N за счет использования индекса пропуска данных и динамического порогового фильтра, что позволяет значительно сократить количество обрабатываемых строк. #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).
  • Логировать внутренние запросы (те, которые выполняются внутри dictionaries, 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).
  • Игнорировать предложение ON CLUSTER в запросах, выполняемых через Shared Catalog. (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 (Konstantin Bogdanov).
  • Добавлен кэш для bcrypt-аутентификации. #87115 (Nikolay Degterinsky).
  • Временные метки Parquet без часового пояса (isAdjustedToUTC=false) теперь читаются как DateTime64(…, ‘UTC’) вместо DateTime64(…). #87872 (Michael Kolupaev).
  • Роли, определённые в SQL, теперь можно выдать пользователям, определённым в users.xml. #88139 (c-end).
  • Если индекс пропуска данных, используемый в запросе FINAL, построен по столбцу, входящему в primary key, дополнительный шаг проверки пересечения primary key в других частях не требуется и теперь не выполняется. Исправляет #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, которая управляет тем, что делать с индексами во время Мутации. Возможные значения: сгенерировать исключение, drop, rebuild и compatibility. Закрывает #77797. #89335 (Raúl Marín).
  • Добавлен кэш ColumnsDescription на уровне таблицы для частей, что снижает использование памяти, когда таблицы содержат много частей и столбцов. #89352 (Azat Khuzhin).

Системные таблицы и мониторинг

  • Добавлены несколько метрик-гистограмм для сервера и Keeper для сбора длительностей этапов выполнения запросов Keeper. #88158 (Miсhael Stetsyuk).
  • В system.columns добавлен новый столбец со статистикой, указывающий, какие типы статистики построены для этой таблицы. #89086 (Han Fei).
  • HTTP-интерфейс будет возвращать заголовки Age и Expires, когда используется кэш результатов запросов. Добавлены новые события профиля: QueryCacheAgeSeconds, QueryCacheReadRows, QueryCacheReadBytes, QueryCacheWrittenRows, QueryCacheWrittenBytes. #89759 (Alexey Milovidov).
  • В веб-интерфейсе теперь отображаются свойства таблицы. При нажатии на число строк или байт будет показан запрос из 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).
  • Добавлены события профиля FailedInitialQuery и FailedInitialSelectQuery. #91172 (RinChanNOW).
  • В system.tables добавлены три столбца для метрик висячих частей. (Han Fei).
  • Значение distributed_cache_client.connection_pool_size теперь доступно как метрика. (Francesco Ciocchetti).

Улучшения клиента и интерфейса

  • Теперь пользователь может отменить запрос, нажав Ctrl-C, когда запущен pager. Исправлено #80778. #88935 (Grigorii Sokolik).
  • В веб-интерфейсе теперь отображаются полосы в таблице, даже если значения отрицательные. #89016 (Alexey Milovidov).
  • Запросы, начинающиеся с пробельных символов, больше не сохраняются в истории. #89116 (Konstantin Bogdanov).
  • В clickhouse-client и clickhouse-local в интерактивном режиме теперь подсвечиваются идентификаторы в командной строке с тем же именем, что и у текущего идентификатора под курсором. #89689 (Alexey Milovidov).
  • Ползунок изменения размера текстового поля запроса в веб-интерфейсе теперь растягивается на всю ширину. #89457 (Alexey Milovidov).
  • Подсказки типов в веб-интерфейсе больше не заходят на заголовок таблицы. #89753 (Alexey Milovidov).
  • Теперь в редакторе запросов веб-интерфейса можно быстро закомментировать или раскомментировать выделенные строки с помощью Ctrl+/ (или Cmd+/ на Mac). #91160 (Samuel K.).
  • Добавлена поддержка загрузки конфигурации ClickHouse Client из путей XDG Base Directory. Исправлено #89882. #90306 (Wujun Jiang).

Улучшения S3 и облачных хранилищ

  • Добавлена автоматическая поддержка opt-in регионов AWS для S3, если регион не указан в конечной точке. #88930 (Andrey Zvonov).
  • Значение s3_retry_attempts по умолчанию для 25.6 установлено равным 500, чтобы резервные копии успешно выполнялись при переразбиении в S3. #89051 (Nikita Mikhaylov).
  • Кэшируются учетные данные S3 при обращении к конечной точке STS, чтобы их можно было повторно использовать для разных вызовов функций. #89734 (Antonio Andelic).
  • Теперь с S3 работают предподписанные URL-адреса. Закрывает #65032. #90827 (Yarik Briukhovetskyi).

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

  • Поддержка чтения DeltaLake CDF через табличную функцию deltaLake с настройками delta_lake_snapshot_start_version, delta_lake_snapshot_end_version. #90431 (Kseniia Sumarokova).
  • Поддержка настроек хранилища при вставке в табличную функцию для согласованности с SELECT. Закрывает #89386. #91707 (Kseniia Sumarokova).
  • Генерация ошибки “not implemented” для запроса TRUNCATE к озерам данных вместо молчаливого бездействия. Закрывает #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-сервера во время рукопожатия, чтобы отклонять клиентов, если last_zxid_seen (provided by the client) > last_processed_zxid. #90016 (Miсhael Stetsyuk).
  • Во время очистки S3Queue для запроса RemoveRecursive в Keeper используется меньший лимит на число узлов. #90201 (Antonio Andelic).

Улучшения форматов ввода/вывода

  • Добавлена поддержка UUID в Parquet, если он представлен как FixedString(16) с логическим типом UUID. #74484 (alekseev-maksim).
  • Добавлена поддержка массива строк в качестве входного аргумента для функций hasAnyTokens и hasAllTokens. #89124 (Elmi Ahmadov).
  • В формате Pretty именованные Tuple теперь отображаются как 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).
  • При сетевых ошибках во время разбора XML-ответа библиотекой S3 теперь выполняется повторная попытка. #90216 (Sema Checherinda).
  • Обновлены предупреждения при приближении к ограничениям guardrails: теперь отображаются текущее значение и значение сгенерировать исключение. #90438 (Nikita Fomichev).
  • В таблице system.filesystem_cache фрагменты теперь обрабатываются потоком вместо создания одного фрагмента со всем состоянием кэша. #90508 (Kseniia Sumarokova).
  • Записи в кэше индекса векторного сходства теперь удаляются при удалении частей таблицы или их замене более новыми частями. #90750 (Shankar Iyer).
  • Предотвращено раскрытие версии ClickHouse server в HTTP-ответах с ошибками, возвращаемых до аутентификации. #91003 (filimonov).
  • Добавлены новые настройки apply_row_policy_after_final и apply_prewhere_after_final, позволяющие применять row policies и условия PREWHERE после обработки FINAL. Исправляет #90986. #91065 (Yarik Briukhovetskyi).
  • Добавлена поддержка JSON type в tupleElement. Закрывает #81630. #91327 (Pavel Kruglov).
  • Добавлена поддержка отрицательных индексов для доступа к элементам tuple (например, 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, которая позволяет пользователям управлять задержкой удаления таблицы в общей базе данных. (Nikolay Degterinsky).
  • Добавлена ленивая загрузка зашифрованных ключей для именованных коллекций. (Pablo Marcos).
  • Разрешено отключать клиентский кэш для каждого buffer в distributed cache. (Kseniia Sumarokova).
  • Добавлено общее ограничение для connections в distributed cache. (Kseniia Sumarokova).

Исправления ошибок

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

Исправления выполнения запросов

  • Исправлено некорректное значение rows_before_limit_at_least, когда в distributed-агрегации со слиянием участвуют несколько удалённых сегментов. #63511 (Amos Bird).
  • Исправлено появление 0 rows in set после запроса INSERT INTO ... SELECT. Закрывает #47800. #79462 (Engel Danila).
  • Исправлен multiIf с константными аргументами и укороченным вычислением. Закрывает #72714. #84546 (Yakov Olkhovskiy).
  • Исправлен LogicalError при выборке из таблицы с ограничением, содержащим подзапрос. Устраняет #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_merge JOIN при наличии дублирующихся столбцов. Устраняет #86957. #89495 (Vladimir Cherkasov).
  • Исправлена возможная ошибка Invalid number of rows in Chunk в JOIN с дублирующимися столбцами. Устраняет #89411. #90053 (Vladimir Cherkasov).
  • Исправлена проблема дублирования данных в RIGHT JOIN с distributed таблицей при включённых параллельных репликах. #90806 (zoomxi).
  • Исправлена логическая ошибка при использовании join_use_nulls, нескольких JOIN и CROSS JOIN. #91853 (Vladimir Cherkasov).

Исправления типов данных и JSON

  • Исправлено чтение подстолбцов из столбца с точкой в имени в некоторых случаях. Устраняет #81261, #82058, #88169. #87205 (Pavel Kruglov).
  • Исправлено чтение смешанного массива Float и Bool в 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, которая не сохраняла исходный порядок при однопоточной записи с использованием native writer. #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 со столбцом временной метки при использовании каталога Glue. Устраняет #90210. #90209 (Alsu Giliazova).
  • Теперь ClickHouse не будет использовать оптимизацию чтения по порядку для Iceberg, если порядок сортировки не указан в manifest files. Исправляет #89178. #90304 (alesapin).

Исправления функций

  • Исправлена ошибка в функции reverseUTF8. В предыдущих версиях она ошибочно переставляла байты в 4-байтных кодовых точках UTF-8. Это закрывает #88913. #88914 (Alexey Milovidov).
  • Исправлено вычисление phi-squared, приводившее к некорректным результатам в cramersV, cramersVBiasCorrected, theilsU и contingency. #87831 (Nihal Z. Miaji).
  • Исправлено поведение top_k, чтобы функция учитывала параметр threshold при вызове с одним аргументом. Закрывает #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).
  • Улучшено отслеживание памяти при формировании результатов hash JOIN. #89560 (Azat Khuzhin).

Исправления безопасности и управления доступом

  • Исправлена ошибка ACCESS_ENTITY_NOT_FOUND при попытке выполнить clusterAllReplicas от имени пользователя с несуществующей ролью. Решает проблему #87670. #89068 (pufit).
  • Исправлена проверка доступа для запросов ALTER UPDATE при использовании табличной функции remote с localhost в качестве целевого хоста. #90761 (pufit).
  • Исправлена проверка привилегий с подстановочными знаками при частичном отзыве. #90922 (pufit).
  • Исправлена обработка глобальных привилегий при отзыве с подстановочными знаками. #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).
  • Исправлено зависание применения состояния Shared Catalog из-за сбоя commit MV. (Nikolay Degterinsky).
  • Исправлена проверка ограничений для настроек в ALTER на вторичных репликах с Shared Catalog. (Nikolay Degterinsky).
  • Сохранён комментарий базы данных при миграции SharedCatalog. (Alexander Tokmakov).
  • Исправлена проблема, из-за которой materialized views заменялись на вторичных репликах в Shared Catalog. (Nikolay Degterinsky).
  • Исправлены счётчики в system.distributed_cache_usage. (Kseniia Sumarokova).
  • Исправлено зависание операции DROP для таблицы в Shared Catalog, создание которой завершилось ошибкой с исключением ILLEGAL_COLUMN. (Nikolay Degterinsky).
  • Отключена возможность CREATE OR REPLACE для SharedSet/SharedJoin в базах данных с движком Replicated. (Tuan Pham Anh).
  • Исправлены исключения UNFINISHED при обновлении RMV в базе данных Shared. (Nikolay Degterinsky).
  • Устранён сбой из-за TABLE_ALREADY_EXISTS в базах данных Shared. (Nikolay Degterinsky).
  • Исправлена миграция таблиц с ошибочными CREATE-запросами в Shared Catalog. (Nikolay Degterinsky).
  • Всегда используйте виртуальные части из оперативной памяти в getStatus. (Mikhail Artemenko).
  • Добавлены повторные попытки применения состояния Shared Catalog во время запуска. (Nikolay Degterinsky).
  • Исправлена проблема, из-за которой DROP DATABASE зависал после исключения при создании таблицы. (Nikolay Degterinsky).
  • Исправлена логическая ошибка в distributed cache. (Kseniia Sumarokova).
  • Исправлена некорректная ошибка в distributed cache. (Kseniia Sumarokova).
  • Исправлена ошибка LOGICAL_ERROR в ~TemporaryLockForUUIDDirectory в Shared Catalog. (Nikolay Degterinsky).
  • Исправлена ошибка, из-за которой metadata cache возвращал некорректные зависимости после переименования базы данных. (Nikolay Degterinsky).
  • Shared Catalog: исправлена ошибка при DROP больших таблиц на вторичных репликах. (Raúl Marín).
  • Исправлена логическая ошибка в processWriteRequest в distributed cache. (Kseniia Sumarokova).
  • Убраны проверки ALTER для MV на вторичных репликах. (Nikolay Degterinsky).
Последнее изменение 10 июня 2026 г.