Несовместимые с предыдущими версиями изменения
Изменения типов данных
- Добавлен тип
Geometryс поддержкой чтения форматовWKBиWKT. В предыдущих версиях типGeometryбыл псевдонимомString, а теперь это полноценный тип. #83344 (Konstantin Vedernikov). - Удалён устаревший тип Object. #85718 (Pavel Kruglov).
- Экранируются имена файлов, создаваемых для подстолбцов типа Variant в частях данных Wide таблиц 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 заменяются выражением 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
- Совместимость Keeper с ZooKeeper: создание со статистикой. #88797 (Konstantin Vedernikov).
- Поддержка персистентных наблюдений 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).
- Добавлен 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 для
ANTIJOIN. Также переработана реализация 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_mergeJOIN при наличии дублирующихся столбцов. Устраняет #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).