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

Список изменений 2026

Релиз ClickHouse 26.1, 2026-01-29. Презентация, Видео

Обратно несовместимое изменение

  • Исправлено непоследовательное форматирование, вызванное некорректной подстановкой алиасов в форматтере. Это закрывает #82833. Это закрывает #82832. Это закрывает #68296. Это изменение потенциально несовместимо с предыдущими версиями: когда анализатор отключен, некоторые запросы CREATE VIEW с оператором IN, ссылающимся на алиас, не могут быть обработаны. Чтобы избежать несовместимости, включите анализатор (по умолчанию он включен, начиная с 24.3). #82838 (Alexey Milovidov).
  • Кодеки DEFLATE_QPL и ZSTD_QAT были удалены. Пользователям рекомендуется преобразовать существующие данные, сжатые с помощью DEFLATE_QPL или ZSTD_QAT, в другой кодек перед обновлением. Обратите внимание, что для использования этих кодеков необходимо было включить настройки enable_deflate_qpl_codec и enable_zstd_qat_codec. #92150 (Robert Schulze).
  • Улучшена отладка UDF за счёт включения перехвата stderr в system.query_log.exception. Ранее stderr UDF записывался только в файлы и не был доступен в журналах запросов, что делало отладку невозможной. Теперь stderr по умолчанию вызывает исключения и полностью накапливается (до 1 МБ) перед их выбрасыванием, поэтому полные трассировки стека Python и сообщения об ошибках отображаются в system.query_log.exception для эффективного устранения неполадок. #92209 (Xu Jia).
  • Пустой список столбцов в предложении JOIN USING () теперь считается синтаксической ошибкой. Ранее предполагалось, что это приведёт к INVALID_JOIN_ON_EXPRESSION во время выполнения запроса. В некоторых случаях, например при соединении с хранилищем Join, это приводило к LOGICAL_ERROR, закрыта задача #82502. #92371 (Vladimir Cherkasov).
  • По умолчанию использовать частичное совпадение для оператора SKIP REGEXP в типе JSON. Закрывает #79250. #92847 (Pavel Kruglov).
  • Откатить изменение "Allow INSERT into simple ALIAS columns" (откат ClickHouse/ClickHouse#84154). Оно не работает с пользовательскими форматами и не управляется настройкой. #92849 (Azat Khuzhin).
  • Настройка, при которой выбрасывается ошибка, если у каталога озера данных нет доступа к объектному хранилищу. #93606 (Konstantin Vedernikov).
  • Движок базы данных Lazy удалён и больше недоступен, что закрывает задачу #91231. #93627 (Alexey Milovidov).
  • Удалён режим transposed_with_wide_view для metric_log — он неработоспособен из‑за ошибки. Теперь невозможно определять system.metric_log с этим режимом. Это частично отменяет #78412. #93867 (Alexey Milovidov).
  • Планирование CPU для рабочих нагрузок теперь по умолчанию является вытесняющим. См. серверную настройку cpu_slot_preemption. #94060 (Sergei Trifonov).
  • Экранируйте имена файлов индексов, чтобы предотвратить повреждение частей. После этого изменения ClickHouse не сможет загрузить индексы с не-ASCII-символами в их именах, созданные предыдущими версиями. Для обработки таких случаев вы можете использовать настройку MergeTree escape_index_filenames. #94079 (Raúl Marín).
  • Настройки формата exact_rows_before_limit, rows_before_aggregation, cross_to_inner_join_rewrite, regexp_dict_allow_hyperscan, regexp_dict_flag_case_insensitive, regexp_dict_flag_dotall и dictionary_use_async_executor теперь стали обычными (не форматными) настройками. Это сугубо внутреннее изменение без видимых для пользователя побочных эффектов, за исключением (маловероятного) случая, когда вы указывали любую из этих настроек в определениях таблиц с движками Iceberg, DeltaLake, Kafka, S3, S3Queue, Azure, Hive, RabbitMQ, Set, FileLog или NATS. В таких случаях ранее эти настройки игнорировались, теперь такие определения приводят к ошибке. #94106 (Robert Schulze).
  • Функции joinGet/joinGetOrNull теперь проверяют привилегии SELECT для исходной таблицы Join. После этого изменения вызов joinGet('db.table', 'column', key) требует, чтобы у пользователя была привилегия SELECT как на столбцы ключа, определённые в таблице Join, так и на столбец атрибута, который извлекается. Запросы без этих привилегий будут завершаться ошибкой ACCESS_DENIED. Для миграции выдайте необходимые разрешения с помощью GRANT SELECT ON db.join_table TO user для доступа ко всей таблице или GRANT SELECT(key_col, attr_col) ON db.join_table TO user для доступа на уровне столбцов. Это изменение затрагивает всех пользователей и приложения, использующие joinGet/joinGetOrNull, для которых ранее не были явно настроены привилегии SELECT. #94307 (Vladimir Cherkasov).
  • Теперь для запросов CREATE TABLE ... AS ... используется проверка SHOW COLUMNS. Ранее использовалась проверка SHOW TABLES, что требовало некорректной привилегии для такого типа проверки прав. #94556 (pufit).
  • Формат вывода Hash сделан независимым от размеров блоков. #94503 (Alexey Milovidov). Обратите внимание, что это изменит значения выходных хэшей по сравнению с предыдущими версиями.

Новая возможность

  • HTTP API и встроенный веб-интерфейс для ClickHouse Keeper. #78181 (pufit и speeedmaster).
  • Дедупликация асинхронных вставок теперь работает с зависимыми materialized view. Когда происходит коллизия по block_id, исходный блок фильтруется для удаления строк, связанных с этим block_id, а оставшиеся строки преобразуются всеми соответствующими запросами SELECT из materialized view, в результате исходный блок перестраивается без конфликтующих строк. #89140 (Sema Checherinda). Теперь допускается использовать дедупликацию с асинхронными вставками, когда задействованы materialized view. #93957 (Sema Checherinda).
  • Представлены новый синтаксис и фреймворк для упрощения и расширения возможностей индексов проекций. Это продолжение https://github.com/ClickHouse/ClickHouse/pull/81021. #91844 (Amos Bird).
  • Добавлена поддержка текстового индекса для столбцов Array. #89895 (Jimmy Aguilar Mena).
  • По умолчанию включена use_variant_as_common_type, что позволяет использовать несовместимые типы внутри Array, в запросах UNION, а также в ветвях if/multiIf/case. #90677 (Alexey Milovidov).
  • Новая системная таблица zookeeper_info. Реализует #88014. #90809 (Smita Kulkarni).
  • Добавлена поддержка типа Variant во всех функциях. #90900 (Bharat Nallan).
  • Добавляет метрику ClickHouse_Info в эндпоинт Prometheus /metrics, содержащую в основном информацию о версии, что позволяет строить графики, отслеживающие подробную информацию об изменении версии во времени. #91125 (Christoph Wurm).
  • Введена новая четырехсимвольная команда rcfg для keeper, которая позволяет изменять конфигурацию кластера. Эта команда предоставляет более широкие возможности для изменения конфигурации, чем стандартный запрос reconfigure. Команда принимает JSON-строку в качестве аргумента. Весь набор байт, отправляемый в TCP-интерфейс, должен выглядеть так: rcfg{json_string_length_big_endian}{json_string}. Некоторые примеры использования команды могут выглядеть следующим образом: {"preconditions": {"leaders": [1, 2], "members": [1, 2, 3, 4, 5]}, "actions": [{"transfer_leadership": [3]}, {"remove_members": [1, 2]}, {"set_priority": [{"id": 4, "priority": 100}, {"id": 5, "priority": 100}]}, {"transfer_leadership": [4, 5]}, {"set_priority": [{"id": 3, "priority": 0}]}]}. #91354 (alesapin).
  • Добавлена функция reverseBySeparator, которая обращает порядок подстрок в строке, разделённых указанным разделителем. Закрывает #91463. #91780 (Xuewei Wang).
  • Добавляет новую настройку max_insert_block_size_bytes, которая позволяет более детально управлять формированием вставляемых блоков. #92833 (Kirill Kopnev).
  • Можно выполнять DDL‑запросы с указанием ON CLUSTER для реплицируемой базы данных, если включена настройка ignore_on_cluster_for_replicated_database. В этом случае имя кластера будет игнорироваться. #92872 (Kirill).
  • Реализована функция mergeTreeAnalyzeIndexes. #92954 (Azat Khuzhin).
  • Добавлена новая настройка use_primary_key. Установите значение false, чтобы отключить отсечение гранул по первичному ключу. #93319 (Nihal Z. Miaji).
  • Добавлена табличная функция icebergLocalCluster. #93323 (Anton Ivashkin).
  • Добавлена функция cosineDistanceTransposed, которая приближённо вычисляет косинусное расстояние между двумя точками. #93621 (Raufs Dunamalijevs).
  • Добавлен столбец files в таблицу system.parts, показывающий количество файлов в каждой части данных. #94337 (Match).
  • Добавляет планировщик max-min fair для управления параллелизмом. Обеспечивает более высокую справедливость при сильной переподписке (oversubscription), когда множество запросов конкурируют за ограниченное число CPU-слотов. Кратковременные запросы не страдают из‑за долгих запросов, которые со временем накопили больше слотов. Включается с помощью серверной настройки concurrent_threads_scheduler со значением max_min_fair. #94732 (Sergei Trifonov).
  • Добавлена возможность клиенту ClickHouse переопределять TLS SNI при подключении к серверу. #89761 (Matt Klein).
  • Добавлена поддержка временных таблиц в вызовах функции joinGet. #92973 (Eduard Karacharov).
  • Добавлена поддержка векторов удаления в движке таблиц DeltaLake. #93852 (Kseniia Sumarokova).
  • Добавлена поддержка векторов удаления в deltaLakeCluster. #94365 (Kseniia Sumarokova).
  • Поддержка Google Cloud Storage для озёр данных. #93866 (Konstantin Vedernikov).

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

Повышение производительности

  • Параметр use_skip_indexes_on_data_read теперь по умолчанию включён. Эта настройка позволяет выполнять фильтрацию в потоковом режиме одновременно с чтением данных, улучшая производительность запросов и время их запуска. #93407 (Shankar Iyer).
  • Повышена производительность DISTINCT на столбцах с типом LowCardinality. Закрывает #5917. #91639 (Nihal Z. Miaji).
  • Оптимизирована агрегатная функция distinctJSONPaths так, чтобы она читала только пути JSON из частей данных, а не весь JSON-столбец. #92196 (Pavel Kruglov).
  • Проталкивание большего числа фильтров через операторы JOIN. #85556 (Nikita Taranov).
  • Расширена поддержка проталкивания фильтров из условия ON оператора JOIN, когда фильтр использует данные только с одной стороны. Добавлена поддержка соединений типов ANY, SEMI, ANTI. #92584 (Dmitry Novik).
  • Разрешить использование эквивалентных множеств для проталкивания фильтров в SEMI JOIN. Закрывает #85239. #92837 (Dmitry Novik).
  • Пропускаем чтение левой стороны хэш-соединения, когда правая сторона пуста. Ранее левая сторона читалась до первого непустого блока, что могло приводить к значительным затратам при сильной фильтрации или агрегации. #94062 (Alexander Gololobov).
  • Использование метода «fastrange» (Daniel Lemire) для партиционирования данных внутри конвейера запроса. Это может улучшить параллельную сортировку и операции JOIN. #93080 (Alexey Milovidov).
  • Улучшена производительность оконных функций, когда PARTITION BY совпадает с ключом сортировки или является его префиксом. #87299 (Nikita Taranov).
  • Внешний фильтр проталкивается в представления, что позволяет применять PREWHERE на локальных и удалённых узлах. Resolves #88189. #88316 (Igor Nikonov).
  • Implement JIT compilations for more functions. Closes #73509. #88770 (Alexey Milovidov with Taiyang Li).
  • Если пропускающий индекс, используемый в запросе с FINAL, построен по столбцу, который является частью первичного ключа, дополнительный шаг проверки пересечения по первичному ключу в других частях избыточен и теперь не выполняется. Resolves #85897. #93899 (Shankar Iyer).
  • Оптимизирована производительность и использование памяти для дробных значений LIMIT и OFFSET. #91167 (Ahmed Gouda).
  • Исправлено использование более быстрой логики произвольного чтения для префетчера Parquet Reader V3. Closes #90890. #91435 (Arsen Muk).
  • Улучшена производительность icebergCluster. Закрывает #91462. #91537 (Yang Jiang).
  • Don't filter by virtual columns on constant filters. #91588 (c-end).
  • Снизить потребление памяти при операциях INSERT и слияниях широких частей для очень широких таблиц за счёт включения адаптивных буферов записи. Добавить поддержку адаптивных буферов записи для зашифрованных дисков. #92250 (Azat Khuzhin).
  • Повышена производительность полнотекстового поиска с текстовым индексом и токенизатором sparseGrams за счёт уменьшения числа токенов, просматриваемых в индексе. #93078 (Anton Popov).
  • Функция isValidASCII была оптимизирована под положительный сценарий, то есть для входных значений, полностью состоящих из символов ASCII. #93347 (Robert Schulze).
  • Оптимизация чтения в порядке сортировки теперь распознаёт случаи, когда столбцы в ORDER BY являются константами вследствие условий WHERE, что позволяет эффективно выполнять чтение в обратном порядке. Это полезно для мультиарендных запросов вроде WHERE tenant='42' ORDER BY tenant, event_time DESC, которые теперь могут использовать InReverseOrder вместо полной сортировки.". #94103 (matanper).
  • Добавлен специализированный класс AST для Enum для хранения значений в виде пар (строка, целое число) вместо дочерних ASTLiteral, что оптимизирует потребление памяти. #94178 (Ilya Yatsishin).
  • Distributed index analysis on multiple replicas. Beneficial for shared storage and huge amount of data in cluster. This is applicable for SharedMergeTree (ClickHouse Cloud) and could be applicable for other types of MergeTree tables on a shared storage. #86786 (Azat Khuzhin).
  • Reduce overhead of join runtime filters by disabling them in the following cases: - too many bits are set in the bloom filter - too few rows are filtered out at runtime. #91578 (Alexander Gololobov).
  • Используйте буфер в памяти для входных данных коррелированных подзапросов, чтобы избежать их повторного вычисления. Часть #79890. #91205 (Dmitry Novik).
  • Разрешить всем репликам забирать «осиротевшие» диапазоны при параллельном чтении реплик. Это улучшает балансировку нагрузки и снижает задержки «длинного хвоста». #91374 (zoomxi).
  • Внешние агрегация/сортировка/JOIN теперь во всех случаях учитывают настройку запроса temporary_files_codec. Исправлено отсутствие событий профилирования для grace hash join. #92388 (Vladimir Cherkasov).
  • Make query memory usage detection for spilling to disk during aggregation/sorting more robust. #92500 (Azat Khuzhin).
  • Estimate total rows count and NDV (number of distinct values) statistics of aggregation key columns. #92812 (Alexander Gololobov).
  • Оптимизировано сжатие списков постингов с помощью simdcomp. #92871 (Peng Jian).
  • Рефакторинг обработки режима Ordered в S3Queue с использованием бакетов. Это также должно повысить производительность, сократив количество запросов к Keeper. #92889 (Kseniia Sumarokova).
  • Functions mapContainsKeyLike and mapContainsValueLike can now leverage a text index on mapKeys() or mapValues(), respectively. #93049 (Michael Jarrett).
  • Reduce memory usage on non-Linux systems (enable immediate purging of jemalloc dirty pages). #93360 (Eduard Karacharov).
  • Принудительно очищать арены jemalloc, если отношение размера «грязных» страниц к max_server_memory_usage превышает memory_worker_purge_dirty_pages_threshold_ratio. #93500 (Eduard Karacharov).
  • Снижено потребление памяти для AST. #93601 (Nikolai Kochetov).
  • В некоторых случаях мы наблюдали, что ClickHouse не соблюдает ограничение по памяти при чтении из таблицы. Это поведение исправлено. #93715 (Nikita Mikhaylov).
  • По умолчанию включены расширения Keeper CHECK_STAT и TRY_REMOVE. #93886 (Mikhail Artemenko).
  • Разбирать нижнюю и верхнюю границы имён файлов, соответствующих position deletes, из записей манифеста Iceberg для более точного выбора соответствующих файлов данных. #93980 (Daniil Ivanik).
  • Добавлены ещё две настройки для управления максимальным количеством динамических подстолбцов в столбце JSON. Первая — настройка MergeTree merge_max_dynamic_subcolumns_in_compact_part (аналогично уже добавленной merge_max_dynamic_subcolumns_in_wide_part), которая ограничивает количество динамических подстолбцов, создаваемых при слиянии в компактную часть. Вторая — настройка на уровне запроса max_dynamic_subcolumns_in_json_type_parsing, которая ограничивает количество динамических подстолбцов, создаваемых при разборе данных JSON; она позволяет задать этот лимит при вставке. #94184 (Pavel Kruglov).
  • Незначительно оптимизировано уплотнение JSON-столбцов для отдельных случаев. #94247 (Pavel Kruglov).
  • Уменьшите размер очередей пула потоков на основе опыта эксплуатации. Добавьте явную проверку потребления памяти перед чтением любых данных из MergeTree. #94692 (Nikita Mikhaylov).
  • Make sure the scheduler would prefer MemoryWorker thread under the CPU starvation, because it protects ClickHouse process from an existential threat. #94864 (Nikita Mikhaylov).
  • Выполнять очистку «грязных» страниц jemalloc в отдельном потоке, отличном от основного потока MemoryWorker. Если очистка выполняется медленно, это может задерживать обновление показателя использования RSS, что способно привести к завершению процесса из‑за превышения лимита памяти. Добавлена новая настройка memory_worker_purge_total_memory_threshold_ratio, которая запускает очистку «грязных» страниц на основе доли общего потребления памяти. #94902 (Antonio Andelic).

Улучшение

  • Таблица system.blob_storage_log теперь доступна для Azure Blob Storage. #93105 (Alexey Milovidov).
  • Реализован blob_storage_log для Local и HDFS. Исправлена ошибка, из‑за которой S3Queue при логировании в blob_storage_log использовал не имя диска. Добавлен столбец error_code в blob_storage_log. Тестовый конфигурационный файл разделён для упрощения локального тестирования. #93106 (Alexey Milovidov).
  • clickhouse-client и clickhouse-local будут подсвечивать группы разрядов (тысячи, миллионы и т. д.) внутри числовых литералов при вводе. Это закрывает #93100. #93108 (Alexey Milovidov).
  • В clickhouse-client добавлена поддержка аргументов командной строки с пробелами вокруг знака равенства. Закрывает #93077. #93174 (Cole Smith).
  • С параметром <interactive_history_legacy_keymap>true</interactive_history_legacy_keymap> CLI-клиент теперь снова использует Ctrl-R для обычного поиска, как и раньше, а Ctrl-T выполняет нечёткий поиск. #87785 (Larry Snizek).
  • Оператор очистки кэшей SYSTEM DROP [...] CACHE создавал ложное впечатление, что он отключает кэш. В ClickHouse теперь поддерживается оператор SYSTEM CLEAR [...] CACHE, назначение которого более очевидно. Старый синтаксис по-прежнему доступен. #93727 (Pranav Tiwari).
  • Добавлена поддержка использования нескольких столбцов в качестве первичного ключа в EmbeddedRocksDB. Закрывает #32819. #33917 (usurai).
  • Теперь можно использовать неконстантное выражение IN для скалярных значений (запросы вида val1 NOT IN if(cond, val2, val3)). #93495 (Yarik Briukhovetskyi).
  • Не передавать заголовки x-amz-server-side-encryption в S3‑запросы HeadObject, UploadPart и CompleteMultipartUpload, поскольку они в этих запросах не поддерживаются. #64577 (Francisco J. Jurado Moreno).
  • Отслеживание разбиения Hive на партиции для упорядоченного режима в S3Queue. Устраняет #71161. #81040 (Anton Ivashkin).
  • Оптимизировано резервирование пространства в файловом кэше. FileCache::collectCandidatesForEviction будет выполняться без исключительной блокировки. #82764 (Kseniia Sumarokova).
  • Добавлена поддержка составной стратегии ротации (по размеру и времени) для серверного журнала. #87620 (Jianmei Zhang).
  • CLI-клиент теперь может задавать <warnings>false</warnings> вместо параметра командной строки --no-warnings. #87783 (Larry Snizek).
  • Добавлена поддержка агрегатной функции avg для аргументов типов Date, DateTime и Time. Закрывает #82267. #87845 (Yarik Briukhovetskyi).
  • Оптимизация use_join_disjunctions_push_down включена по умолчанию. #89313 (Alexey Milovidov).
  • Добавлена поддержка большего числа табличных движков и типов источников данных в коррелированных подзапросах. Закрывает #80775. #90175 (Dmitry Novik).
  • Если схема параметризованного представления указана явно, она отображается. Закрыты #88875, #81385. #90220 (Grigorii Sokolik).
  • Корректно обрабатывать разрыв в записях журнала Keeper, если эти записи предшествуют последнему зафиксированному индексу. #90403 (Antonio Andelic).
  • Улучшена настройка min_free_disk_bytes_to_perform_insert для корректной работы с JBOD-томами. #90878 (Aleksandr Musorin).
  • Реализована возможность указывать настройку storage_class_name в именованных коллекциях для движка таблицы S3 и табличной функции s3. #91926 (János Benjamin Antal).
  • Добавлена поддержка добавления вспомогательного zookeeper через system.zookeeper. #92092 (RinChanNOW).
  • Добавлены новые метрики для Keeper: профильные события KeeperChangelogWrittenBytes, KeeperChangelogFileSyncMicroseconds, KeeperSnapshotWrittenBytes и KeeperSnapshotFileSyncMicroseconds, а также метрики-гистограммы KeeperBatchSizeElements и KeeperBatchSizeBytes. #92149 (Miсhael Stetsyuk).
  • Добавлена новая настройка trace_profile_events_list, которая ограничивает трассировку trace_profile_event указанным списком имён событий. Это позволяет более точно собирать данные при больших нагрузках. #92298 (Alexey Milovidov).
  • Добавлена поддержка SYSTEM NOTIFY FAILPOINT для failpoint-ов с возможностью паузы. Добавлена поддержка SYSTEM WAIT FAILPOINT fp PAUSE/RESUME. #92368 (Shaohua Wang).
  • Добавить столбец creation (неявный/явный) в system.data_skipping_indices. #92378 (Raúl Marín).
  • Добавлена возможность передавать описание столбцов для динамических таблиц YTsaurus в источник словаря. #92391 (MikhailBurdukov).
  • В #63985 мы добавили возможность задавать все параметры, необходимые для конфигурации TLS, отдельно для каждого порта (см. composable protocols), так что больше не нужно полагаться на глобальную конфигурацию TLS. Однако реализация по-прежнему неявно требует наличия глобального конфигурационного раздела openSSL.server, что конфликтует со сценариями, где для разных портов нужны разные настройки TLS. Например, в развертываниях keeper-in-server нам требуются отдельные конфигурации TLS для взаимодействия между экземплярами Keeper и подключений клиентов ClickHouse. #92457 (Miсhael Stetsyuk).
  • Добавлена новая настройка input_format_binary_max_type_complexity, которая ограничивает общее количество узлов типов данных, декодируемых в бинарном формате, для защиты от вредоносных нагрузок. #92519 (Raufs Dunamalijevs).
  • Отображать выполняющиеся задачи в system.background_schedule_pool{,_log}. Добавлена документация. #92587 (Azat Khuzhin).
  • Выполнять текущий запрос при поиске через Ctrl+R в клиенте, если в истории не найдено совпадений. #92749 (Azat Khuzhin).
  • Добавлена поддержка EXPLAIN indices = 1 в качестве псевдонима для EXPLAIN indexes = 1. Закрывает #92483. #92774 (Pranav Tiwari).
  • Чтение файлов Parquet теперь позволяет интерпретировать столбцы типов Tuple или Map как JSON: select x from file(f.parquet, auto, 'x JSON') работает, даже если столбец x в f.parquet имеет тип Tuple или Map. #92864 (Michael Kolupaev).
  • Добавлена поддержка пустых кортежей в ридере Parquet. #92868 (Michael Kolupaev).
  • Переход на копирование в режиме чтения и записи для Azure Blob Storage при сбое встроенного копирования с ошибкой BadRequest (например, из‑за недопустимого списка блоков). Ранее это выполнялось только при ошибке Unauthorized, которая наблюдалась при копировании BLOB-объекта в другие учетные записи хранения. Однако иногда также возникает ошибка "The specified block list is invalid". Поэтому условие было обновлено, и теперь переход на чтение & запись выполняется при любых сбоях встроенного копирования. #92888 (Smita Kulkarni).
  • Исправлено ограничение частоты обращений (throttling) к конечной точке метаданных EC2 при выполнении большого количества параллельных запросов к S3 с использованием учетных данных профильной роли экземпляра EC2. Ранее каждый запрос создавал собственный AWSInstanceProfileCredentialsProvider, что приводило к одновременным запросам к службе метаданных EC2, которые могли вызывать тайм-ауты и ошибки HTTP response code: 403. Теперь провайдер учетных данных кэшируется и используется совместно всеми запросами. #92891 (Sav).
  • Переработана настройка insert_select_deduplicate, чтобы можно было сохранять обратную совместимость. #92951 (Sema Checherinda).
  • Логировать фоновые задачи, выполняющиеся медленнее среднего (background_schedule_pool_log.duration_threshold_milliseconds=30), чтобы избежать избыточного логирования. #92965 (Azat Khuzhin).
  • В предыдущих версиях некоторые имена функций C++ отображались некорректно ("искажёнными") в system.trace_log и system.symbols, а функция demangle обрабатывала их некорректно. Закрывает #93074. #93075 (Alexey Milovidov).
  • Добавлен параметр резервного копирования backup_data_from_refreshable_materialized_view_targets, позволяющий пропускать резервное копирование refreshable materialized view. RMV со стратегией обновления APPEND всегда включаются в резервную копию. #93076 (Julia Kartseva). #93658 (Julia Kartseva)
  • Используйте минимальную отладочную информацию вместо полного её отсутствия для тяжёлых единиц трансляции, например функций. #93079 (Alexey Milovidov).
  • Добавлена поддержка совместимости с MinIO в AWS S3 C++ SDK за счет сопоставления кодов ошибок, специфичных для MinIO. Это изменение позволяет ClickHouse корректно обрабатывать и повторно выполнять запросы при ошибках сервера MinIO при использовании развертываний MinIO вместо AWS S3, повышая надежность для пользователей, которые запускают объектное хранилище на самостоятельно развернутых кластерах MinIO. #93082 (XiaoBinMu).
  • Записывать профили jemalloc с уже разрешёнными символами, что устраняет необходимость в бинарнике при генерации профилей кучи. #93099 (Azat Khuzhin).
  • Восстановлен инструмент clickhouse git-import — он ломался на крупных и некорректных коммитах. См. https://presentations.clickhouse.com/2020-matemarketing/. #93202 (Alexey Milovidov).
  • Не показывать пароли из хранилища URL в журнале запросов. #93245 (Konstantin Vedernikov).
  • Добавлена поддержка типа данных Geometry для flipCoordinates. #93303 (Bharat Nallan).
  • Улучшен UX SYSTEM INSTRUMENT ADD/REMOVE: используются строковые литералы для имён функций, изменены все подходящие функции и теперь можно использовать function_name в REMOVE. #93345 (Pablo Marcos).
  • Добавлена новая настройка materialize_statistics_on_merge, которая включает или отключает материализацию статистики при слиянии. Значение по умолчанию — 1. #93379 (Han Fei).
  • ClickHouse теперь может парсить SELECT без круглых скобок вокруг запросов вида DESCRIBE SELECT. Закрывает #58382. #93429 (Yarik Briukhovetskyi).
  • Проверки корректности кэша теперь выполняются случайным образом с заданной вероятностью. #93439 (Kseniia Sumarokova).
  • Добавлена настройка type_json_allow_duplicated_key_with_literal_and_nested_object, разрешающая дублирующиеся пути в JSON, когда один из них является литералом, а другой — вложенным объектом, например {"a" : 42, "a" : {"b" : 42}}. Некоторые данные могли быть созданы до введения этого ограничения на дублирующиеся пути в https://github.com/ClickHouse/ClickHouse/pull/79317, и дальнейшие операции с такими данными теперь могут приводить к ошибкам. С этой настройкой такие старые данные по-прежнему можно использовать без ошибок. #93604 (Pavel Kruglov).
  • Не выводить значения простых типов на отдельных строках в формате Pretty JSON. #93836 (Pavel Kruglov).
  • Если выполняется множество команд alter table ... modify setting ..., возможно, что блокировку не удастся получить в течение 5 секунд. Лучше вернуть timeout, чем logical error. #93856 (Han Fei).
  • Исключён избыточный вывод при синтаксической ошибке. До этого изменения выводился весь SQL‑скрипт, который мог содержать множество запросов. #93876 (Alexey Milovidov).
  • Корректно вычислять размер в байтах запроса check со статистикой в Keeper. #93907 (Mikhail Artemenko).
  • Добавлена настройка use_hash_table_stats_for_join_reordering для управления тем, используется ли статистика размера хеш-таблицы во время выполнения запроса при переупорядочивании соединений. Эта настройка включена по умолчанию, при этом сохраняется существующее поведение collect_hash_table_stats_during_joins. #93912 (Vladimir Cherkasov).
  • Пользователи теперь могут частично просматривать вложенные глобальные настройки сервера в таблице system.server_settings (например, logger.level). Это распространяется только на настройки с фиксированной структурой (без списков, перечислений, повторений и т. п.). #94001 (Hechem Selmi).
  • QBit теперь можно сравнивать на равенство. #94078 (Raufs Dunamalijevs).
  • Когда Keeper обнаруживает повреждённый snapshot или несогласованные журналы изменений, выбрасывать исключение вместо ручного прерывания или автоматической очистки файлов. Это должно обеспечить более безопасное поведение Keeper, предполагающее ручное вмешательство. #94168 (Antonio Andelic).
  • Исправлена проблема, из‑за которой после ошибки CREATE TABLE могли оставаться лишние объекты. #94174 (Azat Khuzhin).
  • Исправлен доступ к неинициализированной памяти (ошибка в OpenSSL), возникавший при использовании TLS-ключа, защищённого паролем. #94182 (Konстантин Bogdanov).
  • Обновлён chdig до версии v26.1.1. #94290 (Azat Khuzhin).
  • Добавлена поддержка более общего разбиения на партиции для упорядоченного режима S3Queue. #94321 (Bharat Nallan).
  • Добавлен псевдоним use_statistics для настройки allow_statistics_optimize. Это делает её более согласованной с существующими настройками use_primary_key и use_skip_indexes. #94366 (Robert Schulze).
  • Включена настройка input_format_numbers_enum_on_conversion_error при преобразовании из Numbers в Enums, чтобы проверять, существует ли элемент. #94384 (Elmi Ahmadov).
  • В упорядоченном режиме S3(Azure)Queue добавлена очистка неуспешных узлов по лимитам отслеживания (ранее это выполнялось только в неупорядоченном режиме как для неуспешных, так и для обработанных узлов; теперь это также будет выполняться в упорядоченном режиме, но только для неуспешных узлов). #94412 (Kseniia Sumarokova).
  • Включено управление доступом для пользователя default в clickhouse-local. У пользователя по умолчанию в clickhouse-local отсутствовала привилегия access_management, из-за чего операции, такие как DROP ROW POLICY IF EXISTS, завершались ошибкой ACCESS_DENIED, хотя пользователь должен был иметь неограниченные права. #94501 (Alexey Milovidov).
  • Добавлена поддержка именованных коллекций для словарей и таблиц YTsaurus. #94582 (MikhailBurdukov).
  • Добавлена поддержка именованных коллекций, определённых в SQL, в BACKUP/RESTORE для S3 и Azure Blob Storage. Закрывает #94604. #94605 (Pablo Marcos).
  • Добавлена поддержка разбиения на бакеты по ключу партиции для S3Queue в упорядоченном режиме. #94698 (Bharat Nallan).
  • Добавлена асинхронная метрика времени выполнения самого долгого слияния. #94825 (Raúl Marín).
  • Добавлена проверка принадлежности файла перед применением позиционного удаления с использованием IcebergBitmapPositionDeleteTransform. #94897 (Yang Jiang).
  • Теперь view_duration_ms показывает время, когда группа была активна, а не сумму длительностей потоков в ней. #94966 (Sema Checherinda).
  • Убран лимит на максимальное количество поисковых токенов в функциях hasAnyTokens и hasAllTokens, который ранее был ограничен значением 64. Пример: SELECT count() FROM table WHERE hasAllTokens(text, ['token_1', 'token_2', [...], 'token_65']]); Запрос приводил бы к ошибке BAD_ARGUMENTS, потому что указано 65 поисковых токенов. В этом PR лимит полностью удалён, и тот же запрос выполняется без ошибки. #95152 (Elmi Ahmadov).
  • Добавлена настройка input_format_numbers_enum_on_conversion_error для преобразования из Numbers в Enums с проверкой того, существует ли элемент. Закрывает: #56144. #56240 (Nikolay Degтерinsky).
  • Разделять ресурсы парсера формата при чтении файлов данных и файлов позиционного удаления в таблицах Iceberg, чтобы сократить количество выделений памяти. #94701 (Yang Jiang).

Исправление ошибки (некорректное поведение, видимое пользователю, в официальном стабильном релизе)

  • Исправляет ошибку, из-за которой предопределённые обработчики запросов интерпретировали концевые пробелы как данные при выполнении вставок. #83604 (Fabian Ponce).
  • Исправлена ошибка INCOMPATIBLE_TYPE_OF_JOIN для хранилища Join при применении оптимизации замены внешнего соединения на внутреннее. Исправляет #80794. #84292 (Vladimir Cherkasov).
  • Исправлено исключение «Invalid number of rows in Chunk», возникавшее при использовании hash join с включённым параметром allow_experimental_join_right_table_sorting. #86440 (yanglongwei).
  • Всегда заменяйте имена файлов на хеш в MergeTree, если файловая система не различает регистр. Ранее на системах с такой файловой системой (например, macOS) это могло приводить к повреждению данных, когда несколько имён столбцов/подстолбцов отличались только регистром. #86559 (Pavel Kruglov).
  • Добавлена полная проверка прав на этапе создания materialized view для базового запроса, лежащего в её основе. #89180 (pufit).
  • Исправлено падение функции icebergHash при константном аргументе. #90335 (Michael Kolupaev).
  • Исправлена логическая ошибка, когда мутация без транзакции изменяет части, принадлежащие активной транзакции, которая в итоге откатывается. #90469 (Shaohua Wang).
  • Корректно обновлять system.warnings после преобразования обычной базы данных в атомарную базу. #90473 (sdk2).
  • Исправлено срабатывание assert-проверки при чтении из файла Parquet, когда часть выражения prewhere используется в другом месте запроса. #90635 (Max Kainov).
  • Исправлено падение в одноузловом кластере при чтении из Iceberg в режиме split-by-buckets. Это закрывает #90913. #91553 (Konstantin Vedernikov).
  • Исправлена возможная логическая ошибка в движке Log при чтении подстолбцов. Закрывает #91710. #91711 (Pavel Kruglov).
  • Исправлена логическая ошибка: 'Storage does not support transaction' при выполнении ATTACH AS REPLICATED. #91772 (Shaohua Wang).
  • Исправлена некорректная работа рантайм-фильтров при наличии дополнительного последующего условия в LEFT ANTI JOIN. #91824 (Alexander Gololobov).
  • Исправляет ошибку, из-за которой применялось null-безопасное сравнение с участием типа Nothing. Закрывает #91834. Закрывает #84870. Закрывает #91821. #91884 (Yarik Briukhovetskyi).
  • Исправлены ошибки декодирования DELTA_BYTE_ARRAY в нативном Parquet-ридере, затрагивающие строковые данные с высокой степенью повторяемости. #91929 (Daniel Muino).
  • Кэшировать схему только для того файла, по которому она была выведена, при обработке globs, вместо всех файлов во время вывода схемы. Закрывает #91745. #92006 (Pavel Kruglov).
  • Исправлена ошибка Couldn't pack tar archive: Failed to write all bytes, вызванная некорректным заголовком размера записи архива. Исправляет #89075. #92122 (Julia Kartseva).
  • Освобождён поток запросов в INSERT SELECT, чтобы предотвратить закрытие HTTP‑соединения. #92175 (Sema Checherinda).
  • Исправлена логическая ошибка в запросах с несколькими операторами JOIN с предложением USING и join_use_nulls. #92251 (Vladimir Cherkasov).
  • Исправлена логическая ошибка при переупорядочивании JOIN при включённом join_use_nulls, закрывает https://github.com/clickhouse/clickhouse/issues/90795. #92289 (Vladimir Cherkasov).
  • Исправлено неконсистентное форматирование AST для arrayElement с отрицательным литералом. Закрывает #92288, #92212, #91832, #91789, #91735, #88495, #92386. #92293 (Pavel Kruglov).
  • Исправлено возможное падение при использовании настройки join_on_disk_max_files_to_merge. #92335 (Bharat Nallan).
  • Связанная задача: https://github.com/ClickHouse/support-escalation/issues/6365. #92339 (Tuan Pham Anh).
  • Исправлено отсутствие проверки доступа в SYSTEM SYNC FILE CACHE. Закрывает #92101. #92372 (Kseniia Sumarokova).
  • Исправлен проход оптимизации count_distinct_optimization для оконных функций и при нескольких аргументах. #92376 (Raúl Marín).
  • Исправлена ошибка "Cannot write to finalized buffer" при использовании некоторых агрегатных функций с оконными функциями. Закрывает #91415. #92395 (Jimmy Aguilar Mena).
  • Исправлена логическая ошибка при использовании CREATE TABLE ... AS urlCluster() и табличного движка Replicated. Закрывает #92216. #92418 (Kseniia Sumarokova).
  • Наследовать настройки сериализации исходной части при мутации в MergeTree. Это исправляет потенциально некорректный результат запроса к мутировавшей части после изменений в сериализации типов данных. #92419 (Pavel Kruglov).
  • Исправлен потенциальный конфликт между столбцом и подстолбцом с одинаковым именем, что приводило к использованию некорректной сериализации и ошибкам выполнения запросов. Закрывает #90219. Закрывает #85161. #92453 (Pavel Kruglov).
  • Исправлена ошибка LOGICAL_ERROR, вызванная нежелательной модификацией плана запроса при преобразовании внешнего соединения во внутреннее. Также ослаблены требования к оптимизации, чтобы можно было применять её в случаях, когда инъективные функции применяются к ключам агрегации в операциях JOIN. #92503 (János Benjamin Antal).
  • Исправлена возможная ошибка SIZES_OF_COLUMNS_DOESNT_MATCH при сортировке пустого столбца кортежей. Закрывает #92422. #92520 (Pavel Kruglov).
  • Проверка наличия несовместимых типизированных путей в типе JSON. Закрывает #91577. #92539 (Pavel Kruglov).
  • Исправлена взаимная блокировка в SHOW CREATE DATABASE для базы данных Backup. #92541 (Azat Khuzhin).
  • Использовать правильный код ошибки при проверке индекса гипотезы. #92559 (Raúl Marín).
  • Исправлено разрешение динамических подстолбцов в псевдонимах столбцов в анализаторе. Ранее динамический подстолбец в псевдониме столбца оборачивался в вызов getSubcolumn и в некоторых случаях мог вовсе не разрешаться. Закрывает #91434. #92583 (Pavel Kruglov).
  • Предотвращён сбой функции tokens() при втором аргументе, равном NULL. #92586 (Raúl Marín).
  • Исправлено потенциальное аварийное завершение работы, вызванное изменением на месте базовых константных столбцов PREWHERE. Это могло произойти при «усадке» столбца (IColumn::shrinkToFit) или фильтрации (IColumn::filter), которые могли выполняться параллельно из нескольких потоков. #92588 (Arsen Muk).
  • Создание и материализация текстовых индексов в таблицах, содержащих очень большие части (более 4 294 967 295 строк), временно отключены. Это ограничение предотвращает некорректные результаты запросов, поскольку текущая реализация индекса пока не поддерживает настолько большие части. #92644 (Anton Popov).
  • Исправляет логическую ошибку Too large size (A) passed to allocator при выполнении операций JOIN. Закрывает #92043. #92667 (Yarik Briukhovetskyi).
  • Исправляет ошибку, из-за которой индексы ngrambf_v1 с длиной ngram (1‑й параметр) > 8 вызывали исключение. #92672 (Robert Schulze).
  • Исправлено необработанное исключение при фоновой перезагрузке именованных коллекций при использовании хранилища ZooKeeper. Закрывает https://github.com/ClickHouse/clickhouse-private/issues/44180. #92717 (Kseniia Sumarokova).
  • Исправляет некорректную логику проверки прав доступа для подстановочных привилегий (wildcard grants). Предыдущая попытка https://github.com/ClickHouse/ClickHouse/pull/90928 устраняла критическую уязвимость, но оказалась слишком строгой, в результате чего некоторые команды GRANT с подстановками завершались ошибкой из‑за несвязанных с ними отзывов прав. #92725 (pufit).
  • Исправлена ошибка в логике пропуска данных при использовании not match(...) в WHERE, приводившая к некорректным результатам. Закрывает #92492. #92726 (Nihal Z. Miaji).
  • Не пытайтесь удалять временные каталоги при запуске, если таблица MergeTree создана на диске только для чтения. #92748 (Alexey Milovidov).
  • Исправлена ошибка "Cannot add action to empty ExpressionActionsChain" для ALTER TABLE REWRITE PARTS (v2). #92754 (Azat Khuzhin).
  • Предотвращён сбой при чтении из отключённого Connection. #92807 (Raufs Dunamalijevs).
  • Исправлена логическая ошибка Failed to set file processing within 100 retries в хранилище S3Queue в режиме Ordered. Теперь она приводит только к предупреждению. Эта ошибка могла возникать до версии 25.10, если истекала сессия Keeper, однако в версиях 25.10+ она также будет только предупреждением, так как теоретически все еще возможно получить эту ошибку в случае высокой степени параллелизма обработки в режиме Ordered. #92814 (Kseniia Sumarokova).
  • Ранее некоторые запросы, использующие сегментацию по PK с заведомо ложным условием, завершались с ошибкой. Теперь они выполняются корректно. Требуется для https://github.com/ClickHouse/ClickHouse/pull/89313. #92815 (Yarik Briukhovetskyi).
  • Исправлен расчёт несжатых размеров текстовых индексов в таблице system.parts. #92832 (Anton Popov).
  • Исправлено использование первичного индекса в легковесных обновлениях, которые содержат оператор IN с подзапросами в предикате условия WHERE. #92838 (Anton Popov).
  • Исправлено формирование подсказки типа для пути 'skip' в JSON. Закрывает #92731. #92842 (Pavel Kruglov).
  • В табличном движке S3 следует избегать кеширования ключа партиции, если используются недетерминированные функции. #92844 (Miсhael Stetsyuk).
  • Исправлена потенциальная ошибка FILE_DOESNT_EXIST после мутации разреженного столбца с параметром ratio_of_defaults_for_sparse_serialization=0.0. Закрывает #92633. #92860 (Pavel Kruglov).
  • Исправлен вывод схемы Parquet в старом Parquet-ридере (по умолчанию не используется), когда столбец JSON следует за столбцом Tuple. Исправлена ошибка старого Parquet-ридера (по умолчанию не используется), приводившая к сбою при обработке пустых кортежей. #92867 (Michael Kolupaev).
  • Исправлена логическая ошибка при использовании нескольких JOIN по константному условию и включённым join_use_nulls, закрыт #92640. #92892 (Vladimir Cherkasov).
  • Исправлена возможная ошибка NOT_FOUND_COLUMN_IN_BLOCK при вставке в таблицу, использующую подстолбец в выражении партиции. Закрывает #93210. Закрывает #83406. #92905 (Pavel Kruglov).
  • Исправлена ошибка NO_SUCH_COLUMN_IN_TABLE в движке Merge для таблиц с псевдонимами. Закрывает #88665. #92910 (Pavel Kruglov).
  • Исправлен случай сравнения NULL != NULL для операции full_sorting_join по столбцу типа LowCardinality(Nullable(T)). #92924 (Vladimir Cherkasov).
  • Исправлено несколько сбоев при слиянии текстовых индексов в таблицах MergeTree. #92925 (Anton Popov).
  • Восстанавливать при необходимости обёртки LowCardinality вокруг результатов выражений Set во время агрегации TTL, чтобы предотвратить исключения при оптимизации таблицы. #92971 (Seva Potapov).
  • Исправлена логическая ошибка при анализе индекса, когда в функции has используется пустой массив. Закрывает #92906. #92995 (Nihал Z. Miaji).
  • Исправлено возможное зависание при завершении пула фоновых задач по расписанию (могло приводить к зависаниям сервера при его остановке). #93008 (Azat Khuzhin).
  • Исправлена возможная ошибка FILE_DOESNT_EXIST после мутации разреженного столбца, если настройка ratio_of_defaults_for_sparse_serialization была изменена на 1.0 через ALTER. #93016 (Pavel Kruglov).
  • Исправлена ошибка в логике пропуска данных, когда в WHERE используется not materialize(...) или not CAST(...), что приводило к некорректным результатам. Закрывает #88536. #93017 (Nihал Z. Miaji).
  • Исправлено возможное использование устаревших частей из-за гонки типа TOCTOU при работе с общими частями. #93022 (Azat Khuzhin).
  • Исправлен сбой при десериализации повреждённого агрегатного состояния groupConcat с смещениями, выходящими за допустимые границы. #93028 (Raufs Dunamalijevs).
  • Исправлена ошибка, из-за которой соединение оставалось в некорректном состоянии после предварительной отмены распределённых запросов. #93029 (Azat Khuzhin).
  • Исправлены результаты JOIN при разрежённом столбце в качестве правого ключа соединения. Это закрывает #92920. Мне удалось воспроизвести ошибку только при set compatibility='23.3'. Не уверен, стоит ли делать бэкпорт. #93038 (Amos Bird).
  • Исправлена возможная ошибка Cannot finalize buffer after cancellation в estimateCompressionRatio(). Исправления: #87380. #93068 (Azat Khuzhin).
  • Исправлены слияния текстовых индексов, построенных на основе сложных выражений (таких, как concat(col1, col2)). #93073 (Anton Popov).
  • Исправлено применение PROJECTION, когда фильтр содержит подстолбцы. Закрывает #92882. #93141 (Pavel Kruglov).
  • Исправлена логическая ошибка, которая в некоторых случаях возникала при добавлении runtime-фильтров JOIN в план запроса. Она была вызвана некорректным возвратом дублированных константных столбцов с одной из сторон JOIN. #93144 (Alexander Gololobov).
  • Специальная функция __applyFilter, используемая в runtime-фильтрах join, в некоторых допустимых случаях возвращала ошибку ILLEGAL_TYPE_OF_ARGUMENT. #93187 (Alexander Gololobov).
  • Предотвращено схлопывание разных интерполированных столбцов в один столбец в блоке, когда интерполированные столбцы фактически являются псевдонимами одного и того же столбца. #93197 (Yakov Olkhovskiy).
  • Не добавляйте runtime-фильтр при выполнении JOIN с уже заполненной правой таблицей. #93211 (Alexander Gololobov).
  • Исправлена очистка постоянных наблюдений в Keeper после завершения сеанса. Это закрывает #92480. #93213 (Konstantин Vedernиков).
  • Исправлен ORDER BY tuple в Iceberg. Это закрывает #92977. #93225 (Konstantin Vedernikov).
  • Исправлена ошибка в настройке S3Queue s3queue_migrate_old_metadata_to_buckets. Закрывает #93392, #93196, #81739. #93232 (Kseniia Sumarokova).
  • Удаляет неиспользуемые столбцы при перестроении проекций во время слияния. Это снижает использование памяти и уменьшает количество временных частей. #93233 (Nikolai Kochetov).
  • Исправлена ошибка удаления неиспользуемых столбцов из подзапросов при наличии скалярного коррелированного подзапроса. До исправления столбец мог быть удалён, если он использовался только в коррелированном подзапросе, из-за чего запрос завершался с ошибкой NOT_FOUND_COLUMN_IN_BLOCK. #93273 (Dmitry Novik).
  • Исправлена возможная проблема отсутствующего подстолбца в материализованном представлении при выполнении ALTER исходной таблицы. Закрывает #93231. #93276 (Pavel Kruglov).
  • Исправлено планирование запросов анализатором для табличного движка Merge, из‑за которого могла возникать ошибка ILLEGAL_COLUMN для hostName() при слиянии локальных и удалённых/Distributed таблиц. Закрывает #92059. #93286 (Jinlin).
  • Исправлена ситуация, когда NOT IN с неконстантными аргументами-массивами возвращал неверное значение, и добавлена поддержка неконстантных функций с типом Array. Закрывает #14980. #93314 (Yarik Briukhovetskyi).
  • Исправлена ошибка Not found column при использовании оптимизации use_top_k_dynamic_filtering. Исправляет #93186. #93316 (Nikolai Kochetov).
  • Исправлено перестроение текстовых индексов, созданных на основе подстолбцов. #93326 (Anton Popov).
  • Исправлена обработка пустого массива при передаче его вторым аргументом в функции hasAllTokens и hasAnyTokens. #93328 (Anton Popov).
  • Исправлена логическая ошибка при использовании runtime-фильтров в запросе с итогами по правой таблице. #93330 (Alexander Gololobov).
  • Сервер больше не падает, если функция tokens вызывается с неконстантными параметрами токенизатора (со 2-м, 3-м и 4-м параметрами), например, SELECT tokens(NULL, 1, materialize(1)). #93383 (Robert Schulze).
  • Исправлена уязвимость целочисленного переполнения в десериализации состояния groupConcat, которая могла приводить к проблемам с безопасностью памяти при обработке специально сконструированных агрегатных состояний. #93426 (Raufs Dunamalijevs).
  • Исправлен анализ текстового индекса для столбцов массивов, когда в индексе нет токенов (все массивы пусты или все токены пропускаются токенизатором). #93457 (Anton Popov).
  • Исключает использование аутентификации через OAuth в ClickHouse Client, если имя пользователя и пароль заданы в строке подключения. #93459 (Krishna Mannem).
  • Исправлена поддержка предоставляемых учетных данных Azure ADLS Gen2 в DataLakeCatalog — разбираются ключи adls.sas-token.* из REST-каталогов Iceberg и исправлен разбор URL-адресов ABFSS. #93477 (Karun Anantharaman).
  • Исправлена поддержка GLOBAL IN с анализатором (ранее Set повторно создавался на удалённом узле). #93507 (Azat Khuzhin).
  • Исправлена ошибка извлечения подстолбца при десериализации непосредственно в разреженные столбцы. #93512 (Pavel Kruglov).
  • Исправлено прямое чтение из текстового индекса при дублирующихся поисковых запросах. #93516 (Anton Popov).
  • Исправление ошибки NOT_FOUND_COLUMN_IN_BLOCK, возникающей при включённом runtime filter, если в объединённых таблицах один и тот же столбец возвращается несколько раз (например, SELECT a, a, a FROM t). #93526 (Alexander Gololobov).
  • Исправлена ошибка, из-за которой clickhouse-client запрашивал пароль дважды при подключении по SSH. #93547 (Isak Ellmer).
  • Обеспечено корректное завершение ZooKeeper при остановке (исправлено потенциальное зависание при остановке в крайне редких случаях). #93602 (Azat Khuzhin).
  • Исправлен LOGICAL_ERROR при восстановлении ReplicatedMergeTree при гонке дедупликации. #93612 (Pablo Marcos).
  • Исправлено использование разреженного столбца для обновления TTL при прямой десериализации в разреженные столбцы в некоторых входных форматах. Это исправляет возможную логическую ошибку Unexpected type of result TTL column. #93619 (Pavel Kruglov).
  • Исправлены случаи, когда функции индекса h3 иногда приводили к сбоям или зависанию при вызове с некорректными входными данными. #93657 (Michael Kolupaev).
  • Использование индекса ngram_bf для данных не в кодировке UTF-8 приводило к чтению неинициализированной памяти, значения из которой могли попадать в результирующую структуру индекса. Закрывает #92576. #93663 (Alexey Milovidov).
  • Проверьте, что размер распакованного буфера соответствует ожидаемому. #93690 (Raúl Marín).
  • Предотвращена возможность получения пользователями списка столбцов таблицы без проверки наличия разрешения SHOW COLUMNS при использовании движка таблиц merge. #93695 (János Benjamin Antal).
  • Исправлена материализация пропускающих индексов, созданных на основе подстолбцов. #93708 (Anton Popov).
  • Мы храним умные указатели shared_ptr на хранилища в QueryPipeline::resources::storage_holders, чтобы гарантировать, что объекты IStorage не будут уничтожены, пока существует PipelineExecutor. #93746 (Miсhael Stetsyuk).
  • Исправлена проблема с присоединением реплицируемых БД, когда межсерверный хост изменился после перезапуска. #93779 (Tuan Pham Anh).
  • Исправлено срабатывание assert !read_until_position в ReadBufferFromS3, возникавшее при включённом кэше. #93809 (Kseniia Sumarokova).
  • Исправлена логическая ошибка в редком случае использования пустого кортежа со столбцом Map. Закрывает #93784. #93814 (Nihal Z. Miaji).
  • Исправлено повреждение _part_offset при перестроении проекций во время слияний и оптимизирована обработка проекций за счёт исключения ненужных чтений столбца _part_offset и пропуска лишних столбцов при вычислениях проекций. Это продолжение оптимизаций, представленных в #93233. #93827 (Amos Bird).
  • Удалена обработка ошибки 'Bad version'. #93843 (Anton Ivashkin).
  • Исправлена некорректная работа optimize_inverse_dictionary_lookup с распределённым запросом, когда ключ имеет знаковый целочисленный тип. Закрывает #93259. #93848 (Nihal Z. Miaji).
  • Исправлена проблема, из-за которой lag/lead не работали с распределённым запросом remote(). Закрывает #90014. #93858 (Nihal Z. Miaji).
  • Исправлена ошибка диспетчеризации системных инструментов. #93937 (Pablo Marcos).
  • В https://github.com/ClickHouse/ClickHouse/pull/89173 мы добавили дополнительное поле в структуру, которую TraceSender отправляет через внутренний канал. Однако размер буфера не был обновлён (здесь), поэтому мы записываем в буфер больше данных, чем buffer_size, что приводит к многократным сбросам. И поскольку TraceSender::send вызывается из разных потоков, сбросы буфера из разных потоков могут чередоваться, что нарушает инвариант, на который опирается принимающая сторона (TraceCollector). #93966 (Miсhael Stetsyuk).
  • Исправлено приведение типов к супертипу при операции JOIN в хранилище Join с предложением USING. Исправляет #91672. Исправляет #78572. #94000 (Dmitry Novik).
  • Исправлена ошибка, из-за которой FilterStep некорректно добавлялся при применении runtime-фильтра JOIN поверх таблицы Merge. #94021 (Alexander Gololobov).
  • Запрос SELECT, содержащий предикат по нескольким столбцам с пропускающими индексами bloom filter и одновременно использующий условия OR и NOT, мог возвращать несогласованные результаты. Теперь это исправлено. #94026 (Shankar Iyer).
  • Исправлена операция CLEAR COLUMN для столбца с зависимыми индексами. #94057 (Raúl Marín).
  • Исправлено использование неинициализированного значения в ReadWriteBufferFromHTTP. #94058 (Alexey Milovidov).
  • Исправлена некорректная проверка типизированных путей в JSON. Проверка была добавлена в https://github.com/ClickHouse/ClickHouse/pull/92842 и может вызывать ошибку при запуске существующих таблиц. #94070 (Pavel Kruglov).
  • Исправлено падение во время анализа фильтра при наличии OUTER JOIN. Устранена проблема #90979. #94080 (Dmitry Novik).
  • Исправлена точность вычислений uniqTheta при использовании агрегатных ключей типа UInt8 при параллельной агрегации (max_threads > 1, значение по умолчанию). #94095 (Azat Khuzhin).
  • Исправлено падение, вызванное исключением при вызове socket.setBlocking(true) внутри SCOPE_EXIT. #94100 (Miсhael Stetsyuk).
  • Исправлена потеря данных, происходившая, когда DROP PARTITION удалял части, созданные более поздними записями журнала в ReplicatedMergeTree. #94123 (Tuan Pham Anh).
  • Исправлен Parquet-ридер v3, некорректно обрабатывавший массивы, пересекающие границы страниц. Это происходит, например, для файлов, записанных с помощью Arrow без включения статистики страниц (page statistics) или индекса страниц (page index). Затрагивает только столбцы типа данных Array. Вероятный симптом — усечение примерно одного массива на каждые ~1 МБ данных. До этого исправления используйте следующий SETTING как обходной путь: input_format_parquet_use_native_reader_v3 = 0. #94125 (Michael Kolupaev).
  • Исправлена проблема с чрезмерным числом watches в ReplicatedMergeTree при ожидании записи в журнал. #94133 (Azat Khuzhin).
  • Функции arrayShuffle, arrayPartialShuffle и arrayRandomSample материализуют константные столбцы, чтобы разные строки получали разные результаты. #94134 (Joanna Hulboj).
  • Устранена гонка данных при вычислении табличных функций в materialized views. #94171 (Alexey Milovidov).
  • Исправлено разыменование nullptr в движках баз данных PostgreSQL (при некорректном запросе). Закрывает #92887. #94180 (Alexey Milovidov).
  • Исправлена утечка памяти в refreshable materialized views при выполнении запросов SELECT с несколькими подзапросами. #94200 (Antonio Andelic).
  • Устранена гонка данных между DataPartStorageOnDiskBase::remove и system.parts. Закрывает #49076. #94262 (Alexey Milovidov).
  • Удалён некорректный спецификатор noexcept у оператора копирующего присваивания HashTable, который мог приводить к аварийному завершению (std::terminate) при исключениях, связанных с памятью. #94275 (Nikita Taranov).
  • Ранее создание PROJECTION с дублирующимися столбцами в GROUP BY (например, GROUP BY c0, c0) и последующая вставка данных приводили к исключению std::length_error при включённой настройке optimize_row_order. Закрывает #94065. #94277 (Alexey Milovidov).
  • Исправлена неочевидная ошибка в клиенте ZooKeeper при подключении, приводившая к зависаниям и сбоям. #94320 (Azat Khuzhin).
  • Исправлена ошибка, из-за которой оптимизация функций для подстолбцов не применялась к подстолбцам. #94323 (Pavel Kruglov).
  • Исправлен возможный некорректный результат во вложенных операциях RIGHT JOIN при включённом enable_lazy_columns_replication. Ошибка приводила к тому, что все строки в реплицируемых столбцах некорректно возвращали одно и то же значение вместо своих собственных значений. Закрыт #93891. #94339 (Vladimir Cherkasov).
  • Исправлено проталкивание фильтра для SEMI JOIN с использованием наборов эквивалентности. Фильтр не проталкивается, если типы аргументов изменились. Исправляет #93264. #94340 (Dmitry Novik).
  • Исправлено использование DeltaLake CDF с движком базы данных DataLake (интеграция с каталогами Delta Lake). Закрывает #94122. #94342 (Kseniia Sumarokova).
  • Исправлено некорректное значение текущей метрики FilesystemCacheSizeLimit в случае использования политики кэширования SLRU. #94363 (Kseniia Sumarokova).
  • Создание движка базы данных Backup с количеством аргументов меньше двух теперь возвращает более информативное сообщение об ошибке (Wrong number of arguments вместо std::out_of_range: InlinedVector::at(size_type) const failed bounds check.). #94374 (Robert Schulze).
  • Игнорируются невозможные попытки отзыва глобальных привилегий на уровне базы данных для привилегий с правом дальнейшей передачи (grant option). #94386 (pufit).
  • Исправлено чтение разреженных смещений из компактных частей. Закрывает #94385. #94399 (Pavel Kruglov).
  • Не блокировать выполнение ALTER для столбцов, использующих неявные индексы, даже если используется режим throw у alter_column_secondary_index_mode. #94425 (Raúl Marín).
  • Исправлено падение в TCPHandler, когда несколько вызовов receivePacketsExpectQuery читают Protocol::Client::IgnoredPartUUIDs. #94434 (Miсhael Stetsyuk).
  • Исправлена маскировка конфиденциальных данных в system.functions. #94436 (Vitaly Baranov).
  • Исправлено разыменование nullptr при отключённом send_profile_events. Эта возможность была недавно добавлена для Python-драйвера ClickHouse. Закрывает #92488. #94466 (Alexey Milovidov).
  • Исправлена несовместимость файлов .mrk текстового индекса при слияниях. #94494 (Peng Jian).
  • Когда read_in_order_use_virtual_row включён, код обращался к индексным столбцам, исходя из полного размера первичного ключа, не проверяя, был ли индекс усечён, что приводило к обращению к уже освобождённой / неинициализированной памяти. Закрывает #85596. #94500 (Alexey Milovidov).
  • Исправлена ошибка из-за несоответствия типов при передаче внешних таблиц в подзапросы с GLOBAL IN, если их типы — Nullable. Закрывает #94097. #94511 (Alexey Milovidov).
  • В предыдущих версиях запросы с несколькими индексными условиями по одному и тому же выражению могли ошибочно приводить к исключению Not found column. Закрывает #60660. #94515 (Alexey Milovidov).
  • Исправлена некорректная обработка столбца ключа соединения типа Nullable в runtime-фильтрах. #94555 (Alexander Gololobov).
  • Создание рабочей нагрузки внутри другой, уже используемой, больше не приводит к аварийному завершению работы. #94599 (Sergei Trifonov).
  • Исправлена ошибка, приводившая к сбою при оптимизации ANY LEFT JOIN, когда isNotNull вычисляется для отсутствующего столбца. #94600 (Molly).
  • Исправлена оценка выражений для значений по умолчанию при ссылках на другие столбцы с вычисляемыми значениями по умолчанию. #94615 (Alexey Milovidov).
  • Исправлены проблемы с проверкой прав доступа при операциях BACKUP/RESTORE. #94617 (Pablo Marcos).
  • Исправлена ошибка, приводившая к сбою из-за некорректного приведения типа при типе данных Nullable(DateTime64). #94627 (Miсhael Stetsyuk).
  • Исправляет ошибку, из-за которой некоторые распределённые запросы с ORDER BY могли возвращать столбцы ALIAS с перепутанными значениями (т.е. столбец a содержал данные столбца b и наоборот). #94644 (filimonov).
  • Исправлена запись результатов работы keeper-bench в файл. #94654 (Antonio Andelic).
  • Исправлены некорректные оценки, вычисляемые с использованием статистики типа MinMax, при наличии в столбце отрицательных значений с плавающей запятой. #94665 (zoomxi).
  • Исправлена ошибка чтения файлов Parquet, когда ключ в map имеет тип struct. #94670 (Konstantin Vedernikov).
  • Исправлен возможный некорректный результат RIGHT JOIN при использовании сложных условий ON. Закрывает #92913. #94680 (Vladimir Cherkasov).
  • Сохранять постоянную гранулярность индекса (use_const_adaptive_granularity) после вертикальных слияний. #94725 (Azat Khuzhin).
  • Исправлена ошибка в мутациях со скалярными подзапросами и зависимостями таблицы. Если у таблицы были зависимости (индекс или PROJECTION) по столбцу, скалярные подзапросы могли вычисляться и кэшироваться без данных, что приводило к некорректным изменениям. #94731 (Raúl Marín).
  • Исправлен резервный механизм AsynchronousMetrics cpu_pressure при возникновении ошибки. #94827 (Raúl Marín).
  • Функция getURLHostRFC не выполняла проверок границ перед разыменованием указателей. При передаче пустой строки в domainRFC происходило чтение неинициализированной памяти, что вызывало ошибки MSan. #94851 (Alexey Milovidov).
  • Исправлена работа режима только чтения для зашифрованных дисков. #94852 (Azat Khuzhin).
  • Исправлена логическая ошибка в дробном LIMIT/OFFSET при использовании старого анализатора с distributed таблицами. Закрывает #94712. #94999 (Ahmed Gouda).
  • Исправлено падение в некоторых случаях при включённых по умолчанию runtime-фильтрах JOIN. #95000 (Alexander Gololobov).
  • Улучшено маскирование паролей в URL-адресах, используемых в движке таблиц URL() и табличной функции url(). #95006 (Vitaly Baranov).
  • Функция toStartOfInterval теперь работает так же, как toStartOfX, где XDay, Week, Month, Quarter, Year, при включённой настройке enable_extended_results_for_datetime_functions. #95011 (Kirill Kopnev).
  • Исправлено некорректное сравнение константных строк, не учитывавшее настройки cast_string_to_date_time_mode, bool_true_representation, bool_false_representation и input_format_null_as_default. Закрывает #91681. #95040 (Nihal Z. Miaji).
  • Исправлена гонка данных в файловом кэше. #95064 (Alexey Milovidov).
  • Исправлена редкая гонка данных в Parquet-ридере. #95068 (Alexey Milovidov).
  • Исправлен сбой в оптимизации top K, возникавший при LIMIT = 0. Закрывает #93893. #95072 (Alexey Milovidov).
  • Преобразование из DateTime/целых чисел в Time64 извлекает компонент времени суток с помощью toTime, который не является монотонным. Шаблон ToDateTimeMonotonicity ошибочно указывал, что это преобразование монотонно, что приводило к исключению "Invalid binary search result in MergeTreeSetIndex" в debug-сборках. #95125 (Alexey Milovidov).
  • Список записей файла манифеста теперь пересоздаётся только при необходимости (ранее он пересоздавался на каждой итерации). #95162 (Daniil Ivanik).

Улучшения сборки/тестирования/упаковки

  • Добавлен набор инструментов для профилирования выделений памяти в SQL-парсере ClickHouse с использованием возможностей профилирования кучи jemalloc. #94072 (Ilya Yatsishin).
  • Добавлен инструмент, упрощающий отладку выделений памяти в парсере. Он использует метрику jemalloc stats.allocated до и после разбора запроса в представление AST, чтобы показать, какие объекты были выделены. Также он поддерживает режим профилирования памяти, который сохраняет дамп профиля до и после разбора для построения отчетов о том, где происходили выделения. #93523 (Ilya Yatsishin).
  • Удалены транзитивные включения libc++. #92523 (Raúl Марín).
  • Некоторые последовательные тесты сделаны параллельными: https://github.com/ClickHouse/ClickHouse/pull/93030/changes#diff-c3a73510dae653c9bbfa24300b32f5d6ec663fd4e72cc4a3d5daa6e4342915df. #93030 (Nikita Fomichev).
  • Упорядочены некоторые флаги сборки. #93679 (Raúl Марín).
  • Обновление c-ares с v1.34.5 до v1.34.6. Это исправляет уязвимость CVE-2025-62408 в c-ares, которая не имеет отношения к ClickHouse. #94129 (Govind R Nair).
  • Переход на curl 8.18.0. #94742 (Konstantin Bogdanov).