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

Список изменений 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).
  • Включен по умолчанию расширенный общий формат данных для JSON. После этого откат на версии ниже 25.8 будет невозможен, поскольку эти версии не смогут читать новые части данных со столбцом JSON. Для безопасного обновления рекомендуется либо установить настройку compatibility на предыдущую версию, либо задать настройки MergeTree dynamic_serialization_version='v2', object_serialization_version='v2'. #92511 (Pavel Kruglov).
  • По умолчанию использовать частичное совпадение для оператора 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).
  • Дедупликация асинхронных вставок теперь работает с зависимыми 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).
  • Реализована функция mergeTreeAnalyzeIndex. #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).

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

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

  • По умолчанию включены расширенные общие данные для JSON. После этого изменения откат к версиям <25.8 будет невозможен, поскольку эти версии не смогут читать новые части данных со столбцом JSON. Для безопасного обновления рекомендуется установить настройку compatibility на предыдущую версию или задать настройки MergeTree dynamic_serialization_version='v2', object_serialization_version='v2'. #92511 (Pavel Kruglov).
  • Setting use_skip_indexes_on_data_read is now enabled by default. This setting allows filtering in a streaming fashion, at the same time as reading, improving query performance and startup time. #93407 (Shankar Iyer).
  • Datalakes prewhere & multistage prewhere in Parquet reader v3. Resolves #89101. #93542 (Konstantin Vedernikov).
  • Improve performance of DISTINCT on LowCardinality columns. Closes #5917. #91639 (Nihal Z. Miaji).
  • Optimize distinctJSONPaths aggregate function so it reads only JSON paths from data parts and not the whole JSON column. #92196 (Pavel Kruglov).
  • More filters pushed down JOINs. #85556 (Nikita Taranov).
  • Support more cases for push down from join ON condition when the filter uses inputs only from one side. Support ANY, SEMI, ANTI joins. #92584 (Dmitry Novik).
  • Allow using equivalent sets to push down filters for SEMI JOIN. Closes #85239. #92837 (Dmitry Novik).
  • Skip reading left side of hash join when right side is empty. Previously we were reading left side until first non-empty block, which might do a lot of work in case when there is heavy filtering or aggregation. #94062 (Alexander Gololobov).
  • Using the "fastrange" (Daniel Lemire) method for partitioning data inside the query pipeline. This could improve parallel sorting and JOINs. #93080 (Alexey Milovidov).
  • Improve performance of window functions when PARTITION BY matches or is a prefix of the sorting key. #87299 (Nikita Taranov).
  • Outer filter is pushed down into views which allows applying PREWHERE on local and remote nodes. Resolves #88189. #88316 (Igor Nikonov).
  • Implement JIT compilations for more functions. Closes #73509. #88770 (Alexey Milovidov with Taiyang Li).
  • If a skip index used in a FINAL query is on a column that is part of the primary key, the additional step to check for primary key intersection in other parts is unnecessary and now not performed. Resolves #85897. #93899 (Shankar Iyer).
  • Optimize performance and memory usage for fractional LIMIT and OFFSET. #91167 (Ahmed Gouda).
  • Fix using of faster random read logic for Parquet Reader V3 prefetcher. Closes #90890. #91435 (Arsen Muk).
  • Improve performance of icebergCluster. Closes #91462. #91537 (Yang Jiang).
  • Don't filter by virtual columns on constant filters. #91588 (c-end).
  • Reduce INSERT/merges memory usage with wide parts for very wide tables by enabling adaptive write buffers. Add support of adaptive write buffers for encrypted disks. #92250 (Azat Khuzhin).
  • Improved performance of full text search with text index and sparseGrams tokenizer by reducing the number of searched tokens in the index. #93078 (Anton Popov).
  • Function isValidASCII was optimized for positive outcomes, i.e. all-ASCII input values. #93347 (Robert Schulze).
  • The read-in-order optimization now recognizes when ORDER BY columns are constant due to WHERE conditions, enabling efficient reverse-order reads. This benefits multi-tenant queries like WHERE tenant='42' ORDER BY tenant, event_time DESC which can now use InReverseOrder instead of requiring a full sort.". #94103 (matanper).
  • Introduce Enum AST specialized class to store value parameters in (string, integer) pairs instead of ASTLiteral children to optimize memory consumption. #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).
  • Use an in-memory buffer for correlated subqueries input to avoid evaluating it multiple times. Part of #79890. #91205 (Dmitry Novik).
  • Allow all replicas to steal orphaned ranges in parallel replicas reading. This improves load balancing and reduces long-tail latency. #91374 (zoomxi).
  • External aggregation/sorting/join now respects query setting temporary_files_codec in all contexts. Fixed missing profile events for 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).
  • Optimize postings list compression with simdcomp. #92871 (Peng Jian).
  • Refactor S3Queue Ordered mode processing with buckets. This should also improve performance, reducing the number of keeper requests. #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).
  • Force purging of jemalloc arenas in case the ratio of dirty pages size to max_server_memory_usage exceeds memory_worker_purge_dirty_pages_threshold_ratio. #93500 (Eduard Karacharov).
  • Reduce memory usage for AST. #93601 (Nikolai Kochetov).
  • In some cases we've seen ClickHouse doesn't respect a memory limit when reading from a table. This behaviour is fixed. #93715 (Nikita Mikhaylov).
  • Enable CHECK_STAT and TRY_REMOVE Keeper extension by default. #93886 (Mikhail Artemenko).
  • Parse lower and upper bounds of file names corresponding to position deletes from Iceberg manifest file entries for better selection of corresponding data files. #93980 (Daniil Ivanik).
  • Add two more settings to control maximum number of dynamic subcolumns in JSON column. First is MergeTree setting merge_max_dynamic_subcolumns_in_compact_part (similar to already added merge_max_dynamic_subcolumns_in_wide_part) that limits number of dynamic subcolumns created during merge into a Compact part. Second is query level setting max_dynamic_subcolumns_in_json_type_parsing that limits number of dynamic subcolumns created during parsing of JSON data, it will allow to specify the limit on insert. #94184 (Pavel Kruglov).
  • Slightly optimize squashing of JSON columns for some cases. #94247 (Pavel Kruglov).
  • Lower the thread pool queue sizes based on the production experience. Add an explicit memory consumption check before reading any data from the 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).
  • Run purging of jemalloc dirty pages in a different thread from main thread of MemoryWorker. If purging is slow, it could delay updates of RSS usage which could lead to out of memory kills of the process. Introduce new config memory_worker_purge_total_memory_threshold_ratio to start purging dirty pages based on ratio of total memory usage. #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).
  • Добавлен синтаксис ALTER TABLE <table> ATTACH PART <part_name> FROM <directory_name> для запроса ALTER. Он позволяет присоединять части из произвольного подкаталога каталога detached/. Это может быть полезно для присоединения частей с пользовательскими префиксами (такими как broken-on-start, unexpected и т.д.), которые были отсоединены по ошибке и которые нужно лишь присоединить обратно без ручного вмешательства. Ранее требовалось ручное переименование каталогов в файловой системе. #74816 (Anton Popov).
  • Отслеживание разбиения 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 (Konstantin 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).
  • Добавлена проверка принадлежности файла перед выполнением position delete с использованием 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 Degterinsky).
  • Разделять ресурсы парсера формата при чтении файлов данных и файлов позиционного удаления в таблицах 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, вызванная непреднамеренной модификацией плана запроса при преобразовании внешнего соединения во внутреннее. Также ослаблены требования к оптимизации, чтобы можно было применять её в случаях, когда инъективные функции применяются к ключам агрегации при соединении. #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 (Konstantin Vedernikov).
  • Исправлен 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 Gololобов).
  • Сервер больше не падает, если функция 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 (Nihал 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 некорректно добавлялся при применении join runtime filter к таблице Merge. #94021 (Alexander Gololobov).
  • Запрос SELECT, содержащий предикат по нескольким столбцам с пропускающими индексами типа bloom filter и условиями OR и NOT, мог возвращать некорректные результаты. Теперь это исправлено. #94026 (Shankar Iyer).
  • Исправлена операция CLEAR для столбца с зависимыми индексами. #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 reader v3, который некорректно обрабатывал массивы, пересекающие границы страниц. Это происходит, например, для файлов, записанных с помощью Arrow без включения page statistics или page index. Затрагивает только столбцы типа данных Array. Вероятный симптом — примерно один массив на каждые ~1 МБ данных обрезается. До этого исправления используйте следующий SETTING как обходной путь: input_format_parquet_use_native_reader_v3 = 0. #94125 (Michael Kolupaev).
  • Исправлена проблема с чрезмерным числом watches в ReplicatedMergeTree при ожидании записи в журнал. #94133 (Azat Khузhin).
  • Функции 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 Marín).
  • Некоторые последовательные тесты сделаны параллельными: https://github.com/ClickHouse/ClickHouse/pull/93030/changes#diff-c3a73510dae653c9bbfa24300b32f5d6ec663fd4e72cc4a3d5daa6e4342915df. #93030 (Nikita Fomichev).
  • Упорядочены некоторые флаги сборки. #93679 (Raúl Marí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).