Журнал изменений за 2025 год
Оглавление
Релиз ClickHouse v25.10, 2025-10-30
Релиз ClickHouse v25.9, 2025-09-25
Релиз ClickHouse v25.8 LTS, 2025-08-28
Релиз ClickHouse v25.7, 2025-07-24
Релиз ClickHouse v25.6, 2025-06-26
Релиз ClickHouse v25.5, 2025-05-22
Релиз ClickHouse v25.4, 2025-04-22
Релиз ClickHouse v25.3 LTS, 2025-03-20
Релиз ClickHouse v25.2, 2025-02-27
Релиз ClickHouse v25.1, 2025-01-28
Журнал изменений за 2024 год
Журнал изменений за 2023 год
Журнал изменений за 2022 год
Журнал изменений за 2021 год
Журнал изменений за 2020 год
Журнал изменений за 2019 год
Журнал изменений за 2018 год
Журнал изменений за 2017 год
Релиз ClickHouse 25.10, 2025-10-31
Обратно несовместимое изменение
- Изменено значение настройки по умолчанию
schema_inference_make_columns_nullable: теперь используется информация о том, являются ли столбцыNullable, из метаданных Parquet/ORC/Arrow, вместо того чтобы делать все столбцы Nullable. Для текстовых форматов изменений нет. #71499 (Michael Kolupaev). - Кэш результатов запросов будет игнорировать настройку
log_comment, чтобы изменение толькоlog_commentв запросе больше не приводило к промаху кэша. Существует небольшая вероятность, что некоторые пользователи намеренно сегментировали свой кэш, варьируяlog_comment. Это изменение изменяет такое поведение и, следовательно, является обратно несовместимым. Пожалуйста, используйте настройкуquery_cache_tagдля этой цели. #79878 (filimonov). - В предыдущих версиях запросы с табличными функциями, названными так же, как функции-реализации операторов, форматировались непоследовательно. Закрывает #81601. Закрывает #81977. Закрывает #82834. Закрывает #82835. Запросы EXPLAIN SYNTAX больше не будут всегда форматировать операторы — новое поведение лучше отражает назначение объяснения синтаксиса.
clickhouse-format,formatQueryи подобные больше не будут форматировать функции как операторы, если в запросе они использованы в функциональной форме. #82825 (Alexey Milovidov). - Запрещено использование типа
Dynamicв ключахJOIN. Это может привести к непредсказуемым результатам при сравнении значения типаDynamicсо значением типа, отличным отDynamic. Лучше предварительно привести столбецDynamicк нужному типу. #86358 (Pavel Kruglov). - Опция сервера
storage_metadata_write_full_object_keyвключена по умолчанию, сейчас её нельзя отключить. Это обратно совместимое изменение, просто примите его во внимание. Это изменение вперёд совместимо только с релизами 25.x. Это означает, что при необходимости отката нового релиза вы сможете откатиться только на релизы линейки 25.x. #87335 (Sema Checherinda). - Уменьшено значение
replicated_deduplication_window_secondsс одной недели до одного часа, чтобы уменьшить количество znode, хранящихся в ZooKeeper, при низкой скорости вставки. #87414 (Sema Checherinda). - Переименована настройка
query_plan_use_new_logical_join_stepвquery_plan_use_logical_join_step. #87679 (Vladimir Cherkasov). - Новый синтаксис позволяет более гибко задавать параметр tokenizer для текстового индекса. #87997 (Elmi Ahmadov).
- Функции
searchAnyиsearchAllпереименованы вhasAnyTokensиhasAllTokensдля большей согласованности с существующей функциейhasToken. #88109 (Robert Schulze). - Из файлового кэша удалён параметр
cache_hits_threshold. Эта функциональность была добавлена внешним контрибьютором ещё до появления политики кэша SLRU, и теперь, когда она есть, нет смысла поддерживать оба механизма. #88344 (Kseniia Sumarokova). - Два небольших изменения в том, как работают настройки
min_free_disk_ratio_to_perform_insertиmin_free_disk_bytes_to_perform_insert: - используются незарезервированные, а не доступные байты для определения, следует ли отклонить вставку. Вероятно, это не критично, если резервы для фоновых слияний и мутаций малы по сравнению с настроенными порогами, но так более правильно. - Эти настройки не применяются к системным таблицам. Причина в том, что нам по-прежнему нужно, чтобы такие таблицы, какquery_log, продолжали обновляться. Это сильно помогает при отладке. Объём данных, записываемых в системные таблицы, обычно невелик по сравнению с пользовательскими данными, поэтому они могут продолжать работать гораздо дольше при разумном порогеmin_free_disk_ratio_to_perform_insert. #88468 (c-end). - Включён асинхронный режим для внутренней репликации Keeper. Keeper сохранит прежнее поведение с возможными улучшениями производительности. Если вы обновляетесь с версии старее 23.9, необходимо сначала обновиться до 23.9+ и затем — до 25.10+. Вы также можете установить
keeper_server.coordination_settings.async_replicationв значение 0 перед обновлением и включить его после завершения обновления. #88515 (Antonio Andelic).
Новая возможность
- Добавлена поддержка отрицательных значений
LIMITиOFFSET. Закрывает #28913. #88411 (Nihal Z. Miaji). - Движок
Aliasсоздаёт прокси к другой таблице. Все операции чтения и записи перенаправляются в целевую таблицу, в то время как сам алиас не хранит данные и содержит только ссылку на целевую таблицу. #87965 (Kai Zhu). - Полная поддержка оператора
IS NOT DISTINCT FROM(<=>). #88155 (simonmichal). - Добавлена возможность автоматически создавать статистику по всем подходящим столбцам в таблицах
MergeTree. Добавлена настройка на уровне таблицыauto_statistics_types, в которой хранятся типы статистики, задаваемые через запятую (например,auto_statistics_types = 'minmax, uniq, countmin'). #87241 (Anton Popov). - Новый блум-фильтр-индекс для текстовых данных
sparse_gram. #79985 (scanhex12). - Новая функция
convдля преобразования чисел между системами счисления, в настоящее время поддерживает основания от2до36. #83058 (hp). - Добавлена поддержка синтаксиса
LIMIT BY ALL. АналогичноGROUP BY ALLиORDER BY ALL,LIMIT BY ALLавтоматически расширяется до использования всех неагрегатных выражений из предложения SELECT в качестве ключей LIMIT BY. Например,SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALLэквивалентенSELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, name. Эта возможность упрощает запросы, когда требуется ограничить результат по всем выбранным неагрегатным столбцам без их явного перечисления. Закрывает #59152. #84079 (Surya Kant Ranjan). - Добавлена поддержка выполнения запросов к Apache Paimon из ClickHouse. Эта интеграция позволит пользователям ClickHouse напрямую работать с хранилищем озера данных Paimon. #84423 (JIaQi).
- Добавлена агрегатная функция
studentTTestOneSample. #85436 (Dylan). - Агрегатная функция
quantilePrometheusHistogram, которая принимает в качестве аргументов верхние границы и кумулятивные значения бакетов гистограммы и выполняет линейную интерполяцию между верхней и нижней границами того бакета, в котором находится позиция квантиля. Ведёт себя аналогично функции PromQLhistogram_quantileдля классических гистограмм. #86294 (Stephen Chi). - Новая системная таблица для файлов метаданных Delta Lake. #87263 (scanhex12).
- Добавлено
ALTER TABLE REWRITE PARTS— выполняет полную перезапись частей таблицы с нуля с использованием всех новых настроек (поскольку некоторые, такие какuse_const_adaptive_granularity, будут применяться только к новым частям). #87774 (Azat Khuzhin). - Добавлена команда
SYSTEM RECONNECT ZOOKEEPERдля принудительного разрыва соединения с ZooKeeper и повторного подключения (https://github.com/ClickHouse/ClickHouse/issues/87317). #87318 (Pradeep Chhetri). - Ограничьте количество именованных коллекций с помощью настроек
max_named_collection_num_to_warnиmax_named_collection_num_to_throw. Добавлены новая метрикаNamedCollectionи ошибкаTOO_MANY_NAMED_COLLECTIONS. #87343 (Pablo Marcos). - Добавлены оптимизированные регистронезависимые варианты функций
startsWithиendsWith:startsWithCaseInsensitive,endsWithCaseInsensitive,startsWithCaseInsensitiveUTF8иendsWithCaseInsensitiveUTF8. #87374 (Guang Zhao). - Добавлена возможность задавать определения
WORKLOADиRESOURCEв SQL через секцию конфигурации сервера "resources_and_workloads". #87430 (Sergei Trifonov). - Добавлена новая настройка таблицы
min_level_for_wide_part, которая позволяет указать минимальный уровень части, начиная с которого она создаётся как wide-часть. #88179 (Christoph Wurm). - В клиент Keeper добавлены рекурсивные варианты команд
cp-cprиmv-mvr. #88570 (Mikhail Artemenko). - Добавлена настройка сессии для исключения из материализации списка индексов пропуска при вставках (
exclude_materialize_skip_indexes_on_insert). Добавлена настройка таблицы MergeTree для исключения из материализации списка индексов пропуска во время слияния (exclude_materialize_skip_indexes_on_merge). #87252 (George Larionov).
Экспериментальная функциональность
- Реализован тип данных
QBit, который хранит векторы в бит-слайсинговом формате, и функцияL2DistanceTransposed, позволяющая выполнять приближённый векторный поиск с управляемым компромиссом между точностью и скоростью с помощью параметра. #87922 (Raufs Dunamalijevs). - Функции
searchAllиsearchAnyтеперь могут использоваться и в таблицах без текстовых столбцов. В таких случаях они применяют токенизатор по умолчанию. #87722 (Jimmy Aguilar Mena).
Повышение производительности
- Реализована ленивая репликация столбцов в JOIN и ARRAY JOIN. Теперь не требуется преобразовывать специальное представление столбцов, такое как Sparse и Replicated, в полные столбцы в некоторых форматах вывода. Это позволяет избежать лишнего копирования данных в памяти. #88752 (Pavel Kruglov).
- Добавлена опциональная сериализация подстолбца
.sizeдля строковых столбцов верхнего уровня в таблицах MergeTree для улучшения сжатия и обеспечения эффективного доступа к подстолбцам. Введены новые настройки MergeTree для управления версией сериализации и оптимизации выражений с пустыми строками. #82850 (Amos Bird). - Поддержка упорядоченного чтения для Iceberg. #88454 (scanhex12).
- Ускорены некоторые запросы с
JOINза счёт построения во время выполнения фильтра Блума из правого поддерева и передачи этого фильтра операции сканирования в левом поддереве. Это может быть полезно для запросов видаSELECT avg(o_totalprice) FROM orders, customer, nation WHERE c_custkey = o_custkey AND c_nationkey=n_nationkey AND n_name = 'FRANCE'. #84772 (Alexander Gololobov). - Производительность выполнения запросов улучшена за счёт переработки порядка применения и интеграции Query Condition Cache (QCC) с анализом индексов. Фильтрация с помощью QCC теперь применяется до анализа первичного ключа и skip-индексов, что сокращает избыточные вычисления по индексам. Анализ индексов расширен для поддержки нескольких диапазонных фильтров, а его результаты фильтрации теперь сохраняются обратно в QCC. Это значительно ускоряет запросы, в которых анализ индексов доминирует во времени выполнения — особенно те, которые полагаются на skip-индексы (например, векторные или инвертированные индексы). #82380 (Amos Bird).
- Набор микрооптимизаций для ускорения выполнения небольших запросов. #83096 (Raúl Marín).
- Сжимать логи и события профилирования в нативном протоколе. На кластерах со 100+ репликами несжатые события профилирования генерируют трафик 1–10 МБ/с, и индикатор прогресса медленно обновляется при низкой скорости интернет-соединения. Это закрывает #82533. #83586 (Alexey Milovidov).
- Улучшена производительность поиска строк с учетом регистра (операции, такие как фильтрация, например
WHERE URL LIKE '%google%') с помощью библиотеки StringZilla, использующей SIMD‑инструкции процессора при их наличии. #84161 (Raúl Marín). - Снижено количество операций выделения и копирования памяти при выполнении запроса
SELECT ... FINALиз таблицы движка AggregatingMergeTree, если в таблице есть столбцы типаSimpleAggregateFunction(anyLast). #84428 (Duc Canh Le). - Реализует логику проталкивания дизъюнктивных предикатов JOIN. Пример: в TPC-H Q7 для условия над двумя таблицами n1 и n2 вида
(n1.n_name = 'FRANCE' AND n2.n_name = 'GERMANY') OR (n1.n_name = 'GERMANY' AND n2.n_name = 'FRANCE')мы извлекаем отдельные частичные фильтры для каждой таблицы:n1.n_name = 'FRANCE' OR n1.n_name = 'GERMANY'для n1 иn2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE'для n2. #84735 (Yarik Briukhovetskyi). - Улучшена производительность оператора
LIKEс префиксом или суффиксом за счёт использования нового значения настройки по умолчаниюoptimize_rewrite_like_perfect_affix. #85920 (Guang Zhao). - Устранена деградация производительности, вызванная большим сериализованным ключом при группировке по нескольким строковым и числовым столбцам. Это продолжение #83884. #85924 (李扬).
- Добавлена новая настройка
joined_block_split_single_rowдля снижения потребления памяти при хеш-соединениях с большим количеством совпадений на один ключ. Она позволяет разбивать результаты хеш-соединения на блоки даже внутри совпадений для одной строки левой таблицы, что особенно полезно, когда одна строка из левой таблицы сопоставляется с тысячами или миллионами строк из правой таблицы. Ранее все совпадения должны были быть материализованы в памяти одновременно. Это снижает пиковое потребление памяти, но может увеличить нагрузку на CPU. #87913 (Vladimir Cherkasov). - Улучшения в реализации SharedMutex (повышена производительность при большом числе конкурентных запросов). #87491 (Raúl Marín).
- Повышена производительность построения текстового индекса для документов, которые содержат в основном редко встречающиеся токены. #87546 (Anton Popov).
- Ускорен типичный случай работы деструктора
Field(улучшена производительность при большом количестве небольших запросов). #87631 (Raúl Marín). - Пропускается пересчёт статистики хеш-таблицы при оптимизации JOIN (это улучшает производительность всех запросов с JOIN). Добавлены новые профильные события
JoinOptimizeMicrosecondsиQueryPlanOptimizeMicroseconds. #87683 (Vladimir Cherkasov). - Включена возможность сохранять метки в кэше и избегать прямого ввода-вывода для ридера MergeTreeLazy. Это улучшает производительность запросов с ORDER BY и небольшим LIMIT. #87989 (Nikita Taranov).
- Запрос SELECT с предложением
FINALдля таблицыReplacingMergeTreeсо столбцомis_deletedтеперь выполняется быстрее благодаря улучшенной параллелизации на основе двух существующих оптимизаций: 1. оптимизацияdo_not_merge_across_partitions_select_finalдля разделов таблицы, которые содержат только одинpart; 2. разбиение других выбранных диапазонов таблицы наintersecting/non-intersecting, при этом только пересекающиеся диапазоны должны проходить через преобразование слияния FINAL. #88090 (Shankar Iyer). - Уменьшено влияние неиспользования fail points на путь выполнения по умолчанию (когда отладка не активна). #88196 (Raúl Marín).
- Избегается полное сканирование
system.tablesпри фильтрации поuuid(может быть полезно, если у вас есть только UUID из логов или пути в ZooKeeper). #88379 (Azat Khuzhin). - Улучшена производительность функций
tokens,hasAllTokensиhasAnyTokens. #88416 (Anton Popov). - Сделан inline
AddedColumns::appendFromBlockдля небольшого улучшения производительности JOIN в некоторых случаях. #88455 (Nikita Taranov). - Автодополнение на стороне клиента становится быстрее и последовательнее при использовании
system.completionsвместо выполнения множества запросов к системным таблицам. #84694 (|2ustam). - Добавлен новый параметр текстового индекса
dictionary_block_frontcoding_compressionдля управления сжатием словаря. По умолчанию он включён, и используется сжатие типаfront-coding. #87175 (Elmi Ahmadov). - Данные со всех потоков сжимаются перед вставкой в материализованные представления в соответствии с настройками
min_insert_block_size_rows_for_materialized_viewsиmin_insert_block_size_bytes_for_materialized_views. Ранее, еслиparallel_view_processingбыл включен, каждый поток, выполняющий вставку в конкретное материализованное представление, выполнял сжатие вставки независимо, что могло приводить к увеличению числа создаваемых частей. #87280 (Antonio Andelic). - Добавлена настройка
temporary_files_buffer_sizeдля управления размером буфера при записи во временные файлы. * Оптимизировано потребление памяти операциейscatter(используется, например, в grace hash join) для столбцовLowCardinality. #88237 (Vladimir Cherkasov). - Добавлена поддержка прямого чтения текстовых индексов при использовании параллельных реплик. Улучшена производительность чтения текстовых индексов из объектного хранилища. #88262 (Anton Popov).
- Запросы к таблицам из каталогов Data Lakes теперь используют параллельные реплики для распределённой обработки. #88273 (scanhex12).
- Внутренняя эвристика для настройки алгоритма фоновых слияний с именем "to_remove_small_parts_at_right" будет выполняться до вычисления оценки диапазона слияния. Ранее селектор слияний выбирал широкое слияние, а затем отфильтровывал его суффикс. Исправления: #85374. #88736 (Mikhail Artemenko).
Улучшение
- Теперь функция
generateSerialIDподдерживает неконстантный аргумент для имени серии. Закрывает #83750. #88270 (Alexey Milovidov). - Добавлен необязательный параметр
start_valueв функциюgenerateSerialIDдля задания пользовательских начальных значений для новых последовательностей. #88085 (Manuel). - Добавлена опция
--semicolons_inlineвclickhouse-formatдля форматирования запросов так, чтобы точки с запятой ставились в конце последней строки, а не на новой строке. #88018 (Jan Rada). - Разрешить настройку троттлинга на уровне сервера, даже когда конфигурация переопределена в Keeper. Закрывает #73964. #74066 (JIaQi).
mannWhitneyUTestбольше не выбрасывает исключение, когда обе выборки содержат только одинаковые значения. Теперь возвращает корректный результат, соответствующий поведению SciPy. Закрывает: #79814. #80009 (DeanNeaht).- Транзакция перезаписи диска объектного хранилища удаляет предыдущие блобы в удалённом хранилище, если транзакция метаданных зафиксирована. #81787 (Sema Checherinda).
- Исправлен оптимизационный проход для избыточного выражения равенства в случаях, когда
LowCardinalityрезультирующего типа отличается до и после оптимизации. #82651 (Yakov Olkhovskiy). - Когда HTTP-клиенты устанавливают заголовок
X-ClickHouse-100-Continue: deferв дополнение кExpect: 100-continue, ClickHouse не отправляет клиенту ответ100 Continueдо тех пор, пока не пройдет проверка квоты, что предотвращает напрасную трату сетевой полосы пропускания при передаче тел запросов, которые в любом случае будут отброшены. Это актуально для запросов INSERT, когда сам запрос может быть передан в строке URL-запроса, а данные — в теле запроса. Прерывание запроса без отправки полного тела предотвращает повторное использование соединения с HTTP/1.1, но дополнительная задержка, связанная с открытием новых соединений, обычно несущественна по сравнению с общей длительностью выполнения INSERT при больших объемах данных. #84304 (c-end). - Скрывать учетные данные доступа к S3 в логах при использовании DATABASE ENGINE = Backup с хранилищем S3. #85336 (Kenny Sun).
- Сделать оптимизации плана запроса видимыми для входного подплана коррелированного подзапроса за счет откладывания его материализации. Часть #79890. #85455 (Dmitry Novik).
- Изменение для SYSTEM DROP DATABASE REPLICA: - When dropping with database or drop the whole replica: it also drops replica for each table of the database - If 'WITH TABLES' is provided, drop replica for each storage - Otherwise, the logic is unchanged, only drop replica on the databases - When dropping a database replica with the keeper path: - If 'WITH TABLES' is provided: - Restore the database as Atomic - Restore RMT tables from statement in Keeper - Drop the database (restored tables are also dropped) - Otherwise, only drop replica on the provided keeper path. #85637 (Tuan Pham Anh).
- Исправлено некорректное форматирование TTL при использовании функции
materialize. Закрывает #82828. #85749 (Alexey Milovidov). - Состояние таблицы Iceberg больше не хранится в объекте хранилища. Это должно обеспечить корректную работу Iceberg в ClickHouse при выполнении параллельных запросов. #86062 (Daniil Ivanik).
- Сделать режим блокировки бакета в упорядоченном режиме S3Queue постоянным, аналогично узлам обработки при
use_persistent_processing_nodes = 1. Добавить в тесты имитацию сбоев Keeper. #86628 (Kseniia Sumarokova). - Выводить подсказки, если пользователь допускает опечатку в имени формата. Закрывает #86761. #87092 (flynn).
- Теперь удалённые реплики пропускают анализ индексов, если нет проекций. #87096 (zoomxi).
- Добавлена возможность отключить кодировку UTF-8 для таблицы YTsaurus. #87150 (MikhailBurdukov).
- По умолчанию отключена настройка
s3_slow_all_threads_after_retryable_error. #87198 (Nikita Mikhaylov). - Переименована табличная функция
arrowflightвarrowFlight. #87249 (Vitaly Baranov). - Обновлён
clickhouse-benchmark, чтобы он поддерживал использование-вместо_в флагах командной строки. #87251 (Ahmed Gouda). - Сброс в
system.crash_logпри обработке сигналов сделан синхронным. #87253 (Miсhael Stetsyuk). - Добавлена настройка
inject_random_order_for_select_without_order_by, которая вставляетORDER BY rand()в верхнеуровневые запросыSELECTбез предложенияORDER BY. #87261 (Rui Zhang). - Улучшено сообщение об ошибке в
joinGet, которое теперь корректно сообщает, что количествоjoin_keysне совпадает с количествомright_table_keys. #87279 (Isak Ellmer). - Добавлена возможность проверять структуру stat произвольного узла Keeper при выполнении транзакции записи. Это может помочь при обнаружении проблемы ABA. #87282 (Mikhail Artemenko).
- Перенаправлять тяжёлые запросы YTsaurus на тяжёлые прокси-серверы. #87342 (MikhailBurdukov).
- Исправляет откаты операций unlink/rename/removeRecursive/removeDirectory/и т. д., а также счётчики жёстких ссылок при любых возможных нагрузках для метаданных из дисковых транзакций и упрощает интерфейсы, делая их более универсальными, чтобы их можно было повторно использовать в других хранилищах метаданных. #87358 (Mikhail Artemenko).
- Добавлен параметр конфигурации
keeper_server.tcp_nodelay, который позволяет отключитьTCP_NODELAYдля Keeper. #87363 (Copilot). - Добавлена поддержка
--connectionвclickhouse-benchmarks. Как и вclickhouse-client, вы можете указать предопределённые соединения в клиентскомconfig.xml/config.yamlв секцииconnections_credentials, чтобы не указывать имя пользователя и пароль явным образом через аргументы командной строки. Добавлена поддержка--accept-invalid-certificateвclickhouse-benchmark. #87370 (Azat Khuzhin). - Теперь параметр
max_insert_threadsбудет применяться к таблицам Iceberg. #87407 (alesapin). - Добавлены гистограммные и многомерные метрики в
PrometheusMetricsWriter. Таким образом, обработчикPrometheusRequestHandlerбудет содержать все необходимые метрики и может использоваться для надежного сбора метрик с низкими накладными расходами в облачной среде. #87521 (Miсhael Stetsyuk). - Функция
hasTokenтеперь возвращает ноль совпадений для пустого токена (а ранее в таком случае выбрасывалось исключение). #87564 (Jimmy Aguilar Mena). - Добавлена поддержка текстового индекса для значений типов
ArrayиMap(mapKeysиmapValues). Поддерживаются функцииmapContainsKeyиhas. #87602 (Elmi Ahmadov). - Добавлена новая метрика
ZooKeeperSessionExpired, указывающая число истекших глобальных сессий ZooKeeper. #87613 (Miсhael Stetsyuk). - Используйте клиент хранилища S3 со специальными настройками для резервного копирования (например, backup_slow_all_threads_after_retryable_s3_error) для нативного копирования на стороне сервера в целевое хранилище бэкапа. Параметр s3_slow_all_threads_after_retryable_error объявлен устаревшим. #87660 (Julia Kartseva).
- Исправлена некорректная обработка настроек
max_joined_block_size_rowsиmax_joined_block_size_bytesпри сериализации плана запроса с экспериментальной функциейmake_distributed_plan. #87675 (Vladimir Cherkasov). - Настройка
enable_http_compressionтеперь включена по умолчанию. Это означает, что если клиент поддерживает HTTP-сжатие, сервер будет его использовать. Однако это изменение имеет некоторые недостатки. Клиент может запросить тяжёлый метод сжатия, такой какbzip2, что неразумно и увеличит потребление ресурсов сервером (но это будет заметно только при передаче больших результатов). Клиент может запроситьgzip, что не так уж плохо, но менее эффективно по сравнению сzstd. Исправление закрывает #71591. #87703 (Alexey Milovidov). - В
system.server_settingsдобавлена новая записьkeeper_hosts, в которой содержится список хостов [Zoo]Keeper, к которым ClickHouse может подключаться. #87718 (Nikita Mikhaylov). - Добавьте значения
fromиtoв системные дашборды, чтобы упростить проведение ретроспективных расследований. #87823 (Mikhail f. Shiryaev). - Добавлена дополнительная информация для отслеживания производительности в запросах SELECT к Iceberg. #87903 (Daniil Ivanik).
- Улучшение файлового кеша: совместное использование итератора приоритета кеша потоками, одновременно резервирующими место в кеше. #87914 (Kseniia Sumarokova).
- Добавлена возможность ограничивать запросы для
Keeper(настройкаmax_request_size, аналогичнаяjute.maxbufferдляZooKeeper, по умолчанию —OFFдля обратной совместимости; в следующих релизах значение будет изменено). #87952 (Azat Khuzhin). - Изменить
clickhouse-benchmark, чтобы он по умолчанию не включал трассировки стека в сообщения об ошибках. #87954 (Ahmed Gouda). - Избегайте использования асинхронной загрузки меток с использованием пула потоков (
load_marks_asynchronously=1), когда метки находятся в кэше (так как пул может быть перегружен, и запросы будут платить штраф по производительности, даже если метки уже находятся в кэше). #87967 (Azat Khuzhin). - Ytsaurus: разрешить создание таблиц, табличных функций и словарей с подмножеством столбцов. #87982 (MikhailBurdukov).
- Теперь
system.zookeeper_connection_logвключён по умолчанию, и его можно использовать для получения информации о сеансах Keeper. #88011 (János Benjamin Antal). - Унифицировано поведение TCP и HTTP при передаче дублирующихся внешних таблиц. HTTP позволяет передавать временную таблицу несколько раз. #88032 (Sema Checherinda).
- Удалены кастомные MemoryPools для чтения Arrow/ORC/Parquet. Этот компонент, по-видимому, больше не требуется после #84082, поскольку теперь мы в любом случае отслеживаем все выделения памяти. #88035 (Nikita Mikhaylov).
- Разрешено создавать базу данных
Replicatedбез аргументов. #88044 (Pervakov Grigorii). clickhouse-keeper-client: Добавлена поддержка подключения к TLS-порту clickhouse-keeper, имена флагов сохранены такими же, как в clickhouse-client. #88065 (Pradeep Chhetri).- Добавлено новое событие профилирования для отслеживания числа отклонений фонового слияния из-за превышения лимитов памяти. #88084 (Grant Holly).
- Включает анализатор для проверки выражений значений по умолчанию для столбцов в операторах CREATE/ALTER TABLE. #88087 (Max Justus Spransy).
- Внутреннее улучшение планировщика запросов: использование JoinStepLogical для
CROSS JOIN. #88151 (Vladimir Cherkasov). - Добавлены алиасы для функций
hasAnyTokens(hasAnyToken) иhasAllTokens(hasAllToken). #88162 (George Larionov). - По умолчанию включён глобальный профилировщик сэмплирования (то есть даже для серверных потоков, не связанных с запросами): собирать стеки вызовов всех потоков каждые 10 секунд по процессорному и реальному времени. #88209 (Alexander Tokmakov).
- Обновить Azure SDK, чтобы включить исправление для 'Content-Length', проявляющееся при операциях копирования и создания контейнеров. #88278 (Smita Kulkarni).
- Функция
lagсделана нечувствительной к регистру для совместимости с MySQL. #88322 (Lonny Kapelushnik). - Разрешен запуск
clickhouse-localиз каталогаclickhouse-server. В предыдущих версиях это приводило к ошибкеCannot parse UUID: .. Теперь можно запускатьclickhouse-localи работать с базами данных сервера без запуска самого сервера. #88383 (Alexey Milovidov). - Добавлен параметр конфигурации
keeper_server.coordination_settings.check_node_acl_on_remove. Если он включен, перед каждым удалением узла будут проверяться ACL как самого узла, так и родительского. В противном случае будет проверяться только ACL родительского узла. #88513 (Antonio Andelic). - Столбцы
JSONтеперь красиво форматируются при использовании форматаVertical. Закрывает #81794. #88524 (Frank Rosner). - Файлы
clickhouse-client(например, историю запросов) следует хранить в местах, описанных спецификацией XDG Base Directories, вместо корня домашнего каталога.~/.clickhouse-client-historyпо-прежнему будет использоваться, если этот файл уже существует. #88538 (Konstantин Богданов). - Исправлена утечка памяти из-за
GLOBAL IN(https://github.com/ClickHouse/ClickHouse/issues/88615). #88617 (pranavmehta94). - Добавлена перегрузка функций hasAny/hasAllTokens, принимающая строковый аргумент. #88679 (George Larionov).
- Добавлен шаг в postinstall-скрипт для
clickhouse-keeper, который включает его автозапуск при загрузке системы. #88746 (YenchangChan). - Учетные данные в веб-интерфейсе теперь проверяются только при вставке, а не при каждом нажатии клавиши. Это позволяет избежать проблемы с некорректно настроенными серверами LDAP. Закрывает #85777. #88769 (Alexey Milovidov).
- Ограничена длина сообщения об исключении при нарушении ограничения. В предыдущих версиях вы могли получить очень длинное сообщение об исключении при вставке очень длинной строки, и это сообщение в итоге попадало в
query_log. Закрывает #87032. #88801 (Alexey Milovidov). - Исправлено получение структуры набора данных с сервера ArrowFlight при создании таблицы. #87542 (Vitaly Baranov).
Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе)
- Исправлена проблема с GeoParquet, приводившая к ошибкам клиентского протокола. #84020 (Michael Kolupaev).
- Исправлено разрешение зависящих от хоста функций, таких как shardNum(), в подзапросах на узле-инициаторе. #84409 (Eduard Karacharov).
- Исправлена некорректная обработка дат до эпохи с дробными секундами в различных функциях работы с датой и временем, таких как
parseDateTime64BestEffort,change{Year,Month,Day}иmakeDateTime64. Ранее дробная часть секунд вычиталась из целых секунд, вместо того чтобы прибавляться к ним. Например,parseDateTime64BestEffort('1969-01-01 00:00:00.468')возвращала1968-12-31 23:59:59.532вместо1969-01-01 00:00:00.468. #85396 (xiaohuanlin). - Исправлена ошибка, из-за которой команды ALTER COLUMN IF EXISTS завершались сбоем, когда состояние столбца изменялось в пределах одного и того же запроса ALTER. Теперь команды DROP COLUMN IF EXISTS, MODIFY COLUMN IF EXISTS, COMMENT COLUMN IF EXISTS и RENAME COLUMN IF EXISTS корректно обрабатывают случаи, когда столбец был удалён предыдущей командой в том же запросе. #86046 (xiaohuanlin).
- Исправлен вывод типов Date/DateTime/DateTime64 для дат, выходящих за поддерживаемый диапазон. #86184 (Pavel Kruglov).
- Исправлена ошибка, из-за которой некоторые корректные пользовательские данные, отправленные в столбец
AggregateFunction(quantileDD), могли приводить к бесконечной рекурсии при слиянии. #86560 (Raphaël Thériault). - Добавлена поддержка типов JSON/Dynamic в таблице, создаваемой с помощью табличной функции
cluster. #86821 (Pavel Kruglov). - Исправлена недетерминированность результата функции, вычисляемой в CTE, в запросе. #86967 (Yakov Olkhovskiy).
- Исправлена ошибка LOGICAL_ERROR в EXPLAIN при использовании функции pointInPolygon на столбцах первичного ключа. #86971 (Michael Kolupaev).
- Исправлены таблицы озера данных, в имени которых содержится последовательность, закодированная в формате percent-encoding. Закрывает #86626. #87020 (Anton Ivashkin).
- Исправлено некорректное поведение оператора
IS NULLна nullable-столбцах вOUTER JOINпри включённомoptimize_functions_to_subcolumns, закрыт #78625. #87058 (Vladimir Cherkasov). - Исправлен некорректный учет освобождения временных данных при отслеживании лимита
max_temporary_data_on_disk_size, закрыт #87118. #87140 (JIaQi). - Функция checkHeaders теперь корректно проверяет переданные заголовки и отклоняет запрещённые. Изначальный автор: Michael Anastasakis (@michael-anastasakis). #87172 (Raúl Marín).
- Унифицирует поведение
toDateиtoDate32для всех числовых типов. Исправляет проверку на выход за нижнюю границу (underflow) для Date32 при приведении из int16. #87176 (Pervakov Grigorii). - Исправлена логическая ошибка при использовании параллельных реплик для запросов с несколькими операциями JOIN, в частности с RIGHT JOIN, следующим за LEFT/INNER JOIN. #87178 (Igor Nikonov).
- Учитывать настройку
input_format_try_infer_variantsв кэше определения схемы. #87180 (Pavel Kruglov). - Сделать так, чтобы pathStartsWith сопоставлял только пути, начинающиеся с заданного префикса. #87181 (Raúl Marín).
- Исправлены логические ошибки в виртуальном столбце
_row_numberи позиционированных удалениях в Iceberg. #87220 (Michael Kolupaev). - Исправлена логическая ошибка
LOGICAL_ERROR«Too large size passed to allocator» вJOIN, возникавшая из-за смешения константных и неконстантных блоков. #87231 (Azat Khuzhin). - Исправлены легковесные обновления с подзапросами, которые читают из других таблиц
MergeTree. #87285 (Anton Popov). - Исправлена оптимизация move-to-prewhere, которая не работала при наличии политик строк. Продолжение #85118. Закрывает #69777. Закрывает #83748. #87303 (Nikolai Kochetov).
- Исправлено применение патчей к столбцам с выражением по умолчанию, отсутствующим в частях данных. #87347 (Anton Popov).
- Исправлена ошибка сегментации при использовании повторяющихся имён столбцов секционирования в таблицах MergeTree. #87365 (xiaohuanlin).
- Исправлена проблема с обновлением EmbeddedRocksDB. #87392 (Raúl Marín).
- Исправлено прямое чтение из текстового индекса в объектном хранилище. #87399 (Anton Popov).
- Запрещено создание привилегии, использующей несуществующий движок. #87419 (Jitendra).
- Игнорировать только ошибки
not foundдляs3_plain_rewritable(так как это может привести к самым разным проблемам). #87426 (Azat Khuzhin). - Исправлены словари, использующие источник YTSaurus и макеты *range_hashed. #87490 (MikhailBurdukov).
- Исправлена ошибка при создании массива пустых кортежей. #87520 (Pavel Kruglov).
- Проверка наличия недопустимых столбцов при создании временной таблицы. #87524 (Pavel Kruglov).
- Никогда не указывайте столбцы партиций Hive в заголовке формата. Исправлена ошибка #87515. #87528 (Arthur Passos).
- Исправлена подготовка чтения данных из формата в DeltaLake при использовании текстового формата. #87529 (Pavel Kruglov).
- Исправлена проверка доступа при выполнении
SELECTиINSERTдля таблицBuffer. #87545 (pufit). - Запрещено создание индекса пропуска данных для таблицы S3. #87554 (Bharat Nallan).
- Предотвращена утечка отслеживаемой памяти при асинхронном логировании (могла приводить к значительному дрейфу: за 10 часов до ~100 GiB) и в text_log (мог наблюдаться почти такой же дрейф). #87584 (Azat Khuzhin).
- Исправлена ошибка, которая могла приводить к перезаписи глобальных настроек сервера настройками SELECT для представления или материализованного представления, если это представление удалялось асинхронно, а сервер перезапускался до завершения фоновой очистки. #87603 (Alexander Tokmakov).
- Исключать байты кэша страниц в пространстве пользователя (если возможно) при вычислении предупреждения о перегрузке по памяти. #87610 (Bharat Nallan).
- Исправлена ошибка, из-за которой некорректный порядок типов во время десериализации CSV приводил к
LOGICAL_ERROR. #87622 (Yarik Briukhovetskyi). - Исправлена ошибка некорректной обработки
command_read_timeoutдля исполняемых словарей. #87627 (Azat Khuzhin). - Исправлено некорректное поведение
SELECT * REPLACEв предложенииWHEREпри использовании нового анализатора при фильтрации по заменённым столбцам. #87630 (xiaohuanlin). - Исправлена двухуровневая агрегация при использовании
MergeповерхDistributed. #87687 (c-end). - Исправлена генерация выходного блока в алгоритме
HashJoin, когда список правых строк не используется. Исправляет #87401. #87699 (Dmitry Novik). - Режим чтения параллельных реплик мог быть выбран некорректно, если после анализа индекса не оставалось данных для чтения. Закрывает #87653. #87700 (zoomxi).
- Исправлена обработка столбцов типов
timestampиtimestamptzв Glue. #87733 (Andrey Zvonov). - Закрывает #86587. #87761 (scanhex12).
- Исправлена запись булевых значений в интерфейсе PostgreSQL. #87762 (Artem Yurov).
- Исправлена ошибка
unknown tableв запросеINSERT SELECTс CTE, #85368. #87789 (Guang Zhao). - Исправлено чтение подстолбца map, содержащего null, из Variant, который не может находиться внутри Nullable. #87798 (Pavel Kruglov).
- Исправлена обработка ошибки при сбое полного удаления базы данных в кластере на вторичном узле. #87802 (Tuan Pham Anh).
- Исправлено несколько ошибок в пропускающих индексах. #87817 (Raúl Marín).
- В AzureBlobStorage обновлено поведение: сначала выполняется нативное копирование, а при ошибке 'Unauthroized' выполняется чтение и запись (в AzureBlobStorage, если учетные записи хранилища для источника и назначения различаются, возникает ошибка 'Unauthorized'). Также исправлено применение параметра "use_native_copy", когда в конфигурации определен endpoint. #87826 (Smita Kulkarni).
- ClickHouse завершался с ошибкой, если файл ArrowStream содержал неуникальный словарь. #87863 (Ilya Golshtein).
- Исправлена фатальная ошибка при использовании approx_top_k и finalizeAggregation. #87892 (Jitendra).
- Исправлено слияние с проекциями при пустом последнем блоке. #87928 (Raúl Marín).
- Не удалять инъективные функции из GROUP BY, если типы их аргументов не допускаются в GROUP BY. #87958 (Pavel Kruglov).
- Исправление некорректного исключения гранул/разделов для ключей по дате/времени при использовании настройки
session_timezoneв запросах. #87987 (Eduard Karacharov). - Возвращает количество затронутых строк после выполнения запроса через интерфейс PostgreSQL. #87990 (Artem Yurov).
- Ограничивает использование оптимизации проталкивания фильтров для PASTE JOIN, поскольку это может приводить к некорректным результатам. #88078 (Yarik Briukhovetskyi).
- Применяет нормализацию URI перед выполнением проверки прав доступа, введённой в https://github.com/ClickHouse/ClickHouse/pull/84503. #88089 (pufit).
- Исправлена логическая ошибка в новом анализаторе, возникавшая, если ARRAY JOIN COLUMNS() не находил ни одного столбца. #88091 (xiaohuanlin).
- Исправлено предупреждение "High ClickHouse memory usage" (без учета page cache). #88092 (Azat Khuzhin).
- Исправлена возможная порча данных в таблицах
MergeTreeс заданным для столбцаTTL. #88095 (Anton Popov). - Исправлено потенциальное неперехваченное исключение при чтении
system.tablesпри наличии некорректных таблиц во внешних подключённых базах данных (PostgreSQL/SQLite/...). #88105 (Azat Khuzhin). - Исправлено падение в функциях
mortonEncodeиhilbertEncodeпри вызове с пустым кортежем в качестве аргумента. #88110 (xiaohuanlin). - Теперь запросы
ON CLUSTERбудут выполняться быстрее при наличии неактивных реплик в кластере. #88153 (alesapin). - Теперь DDL worker очищает набор реплик от устаревших хостов. Это уменьшит объём хранимых метаданных в ZooKeeper. #88154 (alesapin).
- Исправлена проблема с запуском ClickHouse без cgroups (случайно cgroups оказались обязательным требованием для асинхронных метрик). #88164 (Azat Khuzhin).
- Корректно выполнять откат операции перемещения директории в случае ошибки. Необходимо перезаписывать все объекты
prefix.path, изменённые во время выполнения, а не только корневой объект. #88198 (Mikhail Artemenko). - Исправлена передача флага
is_sharedвColumnLowCardinality. Это могло приводить к неверному результату операции GROUP BY, если в столбец вставлялось новое значение после того, как значения хеша уже были предварительно вычислены и закэшированы вReverseIndex. #88213 (Nikita Taranov). - Исправлен параметр рабочей нагрузки
max_cpu_share. Теперь его можно использовать без задания параметра рабочей нагрузкиmax_cpus. #88217 (Neerav). - Исправлена ошибка, из-за которой очень тяжёлые мутации с подзапросами могли зависать на этапе подготовки. Теперь такие мутации можно остановить с помощью
SYSTEM STOP MERGES. #88241 (alesapin). - Теперь коррелированные подзапросы работают с объектными хранилищами. #88290 (alesapin).
- Не пытайтесь инициализировать базы данных DataLake во время доступа к
system.projectionsиsystem.data_skipping_indices. #88330 (Azat Khuzhin). - Теперь каталоги даталейков будут отображаться в системных таблицах для интроспекции только в том случае, если параметр
show_data_lake_catalogs_in_system_tablesявно включён. #88341 (alesapin). - Исправлено поведение DatabaseReplicated, чтобы он учитывал параметр конфигурации
interserver_http_host. #88378 (xiaohuanlin). - Позиционные аргументы теперь явно отключены в контексте определения проекций, так как они не имеют смысла на данном внутреннем этапе запроса. Это исправляет #48604. #88380 (Amos Bird).
- Устранена квадратичная сложность в функции
countMatches. Закрывает #88400. #88401 (Alexey Milovidov). - Команды
ALTER COLUMN ... COMMENTдля таблиц KeeperMap теперь реплицируются, чтобы фиксироваться в метаданных базы данных Replicated и распространяться на все реплики. Закрывает #88077. #88408 (Eduard Karacharov). - Исправлен случай ложного срабатывания проверки циклической зависимости с материализованными представлениями в базе типа Database Replicated, который препятствовал добавлению новых реплик в базу данных. #88423 (Nikolay Degterinsky).
- Исправлена агрегация разрежённых столбцов при значении
group_by_overflow_mode=any. #88440 (Eduard Karacharov). - Исправлена ошибка «column not found» при использовании
query_plan_use_logical_join_step=0с несколькими предложениями FULL JOIN USING. Закрывает #88103. #88473 (Vladimir Cherkasov). - Большие кластеры с числом узлов > 10 имеют высокую вероятность сбоя операции восстановления с ошибкой
[941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 <Trace>: RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try again. Узелnum_hostsперезаписывается большим числом хостов одновременно. Исправление делает параметр, управляющий количеством попыток, динамическим. Закрывает #87721. #88484 (Mikhail f. Shiryaev). - Этот PR предназначен только для обеспечения совместимости с 23.8 и более ранними версиями. Проблема совместимости появилась из‑за этого PR: https://github.com/ClickHouse/ClickHouse/pull/54240 Этот SQL‑запрос завершится ошибкой при
enable_analyzer=0(до 23.8 он выполнялся нормально). #88491 (JIaQi). - Исправлена ошибка переполнения целого числа UBSAN в сообщении об ошибке
accurateCastпри преобразовании больших значений в DateTime. #88520 (xiaohuanlin). - Исправлен движок CoalescingMergeTree для кортежных типов. Это закрывает #88469. #88526 (scanhex12).
- Запретить удаления для
iceberg_format_version=1. Это закрывает #88444. #88532 (scanhex12). - Этот патч исправляет операцию перемещения на дисках
plain-rewritableдля каталогов произвольной глубины. #88586 (Mikhail Artemenko). - Исправлена поддержка SQL SECURITY DEFINER для функций *cluster. #88588 (Julian Maicher).
- Исправлен потенциальный сбой, возникавший при конкурентном изменении базовых константных столбцов PREWHERE. #88605 (Azat Khuzhin).
- Исправлено чтение из текстового индекса и включён кэш условий запроса (при включённых настройках
use_skip_indexes_on_data_readиuse_query_condition_cache). #88660 (Anton Popov). - Исключение
Poco::TimeoutException, выброшенное изPoco::Net::HTTPChunkedStreamBuf::readFromDevice, приводит к аварийному завершению процесса с сигналом SIGABRT. #88668 (Miсhael Stetsyuk). - Бэкпортировано в #88910: после восстановления реплика базы данных Replicated могла надолго зависать, выводя сообщения вида
Failed to marked query-0004647339 as finished (finished=No node, synced=No node), эта проблема исправлена. #88671 (Alexander Tokmakov). - Исправлено добавление записей в
system.zookeeper_connection_logв случае, когда ClickHouse подключается впервые после перезагрузки конфигурации. #88728 (Antonio Andelic). - Исправлена ошибка, из-за которой преобразование DateTime64 в Date при
date_time_overflow_behavior = 'saturate'могло приводить к некорректным результатам для значений вне диапазона при работе с часовыми поясами. #88737 (Manuel). - N-я попытка исправить ошибку «having zero bytes» в движке таблиц S3 с включённым кэшем. #88740 (Kseniia Sumarokova).
- Исправлена проверка прав доступа при выполнении запроса
SELECTдля табличной функцииloop. #88802 (pufit). - Перехватывайте исключения при сбоях асинхронного логирования, чтобы не допустить аварийного завершения программы. #88814 (Raúl Marín).
- Бэкпортировано в #89060: исправлена функция
top_k, чтобы учитывать пороговый параметр при вызове с одним аргументом. Закрывает #88757. #88867 (Manuel). - Перенесено в #88944: исправлена ошибка в функции
reverseUTF8. В предыдущих версиях она ошибочно переворачивала байты кодовых точек UTF-8 длиной 4 байта. Это закрывает #88913. #88914 (Alexey Milovidov). - Бэкпортировано в #88980: не выполнять проверку прав доступа
SET DEFINER <current_user>:definerпри создании представления с SQL SECURITY DEFINER. #88968 (pufit). - Бэкпортировано в #89058: исправлена ошибка
LOGICAL_ERRORвL2DistanceTransposed(vec1, vec2, p), при которой оптимизация частичного чтенияQBitнекорректно удалялаNullableиз возвращаемого типа, когда параметрpимел типNullable. #88974 (Raufs Dunamalijevs). - Бэкпортировано в #89167: исправлена ошибка, приводившая к сбою при неизвестном типе каталога. Исправляет #88819. #88987 (scanhex12).
- Бэкпортировано в #89028: исправлена деградация производительности при анализе пропускающих индексов. #89004 (Anton Popov).
Улучшения сборки/тестирования/упаковки
- Использовать библиотеку
postgresверсии 18.0. #87647 (Konstantin Bogdanov). - Включить ICU для FreeBSD. #87891 (Raúl Marín).
- Использовать SSE 4.2, когда применяется динамическая диспетчеризация на SSE 4.2, а не SSE 4. #88029 (Raúl Marín).
- Не требовать флаг
NO_ARMV81_OR_HIGHER, еслиSpeculative Store Bypass Safeнедоступен. #88051 (Konstantin Bogdanov). - Если ClickHouse собирается с
ENABLE_LIBFIU=OFF, функции, связанные с failpoint, превращаются в no-op и больше не могут влиять на производительность. ЗапросыSYSTEM ENABLE/DISABLE FAILPOINTв этом случае возвращают ошибкуSUPPORT_IS_DISABLED. #88184 (c-end).
Релиз ClickHouse 25.9, 2025-09-25
Несовместимое изменение
- Отключены бессмысленные бинарные операции с IPv4/IPv6: операции сложения/вычитания IPv4/IPv6 с типом, не являющимся целочисленным, теперь запрещены. Ранее они допускались с типами с плавающей запятой и приводили к логическим ошибкам с некоторыми другими типами (такими как DateTime). #86336 (Raúl Marín).
- Настройка
allow_dynamic_metadata_for_data_lakesобъявлена устаревшей. Теперь все таблицы Iceberg перед выполнением каждого запроса пытаются получить актуальную схему таблицы из хранилища. #86366 (Daniil Ivanik). - Изменён способ определения коалесцированного столбца из предложения
OUTER JOIN ... USING, чтобы сделать его более согласованным: ранее при выборе одновременно столбца из USING и квалифицированных столбцов (a, t1.a, t2.a) в OUTER JOIN столбец из USING ошибочно сопоставлялся сt1.a, показывая 0/NULL для строк из правой таблицы без соответствия слева. Теперь идентификаторы из предложения USING всегда сопоставляются с коалесцированным столбцом, а квалифицированные идентификаторы — с некоалесцированными столбцами, независимо от того, какие ещё идентификаторы присутствуют в запросе. Например: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) -- До: a=0, t1.a=0, t2.a=2 (неправильно — 'a' сопоставлён с t1.a) -- После: a=2, t1.a=0, t2.a=2 (правильно — 'a' коалесцирован). #80848 (Vladimir Cherkasov). - Увеличено окно дедупликации в реплицируемых таблицах до 10 000. Это полностью совместимо, но можно представить сценарии, когда такое изменение может привести к высокому потреблению ресурсов при большом количестве таблиц. #86820 (Sema Checherinda).
Новая возможность
- Теперь пользователи могут использовать NATS JetStream для потребления сообщений, задавая новые настройки
nats_streamиnats_consumerдля движка NATS. #84799 (Dmitry Novikov). - Добавлена поддержка аутентификации и SSL в табличной функции
arrowFlight. #87120 (Vitaly Baranov). - Добавлен новый параметр для движка таблицы
S3и табличной функцииs3с именемstorage_class_name, который позволяет указать режим Intelligent-Tiering, поддерживаемый AWS. Поддерживается как в формате ключ-значение, так и в позиционном (устаревшем) формате. #87122 (alesapin). ALTER UPDATEдля движка таблицы Iceberg. #86059 (scanhex12).- Добавлена системная таблица
iceberg_metadata_logдля получения файлов метаданных Iceberg во время выполнения запросов SELECT. #86152 (scanhex12). - Таблицы
IcebergиDeltaLakeподдерживают пользовательскую конфигурацию дисков через настройкуdiskна уровне хранилища. #86778 (scanhex12). - Добавлена поддержка Azure для дисков для озер данных. #87173 (scanhex12).
- Добавлена поддержка каталога
Unityповерх хранилища Azure Blob Storage. #80013 (Smita Kulkarni). - Добавлена поддержка дополнительных форматов (
ORC,Avro) при записи вIceberg. Это закрывает #86179. #87277 (scanhex12). - Добавлена новая системная таблица
database_replicasс информацией о репликах баз данных. #83408 (Konstantин Morозов). - Добавлена функция
arrayExcept, которая вычитает из одного массива (как множества) элементы другого. #82368 (Joanna Hulboj). - Добавлена новая таблица
system.aggregated_zookeeper_log. Таблица содержит статистику по операциям ZooKeeper (например, количество операций, средняя задержка, ошибки), сгруппированную по идентификатору сессии, родительскому пути и типу операции; данные периодически сбрасываются на диск. #85102 #87208 (Miсhael Stetsyuk). - Новая функция
isValidASCII. Возвращает 1, если входная строка или значение типа FixedString содержит только байты ASCII (0x00–0x7F), в противном случае — 0. Закрывает #85377. ... #85786 (rajat mohan). - Логические настройки могут указываться без аргументов, например,
SET use_query_cache;, что эквивалентно установке значения в true. #85800 (thraeka). - Новые параметры конфигурации:
logger.startupLevelиlogger.shutdownLevelпозволяют переопределять уровень логирования при запуске и завершении работы ClickHouse соответственно. #85967 (Lennard Eijsackers). - Агрегатные функции
timeSeriesChangesToGridиtimeSeriesResetsToGrid. Ведут себя аналогичноtimeSeriesRateToGrid, принимая параметры начальной и конечной меток времени, шага и окна look back, а также два аргумента для меток времени и значений, но при этом требуют как минимум одну выборку на окно вместо двух. Вычисляют PromQLchanges/resets, подсчитывая количество изменений или уменьшений значения выборки в указанном окне для каждой метки времени во временной сетке, определённой параметрами. Тип возвращаемого значения —Array(Nullable(Float64)). #86010 (Stephen Chi). - Позволяет пользователям создавать временные представления с синтаксисом, аналогичным синтаксису временных таблиц (
CREATE TEMPORARY VIEW). #86432 (Aly Kafoury). - В таблицу
system.warningsдобавлены предупреждения об использовании CPU и памяти. #86838 (Bharat Nallan). - Реализована поддержка индикатора
oneofво входных данныхProtobuf. Для указания наличия поля из oneof может использоваться специальный столбец. Если сообщение содержит oneof и установленinput_format_protobuf_oneof_presence, ClickHouse заполняет столбец, который указывает, какое поле oneof было найдено. #82885 (Ilya Golshtein). - Улучшено профилирование выделения памяти на основе внутреннего инструментария jemalloc. Глобальный профилировщик jemalloc теперь можно включить с помощью параметра конфигурации
jemalloc_enable_global_profiler. Выборочно отбираемые глобальные операции выделения и освобождения памяти могут сохраняться вsystem.trace_logс типомJemallocSampleпри включении параметра конфигурацииjemalloc_collect_global_profile_samples_in_trace_log. Профилирование jemalloc теперь можно включать для каждого запроса отдельно с помощью настройкиjemalloc_enable_profiler. Сохранение выборок вsystem.trace_logможно управлять по каждому запросу с помощью настройкиjemalloc_collect_profile_samples_in_trace_log. Обновлён jemalloc до более новой версии. #85438 (Antonio Andelic). - Новый параметр, который удаляет файлы при удалении таблиц Iceberg. Это закрывает #86211. #86501 (scanhex12).
Экспериментальные функции
- Инвертированный текстовый индекс был переработан с нуля, чтобы масштабироваться для наборов данных, которые не помещаются в оперативную память. #86485 (Anton Popov).
- Оптимизация порядка
JOINтеперь использует статистику. Функцию можно включить, установивallow_statistics_optimize = 1иquery_plan_optimize_join_order_limit = 10. #86822 (Han Fei). - Добавлена поддержка
alter table ... materialize statistics all, который материализует всю статистику таблицы. #87197 (Han Fei).
Повышение производительности
- Добавлена поддержка фильтрации частей данных с использованием skip-индексов при чтении для сокращения ненужных чтений индексов. Управляется новой настройкой
use_skip_indexes_on_data_read(по умолчанию выключена). Это решает проблему #75774. Также включает общую подготовительную работу, совместную с #81021. #81526 (Amos Bird). - Добавлена оптимизация порядка JOIN, которая может автоматически переупорядочивать JOIN для повышения производительности (управляется настройкой
query_plan_optimize_join_order_limit). Обратите внимание, что оптимизация порядка JOIN в настоящее время имеет ограниченную поддержку статистики и в основном опирается на оценки количества строк от движков хранения — более продвинутый сбор статистики и оценка кардинальности будут добавлены в будущих релизах. Если после обновления вы сталкиваетесь с проблемами с запросами JOIN, вы можете временно отключить новую реализацию, установивSET query_plan_use_new_logical_join_step = 0, и сообщить о проблеме для дальнейшего расследования. Примечание о разрешении идентификаторов из предложения USING: Изменено разрешение объединённого столбца из предложенияOUTER JOIN ... USINGдля большей согласованности: ранее при выборе и столбца из USING, и квалифицированных столбцов (a, t1.a, t2.a) в OUTER JOIN столбец из USING ошибочно разрешался вt1.a, показывая 0/NULL для строк из правой таблицы без соответствия в левой. Теперь идентификаторы из предложения USING всегда разрешаются в объединённый (coalesced) столбец, в то время как квалифицированные идентификаторы разрешаются в необъединённые столбцы, независимо от того, какие ещё идентификаторы присутствуют в запросе. Например: SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) -- Раньше: a=0, t1.a=0, t2.a=2 (некорректно — 'a' разрешён в t1.a) -- Теперь: a=2, t1.a=0, t2.a=2 (корректно — 'a' объединён). #80848 (Vladimir Cherkasov). - Распределённый
INSERT SELECTдля озёр данных. #86783 (scanhex12). - Улучшена оптимизация PREWHERE для условий вида
func(primary_column) = 'xx'иcolumn in (xxx). #85529 (李扬). - Реализовано преобразование JOIN: 1. Преобразовывать
LEFT ANY JOINиRIGHT ANY JOINвSEMI/ANTIJOIN, если условие фильтра всегда ложно для совпавших или несовпавших строк. Эта оптимизация управляется новым параметромquery_plan_convert_any_join_to_semi_or_anti_join. 2. ПреобразовыватьFULL ALL JOINвLEFT ALLилиRIGHT ALLJOIN, если условие фильтра всегда ложно для несовпавших строк с одной из сторон соединения. #86028 (Dmitry Novik). - Повышена производительность вертикальных слияний после выполнения операции lightweight delete. #86169 (Anton Popov).
- Производительность
HashJoinнемного улучшена в случаеLEFT/RIGHTJOIN с большим количеством несоответствующих строк. #86312 (Nikita Taranov). - Поразрядная сортировка (radix sort): помогает компилятору эффективнее использовать SIMD и выполнять более эффективную предвыборку данных (prefetching). Использует динамическую диспетчеризацию для программной предвыборки только на процессорах Intel. Продолжение работы @taiyang-li в https://github.com/ClickHouse/ClickHouse/pull/77029. #86378 (Raúl Marín).
- Повышает производительность коротких запросов с большим количеством фрагментов в таблицах (за счет оптимизации
MarkRangesс использованиемdevectorвместоdeque). #86933 (Azat Khuzhin). - Улучшена производительность применения патч-частей в режиме JOIN. #87094 (Anton Popov).
- Добавлена настройка
query_condition_cache_selectivity_threshold(значение по умолчанию: 1.0), которая не помещает в кэш условий запроса результаты сканирования предикатов с низкой селективностью. Это позволяет уменьшить потребление памяти кэшем условий запроса ценой более низкого коэффициента попаданий в кэш. #86076 (zhongyuankai). - Уменьшено потребление памяти при записи в Iceberg. #86544 (scanhex12).
Улучшение
- Добавлена поддержка записи нескольких файлов данных в Iceberg в рамках одной операции вставки. Добавлены новые настройки
iceberg_insert_max_rows_in_data_fileиiceberg_insert_max_bytes_in_data_fileдля управления ограничениями. #86275 (scanhex12). - Добавлены ограничения на количество строк/байтов для создаваемых при вставке файлов данных в Delta Lake. Ограничения задаются настройками
delta_lake_insert_max_rows_in_data_fileиdelta_lake_insert_max_bytes_in_data_file. #86357 (Kseniia Sumarokova). - Добавлена поддержка большего числа типов данных для партиционирования при записи в Iceberg. Тем самым закрывается #86206. #86298 (scanhex12).
- Сделать стратегию повторных попыток для S3 настраиваемой и добавить возможность горячей перезагрузки настроек диска S3 при изменении XML-файла конфигурации. #82642 (RinChanNOW).
- Улучшен табличный движок S3(Azure)Queue, чтобы он продолжал работать при потере соединения с ZooKeeper без риска появления дубликатов. Требуется включить настройку S3Queue
use_persistent_processing_nodes(ее можно изменить с помощьюALTER TABLE MODIFY SETTING). #85995 (Kseniia Sumarokova). - Вы можете использовать параметры запроса после ключевого слова
TOпри создании материализованного представления, например:CREATE MATERIALIZED VIEW mv TO {to_table:Identifier} AS SELECT * FROM src_table. #84899 (Diskein). - Выводить более понятные инструкции пользователям при указании некорректных настроек для движка таблицы
Kafka2. #83701 (János Benjamin Antal). - Теперь нельзя указывать часовые пояса для типа
Time(в этом не было смысла). #84689 (Yarik Briukhovetskyi). - Упростили логику, связанную с разбором Time/Time64 в режиме
best_effort, и устранили некоторые ошибки. #84730 (Yarik Briukhovetskyi). - Добавлена функция
deltaLakeAzureCluster(аналогичнаяdeltaLakeAzureдля кластерного режима) и функцияdeltaLakeS3Cluster(псевдонимdeltaLakeCluster). Устраняет проблему #85358. #85547 (Smita Kulkarni). - Применять настройку
azure_max_single_part_copy_sizeдля обычных операций копирования так же, как и для резервного копирования. #85767 (Ilya Golshtein). - Замедлена работа потоков клиента S3 при повторяемых ошибках в хранилище объектов S3. Теперь действие предыдущего параметра
backup_slow_all_threads_after_retryable_s3_errorраспространено на диски S3, а сам параметр переименован в более общийs3_slow_all_threads_after_retryable_error. #85918 (Julia Kartseva). - Настройки allow_experimental_variant/dynamic/json и enable_variant/dynamic/json помечены как устаревшие. Теперь все три типа включены безусловно. #85934 (Pavel Kruglov).
- Реализована поддержка фильтрации по полному URL-адресу (директива
full_url) вhttp_handlers(включая схему и host:port). #86155 (Azat Khuzhin). - Добавлена новая настройка
allow_experimental_delta_lake_writes. #86180 (Kseniia Sumarokova). - Исправлено обнаружение systemd в скрипте init.d (исправлена проверка «Install packages»). #86187 (Azat Khuzhin).
- Добавлена новая размерная метрика
startup_scripts_failure_reason. Эта метрика нужна, чтобы различать разные типы ошибок, приводящих к сбою скриптов запуска. В частности, для целей оповещения необходимо различать временные (например,MEMORY_LIMIT_EXCEEDEDилиKEEPER_EXCEPTION) и постоянные ошибки. #86202 (Miсhael Stetsyuk). - Добавлена возможность опускать функцию
identityдля раздела (partition) таблицы Iceberg. #86314 (scanhex12). - Добавлена возможность включать JSON-логирование только для конкретного канала: для этого установите параметр
logger.formatting.channelв одно из следующих значений:syslog/console/errorlog/log. #86331 (Azat Khuzhin). - Теперь можно использовать нативные числа в
WHERE. Они уже допускаются в качестве аргументов логических функций. Это упрощает оптимизации filter-push-down и move-to-prewhere. #86390 (Nikolai Kochetov). - Исправлена ошибка при выполнении
SYSTEM DROP REPLICAдля каталога с повреждёнными метаданными. #86391 (Nikita Mikhaylov). - Добавлены дополнительные попытки повторной проверки доступа к диску (
skip_access_check = 0) в Azure, поскольку предоставление доступа может занимать довольно много времени. #86419 (Alexander Tokmakov). - Интервал устаревания в функциях
timeSeries*()теперь левосторонне открыт и правосторонне закрыт. #86588 (Vitaly Baranov). - Добавлены события профилирования
FailedInternal*Query. #86627 (Shane Andrade). - Исправлена обработка пользователей с точкой в имени пользователя при добавлении через конфигурационный файл. #86633 (Mikhail Koviazin).
- Добавлена асинхронная метрика использования памяти в запросах (
QueriesMemoryUsageиQueriesPeakMemoryUsage). #86669 (Azat Khuzhin). - Вы можете использовать флаг
clickhouse-benchmark --preciseдля более точного измерения QPS и других метрик по интервалам. Это помогает получать стабильные значения QPS в случаях, когда длительность запросов сопоставима с интервалом отчетности--delay D. #86684 (Sergei Trifonov). - Сделать значения nice для потоков Linux настраиваемыми, чтобы можно было назначать отдельным потокам (слияние/мутация, запрос, материализованное представление, клиент ZooKeeper) более высокий или более низкий приоритет. #86703 (Miсhael Stetsyuk).
- Исправлена вводящая в заблуждение ошибка «specified upload does not exist», возникающая, когда исходное исключение теряется в ходе многокомпонентной загрузки из‑за условия гонки. #86725 (Julia Kartseva).
- Ограничено описание плана запроса в запросе
EXPLAIN. Описание больше не вычисляется для других запросов, кромеEXPLAIN. Добавлена настройкаquery_plan_max_step_description_length. #86741 (Nikolai Kochetov). - Добавлена возможность настраивать очередь ожидающих сигналов, чтобы снизить вероятность ошибки CANNOT_CREATE_TIMER (для профилировщиков запросов,
query_profiler_real_time_period_ns/query_profiler_cpu_time_period_ns). Также добавлен сборSigQиз/proc/self/statusдля интроспекции (еслиProcessSignalQueueSizeблизко кProcessSignalQueueLimit, то, скорее всего, будут возникать ошибкиCANNOT_CREATE_TIMER). #86760 (Azat Khuzhin). - Повышена производительность операции
RemoveRecursiveв Keeper. #86789 (Antonio Andelic). - Удалены лишние пробелы в
PrettyJSONEachRowпри выводе данных типа JSON. #86819 (Pavel Kruglov). - Теперь записываем размеры блобов для
prefix.pathпри удалении директории на обычном перезаписываемом диске. #86908 (alesapin). - Добавлена поддержка тестов производительности для удалённых экземпляров ClickHouse, включая ClickHouse Cloud. Пример использования:
tests/performance/scripts/perf.py tests/performance/math.xml --runs 10 --user <username> --password <password> --host <hostname> --port <port> --secure. #86995 (Raufs Dunamalijevs). - Соблюдать лимиты памяти в местах, где заведомо выделяется значительный (>16MiB) объем памяти (сортировка, асинхронные вставки, файловый лог). #87035 (Azat Khuzhin).
- Выбрасывать исключение, если при установке параметра
network_compression_methodуказан неподдерживаемый универсальный кодек. #87097 (Robert Schulze). - Системная таблица
system.query_cacheтеперь возвращает все записи кэша результатов запросов, тогда как ранее она возвращала только общие записи или необщие записи того же пользователя и роли. Это корректно, поскольку необщие записи не должны раскрывать результаты запросов, тогда какsystem.query_cacheвозвращает строки запросов. Это делает поведение системной таблицы более похожим наsystem.query_log. #87104 (Robert Schulze). - Включено укороченное вычисление для функции
parseDateTime. #87184 (Pavel Kruglov). - Добавлен новый столбец
statisticsвsystem.parts_columns. #87259 (Han Fei).
Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе)
- Результаты alter-запросов теперь проверяются только на узле-инициаторе для реплицируемых баз данных и таблиц с внутренней репликацией. Это устранит ситуации, когда уже зафиксированный alter-запрос мог зависать на других узлах. #83849 (János Benjamin Antal).
- Ограничивает количество задач каждого типа в
BackgroundSchedulePool. Позволяет избежать ситуаций, когда все слоты заняты задачами одного типа, а задачи других типов простаивают. Также предотвращает взаимоблокировки, когда задачи ожидают друг друга. Управляется серверной настройкойbackground_schedule_pool_max_parallel_tasks_per_type_ratio. #84008 (Alexander Tokmakov). - Корректно завершайте работу таблиц при восстановлении реплики базы данных. Некорректное завершение приведёт к ошибке LOGICAL_ERROR для некоторых движков таблиц. #84744 (Antonio Andelic).
- Проверять права доступа при генерации подсказок по исправлению опечаток в имени базы данных. #85371 (Dmitry Novik).
-
- LowCardinality для столбцов hive 2. Заполнять столбцы hive перед виртуальными столбцами (требуется для https://github.com/ClickHouse/ClickHouse/pull/81040) 3. LOGICAL_ERROR при пустом формате для hive #85528 4. Проверять, что столбцы партиционирования hive являются единственными столбцами 5. Проверять, что все столбцы hive указаны в схеме 6. Частично исправить работу parallel_replicas_cluster с hive 7. Использовать упорядоченный контейнер в extractkeyValuePairs для hive utils (требуется для https://github.com/ClickHouse/ClickHouse/pull/81040). #85538 (Arthur Passos).
- Предотвращена ненужная оптимизация первого аргумента в функциях
IN, иногда приводившая к ошибкам при использовании отображения массивов (array mapping). #85546 (Yakov Olkhovskiy). - Отображение между идентификаторами источника Iceberg и именами Parquet не было скорректировано в соответствии со схемой при записи файла Parquet. В этом PR схема обрабатывается отдельно для каждого файла данных Iceberg, а не используется текущая. #85829 (Daniil Ivanik).
- Исправлено раздельное определение размера файла и его открытие. Связано с https://github.com/ClickHouse/ClickHouse/pull/33372, который был внесён в ответ на ошибку в ядрах Linux версий до
5.10. #85837 (Konstantin Bogdanov). - ClickHouse Keeper больше не завершается с ошибкой при запуске на системах, где IPv6 отключён на уровне ядра (например, RHEL с ipv6.disable=1). Теперь он пытается перейти на IPv4-слушатель, если не удалось запустить исходный IPv6-слушатель. #85901 (jskong1124).
- Этот PR закрывает #77990. Добавлена поддержка TableFunctionRemote для параллельных реплик в globalJoin. #85929 (zoomxi).
- Исправлено разыменование нулевого указателя в orcschemareader::initializeifneeded(). Этот PR устраняет следующую проблему: #85292 ### запись в документации об изменениях, заметных пользователю. #85951 (yanglongwei).
- Добавлена проверка, разрешающая использовать коррелированные подзапросы в предложении FROM только если они используют столбцы из внешнего запроса. Исправляет #85469. Исправляет #85402. #85966 (Dmitry Novik).
- Исправлена работа ALTER UPDATE для столбца с подстолбцом, используемым в материализованном выражении другого столбца. Ранее такой материализованный столбец с подстолбцом в выражении обновлялся некорректно. #85985 (Pavel Kruglov).
- Запрещено изменять столбцы, если их подстолбцы используются в PK или выражении партиционирования. #86005 (Pavel Kruglov).
- Исправлена ошибка чтения подстолбцов при использовании нестандартного режима сопоставления столбцов в хранилище DeltaLake. #86064 (Kseniia Sumarokova).
- Исправлено использование некорректных значений по умолчанию для пути при подсказке Enum в JSON. #86065 (Pavel Kruglov).
- Разбор URL каталога Hive в DataLake с санитизацией входных данных. Закрывает #86018. #86092 (rajat mohan).
- Исправлена логическая ошибка при динамическом изменении размера кэша файловой системы. Закрывает #86122. Закрывает https://github.com/ClickHouse/clickhouse-core-incidents/issues/473. #86130 (Kseniia Sumarokova).
- Используйте
NonZeroUInt64для параметраlogs_to_keepв DatabaseReplicatedSettings. #86142 (Tuan Pham Anh). - Исключение возникало при выполнении запроса
FINALс пропускающим индексом (skip index), если таблица (например,ReplacingMergeTree) была создана с настройкойindex_granularity_bytes = 0. Теперь эта проблема устранена. #86147 (Shankar Iyer). - Устраняет неопределённое поведение (UB) и исправляет проблемы с разбором выражения секционирования в Iceberg. #86166 (Daniil Ivanik).
- Исправлено падение при одновременном использовании константных и неконстантных блоков в одном INSERT. #86230 (Azat Khuzhin).
- По умолчанию при создании дисков из SQL обрабатываются директивы include из
/etc/metrika.xml. #86232 (alekar). - Исправлена работа accurateCastOrNull/accurateCastOrDefault при приведении значений типа String к JSON. #86240 (Pavel Kruglov).
- Добавлена поддержка каталогов без '/' в движке Iceberg. #86249 (scanhex12).
- Исправлена ошибка, приводившая к сбою при использовании replaceRegex с haystack типа FixedString и пустой needle. #86270 (Raúl Marín).
- Исправлено аварийное завершение при
ALTER UPDATE Nullable(JSON). #86281 (Pavel Kruglov). - Исправлено отсутствие определения столбца в system.tables. #86295 (Raúl Marín).
- Исправлено приведение типов из LowCardinality(Nullable(T)) к Dynamic. #86365 (Pavel Kruglov).
- Исправлена логическая ошибка при записи в Delta Lake. Закрывает #86175. #86367 (Kseniia Sumarokova).
- Исправлена ошибка
416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resourceпри чтении пустых blob-объектов из Azure Blob Storage для диска plain_rewritable. #86400 (Julia Kartseva). - Исправлена работа GROUP BY с Nullable(JSON). #86410 (Pavel Kruglov).
- Исправлена ошибка в материализованных представлениях: материализованное представление могло не работать, если его создать, удалить, а затем снова создать с тем же именем. #86413 (Alexander Tokmakov).
- Выдавать ошибку, если при чтении из функций *cluster все реплики недоступны. #86414 (Julian Maicher).
- Устранена утечка
MergesMutationsMemoryTracking, возникавшая из-за таблицBuffer, и исправленquery_views_logдля потоковой загрузки изKafka(и других источников). #86422 (Azat Khuzhin). - Исправлена работа SHOW TABLES после удаления таблицы-справочника хранилища Alias. #86433 (RinChanNOW).
- Исправлено отсутствие заголовка чанка при включённом параметре send_chunk_header и вызове UDF по протоколу HTTP. #86469 (Vladimir Cherkasov).
- Исправлена потенциальная взаимная блокировка при включённом сбросе профиля jemalloc. #86473 (Azat Khuzhin).
- Исправлено чтение подстолбцов в движке таблицы DeltaLake. Закрывает #86204. #86477 (Kseniia Sumarokova).
- Корректная обработка идентификатора loopback-хоста для предотвращения коллизий при обработке DDL-задач: #86479 (Tuan Pham Anh).
- Исправлена работа операций detach/attach для таблиц движка базы данных PostgreSQL с числовыми и десятичными столбцами. #86480 (Julian Maicher).
- Исправлено использование неинициализированной памяти в функции getSubcolumnType. #86498 (Raúl Marín).
- Функции
searchAnyиsearchAllпри вызове с пустыми образцами теперь возвращаютtrue(то есть «совпадает со всем»). Ранее они возвращалиfalse. (issue #86300). #86500 (Elmi Ahmadov). - Исправлена работа функции
timeSeriesResampleToGridWithStaleness()в случае отсутствия значения в первом бакете. #86507 (Vitaly Baranov). - Исправлен сбой, возникавший при значении
merge_tree_min_read_task_size, равном 0. #86527 (yanglongwei). - При чтении формат для каждого файла данных теперь берётся из метаданных Iceberg (раньше — из аргументов таблицы). #86529 (Daniil Ivanik).
- Игнорировать исключения при сбросе логов во время завершения работы и сделать завершение более безопасным (чтобы избежать SIGSEGV). #86546 (Azat Khuzhin).
- Исправлена ошибка в движке базы данных Backup, приводившая к возникновению исключения при запросе с файловыми частями нулевого размера. #86563 (Max Justus Spransy).
- Исправлено отсутствие заголовка чанка при включённом send_chunk_header и вызове UDF по протоколу HTTP. #86606 (Vladimir Cherkasov).
- Исправлена логическая ошибка S3Queue "Expected current processor to be equal to ", возникавшая из-за истечения сессии Keeper. #86615 (Kseniia Sumarokova).
- Ошибки, связанные с
Nullable, при вставке данных и отсечении. Закрывает #86407. #86630 (scanhex12). - Не отключайте кэш файловой системы, если отключён кэш метаданных Iceberg. #86635 (Daniil Ivanik).
- Исправлена ошибка «Deadlock in Parquet::ReadManager (single-threaded)» в Parquet reader v3. #86644 (Michael Kolupaev).
- Исправлена поддержка IPv6 в
listen_hostдля ArrowFlight. #86664 (Vitaly Baranov). - Исправлено завершение работы обработчика
ArrowFlight. Этот PR исправляет #86596. #86665 (Vitaly Baranov). - Исправлены распределённые запросы с
describe_compact_output=1. #86676 (Azat Khuzhin). - Исправлены разбор определения окон и применение параметров запроса. #86720 (Azat Khuzhin).
- Исправлено исключение
Partition strategy wildcard can not be used without a '_partition_id' wildcard.при создании таблицы сPARTITION BY, но без подстановочного символа для партиционирования, что раньше работало в версиях до 25.8. Закрывает https://github.com/ClickHouse/clickhouse-private/issues/37567. #86748 (Kseniia Sumarokova). - Исправлена ошибка LogicalError, возникающая, если параллельные запросы пытаются получить одну и ту же блокировку. #86751 (Pervakov Grigorii).
- Исправлена запись значения NULL в общие JSON-данные во входном формате RowBinary и добавлены дополнительные проверки в ColumnObject. #86812 (Pavel Kruglov).
- Исправлена проблема с перестановкой пустого Tuple с LIMIT. #86828 (Pavel Kruglov).
- Не используйте отдельный узел Keeper для persistent-узлов обработки. Исправление для https://github.com/ClickHouse/ClickHouse/pull/85995. Закрывает #86406. #86841 (Kseniia Sumarokova).
- Исправлена проблема, из-за которой таблица с движком TimeSeries нарушала создание новой реплики в реплицируемой базе данных. #86845 (Nikolay Degterinsky).
- Исправлена обработка запросов к
system.distributed_ddl_queueв случаях, когда в задачах отсутствуют некоторые узлы Keeper. #86848 (Antonio Andelic). - Исправлено позиционирование в конце декомпрессированного блока. #86906 (Pavel Kruglov).
- Обработка исключения, выбрасываемого при асинхронном выполнении итератора Iceberg. #86932 (Daniil Ivanik).
- Исправлено сохранение крупных предварительно обработанных XML-конфигураций. #86934 (c-end).
- Исправлено заполнение поля date в таблице system.iceberg_metadata_log. #86961 (Daniil Ivanik).
- Исправлен бесконечный пересчёт
TTLсWHERE. #86965 (Anton Popov). - Исправлен потенциально некорректный результат функции
uniqExactс модификаторамиROLLUPиCUBE. #87014 (Nikita Taranov). - Исправлено определение схемы таблицы с помощью табличной функции
url()при значении настройкиparallel_replicas_for_cluster_functions, установленном в 1. #87029 (Konstantin Bogdanov). - Корректно выполняется приведение типа результата
PREWHEREпосле разбиения на несколько шагов. #87040 (Antonio Andelic). - Исправлена работа легковесных обновлений с клаузой
ON CLUSTER. #87043 (Anton Popov). - Исправлена совместимость некоторых состояний агрегатных функций с аргументом типа String. #87049 (Pavel Kruglov).
- Исправляет ошибку, из-за которой имя модели OpenAI не передавалось дальше. #87100 (Kaushik Iska).
- EmbeddedRocksDB: Путь должен указывать на расположение внутри user_files. #87109 (Raúl Marín).
- Исправлена проблема с таблицами KeeperMap, созданными до версии 25.1, которые оставляли данные в ZooKeeper после выполнения запроса DROP. #87112 (Nikolay Degterinsky).
- Исправлена обработка идентификаторов полей карт и массивов при чтении Parquet. #87136 (scanhex12).
- Исправлено чтение массива с подколонкой размеров массива при ленивой материализации. #87139 (Pavel Kruglov).
- Исправлена работа функции CASE с аргументами типа Dynamic. #87177 (Pavel Kruglov).
- Исправлена обработка пустого массива при чтении из пустой строки в CSV. #87182 (Pavel Kruglov).
- Исправлена потенциальная ошибка, из-за которой некоррелированный
EXISTSмог возвращать некорректный результат. Ошибка появилась с параметромexecute_exists_as_scalar_subquery=1, который был добавлен в https://github.com/ClickHouse/ClickHouse/pull/85481 и влияет на версию25.8. Исправляет #86415. #87207 (Nikolai Kochetov). - Выбрасывает ошибку, если iceberg_metadata_log не настроен, но пользователь пытается получить отладочную информацию о метаданных Iceberg. Исправляет обращение к nullptr. #87250 (Daniil Ivanik).
Улучшения сборки/тестирования/упаковки
- Исправлена совместимость с abseil-cpp 20250814.0, https://github.com/abseil/abseil-cpp/issues/1923. #85970 (Yuriy Chernyshov).
- Сборка автономного WASM-лексера теперь управляется флагом. #86505 (Konstantin Bogdanov).
- Исправлена сборка crc32c на старых ARM CPU без поддержки инструкции
vmull_p64. #86521 (Pablo Marcos). - Используется
openldap2.6.10. #86623 (Konstantin Bogdanov). - Не перехватывать
memalignна darwin. #86769 (Konstantin Bogdanov). - Используется
krb51.22.1-final. #86836 (Konstantin Bogdanov). - Исправлена распаковка имён Rust crate в
list-licenses.sh. #87305 (Konstantin Bogdanov).
Релиз ClickHouse 25.8 LTS, 2025-08-28
Обратно несовместимые изменения
- Выводить
Array(Dynamic)вместо безымянногоTupleдля массивов значений с разными типами в JSON. Чтобы использовать предыдущее поведение, отключите настройкуinput_format_json_infer_array_of_dynamic_from_array_of_different_types. #80859 (Pavel Kruglov). - Перевести метрики задержек S3 в гистограммы для однородности и упрощения. #82305 (Miсhael Stetsyuk).
- Требовать обратные кавычки вокруг идентификаторов с точками в выражениях по умолчанию (DEFAULT), чтобы предотвратить их разбор как составных идентификаторов. #83162 (Pervakov Grigorii).
- Ленивую материализацию включать только при использовании analyzer (это поведение по умолчанию), чтобы избежать необходимости поддерживать режим без analyzer, который, по нашему опыту, имеет некоторые проблемы (например, при использовании
indexHint()в условиях). #83791 (Igor Nikonov). - По умолчанию записывать значения типа
EnumкакBYTE_ARRAYс логическим типомENUMв формате вывода Parquet. #84169 (Pavel Kruglov). - Включить настройку MergeTree
write_marks_for_substreams_in_compact_partsпо умолчанию. Она существенно улучшает производительность чтения подстолбцов из вновь создаваемых Compact‑частей. Серверы версии ниже 25.5 не смогут читать новые Compact‑части. #84171 (Pavel Kruglov). - Предыдущее значение по умолчанию для
concurrent_threads_schedulerбылоround_robin, которое оказалось несправедливым при большом количестве однопоточных запросов (например, INSERT). Это изменение устанавливает более безопасный планировщикfair_round_robinзначением по умолчанию. #84747 (Sergei Trifonov). - ClickHouse поддерживает синтаксис heredoc в стиле PostgreSQL:
$tag$ string contents... $tag$, также известный как строковые литералы с долларовым квотированием (dollar-quoted string literals). В предыдущих версиях было меньше ограничений на теги: они могли содержать произвольные символы, включая знаки пунктуации и пробелы. Это приводит к неоднозначности разбора с идентификаторами, которые также могут начинаться с символа доллара. При этом PostgreSQL разрешает использовать в тегах только символьные (word) символы. Для решения проблемы мы теперь ограничиваем теги heredoc только символьными (word) символами. Закрывает #84731. #84846 (Alexey Milovidov). - Функции
azureBlobStorage,deltaLakeAzureиicebergAzureбыли обновлены для корректной проверки привилегийAZURE. Все кластерные варианты функций (функции-Cluster) теперь проверяют привилегии относительно соответствующих некластерных версий. Дополнительно функцииicebergLocalиdeltaLakeLocalтеперь применяют проверки привилегийFILE. #84938 (Nikita Mikhaylov). - Включить настройку
allow_dynamic_metadata_for_data_lakes(настройка на уровне движка таблиц) по умолчанию. #85044 (Daniil Ivanik). - По умолчанию отключить заключение в кавычки 64‑битных целых чисел в форматах JSON. #74079 (Pavel Kruglov)
Новая возможность
- Добавлена базовая поддержка диалекта PromQL. Чтобы использовать его, задайте
dialect='promql'в clickhouse-client, укажите таблицу TimeSeries с помощью настройкиpromql_table_name='X'и выполняйте запросы видаrate(ClickHouseProfileEvents_ReadCompressedBytes[1m])[5m:1m]. Также можно обернуть запрос PromQL в SQL:SELECT * FROM prometheusQuery('up', ...);. На данный момент поддерживаются только функцииrate,deltaиincrease. Унарные и бинарные операторы пока не поддерживаются. HTTP API пока нет. #75036 (Vitaly Baranov). - Генерация SQL с помощью ИИ теперь, при их наличии, может автоматически определять из окружения переменные ANTHROPIC_API_KEY и OPENAI_API_KEY, чтобы обеспечить возможность использования этой функции в режиме «нулевой конфигурации». #83787 (Kaushik Iska).
- Реализована поддержка протокола ArrowFlight RPC за счет добавления новой табличной функции
arrowflight. #74184 (zakr600). - Теперь все таблицы поддерживают виртуальный столбец
_table(не только таблицы с движкомMerge), что особенно полезно для запросов с операцией UNION ALL. #63665 (Xiaozhe Yu). - Разрешено использование любой политики хранения (например, объектного хранилища, такого как S3) для внешней агрегации/сортировки. #84734 (Azat Khuzhin).
- Реализована поддержка аутентификации в AWS S3 с явным указанием роли IAM. Реализована поддержка OAuth для GCS. До недавнего времени эти возможности были доступны только в ClickHouse Cloud, теперь они открыты в виде open source. Синхронизированы некоторые интерфейсы, такие как сериализация параметров подключения для объектных хранилищ. #84011 (Alexey Milovidov).
- Добавлена поддержка удалений по позициям (position deletes) для Iceberg TableEngine. #83094 (Daniil Ivanik).
- Реализована поддержка операций Iceberg Equality Deletes. #85843 (Han Fei).
- Запись в Iceberg при выполнении CREATE. Закрывает #83927. #83983 (Konstantин Vedernikov).
- Каталоги Glue для записи. #84136 (Konstantin Vedernikov).
- Каталоги REST Iceberg для записи. #84684 (Konstantin Vedernikov).
- Объединить все файлы позиционных удалений (position delete) формата Iceberg в файлы с данными. Это сократит количество и размер файлов Parquet в хранилище Iceberg. Синтаксис:
OPTIMIZE TABLE table_name. #85250 (Konstantin Vedernikov). - Реализована поддержка оператора
DROP TABLEдля Iceberg (удаление из каталогов REST/Glue и связанных с таблицей метаданных). #85395 (Konstantin Vedernikov). - Поддержка мутаций
ALTER DELETEдля Iceberg в формате merge-on-read. #85549 (Konstantин Vedernikov). - Добавлена поддержка записи в Delta Lake. Закрывает #79603. #85564 (Kseniia Sumarokova).
- Добавлена настройка
delta_lake_snapshot_versionдля чтения определённой версии снимка в движке таблицDeltaLake. #85295 (Kseniia Sumarokova). - Сохранять больше статистики Iceberg (размеры столбцов, нижние и верхние границы) в метаданные (записи манифеста) для min-max-прунинга. #85746 (Konstantин Vedernikov).
- Добавлена поддержка добавления, удаления и изменения столбцов в Iceberg для простых типов. #85769 (Konstantин Ведерников).
- Iceberg: добавлена поддержка записи файла version-hint. Это закрывает #85097. #85130 (Konstantin Vedernikov).
- Представления, созданные временными пользователями, теперь будут хранить копию реального пользователя и больше не будут инвалидироваться после удаления временного пользователя. #84763 (pufit).
- Индекс похожести векторов теперь поддерживает бинарное квантование. Бинарное квантование значительно снижает потребление памяти и ускоряет процесс построения векторного индекса (за счёт более быстрого вычисления расстояний). Также существующая настройка
vector_search_postfilter_multiplierбыла помечена как устаревшая и заменена более общей настройкой:vector_search_index_fetch_multiplier. #85024 (Shankar Iyer). - Разрешить использование аргументов вида ключ–значение в табличном движке/функции
s3илиs3Cluster, напримерs3('url', CSV, structure = 'a Int32', compression_method = 'gzip'). #85134 (Kseniia Sumarokova). - Новая системная таблица для хранения ошибочных входящих сообщений от движков, таких как Kafka ("очередь мёртвых писем", dead letter queue). #68873 (Ilya Golshtein).
- Новая команда SYSTEM RESTORE DATABASE REPLICA для реплицируемых баз данных, аналогичная имеющейся функциональности восстановления в ReplicatedMergeTree. #73100 (Konstantин Morozов).
- Теперь в протоколе PostgreSQL поддерживается команда
COPY. #74344 (Konstantin Vedernikov). - Добавлена поддержка C#-клиента для протокола MySQL. Это закрывает #83992. #84397 (Konstantin Vedernikov).
- Добавлена поддержка чтения и записи в формате секционирования Hive. #76802 (Arthur Passos).
- Добавлена системная таблица
zookeeper_connection_logдля хранения истории подключений к ZooKeeper. #79494 (János Benjamin Antal). - Серверная настройка
cpu_slot_preemptionвключает вытесняющее планирование CPU для рабочих нагрузок и обеспечивает справедливое по принципу max-min распределение процессорного времени между ними. Добавлены новые настройки рабочих нагрузок для ограничения потребления CPU:max_cpus,max_cpu_shareиmax_burst_cpu_seconds. Подробнее: https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling. #80879 (Sergei Trifonov). - Разрывать TCP-соединение после заданного количества запросов или по достижении заданного порога времени. Это полезно для более равномерного распределения соединений между узлами кластера за балансировщиком нагрузки. Устраняет #68000. #81472 (Kenny Sun).
- Параллельные реплики теперь поддерживают использование проекций при выполнении запросов. #82659. #82807 (zoomxi).
- Добавлена поддержка
DESCRIBE SELECTв дополнение кDESCRIBE (SELECT ...). #82947 (Yarik Briukhovetskyi). - Принудительное использование защищённого соединения для mysql_port и postgresql_port. #82962 (tiandiwonder).
- Теперь пользователи могут выполнять поиск по ключам JSON без учета регистра с помощью
JSONExtractCaseInsensitive(и других вариантовJSONExtract). #83770 (Alistair Evans). - Добавлена системная таблица
system.completions. Закрывает #81889. #83833 (|2ustam). - Добавлена новая функция
nowInBlock64. Пример использования:SELECT nowInBlock64(6)возвращает2025-07-29 17:09:37.775725. #84178 (Halersson Paris). - Добавлена поддержка extra_credentials в AzureBlobStorage для аутентификации по client_id и tenant_id. #84235 (Pablo Marcos).
- Добавлена функция
dateTimeToUUIDv7для преобразования значения типа DateTime в UUIDv7. Пример использования:SELECT dateTimeToUUIDv7(toDateTime('2025-08-15 18:57:56'))возвращает0198af18-8320-7a7d-abd3-358db23b9d5c. #84319 (samradovich). - Агрегатные функции
timeSeriesDerivToGridиtimeSeriesPredictLinearToGridдля повторного дискретизирования данных на временную сетку, заданную указанными метками времени начала и конца, а также шагом; соответственно вычисляют значения, аналогичные PromQL-функциямderivиpredict_linear. #84328 (Stephen Chi). - Добавлены две новые функции TimeSeries: -
timeSeriesRange(start_timestamp, end_timestamp, step), -timeSeriesFromGrid(start_timestamp, end_timestamp, step, values). #85435 (Vitaly Baranov). - Добавлен новый синтаксис:
GRANT READ ON S3('s3://foo/.*') TO user. #84503 (pufit). - Добавлен новый формат вывода
Hash. Он вычисляет одно хеш-значение для всех столбцов и строк результата. Это полезно для вычисления «отпечатка» результата, например, в сценариях, когда передача данных является узким местом. Пример:SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hashвозвращаетe5f9e676db098fdb9530d2059d8c23ef. #84607 (Robert Schulze). - Добавлена возможность устанавливать произвольные наблюдатели в запросах Keeper Multi. #84964 (Mikhail Artemenko).
- Добавлена опция
--max-concurrencyв инструментеclickhouse-benchmark, включающая режим с постепенным увеличением числа параллельных запросов. #85623 (Sergei Trifonov). - Добавлена поддержка частично агрегированных метрик. #85328 (Mikhail Artemenko).
Экспериментальная функциональность
- Включена поддержка коррелированных подзапросов по умолчанию, они больше не считаются экспериментальными. #85107 (Dmitry Novik).
- Каталоги озера данных Unity, Glue, Rest и Hive Metastore переведены из экспериментального режима в бета-стадию. #85848 (Melvyn Peignon).
- Облегчённые операции обновления (UPDATE) и удаления (DELETE) переведены из экспериментального режима в бета-стадию.
- Приблизительный векторный поиск с индексами векторного сходства теперь имеет статус GA. #85888 (Robert Schulze).
- Движок таблиц Ytsaurus и табличная функция. #77606 (MikhailBurdukov).
- Ранее данные текстового индекса разделялись на несколько сегментов (размер каждого сегмента по умолчанию составлял 256 MiB). Это могло уменьшить потребление памяти при построении текстового индекса, но увеличивало требования к дисковому пространству и время ответа на запрос. #84590 (Elmi Ahmadov).
Повышение производительности
- Новая реализация ридера Parquet. В целом работает быстрее, поддерживает проталкивание фильтров на уровне страниц (page-level filter pushdown) и PREWHERE. Пока является экспериментальной. Используйте настройку
input_format_parquet_use_native_reader_v3, чтобы её включить. #82789 (Michael Kolupaev). - Официальный HTTP-транспорт в библиотеке Azure был заменён нашей собственной реализацией HTTP‑клиента для Azure Blob Storage. Добавлены многочисленные настройки для этого клиента, которые соответствуют настройкам для S3. Введены агрессивные тайм-ауты установления соединения как для Azure, так и для S3. Улучшена возможность инспектирования событий и метрик профиля Azure. Новый клиент включён по умолчанию и обеспечивает значительно меньшую задержку для холодных запросов при работе с Azure Blob Storage. Старый клиент на базе
Curlможно вернуть, установив параметрazure_sdk_use_native_client=false. #83294 (alesapin). Предыдущая официальная реализация клиента Azure была непригодна для эксплуатации в продакшене из-за ужасных всплесков задержки — от пяти секунд до минут. Мы избавились от этой ужасной реализации и очень этим гордимся. - Обрабатывает индексы в порядке возрастания размера файла. Конечный порядок индексов отдаёт приоритет индексам minmax и векторным индексам (из-за простоты и селективности соответственно), а затем — небольшим индексам. Внутри групп minmax/векторных индексов также предпочитаются индексы меньшего размера. #84094 (Maruth Goyal).
- По умолчанию включена настройка MergeTree
write_marks_for_substreams_in_compact_parts. Это существенно повышает производительность чтения подколонок из вновь создаваемых Compact‑частей. Серверы с версией ниже 25.5 не смогут читать новые Compact‑части. #84171 (Pavel Kruglov). - Движок таблицы
azureBlobStorage: кэшировать и по возможности повторно использовать токены проверки подлинности управляемого удостоверения, чтобы избежать ограничения частоты запросов. #79860 (Nick Blakely). - Операции
ALLLEFT/INNERJOIN будут автоматически преобразованы вRightAny, если правая сторона соединения функционально определяется столбцами ключа соединения (во всех строках уникальные значения ключа соединения). #84010 (Nikita Taranov). - Добавлен параметр
max_joined_block_size_bytesв дополнение кmax_joined_block_size_rowsдля ограничения потребления памяти при выполнении операций JOIN с «тяжёлыми» столбцами. #83869 (Nikolai Kochetov). - Добавлена новая логика (управляется настройкой
enable_producing_buckets_out_of_order_in_aggregation, по умолчанию включена), которая позволяет отправлять некоторые бакеты не по порядку при агрегации с экономным использованием памяти. Когда слияние некоторых бакетов агрегации занимает значительно больше времени, чем слияние других, это улучшает производительность, позволяя инициатору тем временем сливать бакеты с более высокими идентификаторами. Недостаток — потенциально более высокое потребление памяти (не должно быть значительным). #80179 (Nikita Taranov). - Добавлена настройка
optimize_rewrite_regexp_functions(включена по умолчанию), которая позволяет оптимизатору переписывать некоторые вызовы функцийreplaceRegexpAll,replaceRegexpOneиextractв более простые и эффективные формы при обнаружении определённых шаблонов регулярных выражений. (issue #81981). #81992 (Amos Bird). - Обрабатывать
max_joined_block_rowsвне основного цикла хешированного JOIN. Незначительно улучшена производительность ALL JOIN. #83216 (Nikolai Kochetov). - Сначала обрабатывать min-max-индексы с более высокой детализацией. Закрывает #75381. #83798 (Maruth Goyal).
- Обеспечить выполнение оконных агрегатных функций с
DISTINCTза линейное время и исправить ошибку вsumDistinct. Закрывает #79792. Закрывает #52253. #79859 (Nihal Z. Miaji). - Векторные поисковые запросы с использованием индекса векторного сходства выполняются с меньшими задержками за счет уменьшения количества чтений из хранилища и снижения загрузки процессора. #83803 (Shankar Iyer).
- Rendezvous-хеширование для улучшения локальности кэша при распределении нагрузки по параллельным репликам. #82511 (Anton Ivashkin).
- Реализована функция
addManyDefaultsдля комбинаторовIf, благодаря чему агрегатные функции с комбинаторамиIfтеперь работают быстрее. #83870 (Raúl Marín). - Вычислять сериализованный ключ по столбцам при группировке по нескольким строковым или числовым столбцам. #83884 (李扬).
- Исключено полное сканирование таблицы в случаях, когда анализ индекса приводит к пустым диапазонам при чтении с параллельных реплик. #84971 (Eduard Karacharov).
- Попробуйте
-falign-functions=64для более стабильных тестов производительности. #83920 (Azat Khuzhin). - Индекс блум-фильтра теперь используется для условий вида
has([c1, c2, ...], column), гдеcolumnне относится к типуArray. Это повышает производительность таких запросов, делая их столь же эффективными, как операторIN. #83945 (Doron David). - Снижено число избыточных вызовов memcpy в CompressedReadBufferBase::readCompressedData. #83986 (Raúl Marín).
- Оптимизировать
largestTriangleThreeBucketsпутём удаления временных данных. #84479 (Alexey Milovidov). - Оптимизирована десериализация строк за счет упрощения кода. Закрывает #38564. #84561 (Alexey Milovidov).
- Исправлен расчет минимального размера задачи для параллельных реплик. #84752 (Nikita Taranov).
- Повышена производительность применения частей патча в режиме
Join. #85040 (Anton Popov). - Исправлена обработка нулевого байта. Закрывает #85062. Исправлено несколько незначительных ошибок. Функции
structureToProtobufSchema,structureToCapnProtoSchemaнекорректно ставили нуль-терминирующий байт и использовали символ новой строки вместо него. Это приводило к отсутствию новой строки в выводе и могло приводить к переполнению буфера при использовании других функций, зависящих от нулевого байта (таких, какlogTrace,demangle,extractURLParameter,toStringCutToZeroиencrypt/decrypt). Макет словаряregexp_treeне поддерживал обработку строк с нулевыми байтами. ФункцияformatRowNoNewline, вызываемая с форматомValuesили с любым другим форматом без новой строки в конце строк, ошибочно обрезала последний символ вывода. Функцияstemсодержала ошибку безопасной обработки исключений, которая в очень редком сценарии могла привести к утечке памяти. Функцияinitcapработала неправильно для аргументов типаFixedString: она не распознавала начало слова в начале строки, если предыдущая строка в блоке заканчивалась символом слова. Исправлена уязвимость формата ApacheORC, которая могла привести к раскрытию неинициализированной памяти. Изменено поведение функцииreplaceRegexpAllи соответствующего алиасаREGEXP_REPLACE: теперь она может выполнять пустое совпадение в конце строки, даже если предыдущее совпадение охватило всю строку, как в случае^a*|a*$или^|.*— это соответствует семантике JavaScript, Perl, Python, PHP, Ruby, но отличается от семантики PostgreSQL. Реализация многих функций была упрощена и оптимизирована. Документация для нескольких функций была некорректной и теперь исправлена. Имейте в виду, что выводbyteSizeдля столбцов типа String и сложных типов, состоящих из столбцов типа String, изменился (с 9 байт на пустую строку на 8 байт на пустую строку), и это нормально. #85063 (Alexey Milovidov). - Оптимизировать материализацию констант в случаях, когда она выполняется только для возврата одной строки. #85071 (Alexey Milovidov).
- Улучшена параллельная обработка файлов с помощью бэкенда delta-kernel-rs. #85642 (Azat Khuzhin).
- Добавлена новая настройка enable_add_distinct_to_in_subqueries. При её включении ClickHouse будет автоматически добавлять DISTINCT в подзапросы в выражениях IN для распределённых запросов. Это может значительно уменьшить размер временных таблиц, передаваемых между шардами, и повысить эффективность использования сетевых ресурсов. Примечание: это компромисс — хотя объём передаваемых по сети данных сокращается, на каждом узле требуется дополнительная работа по слиянию (удалению дубликатов). Включайте эту настройку, когда узким местом является сетевой трафик и стоимость слияния приемлема. #81908 (fhw12345).
- Снижены накладные расходы при отслеживании использования памяти запросов для исполняемых пользовательских функций. #83929 (Eduard Karacharov).
- Реализована внутренняя фильтрация
delta-kernel-rs(по статистике и отсечению партиций) в хранилищеDeltaLake. #84006 (Kseniia Sumarokova). - Более тонко регулируется отключение пропускающих индексов, которые зависят от столбцов, обновляемых «на лету» или через patch parts. Теперь пропускающие индексы не используются только в частях, затронутых мутациями «на лету» или patch parts; ранее такие индексы отключались для всех частей. #84241 (Anton Popov).
- Выделяйте минимальный объём памяти, необходимый под encrypted_buffer для зашифрованных именованных коллекций. #84432 (Pablo Marcos).
- Улучшена поддержка индексов блум‑фильтра (обычных, ngram и token), которые теперь могут использоваться, когда первый аргумент — константный массив (множество), а второй — индексированный столбец (подмножество), что обеспечивает более эффективное выполнение запросов. #84700 (Doron David).
- Снижена конкуренция за блокировку хранилища в Keeper. #84732 (Antonio Andelic).
- Добавлена поддержка
read_in_order_use_virtual_rowдляWHERE. Это позволяет пропускать чтение дополнительных частей для запросов с фильтрами, которые не удалось полностью протолкнуть вPREWHERE. #84835 (Nikolai Kochetov). - Позволяет асинхронно перебирать объекты из таблицы Iceberg без явного хранения объектов для каждого файла данных. #85369 (Daniil Ivanik).
- Выполняет некоррелированный
EXISTSв виде скалярного подзапроса. Это позволяет использовать кэш скалярных подзапросов и выполнять константное свёртывание результата, что полезно для индексов. Для совместимости добавлена новая настройкаexecute_exists_as_scalar_subquery=1. #85481 (Nikolai Kochetov).
Улучшение
- Добавлены настройки
database_replicated, задающие значения по умолчанию для DatabaseReplicatedSettings. Если настройка отсутствует в запросе создания реплицируемой базы данных, используется значение изdatabase_replicated. #85127 (Tuan Pham Anh). - В веб-интерфейсе (play) добавлена возможность изменять ширину столбцов таблицы. #84012 (Doron David).
- Добавлена поддержка сжатого файла
.metadata.jsonчерез настройкуiceberg_metadata_compression_method. Поддерживаются все методы сжатия ClickHouse. Тем самым закрывается #84895. #85196 (Konstantin Vedernikov). - Теперь в выводе
EXPLAIN indexes = 1отображается количество диапазонов, которые будут прочитаны. #79938 (Christoph Wurm). - Добавлены настройки для задания размера блока сжатия ORC и обновлено значение по умолчанию с 64 KB до 256 KB, чтобы привести его в соответствие с Spark и Hive. #80602 (李扬).
- Добавлен файл
columns_substreams.txtв Wide-часть для отслеживания всех подстримов, хранящихся в части. Это помогает отслеживать динамические стримы в типах JSON и Dynamic и таким образом позволяет избежать необходимости чтения выборки этих столбцов для получения списка динамических стримов (например, для вычисления размеров столбцов). Также теперь все динамические стримы отображаются вsystem.parts_columns. #81091 (Pavel Kruglov). - Добавлен флаг командной строки
--show_secretsдляclickhouse format, который по умолчанию скрывает конфиденциальные данные. #81524 (Nikolai Ryzhov). - Запросы на чтение и запись в S3 дросселируются на уровне HTTP-сокета (вместо всего запроса к S3), чтобы избежать проблем с дросселированием
max_remote_read_network_bandwidth_for_serverиmax_remote_write_network_bandwidth_for_server. #81837 (Sergei Trifonov). - Разрешено смешивать разные правила сопоставления (collation) для одного и того же столбца в разных окнах (для оконных функций). #82877 (Yakov Olkhovskiy).
- Добавлен инструмент, который позволяет моделировать, визуализировать и сравнивать селекторы слияния. #71496 (Sergei Trifonov).
- Добавлена поддержка табличных функций
remote*с параллельными репликами, если в аргументеaddress_expressionуказан кластер. Также исправлена #73295. #82904 (Igor Nikonov). - Все сообщения журнала, связанные с записью файлов резервных копий, переведены на уровень TRACE. #82907 (Hans Krutzer).
- Пользовательские функции с необычными именами и кодеками могут некорректно форматироваться SQL-форматтером. Это закрывает #83092. #83644 (Alexey Milovidov).
- Теперь можно использовать типы Time и Time64 внутри типа JSON. #83784 (Yarik Briukhovetskyi).
- Соединения с параллельными репликами теперь используют логический шаг JOIN. Если возникают какие-либо проблемы с запросами
JOIN, использующими параллельные реплики, попробуйтеSET query_plan_use_new_logical_join_step=0и сообщите о проблеме. #83801 (Vladimir Cherkasov). - Исправлена совместимость cluster_function_process_archive_on_multiple_nodes. #83968 (Kseniia Sumarokova).
- Добавлена поддержка изменения настроек вставки в материализованные представления на уровне таблицы
S3Queue. Добавлены новые настройки уровняS3Queue:min_insert_block_size_rows_for_materialized_viewsиmin_insert_block_size_bytes_for_materialized_views. По умолчанию будут использоваться настройки на уровне профиля, а настройки уровняS3Queueбудут их переопределять. #83971 (Kseniia Sumarokova). - Добавлено событие профилирования
MutationAffectedRowsUpperBound, которое показывает количество строк, затронутых мутацией (например, общее количество строк, удовлетворяющих условию в запросеALTER UPDATEилиALTER DELETE). #83978 (Anton Popov). - Использовать информацию из cgroup (если применимо, то есть когда включён
memory_worker_use_cgroupи доступны cgroups) для корректировки трекера памяти (memory_worker_correct_memory_tracker). #83981 (Azat Khuzhin). - MongoDB: неявное преобразование строк в числовые типы. Ранее если из источника MongoDB для числового столбца в таблице ClickHouse поступало строковое значение, выбрасывалось исключение. Теперь движок пытается автоматически преобразовать строку в числовое значение. Закрывает #81167. #84069 (Kirill Nikiforov).
- Подсветка групп цифр в форматах
Prettyдля чисел типаNullable. #84070 (Alexey Milovidov). - Dashboard: всплывающая подсказка больше не будет выходить за верхнюю границу контейнера. #84072 (Alexey Milovidov).
- Немного улучшен внешний вид точек на дашборде. #84074 (Alexey Milovidov).
- У Dashboard теперь немного более удачный favicon. #84076 (Alexey Milovidov).
- Web UI: Разрешить браузерам сохранять пароль, а также значения URL. #84087 (Alexey Milovidov).
- Добавлена поддержка применения дополнительного ACL на конкретных узлах Keeper с использованием конфигурации
apply_to_children. #84137 (Antonio Andelic). - Исправлено использование компактной сериализации дискриминаторов типа Variant в MergeTree. Ранее в некоторых случаях она не применялась, хотя могла бы. #84141 (Pavel Kruglov).
- Добавлена серверная настройка
logs_to_keepдля реплицируемых баз данных, которая позволяет изменять значение параметраlogs_to_keepпо умолчанию для таких баз. Меньшие значения уменьшают число ZNode-ов (особенно при большом количестве баз данных), тогда как большие значения позволяют отставшей реплике догнать состояние спустя более длительный период времени. #84183 (Alexey Khatskevich). - Добавлена настройка
json_type_escape_dots_in_keysдля экранирования точек в ключах JSON при разборе типа JSON. По умолчанию настройка отключена. #84207 (Pavel Kruglov). - Проверьте, было ли соединение отменено, прежде чем проверять EOF, чтобы предотвратить чтение из закрытого соединения. Исправляет #83893. #84227 (Raufs Dunamalijevs).
- Немного улучшены цвета выделения текста в веб‑интерфейсе. Разница заметна только для выделенных ячеек таблицы в тёмной теме. В предыдущих версиях контраст между текстом и фоном выделения был недостаточным. #84258 (Alexey Milovidov).
- Улучшена обработка завершения работы сервера при наличии клиентских подключений за счет упрощения внутренних проверок. #84312 (Raufs Dunamalijevs).
- Добавлена настройка
delta_lake_enable_expression_visitor_loggingдля отключения логирования обходчика выражений, поскольку такие логи могут быть слишком подробными даже на тестовом уровне логирования при отладке. #84315 (Kseniia Sumarokova). - Метрики на уровне cgroup и на уровне всей системы теперь выводятся вместе. Метрики на уровне cgroup имеют имена
CGroup<Metric>, а метрики уровня ОС (собираемые из procfs) имеют именаOS<Metric>. #84317 (Nikita Taranov). - Чуть получше графики в веб-интерфейсе. Не намного, но лучше. #84326 (Alexey Milovidov).
- Изменено значение по умолчанию настройки реплицируемой базы данных
max_retries_before_automatic_recoveryна 10, чтобы в некоторых случаях ускорить восстановление. #84369 (Alexander Tokmakov). - Исправлено форматирование оператора
CREATE USERс параметрами запроса (например,CREATE USER {username:Identifier} IDENTIFIED WITH no_password). #84376 (Azat Khuzhin). - Добавлены настройки
backup_restore_s3_retry_initial_backoff_ms,backup_restore_s3_retry_max_backoff_ms,backup_restore_s3_retry_jitter_factorдля управления стратегией backoff при повторных попытках обращения к S3, используемой во время операций резервного копирования и восстановления. #84421 (Julia Kartseva). - Исправление упорядоченного режима (ordered) в S3Queue: раньше завершать работу при вызове shutdown. #84463 (Kseniia Sumarokova).
- Добавлена поддержка записей Iceberg, совместимых с чтением через pyiceberg. #84466 (Konstantin Vedernikov).
- Разрешено приведение типов значений множеств при проталкивании фильтров
INиGLOBAL INпо первичным ключам хранилищ KeyValue (например, EmbeddedRocksDB, KeeperMap). #84515 (Eduard Karacharov). - Обновлён chdig до версии 25.7.1. #84521 (Azat Khuzhin).
- Ошибки низкого уровня при выполнении UDF теперь приводят к завершению с кодом ошибки
UDF_EXECUTION_FAILED, тогда как ранее могли возвращаться различные коды ошибок. #84547 (Xu Jia). - Добавлена команда
get_aclв KeeperClient. #84641 (Antonio Andelic). - Добавлена версия snapshot для движков таблиц data lake. #84659 (Pete Hampton).
- Добавлена метрика с измерениями для размера
ConcurrentBoundedQueueс метками по типу очереди (т.е. для чего предназначена очередь) и идентификатору очереди (т.е. случайно сгенерированный идентификатор для текущего экземпляра очереди). #84675 (Miсhael Stetsyuk). - Таблица
system.columnsтеперь содержит столбецcolumn, являющийся псевдонимом существующего столбцаname. #84695 (Yunchi Pang). - Новая настройка MergeTree
search_orphaned_parts_drivesдля ограничения области поиска частей, например по дискам с локальными метаданными. #84710 (Ilya Golshtein). - Добавлена 4LW-команда в Keeper,
lgrq, для переключения логирования входящих запросов. #84719 (Antonio Andelic). - Сопоставлять заголовки внешней аутентификации forward_headers без учета регистра. #84737 (ingodwerust).
- Инструмент
encrypt_decryptтеперь поддерживает шифрованные соединения с ZooKeeper. #84764 (Roman Vasin). - Добавлен столбец с форматной строкой в
system.errors. Этот столбец нужен для группировки ошибок одного типа в правилах оповещений. #84776 (Miсhael Stetsyuk). - Обновлён
clickhouse-format, чтобы он принимал--highlightкак алиас для--hilite. - Обновлёнclickhouse-client, чтобы он принимал--hiliteкак алиас для--highlight. - Обновлена документацияclickhouse-format, чтобы отразить это изменение. #84806 (Rishabh Bhardwaj). - Исправлено чтение таблиц Iceberg по идентификаторам полей для сложных типов. #84821 (Konstantin Vedernikov).
- Добавлена новая настройка
backup_slow_all_threads_after_retryable_s3_errorдля снижения нагрузки на S3 во время массовых повторных попыток, вызванных ошибками вродеSlowDown, за счёт замедления всех потоков, как только обнаружена одна повторяемая ошибка. #84854 (Julia Kartseva). - Пропускать создание и переименование старой временной таблицы для non-append RMV DDL в реплицируемых базах данных. #84858 (Tuan Pham Anh).
- Размер кэша записей журнала Keeper теперь ограничен по количеству записей с помощью параметров
keeper_server.coordination_settings.latest_logs_cache_entry_count_thresholdиkeeper_server.coordination_settings.commit_logs_cache_entry_count_threshold. #84877 (Antonio Andelic). - Теперь можно использовать
simdjsonна неподдерживаемых архитектурах (раньше это приводило к ошибкамCANNOT_ALLOCATE_MEMORY). #84966 (Azat Khuzhin). - Асинхронное логирование: сделать лимиты настраиваемыми и добавить средства интроспекции. #85105 (Raúl Marín).
- Собирать все удаляемые объекты для выполнения одной операции удаления в объектном хранилище. #85316 (Mikhail Artemenko).
- Текущая реализация файлов позиционного удаления в Iceberg хранит все данные в оперативной памяти (RAM). Это может быть довольно дорого, если файлы позиционного удаления большие, что нередко бывает. Моя реализация хранит в оперативной памяти только последнюю row-group файлов удаления в формате Parquet, что значительно дешевле. #85329 (Konstantin Vedernikov).
- chdig: исправлены артефакты на экране, исправлен сбой после редактирования запроса в редакторе, поиск
editorвPATH, обновление до версии 25.8.1. #85341 (Azat Khuzhin). - Добавлен отсутствующий параметр
partition_columns_in_data_fileв конфигурацию Azure. #85373 (Arthur Passos). - Разрешён нулевой шаг в функциях
timeSeries*ToGrid. Это часть #75036. #85390 (Vitaly Baranov). - Добавлен флаг show_data_lake_catalogs_in_system_tables для управления добавлением таблиц data lake в system.tables. Исправляет #85384. #85411 (Smita Kulkarni).
- Добавлена поддержка подстановки макросов в
remote_fs_zero_copy_zookeeper_path. #85437 (Mikhail Koviazin). - ИИ в clickhouse-client теперь выглядит немного лучше. #85447 (Alexey Milovidov).
- Включить trace_log.symbolize по умолчанию для старых развертываний. #85456 (Azat Khuzhin).
- Расширена поддержка большего числа случаев разрешения составных идентификаторов. В частности, улучшена совместимость
ARRAY JOINсо старым анализатором. Добавлена новая настройкаanalyzer_compatibility_allow_compound_identifiers_in_unflatten_nestedдля сохранения старого поведения. #85492 (Nikolai Kochetov). - Игнорировать UNKNOWN_DATABASE при получении размеров столбцов таблиц из system.columns. #85632 (Azat Khuzhin).
- Добавлено ограничение (настройка таблицы
max_uncompressed_bytes_in_patches) на общий объём несжатых байт в патч-частях. Это предотвращает значительные замедления запросов SELECT после легковесных обновлений и исключает возможное злоупотребление легковесными обновлениями. #85641 (Anton Popov). - Добавлен столбец
parameterв таблицуsystem.grantsдля определения типа источника дляGRANT READ/WRITEи движка таблицы дляGRANT TABLE ENGINE. #85643 (MikhailBurdukov). - Исправлена обработка завершающей запятой в списке столбцов запроса CREATE DICTIONARY после столбца с параметрами, например, Decimal(8). Закрывает #85586. #85653 (Nikolay Degterinsky).
- Добавлена поддержка вложенных массивов для функции
nested. #85719 (Nikolai Kochetov). - Все выделения памяти, выполняемые внешними библиотеками, теперь видны трекеру памяти ClickHouse и корректно учитываются. Это может привести к «повышенному» отчётному использованию памяти для некоторых запросов или сбоям с ошибкой
MEMORY_LIMIT_EXCEEDED. #84082 (Nikita Mikhaylov).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Этот pull request исправляет обработку метаданных при выполнении запросов к таблицам Iceberg через REST‑каталог. ... #80562 (Saurabh Kumar Ojha).
- Исправлена логика markReplicasActive в DDLWorker и DatabaseReplicatedDDLWorker. #81395 (Tuan Pham Anh).
- Исправлен откат столбца типа Dynamic при ошибке парсинга. #82169 (Pavel Kruglov).
- Функция
trimпри вызове только с константными аргументами теперь возвращает константную результирующую строку. (Ошибка #78796). #82900 (Robert Schulze). - Исправлена логическая ошибка, приводившая к дублированию подзапросов при включённом
optimize_syntax_fuse_functions, закрыт тикет #75511. #83300 (Vladimir Cherkasov). - Исправлен некорректный результат запросов с условием
WHERE ... IN (<subquery>)и включённым кэшем условий запроса (настройкаuse_query_condition_cache). #83445 (LB7666). - Ранее функция
gcsне требовала каких‑либо прав доступа для использования. Теперь для её использования проверяется наличие привилегииGRANT READ ON S3. Закрывает #70567. #83503 (pufit). - Пропускать недоступные узлы при выполнении INSERT SELECT из s3Cluster() в реплицированную таблицу MergeTree. #83676 (Igor Nikonov).
- Исправлена обработка операций записи с добавлением (в MergeTree, используемом для экспериментальных транзакций) для типов метаданных
plain_rewritable/plain, которые ранее просто игнорировались. #83695 (Tuan Pham Anh). - Скрывать данные аутентификации в реестре схем Avro, чтобы они не отображались пользователю и не попадали в журналы. #83713 (János Benjamin Antal).
- Исправлена проблема, при которой при создании таблицы MergeTree с
add_minmax_index_for_numeric_columns=1илиadd_minmax_index_for_string_columns=1индекс впоследствии материализуется во время операции ALTER, что мешает корректной инициализации базы данных Replicated на новой реплике. #83751 (Nikolay Degterinsky). - Исправлен модуль записи Parquet, записывавший некорректные значения статистики min/max для типов Decimal. #83754 (Michael Kolupaev).
- Исправлена сортировка значений NaN для типа
LowCardinality(Float32|Float64|BFloat16). #83786 (Pervakov Grigorii). - При восстановлении из резервной копии пользователь-определитель (definer) может не быть сохранён в бэкапе, что приведёт к повреждению всей резервной копии. Чтобы это исправить, проверка прав при создании целевой таблицы во время восстановления откладывается и выполняется только во время выполнения запроса. #83818 (pufit).
- Исправлено падение клиента из-за соединения, оставшегося в отключённом состоянии после неудачного INSERT. #83842 (Azat Khuzhin).
- Теперь можно ссылаться на любую таблицу в аргументе
view(...)табличной функцииremoteпри включённом анализаторе запросов. Исправляет #78717. Исправляет #79377. #83844 (Dmitry Novik). - Вызов onprogress в jsoneachrowwithprogress теперь синхронизирован с финализацией. #83879 (Sema Checherinda).
- Закрывает #81303. #83892 (Konstantin Vedernikov).
- Исправлены функции colorSRGBToOKLCH/colorOKLCHToSRGB при одновременном использовании константных и неконстантных аргументов. #83906 (Azat Khuzhin).
- Исправлена запись JSON-путей со значениями NULL в формате RowBinary. #83923 (Pavel Kruglov).
- Исправлена проблема переполнения больших значений (>2106-02-07) при приведении типа Date к DateTime64. #83982 (Yarik Briukhovetskyi).
- Всегда применять параметр
filesystem_prefetches_limit(а не только изMergeTreePrefetchedReadPool). #83999 (Azat Khuzhin). - Исправлена редкая ошибка, из-за которой запрос
MATERIALIZE COLUMNмог приводить к появлению неожиданных файлов вchecksums.txtи в результате — к отсоединённым частям данных. #84007 (alesapin). - Исправлена логическая ошибка
Expected single dictionary argument for functionпри выполнении JOIN по условию неравенства, когда один из столбцов имеет типLowCardinality, а другой является константой. Закрывает #81779. #84019 (Alexey Milovidov). - Исправлена ошибка, приводившая к падению
clickhouse clientпри использовании в интерактивном режиме с подсветкой синтаксиса. #84025 (Bharat Nallan). - Исправлены ошибки, приводившие к некорректным результатам при совместном использовании кэша условий запроса и рекурсивных CTE (issue #81506). #84026 (zhongyuankai).
- Исправлена обработка исключений при периодическом обновлении партиций. #84083 (Azat Khuzhin).
- Исправлено объединение фильтра с условием JOIN в случаях, когда операнды сравнения на равенство имеют разные типы или ссылаются на константы. Устраняет #83432. #84145 (Dmitry Novik).
- Исправлен редкий сбой ClickHouse, возникавший в случае, когда в таблице есть projection, установлено
lightweight_mutation_projection_mode = 'rebuild', и пользователь выполняет операцию легковесного удаления, которая удаляет ВСЕ строки из любого блока таблицы. #84158 (alesapin). - Устранена взаимоблокировка, вызванная фоновым потоком проверки отмены. #84203 (Antonio Andelic).
- Исправлен бесконечный рекурсивный разбор некорректных определений
WINDOW. Устраняет #83131. #84242 (Dmitry Novik). - Исправлена ошибка, приводившая к некорректному кодированию и декодированию Bech32. Изначально ошибка не была обнаружена, поскольку онлайн-реализация алгоритма, использовавшаяся для тестирования, имела ту же проблему. #84257 (George Larionov).
- Исправлено некорректное построение пустых кортежей в функции
array(). Это устраняет #84202. #84297 (Amos Bird). - Устранена ошибка
LOGICAL_ERRORдля запросов с параллельными репликами и несколькими соединениями INNER JOIN, за которыми следует RIGHT JOIN. Не используйте параллельные реплики для таких запросов. #84299 (Vladimir Cherkasov). - Ранее индексы
setне учитывали столбцыNullableпри проверке того, проходят ли гранулы фильтр (issue #75485). #84305 (Elmi Ahmadov). - Теперь ClickHouse читает таблицы из каталога Glue, где тип таблицы указан строчными буквами. #84316 (alesapin).
- Не пытайтесь заменять табличные функции их кластерными аналогами при использовании JOIN или подзапросов. #84335 (Konstantin Bogdanov).
- Исправлено использование логгера в
IAccessStorage. #84365 (Konstantin Bogdanov). - Исправлена логическая ошибка в легковесных обновлениях, изменяющих все столбцы таблицы. #84380 (Anton Popov).
- Кодек
DoubleDeltaтеперь может применяться только к столбцам числового типа. В частности, столбцы типаFixedStringбольше нельзя сжимать с помощьюDoubleDelta. (исправляет #80220). #84383 (Jimmy Aguilar Mena). - Сравнение со значением NaN выполнялось с использованием некорректных диапазонов при оценке индекса
MinMax. #84386 (Elmi Ahmadov). - Исправлено чтение столбца типа Variant при ленивой материализации. #84400 (Pavel Kruglov).
- Рассматривать
zoutofmemoryкак аппаратную ошибку, иначе будет выброшено логическое исключение. См. https://github.com/clickhouse/clickhouse-core-incidents/issues/877. #84420 (Han Fei). - Исправлен сбой сервера, возникавший, когда пользователь, созданный с
no_password, пытался выполнить вход после изменения настройки сервераallow_no_passwordна 0. #84426 (Shankar Iyer). - Исправлены записи в журнале изменений Keeper, выполнявшиеся в неверном порядке. Ранее могли существовать незавершённые операции записи в журнал, но операция отката могла приводить к конкурентному изменению целевого файла. Это приводило к неконсистентным логам и возможной потере данных. #84434 (Antonio Andelic).
- Теперь, если все TTL удалены из таблицы, MergeTree не будет выполнять никаких операций, связанных с TTL. #84441 (alesapin).
- Параллельный распределённый INSERT SELECT с LIMIT был разрешён, что некорректно, так как это приводило к дублированию данных в целевой таблице. #84477 (Igor Nikonov).
- Исправлено отсечение файлов по виртуальному столбцу в дата-лейках. #84520 (Kseniia Sumarokova).
- Исправлены утечки памяти в Keeper при использовании хранилища на RocksDB (итераторы не уничтожались). #84523 (Azat Khuzhin).
- Исправлена проблема, из-за которой
ALTER MODIFY ORDER BYне проверял столбцы TTL в ключах сортировки. Столбцы TTL теперь корректно отклоняются при использовании в выражении ORDER BY во время операций ALTER, что предотвращает возможное повреждение таблиц. #84536 (xiaohuanlin). - Измените значение
allow_experimental_delta_kernel_rsдля версий до 25.5 наfalseдля обеспечения совместимости. #84587 (Kseniia Sumarokova). - Перестаёт считывать схему из manifest-файлов и вместо этого хранит соответствующие схемы для каждого snapshot независимо. Определяет соответствующую схему для каждого файла данных из его snapshot. Предыдущее поведение нарушало спецификацию Iceberg для записей manifest-файлов со статусом existing. #84588 (Daniil Ivanik).
- Исправлена проблема, при которой настройка Keeper
rotate_log_storage_interval = 0приводила к аварийному завершению работы ClickHouse. (issue #83975). #84637 (George Larionov). - Исправлена логическая ошибка S3Queue «Table is already registered». Закрывает #84433. Ошибка появилась после https://github.com/ClickHouse/ClickHouse/pull/83530. #84677 (Kseniia Sumarokova).
- Блокировать 'mutex' при получении zookeeper из 'view' в RefreshTask. #84699 (Tuan Pham Anh).
- Исправлена ошибка
CORRUPTED_DATA, возникающая при использовании ленивых столбцов с внешней сортировкой. #84738 (János Benjamin Antal). - Исправлено отсечение столбцов (column pruning) с использованием
delta-kernelв хранилищеDeltaLake. Закрывает #84543. #84745 (Kseniia Sumarokova). - Реализовано обновление учетных данных в delta-kernel хранилища DeltaLake. #84751 (Kseniia Sumarokova).
- Исправлен избыточный запуск внутренних резервных копий после проблем с подключением. #84755 (Vitaly Baranov).
- Исправлена проблема, из-за которой запрос к удалённому источнику с задержкой мог приводить к выходу за пределы вектора. #84820 (George Larionov).
- Токенизаторы
ngramиno_opбольше не приводят к сбою работы экспериментального текстового индекса для пустых входных токенов. #84849 (Robert Schulze). - Исправлены легковесные обновления для таблиц с движками
ReplacingMergeTreeиCollapsingMergeTree. #84851 (Anton Popov). - Корректно сохранять все настройки в метаданных таблицы для таблиц с движком object queue. #84860 (Antonio Andelic).
- Исправлено общее число
watches, возвращаемое Keeper. #84890 (Antonio Andelic). - Исправлены облегчённые обновления для таблиц с движком
ReplicatedMergeTree, созданных на серверах с версией ниже 25.7. #84933 (Anton Popov). - Исправлена работа облегчённых обновлений для таблиц с нереплицированным движком
MergeTreeпосле выполнения запросаALTER TABLE ... REPLACE PARTITION. #84941 (Anton Popov). - Исправлена генерация имен столбцов для логических литералов: теперь используются "true"/"false" вместо "1"/"0", что предотвращает конфликты имен столбцов между логическими и целочисленными литералами в запросах. #84945 (xiaohuanlin).
- Исправлена рассинхронизация учёта памяти в background schedule pool и executor. #84946 (Azat Khuzhin).
- Исправлены возможные проблемы с некорректной сортировкой в табличном движке Merge. #85025 (Xiaozhe Yu).
- Реализованы недостающие API для DiskEncrypted. #85028 (Azat Khuzhin).
- Добавлена проверка при использовании коррелированного подзапроса в распределённом контексте, чтобы избежать сбоя. Исправляет #82205. #85030 (Dmitry Novik).
- Теперь Iceberg не пытается кэшировать соответствующую версию снимка (snapshot) между запросами
SELECTи всегда пытается честно определять актуальный снимок. Предыдущая попытка кэшировать снимок Iceberg приводила к проблемам при использовании таблицы Iceberg с функцией путешествия во времени. #85038 (Daniil Ivanik). - Исправлен двойной вызов
freeвAzureIteratorAsync. #85064 (Nikita Taranov). - Улучшено сообщение об ошибке при попытке создать пользователя, идентифицируемого с помощью JWT. #85072 (Konstantin Bogdanov).
- Исправлена очистка патч-частей в
ReplicatedMergeTree. Ранее результат легковесного обновления мог временно не отображаться на реплике до тех пор, пока слитая или мутировавшая часть, материализующая патч-части, не будет загружена с другой реплики. #85121 (Anton Popov). - Исправлена ошибка illegal_type_of_argument в mv, когда типы различаются. #85135 (Sema Checherinda).
- Исправлен сбой сегментации в реализации delta-kernel. #85160 (Kseniia Sumarokova).
- Исправлена проблема с восстановлением реплицируемых баз данных в случаях, когда перемещение файла метаданных занимает много времени. #85177 (Tuan Pham Anh).
- Исправлена ошибка
Not-ready SetдляIN (subquery)в настройкеadditional_table_filters expression. #85210 (Nikolai Kochetov). - Убраны лишние вызовы
getStatus()при выполнении запросов SYSTEM DROP REPLICA. Исправлена ситуация, когда таблица удаляется в фоновом режиме и выбрасывается исключениеShutdown for storage is called. #85220 (Nikolay Degterinsky). - Исправлена гонка в реализации delta-kernel для движка
DeltaLake. #85221 (Kseniia Sumarokova). - Исправлено чтение партиционированных данных с отключённым delta-kernel в движке
DeltaLake. Ошибка появилась в версии 25.7 (https://github.com/ClickHouse/ClickHouse/pull/81136). #85223 (Kseniia Sumarokova). - Добавлены отсутствовавшие проверки длины имён таблиц в запросах CREATE OR REPLACE и RENAME. #85326 (Michael Kolupaev).
- Исправлено создание RMV на новой реплике реплицированной базы данных, если DEFINER был удалён. #85327 (Nikolay Degterinsky).
- Исправлена запись в Iceberg для сложных типов данных. #85330 (Konstantin Vedernikov).
- Для сложных типов запись нижних и верхних границ не поддерживается. #85332 (Konstantin Vedernikov).
- Исправлена логическая ошибка при чтении с помощью функций объектного хранилища через таблицу Distributed или функцию remote. Исправления: #84658, #85173, #52022. #85359 (alesapin).
- Исправлена проблема с резервным копированием частей с повреждёнными проекциями. #85362 (Antonio Andelic).
- Запрещено использовать столбец
_part_offsetв проекциях в релизах до его стабилизации. #85372 (Sema Checherinda). - Исправлено падение и повреждение данных при выполнении ALTER UPDATE для JSON. #85383 (Pavel Kruglov).
- Запросы с параллельными репликами, которые используют оптимизацию чтения в обратном порядке, могут выдавать некорректные результаты. #85406 (Igor Nikonov).
- Исправлено возможное неопределённое поведение (аварийное завершение) в случае MEMORY_LIMIT_EXCEEDED во время десериализации String. #85440 (Azat Khuzhin).
- Исправлены некорректные метрики KafkaAssignedPartitions и KafkaConsumersWithAssignment. #85494 (Ilya Golshtein).
- Исправлено занижение значения метрики processed_bytes при использовании PREWHERE (явного или автоматического). #85495 (Michael Kolupaev).
- Исправлено условие раннего выхода для замедления скорости запросов к S3: теперь для включения механизма замедления, когда все потоки приостановлены из‑за повторимой ошибки, достаточно, чтобы был истинным либо
s3_slow_all_threads_after_network_error, либоbackup_slow_all_threads_after_retryable_s3_error, вместо необходимости одновременной истинности обоих. #85505 (Julia Kartseva). - Этот PR исправляет получение метаданных при выполнении запросов к таблицам Iceberg через REST‑каталог. ... #85531 (Saurabh Kumar Ojha).
- Исправлен редкий сбой при асинхронных вставках, изменяющих настройки
log_commentилиinsert_deduplication_token. #85540 (Anton Popov). - Параметры, такие как date_time_input_format, не учитывались при использовании HTTP с multipart/form-data. #85570 (Sema Checherinda).
- Исправлена проблема с маскированием секретов в табличных функциях icebergS3Cluster и icebergAzureCluster. #85658 (MikhailBurdukov).
- Исправлена потеря точности в
JSONExtractпри преобразовании числовых значений JSON в типы Decimal. Теперь числовые значения JSON сохраняют своё точное десятичное представление, во избежание ошибок округления чисел с плавающей запятой. #85665 (ssive7b). - Исправлена ошибка
LOGICAL_ERRORпри использованииCOMMENT COLUMN IF EXISTSв том же запросеALTERпослеDROP COLUMN. Теперь предложениеIF EXISTSкорректно пропускает операцию добавления комментария, если столбец был удалён в рамках того же запроса. #85688 (xiaohuanlin). - Исправлено чтение значения счётчика из кэша для Delta Lake. #85704 (Kseniia Sumarokova).
- Исправлена ошибка сегментации в CoalescingMergeTree при работе с большими строками. Это закрывает #84582. #85709 (Konstantин Vedernikov).
- Обновлена временная метка метаданных при записях в Iceberg. #85711 (Konstantin Vedernikov).
- Использование
distributed_depthв качестве индикатора функции *cluster было некорректным и могло приводить к дублированию данных; вместо него используйтеclient_info.collaborate_with_initiator. #85734 (Konstantin Bogdanov). - Spark не может читать файлы position delete. #85762 (Konstantin Vedernikov).
- Исправлен параметр
send_logs_source_regexp(после рефакторинга асинхронного логирования в #85105). #85797 (Azat Khuzhin). - Исправлено возможное некорректное поведение словарей с
update_fieldпри ошибкеMEMORY_LIMIT_EXCEEDED. #85807 (Azat Khuzhin). - Добавлена поддержка глобальных констант из выражения
WITHдля параллельной распределённой операцииINSERT SELECTс целевой таблицейDistributed. Ранее запрос мог приводить к ошибкеUnknown expression identifier. #85811 (Nikolai Kochetov). - Скрывать учетные данные для
deltaLakeAzure,deltaLakeCluster,icebergS3ClusterиicebergAzureCluster. #85889 (Julian Maicher). - Исправлена логическая ошибка при попытке
CREATE ... AS (SELECT * FROM s3Cluster(...))при использованииDatabaseReplicated. #85904 (Konstantin Bogdanov). - Исправляет HTTP-запросы, выполняемые табличной функцией
url(), чтобы они корректно включали номер порта в заголовокHostпри доступе к нестандартным портам. Это устраняет ошибки аутентификации при использовании предварительно подписанных URL с S3-совместимыми сервисами, такими как MinIO, работающими на нестандартных портах, что распространено в средах разработки. (Исправляет #85898). #85921 (Tom Quist). - Теперь Unity Catalog будет игнорировать схемы с нестандартными типами данных для таблиц, которые не являются Delta-таблицами. Исправляет #85699. #85950 (alesapin).
- Исправлена поддержка nullable-полей в iceberg. #85977 (Konstantin Vedernikov).
- Исправлена ошибка в восстановлении базы данных
Replicated: если имя таблицы содержало символ%, во время восстановления таблица могла быть повторно создана под другим именем. #85987 (Alexander Tokmakov). - Исправлена проблема с восстановлением из резервной копии, приводившая к ошибке
BACKUP_ENTRY_NOT_FOUNDпри восстановлении пустой таблицыMemory. #86012 (Julia Kartseva). - Добавлены проверки для sharding_key при выполнении ALTER для распределённой таблицы. Ранее ошибочный ALTER мог приводить к нарушению определения таблицы и необходимости перезапуска сервера. #86015 (Nikolay Degterinsky).
- Не создавать пустой файл удалений Iceberg. #86061 (Konstantin Vedernikov).
- Исправлена проблема, из-за которой слишком большие значения параметров приводили к сбоям в работе таблиц S3Queue и мешали перезапуску реплик. #86074 (Nikolay Degterinsky).
Улучшения сборки/тестирования/упаковки
- По умолчанию используются зашифрованные диски для тестов с S3. #59898 (Nikita Mikhaylov).
- Использовать исполняемый файл
clickhouseв интеграционных тестах, чтобы получать полные отладочные символы. #83779 (Mikhail f. Shiryaev). - Обновлена внутренняя libxml2 с 2.14.4 до 2.14.5. #84230 (Robert Schulze).
- Обновлён внутренний curl с 8.14.0 до 8.15.0. #84231 (Robert Schulze).
- Теперь мы используем меньше памяти для кэшей в CI и имеем более качественные тесты вытеснения данных из кэша. #84676 (alesapin).
Релиз ClickHouse 25.7, 2025-07-24
Обратные несовместимые изменения
- Изменения в функции
extractKeyValuePairs: введён новый аргументunexpected_quoting_character_strategy, который управляет тем, что происходит, когдаquoting_characterнеожиданно встречается при чтении ключа или значения без кавычек. Значение может быть одним из:invalid,acceptилиpromote.invalidотбросит ключ и вернёт парсер в состояние ожидания ключа.acceptбудет трактовать символ как часть ключа.promoteотбросит предыдущий символ и начнёт разбор как ключа в кавычках. Дополнительно, после разбора значения в кавычках следующий ключ разбирается только в том случае, если найден разделитель пары. #80657 (Arthur Passos). - Поддержка совпадения нулевого байта в функции
countMatches. Пользователи, которые хотят сохранить старое поведение, могут включить настройкуcount_matches_stop_at_empty_match. #81676 (Elmi Ahmadov). - Использование глобальных серверных ограничителей пропускной способности для локальных (
max_local_read_bandwidth_for_serverиmax_local_write_bandwidth_for_server) и удалённых (max_remote_read_network_bandwidth_for_serverиmax_remote_write_network_bandwidth_for_server) операций при создании резервных копий (BACKUP) в дополнение к их специализированным серверным настройкам (max_backup_bandwidth_for_server,max_mutations_bandwidth_for_serverиmax_merges_bandwidth_for_server). #81753 (Sergei Trifonov). - Запрещено создание таблицы без столбцов, в которые можно вставлять данные. #81835 (Pervakov Grigorii).
- Параллелизация кластерных функций по файлам внутри архивов. В предыдущих версиях единицей работы был целый архив (например, zip, tar или 7z). Добавлена новая настройка
cluster_function_process_archive_on_multiple_nodes, по умолчанию равнаяtrue. Если установлена вtrue, повышает производительность обработки архивов в кластерных функциях. Должна быть установлена вfalseдля совместимости и чтобы избежать ошибок при обновлении до 25.7+ при использовании кластерных функций с архивами на более ранних версиях. #82355 (Kseniia Sumarokova). - Запрос
SYSTEM RESTART REPLICASприводил к пробуждению таблиц в базе данных Lazy даже без доступа к этой базе, и это происходило в то время, когда эти таблицы одновременно удалялись. Примечание: теперьSYSTEM RESTART REPLICASбудет перезапускать реплики только в тех базах данных, в которых у вас есть право наSHOW TABLES, что является естественным поведением. #83321 (Alexey Milovidov).
Новая возможность
- Добавлена поддержка легковесных обновлений для таблиц семейства
MergeTree. Легковесные обновления можно использовать с новым синтаксисом:UPDATE <table> SET col1 = val1, col2 = val2, ... WHERE <condition>. Добавлена реализация легковесных удалений через легковесные обновления. Это можно включить, установивlightweight_delete_mode = 'lightweight_update'. #82004 (Anton Popov). - Поддержка сложных типов при эволюции схем Iceberg. #73714 (Konstantин Vedernikov).
- Добавлена поддержка операций
INSERTв таблицы Iceberg. #82692 (Konstantин Vedernikov). - Чтение файлов данных Iceberg по идентификаторам полей. Это улучшает совместимость с Iceberg: поля могут переименовываться в метаданных при одновременном сопоставлении с другими именами в базовых файлах Parquet. Это решает задачу #83065. #83653 (Konstantin Vedernikov).
- Теперь в ClickHouse поддерживаются сжатые файлы
metadata.jsonдля Iceberg. Исправляет #70874. #81451 (alesapin). - Добавлена поддержка
TimestampTZв каталоге Glue. Это закрывает #81654. #83132 (Konstantin Vedernikov). - Добавлена возможность генерации SQL-запросов с использованием ИИ в клиенте ClickHouse. Теперь пользователи могут генерировать SQL-запросы из описаний на естественном языке, добавляя к своему запросу префикс
??. Поддерживаются провайдеры OpenAI и Anthropic с автоматическим обнаружением схемы. #83314 (Kaushik Iska). - Добавлена функция для записи Geo-типов в формат WKB. #82935 (Konstantin Vedernikov).
- Добавлены два новых типа доступа к источникам:
READиWRITE, а все предыдущие типы доступа для источников объявлены устаревшими. Раньше:GRANT S3 ON *.* TO user, теперь:GRANT READ, WRITE ON S3 TO user. Это также позволяет раздельно выдавать праваREADиWRITEдля источников, например:GRANT READ ON * TO user,GRANT WRITE ON S3 TO user. Функция управляется настройкойaccess_control_improvements.enable_read_write_grantsи по умолчанию отключена. #73659 (pufit). - NumericIndexedVector: новая структура векторных данных на основе бит-слайсинга и сжатия Roaring-bitmap, с более чем 20 функциями для построения, анализа и поэлементной арифметики. Может сократить объем хранимых данных и ускорить соединения (JOIN), фильтры и агрегации на разреженных данных. Реализует #70582 и идеи статьи “Large-Scale Metric Computation in Online Controlled Experiment Platform” Т. Xiong и Y. Wang из VLDB 2024. #74193 (FriendLey).
- Теперь поддерживается настройка профиля нагрузки
max_waiting_queries. Ее можно использовать для ограничения размера очереди запросов. Если предел достигнут, все последующие запросы будут завершаться с ошибкойSERVER_OVERLOADED. #81250 (Oleg Doronin). - Добавлены финансовые функции:
financialInternalRateOfReturnExtended(XIRR),financialInternalRateOfReturn(IRR),financialNetPresentValueExtended(XNPV),financialNetPresentValue(NPV). #81599 (Joanna Hulboj). - Добавлены геопространственные функции
polygonsIntersectCartesianиpolygonsIntersectSphericalдля проверки, пересекаются ли два полигона. #81882 (Paul Lamb). - Добавлена поддержка виртуального столбца
_part_granule_offsetв таблицах семейства MergeTree. Этот столбец указывает индекс (с нуля) гранулы/метки, к которой относится каждая строка внутри своей части данных. Это решает проблему #79572. #82341 (Amos Bird). #82341 (Amos Bird) - Добавлены SQL-функции
colorSRGBToOkLCHиcolorOkLCHToSRGBдля преобразования цветов между цветовыми пространствами sRGB и OkLCH. #83679 (Fgrtue). - Разрешить использование параметров в запросах
CREATE USERв качестве имён пользователей. #81387 (Diskein). - Таблица
system.formatsтеперь содержит расширенную информацию о форматах, например тип содержимого HTTP (Content-Type), возможности автоматического определения схемы и т. д. #81505 (Alexey Milovidov).
Экспериментальная функциональность
- Добавлены функции
searchAnyиsearchAll, которые являются универсальными инструментами для поиска по текстовым индексам. #80641 (Elmi Ahmadov). - Текстовый индекс теперь поддерживает новый токенизатор
split. #81752 (Elmi Ahmadov). - Изменено значение индексной гранулярности по умолчанию для индексов
textна 64. Это улучшает ожидаемую производительность среднего тестового запроса во внутренних бенчмарках. #82162 (Jimmy Aguilar Mena). - 256-битовая битовая карта хранит исходящие метки состояния в упорядоченном виде, но исходящие состояния записываются на диск в том порядке, в котором они появляются в хеш-таблице. Поэтому при чтении с диска метка может указывать на неправильное следующее состояние. #82783 (Elmi Ahmadov).
- Включена zstd-компрессия для BLOB-данных дерева FST в текстовых индексах. #83093 (Elmi Ahmadov).
- Переведен индекс векторного сходства в статус бета. Добавлен параметр-алиас
enable_vector_similarity_index, который должен быть включен для использования индекса векторного сходства. #83459 (Robert Schulze). - Удалена экспериментальная логика
send_metadata, связанная с экспериментальной репликацией с нулевым копированием. Она никогда не использовалась, и никто не поддерживает этот код. Поскольку не было даже тестов, связанных с ней, велика вероятность, что она уже давно сломана. #82508 (alesapin). - Интегрирован
StorageKafka2вsystem.kafka_consumers. #82652 (János Benjamin Antal). - Реализована оценка сложных CNF/DNF-выражений, например,
(a < 1 and a > 0) or b = 3, на основе статистики. #82663 (Han Fei).
Повышение производительности
- Введено асинхронное логирование. При выводе логов на медленное устройство это больше не замедляет выполнение запросов. #82516 (Raúl Marín). Ограничено максимальное число записей, которые могут находиться в очереди. #83214 (Raúl Marín).
- Параллельный распределённый INSERT SELECT по умолчанию включён в режиме, когда INSERT SELECT выполняется независимо на каждом шарде, см. настройку
parallel_distributed_insert_select. #83040 (Igor Nikonov). - Когда агрегирующий запрос содержит только одну функцию
count()по столбцу, который не являетсяNullable, логика агрегации полностью встраивается непосредственно в процесс зондирования хеш-таблицы. Это позволяет избежать выделения и ведения какого-либо состояния агрегации, что значительно снижает потребление памяти и накладные расходы на CPU. Это частично решает #81982. #82104 (Amos Bird). - Производительность
HashJoinулучшена за счёт удаления дополнительного цикла по хэш-таблицам в типичном случае с единственным ключевым столбцом; также устранены проверкиnull_mapиjoin_mask, когда они всегда принимают значенияtrue/false. #82308 (Nikita Taranov). - Простая оптимизация комбинатора
-If. #78454 (李扬). - Запросы векторного поиска с использованием индекса векторного сходства выполняются с меньшей задержкой благодаря сокращению числа операций чтения из хранилища и снижению нагрузки на CPU. #79103 (Shankar Iyer).
- Учитывать
merge_tree_min_{rows,bytes}_for_seekвfilterPartsByQueryConditionCache, чтобы привести его в соответствие с другими методами, выполняющими фильтрацию по индексам. #80312 (李扬). - Конвейер после шага
TOTALSстал многопоточным. #80331 (UnamedRus). - Исправлена фильтрация по ключу для хранилищ
RedisиKeeperMap. #81833 (Pervakov Grigorii). - Добавлена новая настройка
min_joined_block_size_rows(аналогичнаmin_joined_block_size_bytes; значение по умолчанию — 65409) для управления минимальным размером блока (в строках) для входных и выходных блоков операции JOIN (если алгоритм JOIN это поддерживает). Маленькие блоки будут сливаться в более крупные. #81886 (Nikita Taranov). ATTACH PARTITIONбольше не приводит к сбросу всех кэшей. #82377 (Alexey Milovidov).- Оптимизирован сгенерированный план для коррелированных подзапросов за счёт удаления избыточных операций JOIN с использованием классов эквивалентности. Если существуют эквивалентные выражения для всех коррелированных столбцов, операция
CROSS JOINне выполняется при включённой настройкеquery_plan_correlated_subqueries_use_substitution. #82435 (Dmitry Novik). - Считывать только требуемые столбцы в коррелированном подзапросе, если он является аргументом функции
EXISTS. #82443 (Dmitry Novik). - Незначительно ускорено сравнение деревьев запросов при анализе запроса. #82617 (Nikolai Kochetov).
- Добавлено выравнивание в счётчике
CounterизProfileEventsдля уменьшения эффекта false sharing. #82697 (Jiebin Sun). - Оптимизации для
null_mapиJoinMaskиз #82308 были применены к операции JOIN с несколькими дизъюнктами. Также была оптимизирована структура данныхKnownRowsHolder. #83041 (Nikita Taranov). - Простой
std::vector<std::atomic_bool>используется для флагов соединения, чтобы избежать вычисления хэша при каждом обращении к флагам. #83043 (Nikita Taranov). - Не выделяйте память для результирующих столбцов заранее, когда
HashJoinиспользует режим выводаlazy. Это неэффективно, особенно когда количество совпадений невелико. Кроме того, после завершения операции соединения нам известно точное количество совпадений, поэтому мы можем заранее выделить память с нужной точностью. #83304 (Nikita Taranov). - Минимизировать объём копирования памяти в заголовках портов при построении конвейера. Исходный PR от heymind. #83381 (Raúl Marín).
- Улучшен процесс запуска clickhouse-keeper при использовании хранилища rocksdb. #83390 (Antonio Andelic).
- Избегайте удержания блокировки при создании данных снимка хранилища, чтобы снизить конкуренцию за блокировку при высокой параллельной нагрузке. #83510 (Duc Canh Le).
- Повышена производительность формата ввода
ProtobufSingleза счёт повторного использования сериализатора при отсутствии ошибок разбора. #83613 (Eduard Karacharov). - Улучшена производительность построения конвейера, что ускоряет выполнение коротких запросов. #83631 (Raúl Marín).
- Оптимизирован
MergeTreeReadersChain::getSampleBlock, ускоряющий выполнение коротких запросов. #83875 (Raúl Marín). - Ускорен вывод списка таблиц в каталогах данных за счет асинхронных запросов. #81084 (alesapin).
- Добавить джиттер в механизм повторных попыток обращений к S3, когда включена конфигурация
s3_slow_all_threads_after_network_error. #81849 (zoomxi).
Улучшение
- Подсветить круглые скобки несколькими цветами для лучшей читаемости. #82538 (Konstantin Bogdanov).
- Подсветка метасимволов в шаблонах LIKE/REGEXP теперь работает по мере ввода. Она уже была доступна в
clickhouse-formatи в выводеclickhouse-client, но теперь реализована и в командной строке. #82871 (Alexey Milovidov). - Подсветка синтаксиса в
clickhouse-formatи в echo-выводе клиента будет работать так же, как подсветка в приглашении командной строки. #82874 (Alexey Milovidov). - Теперь диски
plain_rewritableможно использовать для хранения метаданных базы данных. Реализованы методыmoveFileиreplaceFileвplain_rewritable, чтобы поддерживать его в качестве диска базы данных. #79424 (Tuan Pham Anh). - Разрешено создание резервных копий баз данных
PostgreSQL,MySQLиDataLake. Резервная копия такой базы данных будет сохранять только определение, а не содержащиеся в ней данные. #79982 (Nikolay Degterinsky). - Параметр
allow_experimental_join_conditionпомечен как устаревший, так как теперь он всегда разрешён. #80566 (Vladimir Cherkasov). - Добавлены метрики pressure в асинхронные метрики ClickHouse. #80779 (Xander Garbett).
- Добавлены метрики
MarkCacheEvictedBytes,MarkCacheEvictedMarks,MarkCacheEvictedFilesдля отслеживания вытеснений из кэша меток (issue #60989). #80799 (Shivji Kumar Jha). - Добавлена поддержка записи перечислений Parquet (enum) в виде массива байт, как предписывает спецификация. #81090 (Arthur Passos).
- Улучшение для движка таблицы
DeltaLake: в delta-kernel-rs появился APIExpressionVisitor, который реализован в этом PR и используется для преобразования выражений над партиционными столбцами (он заменит старый устаревший механизм в delta-kernel-rs, который ранее применялся в нашем коде). В будущем этотExpressionVisitorтакже позволит реализовать отсечение на основе статистики (statistics-based pruning) и некоторые проприетарные возможности delta-lake. Дополнительно цель этого изменения — поддержка partition pruning в движке таблицыDeltaLakeCluster(результат разобранного выражения — ActionsDAG — будет сериализован и отправлен с инициатора вместе с путем к данным, поскольку информация, необходимая для pruning, доступна только как метаинформация при получении списка файлов данных, которое выполняется только инициатором, но при этом должна применяться к данным на каждом сервере чтения). #81136 (Kseniia Sumarokova). - Сохранять имена элементов при выводе супертипов для именованных кортежей. #81345 (lgbo).
- Считать потреблённые сообщения вручную, чтобы не зависеть от ранее зафиксированного смещения в StorageKafka2. #81662 (János Benjamin Antal).
- Добавлен
clickhouse-keeper-utils— новый инструмент командной строки для управления и анализа данных ClickHouse Keeper. Инструмент поддерживает дамп состояния из снимков и журналов изменений, анализ файлов журналов изменений и извлечение заданных диапазонов логов. #81677 (Antonio Andelic). - Общие и помпользовательские ограничители сетевой пропускной способности никогда не сбрасываются, что гарантирует, что лимиты
max_network_bandwidth_for_all_usersиmax_network_bandwidth_for_all_usersникогда не будут превышены. #81729 (Sergei Trifonov). - Добавлена поддержка записи в формат GeoParquet. #81784 (Konstantin Vedernikov).
- Запрещен запуск мутации ALTER
RENAME COLUMN, если она будет переименовывать столбец, который в данный момент затронут незавершённой мутацией данных. #81823 (Mikhail Artemenko). - Заголовок Connection отправляется в конце всех заголовков, когда уже известно, следует ли сохранять соединение. #81951 (Sema Checherinda).
- Настройте размер очереди TCP-серверов (по умолчанию 64) в соответствии с параметром listen_backlog (по умолчанию 4096). #82045 (Azat Khuzhin).
- Добавлена возможность перезагружать параметры
max_local_read_bandwidth_for_serverиmax_local_write_bandwidth_for_serverна лету без перезапуска сервера. #82083 (Kai Zhu). - Добавлена возможность очистки всех предупреждений из таблицы
system.warningsс помощьюTRUNCATE TABLE system.warnings. #82087 (Vladimir Cherkasov). - Исправлено отсечение партиций при использовании кластерных функций для озера данных. #82131 (Kseniia Sumarokova).
- Исправлено чтение секционированных данных в табличной функции DeltaLakeCluster. В этом PR повышена версия протокола кластерных функций, что позволяет передавать дополнительную информацию от инициатора к репликам. Эта дополнительная информация содержит выражение преобразования delta-kernel, которое необходимо для разбора секционирующих столбцов (а в будущем и для других возможностей, таких как сгенерированные столбцы и т. п.). #82132 (Kseniia Sumarokova).
- Функция
reinterpretтеперь поддерживает преобразование к типуArray(T), гдеT— тип данных фиксированного размера (issue #82621). #83399 (Shankar Iyer). - Теперь база данных Datalake выдаёт более информативное исключение. Исправляет #81211. #82304 (alesapin).
- Улучшен
CROSS JOINпутём возвратаfalseизHashJoin::needUsedFlagsForPerRightTableRow. #82379 (lgbo). - Разрешена запись и чтение столбцов Map в виде Array(Tuple). #82408 (MikhailBurdukov).
- Вывод списка лицензий крейтов Rust в
system.licenses. #82440 (Raúl Marín). - Макросы вроде
{uuid}теперь можно использовать в параметреkeeper_pathдвижка таблицы S3Queue. #82463 (Nikolay Degterinsky). - Улучшение Keeper: перемещение файлов changelog между дисками в фоновом потоке. Ранее перенос changelog на другой диск полностью блокировал Keeper до завершения операции. Это приводило к деградации производительности, когда перенос занимал много времени (например, на диск S3). #82485 (Antonio Andelic).
- Улучшение Keeper: добавлен новый параметр конфигурации
keeper_server.cleanup_old_and_ignore_new_acl. Если он включён, ACL всех узлов будут очищены, а ACL для новых запросов — игнорироваться. Если цель — полностью удалить ACL на узлах, важно оставить параметр включённым до тех пор, пока не будет создан новый снапшот. #82496 (Antonio Andelic). - Добавлена новая серверная настройка
s3queue_disable_streaming, которая отключает стриминг в таблицах с движком S3Queue. Эту настройку можно изменять без перезапуска сервера. #82515 (Kseniia Sumarokova). - Рефакторинг механизма динамического изменения размера кэша файловой системы. Добавлено больше логов для диагностики. #82556 (Kseniia Sumarokova).
clickhouse-serverбез файла конфигурации также будет слушать порт PostgreSQL 9005 — аналогично конфигурации по умолчанию. #82633 (Alexey Milovidov).- В
ReplicatedMergeTree::executeMetadataAlterмы получаемStorageIDи, не захватываяDDLGuard, пытаемся вызватьIDatabase::alterTable. За это время мы технически могли заменить рассматриваемую таблицу на другую, поэтому при получении определения таблицы мы могли бы получить неверное. Чтобы избежать этого, мы добавляем отдельную проверку на совпадение UUID при попытке вызватьIDatabase::alterTable. #82666 (Nikolay Degterinsky). - При подключении базы данных, использующей удалённый диск только для чтения, необходимо вручную добавить UUID таблиц в DatabaseCatalog. #82670 (Tuan Pham Anh).
- Запрещено использование пользователями значений
nanиinfсNumericIndexedVector. Исправлены #82239 и некоторые сопутствующие проблемы. #82681 (Raufs Dunamalijevs). - Не пропускайте нулевые значения в форматах заголовков
X-ClickHouse-ProgressиX-ClickHouse-Summary. #82727 (Nikita Mikhaylov). - Улучшение в Keeper: поддержка конкретных прав для ACL world:anyone. #82755 (Antonio Andelic).
- Запретить выполнение
RENAME COLUMNилиDROP COLUMN, затрагивающих явно указанные столбцы суммирования в SummingMergeTree. Закрывает #81836. #82821 (Alexey Milovidov). - Улучшена точность преобразования из
DecimalвFloat32. Реализовано преобразование изDecimalвBFloat16. Закрывает #82660. #82823 (Alexey Milovidov). - Полосы прокрутки в веб-интерфейсе станут выглядеть немного лучше. #82869 (Alexey Milovidov).
clickhouse-serverсо встроенной конфигурацией позволит использовать Web UI путём отправки HTTP-ответа OPTIONS. #82870 (Alexey Milovidov).- Добавлена поддержка задания дополнительных ACL Keeper для путей в конфигурации. Если вы хотите добавить дополнительные ACL для конкретного пути, задайте их в конфигурации в разделе
zookeeper.path_acls. #82898 (Antonio Andelic). - Теперь снимок мутаций будет формироваться на основе снимка видимых частей. Также счетчики мутаций, используемые в этом снимке, будут пересчитаны исходя из включенных мутаций. #82945 (Mikhail Artemenko).
- Добавлен ProfileEvent, срабатывающий, когда Keeper отклоняет операцию записи из‑за мягкого ограничения по памяти. #82963 (Xander Garbett).
- Добавлены столбцы
commit_time,commit_idв таблицуsystem.s3queue_log. #83016 (Kseniia Sumarokova). - В некоторых случаях нам требуется несколько размерностей для наших метрик. Например, подсчитывать неуспешные слияния или мутации по кодам ошибок, а не вести один общий счетчик. Представлен
system.dimensional_metrics, который как раз это и обеспечивает и добавляет первую размерную метрикуfailed_merges. #83030 (Miсhael Stetsyuk). - Объединить предупреждения о неизвестных настройках в clickhouse client и логировать их в виде сводного сообщения. #83042 (Bharat Nallan).
- Клиент ClickHouse теперь сообщает локальный порт при возникновении ошибки подключения. #83050 (Jianfei Hu).
- Незначительно улучшена обработка ошибок в
AsynchronousMetrics. Если каталог/sys/blockсуществует, но недоступен, сервер запустится без мониторинга блочных устройств. Исправляет #79229. #83115 (Alexey Milovidov). - Отключение SystemLogs после обычных таблиц (и перед системными таблицами, а не перед обычными). #83134 (Kseniia Sumarokova).
- Добавлен вывод логов процесса остановки
S3Queue. #83163 (Kseniia Sumarokova). - Добавлена возможность интерпретировать значения типов
TimeиTime64какMM:SS,M:SS,SSилиS. #83299 (Yarik Briukhovetskyi). - Когда
distributed_ddl_output_mode='*_only_active', не ожидайте новые или восстановленные реплики, у которых лаг репликации большеmax_replication_lag_to_enqueue. Это должно помочь избежать ошибкиDDL task is not finished on some hosts, когда новая реплика становится активной после завершения инициализации или восстановления, но при инициализации накопила огромный журнал репликации. Также реализован запросSYSTEM SYNC DATABASE REPLICA STRICT, который ожидает, пока журнал репликации не станет меньшеmax_replication_lag_to_enqueue. #83302 (Alexander Tokmakov). - Не выводить слишком длинные описания действий выражения в сообщениях об исключениях. Закрывает #83164. #83350 (Alexey Milovidov).
- Добавлена возможность парсить префикс и суффикс части, а также проверять покрытие для неконстантных столбцов. #83377 (Mikhail Artemenko).
- Унифицировать имена параметров в ODBC и JDBC при использовании именованных коллекций. #83410 (Andrey Zvonov).
- Когда хранилище останавливается,
getStatusвыбрасывает исключениеErrorCodes::ABORTED. Ранее это приводило к ошибке выполнения запроса SELECT. Теперь мы перехватываем исключенияErrorCodes::ABORTEDи намеренно их игнорируем. #83435 (Miсhael Stetsyuk). - Добавлены метрики ресурсов процесса (такие как
UserTimeMicroseconds,SystemTimeMicroseconds,RealTimeMicroseconds) в события профиля part_log для записейMergeParts. #83460 (Vladimir Cherkasov). - Теперь в Keeper по умолчанию включены флаги
create_if_not_exists,check_not_exists,remove_recursive, которые позволяют использовать новые типы запросов. #83488 (Antonio Andelic). - Останавливать стриминг S3(Azure/etc)Queue перед остановкой любых таблиц при завершении работы сервера. #83530 (Kseniia Sumarokova).
- Включена поддержка типов
Date/Date32как целых чисел во входных форматахJSON. #83597 (MikhailBurdukov). - Сделаны более понятными сообщения об исключениях в ряде ситуаций при загрузке и добавлении проекций. #83728 (Robert Schulze).
- Добавлена конфигурационная опция, позволяющая пропускать проверку целостности бинарного файла
clickhouse-serverпо контрольной сумме. Решает #83637. #83749 (Rafael Roquetto).
Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе)
- Исправлено некорректное значение по умолчанию параметра
--reconnectвclickhouse-benchmark. Оно было изменено по ошибке в #79465. #82677 (Alexey Milovidov). - Исправлено непоследовательное форматирование оператора
CREATE DICTIONARY. Закрывает #82105. #82829 (Alexey Milovidov). - Исправлено непоследовательное форматирование выражений TTL, содержащих функцию
materialize. Закрывает #82828. #82831 (Alexey Milovidov). - Исправлено несогласованное форматирование
EXPLAIN ASTво вложенном запросе, когда он содержит опции вывода, такие какINTO OUTFILE. Закрывает #82826. #82840 (Alexey Milovidov). - Исправлено несогласованное форматирование выражений в скобках с псевдонимами в контексте, когда использование псевдонимов не допускается. Закрывает #82836. Закрывает #82837. #82867 (Alexey Milovidov).
- Используется корректный код ошибки при умножении состояния агрегатной функции на IPv4. Исправляет #82817. #82818 (Alexey Milovidov).
- Исправлена логическая ошибка в файловом кэше: «Having zero bytes but range is not finished». #81868 (Kseniia Sumarokova).
- Пересчитывайте индекс min-max, когда TTL уменьшает число строк, чтобы обеспечить корректность алгоритмов, которые зависят от него, таких как
minmax_count_projection. Это исправляет ошибку #77091. #77166 (Amos Bird). - Для запросов с комбинацией
ORDER BY ... LIMIT BY ... LIMIT N, когда ORDER BY выполняется как PartialSorting, счётчикrows_before_limit_at_leastтеперь отражает количество строк, обработанных предложением LIMIT, вместо количества строк, обработанных преобразованием сортировки. #78999 (Eduard Karacharov). - Исправлен чрезмерный пропуск гранул при фильтрации по token/ngram-индексам с регулярным выражением, которое содержит чередование, первая альтернатива которого не является литералом. #79373 (Eduard Karacharov).
- Исправлена логическая ошибка при использовании оператора
<=>с хранилищем Join, теперь запрос возвращает корректный код ошибки. #80165 (Vladimir Cherkasov). - Исправлено аварийное завершение работы функции
loopпри использовании с семейством функцийremote. Теперь вloop(remote(...))корректно соблюдается предложение LIMIT. #80299 (Julia Kartseva). - Исправлено некорректное поведение функций
to_utc_timestampиfrom_utc_timestampпри обработке дат до эпохи Unix (1970-01-01) и после максимальной даты (2106-02-07 06:28:15). Теперь эти функции корректно ограничивают значения началом эпохи Unix и максимальной датой соответственно. #80498 (Surya Kant Ranjan). - Для некоторых запросов, выполняемых с параллельными репликами, оптимизация чтения в заданном порядке могла применяться на инициаторе, но не на удалённых узлах. Это приводило к тому, что координатор параллельных реплик (на инициаторе) и удалённые узлы использовали разные режимы чтения, что является логической ошибкой. #80652 (Igor Nikonov).
- Исправлена логическая ошибка при материализации проекции, возникавшая, если тип столбца был изменён на Nullable. #80741 (Pavel Kruglov).
- Исправлен некорректный пересчёт TTL в
TTL GROUP BYпри обновлении TTL. #81222 (Evgeniy Ulasik). - Исправлена ошибка в bloom-фильтре Parquet, из-за которой условие вида
WHERE function(key) IN (...)применялось так, как если бы это былоWHERE key IN (...). #81255 (Michael Kolupaev). - Исправлено возможное падение в
Aggregatorв случае возникновения исключения во время слияния. #81450 (Nikita Taranov). - Исправлен
InterpreterInsertQuery::extendQueryLogElemImpl, чтобы при необходимости добавлять обратные кавычки вокруг имён баз данных и таблиц (например, когда имена содержат специальные символы, такие как-). #81528 (Ilia Shvyrialkin). - Исправлено выполнение
INприtransform_null_in=1сNULLв левом аргументе и результатом подзапроса, не допускающимNULL. #81584 (Pavel Kruglov). - Не выполнять проверку экспериментальных и подозрительных типов при вычислении выражений DEFAULT/MATERIALIZE при чтении из существующей таблицы. #81618 (Pavel Kruglov).
- Исправлена ошибка "Context has expired" при слияниях, когда
dictиспользуется в выражении TTL. #81690 (Azat Khuzhin). - Исправлена монотонность функции cast. #81722 (zoomxi).
- Исправлена проблема, из-за которой необходимые столбцы не считывались при обработке скалярного коррелированного подзапроса. Исправляет #81716. #81805 (Dmitry Novik).
- В предыдущих версиях сервер возвращал избыточное содержимое для запросов к
/js. Это закрывает #61890. #81895 (Alexey Milovidov). - Ранее определения движка таблиц
MongoDBмогли включать компонент пути в параметреhost:port, который при этом тихо игнорировался. Интеграция сMongoDBотказывалась загружать такие таблицы. С этим исправлением разрешена загрузка таких таблиц при игнорировании компонента пути, если у движкаMongoDBуказано пять аргументов; в этом случае используется имя базы данных из аргументов. Примечание: Исправление не применяется к вновь создаваемым таблицам или запросам с использованием табличной функцииmongo, а также к источникам словарей и именованным коллекциям. #81942 (Vladimir Cherkasov). - Исправлено возможное падение
Aggregatorпри возникновении исключения во время слияния. #82022 (Nikita Taranov). - Исправлен анализ фильтра, когда в запросе используется только константный столбец‑псевдоним. Исправляет #79448. #82037 (Dmitry Novik).
- Исправлены LOGICAL_ERROR и последующий сбой при использовании одного и того же столбца в TTL для GROUP BY и SET. #82054 (Pablo Marcos).
- Исправлена проверка аргументов табличной функции S3 при маскировании секретов, предотвращающая возможную ошибку
LOGICAL_ERROR; закрыт #80620. #82056 (Vladimir Cherkasov). - Устранены гонки данных в Iceberg. #82088 (Azat Khuzhin).
- Исправлен метод
DatabaseReplicated::getClusterImpl. Если первый элемент (или несколько первых элементов) вhostsимеетid == DROPPED_MARKи нет других элементов для того же шарда, первый элемент вshardsокажется пустым вектором, что приводит к исключениюstd::out_of_range. #82093 (Miсhael Stetsyuk). - Исправлена ошибка копирования и вставки в arraySimilarity, запрещено использование весов с типами UInt32 и Int32. Обновлены тесты и документация. #82103 (Mikhail f. Shiryaev).
- Исправлена ошибка
Not found columnпри выполнении запросов сarrayJoinв условииWHEREпри использованииIndexSet. #82113 (Nikolai Kochetov). - Исправлена ошибка в интеграции с каталогом Glue. Теперь ClickHouse может считывать таблицы с вложенными типами данных, в которых некоторые из подколонок имеют тип
Decimal, например:map<string, decimal(9, 2)>. Исправляет #81301. #82114 (alesapin). - Исправлено ухудшение производительности в SummingMergeTree, которое появилось в версии 25.5 в https://github.com/ClickHouse/ClickHouse/pull/79051. #82130 (Pavel Kruglov).
- При передаче настроек через URI берётся последнее значение. #82137 (Sema Checherinda).
- Исправлена ошибка «Context has expired» в Iceberg. #82146 (Azat Khuzhin).
- Исправлена возможная взаимоблокировка для удалённых запросов, когда сервер испытывает дефицит памяти. #82160 (Kirill).
- Исправлено переполнение в функциях
numericIndexedVectorPointwiseAdd,numericIndexedVectorPointwiseSubtract,numericIndexedVectorPointwiseMultiply,numericIndexedVectorPointwiseDivide, которое происходило при применении к большим числам. #82165 (Raufs Dunamalijevs). - Исправлена ошибка в зависимостях таблиц, из-за которой материализованные представления пропускали операции INSERT. #82222 (Nikolay Degterinsky).
- Исправлена возможная гонка данных между потоком подсказок и основным клиентским потоком. #82233 (Azat Khuzhin).
- Теперь ClickHouse может читать таблицы Iceberg из каталога Glue после изменений схемы. Исправлена проблема #81272. #82301 (alesapin).
- Исправлена проверка настроек асинхронных метрик
asynchronous_metrics_update_period_sиasynchronous_heavy_metrics_update_period_s. #82310 (Bharat Nallan). - Исправлена логическая ошибка при разрешении сопоставления в запросе с несколькими операторами JOIN, закрыт #81969. #82421 (Vladimir Cherkasov).
- Добавлен срок действия токена AWS ECS, чтобы его можно было обновлять. #82422 (Konstantин Богданов).
- Исправлена ошибка обработки аргументов
NULLв функцииCASE. #82436 (Yarik Briukhovetskyi). - Исправлены гонки данных в клиенте (за счёт отказа от использования глобального контекста) и переопределения
session_timezone(ранее еслиsession_timezoneбыл задан, например, вusers.xml/опциях клиента непустым значением, а в контексте запроса — пустым, то использовалось значение изusers.xml, что неверно; теперь контекст запроса всегда имеет приоритет над глобальным контекстом). #82444 (Azat Khuzhin). - Исправлено отключение выравнивания по границе для кэшированного буфера в движках внешних таблиц. Оно было сломано в https://github.com/ClickHouse/ClickHouse/pull/81868. #82493 (Kseniia Sumarokova).
- Исправлен сбой, возникавший при соединении key-value хранилища с ключом с приведённым типом. #82497 (Pervakov Grigorii).
- Исправлена проблема сокрытия значений именованных коллекций в logs/query_log. Закрывает #82405. #82510 (Kseniia Sumarokova).
- Исправлено возможное аварийное завершение при логировании во время завершения сессии, так как
user_idиногда может быть пустым. #82513 (Bharat Nallan). - Исправляет случаи, когда разбор Time мог приводить к проблемам MSan. Исправляет: #82477. #82514 (Yarik Briukhovetskyi).
- Запрещена установка параметра
threadpool_writer_pool_sizeв значение 0, чтобы избежать зависания операций сервера. #82532 (Bharat Nallan). - Исправлена ошибка
LOGICAL_ERRORпри анализе выражения политики строк для коррелируемых столбцов. #82618 (Dmitry Novik). - Исправлена некорректная работа с родительскими метаданными в табличной функции
mergeTreeProjectionприenable_shared_storage_snapshot_in_query = 1. Относится к #82634. #82638 (Amos Bird). - Функции
trim{Left,Right,Both}теперь поддерживают входные строки типа «FixedString(N)». Например,SELECT trimBoth(toFixedString('abc', 3), 'ac')теперь работает. #82691 (Robert Schulze). - В AzureBlobStorage для нативного копирования мы сравниваем методы аутентификации, и если при этом возникает исключение, мы обновили код, чтобы выполнять резервное переключение на режим чтения и копирования (т.е. ненативное копирование). #82693 (Smita Kulkarni).
- Исправлена десериализация
groupArraySample/groupArrayLastв случае пустых значений (при пустом вводе десериализация могла пропустить часть бинарных данных, что могло приводить к повреждению данных при чтении и ошибке UNKNOWN_PACKET_FROM_SERVER в протоколе TCP). Это не затрагивает числовые типы и типы даты/времени. #82763 (Pedro Ferreira). - Исправлена проблема с созданием бэкапа пустой таблицы
Memory, из‑за которой восстановление из бэкапа завершалось с ошибкойBACKUP_ENTRY_NOT_FOUND. #82791 (Julia Kartseva). - Исправлена безопасность при обработке исключений в переписывании union/intersect/except_default_mode. Закрывает #82664. #82820 (Alexey Milovidov).
- Отслеживайте число заданий по загрузке асинхронных таблиц. Если есть запущенные задания, не обновляйте
tail_ptrвTransactionLog::removeOldEntries. #82824 (Tuan Pham Anh). - Исправлены гонки данных в Iceberg. #82841 (Azat Khuzhin).
- Настройка оптимизации
use_skip_indexes_if_final_exact_mode(введённой в 25.6) могла приводить к тому, что не выбирался подходящий диапазон-кандидат в зависимости от настроек движка таблицыMergeTreeи распределения данных. Теперь проблема устранена. #82879 (Shankar Iyer). - Теперь задаётся соль для данных аутентификации при разборе AST с типом SCRAM_SHA256_PASSWORD. #82888 (Tuan Pham Anh).
- При использовании реализации Database без кэширования метаданные соответствующей таблицы удаляются после возврата столбцов и аннулирования ссылки. #82939 (buyval01).
- Исправлена модификация фильтра в запросах с выражением JOIN к таблице с движком
Merge. Исправлена ошибка #82092. #82950 (Dmitry Novik). - Исправлена ошибка LOGICAL_ERROR в QueryMetricLog: mutex не может быть NULL. #82979 (Pablo Marcos).
- Исправлен некорректный вывод функции
formatDateTimeпри использовании спецификатора формата%fсовместно со спецификаторами формата переменной длины (например,%M). #83020 (Robert Schulze). - Исправлено ухудшение производительности при включённом анализаторе, когда вторичные запросы всегда читают все столбцы из представлений (VIEW). Исправляет #81718. #83036 (Dmitry Novik).
- Исправлено вводящее в заблуждение сообщение об ошибке при восстановлении резервной копии на диске, доступном только для чтения. #83051 (Julia Kartseva).
- Не проверять наличие циклических зависимостей при создании таблиц без зависимостей. Это исправляет деградацию производительности в сценариях с созданием тысяч таблиц, которая появилась в результате https://github.com/ClickHouse/ClickHouse/pull/65405. #83077 (Pavel Kruglov).
- Исправляет ошибку с неявным чтением отрицательных значений Time в таблицу и устраняет неоднозначности в документации. #83091 (Yarik Briukhovetskyi).
- Не используйте несвязанные части общего словаря в функции
lowCardinalityKeys. #83118 (Alexey Milovidov). - Исправлена регрессия при использовании подстолбцов в материализованных представлениях. Это исправляет: #82784. #83221 (Nikita Mikhaylov).
- Исправлен сбой в клиенте из-за соединения, оставшегося в состоянии отключения после неудачного INSERT. #83253 (Azat Khuzhin).
- Исправлен сбой при вычислении размера блока, содержащего пустые столбцы. #83271 (Raúl Marín).
- Исправлено возможное падение типа Variant при использовании UNION. #83295 (Pavel Kruglov).
- Исправлена ошибка LOGICAL_ERROR в clickhouse-local при выполнении неподдерживаемых запросов SYSTEM. #83333 (Surya Kant Ranjan).
- Исправлен параметр
no_sign_requestдля клиента S3. Его можно использовать, чтобы явно отключить подпись запросов к S3. Его также можно задать для конкретных endpoint’ов с помощью настроек, основанных на endpoint’ах. #83379 (Antonio Andelic). - Исправлена ошибка, приводившая к аварийному завершению запроса с настройкой 'max_threads=1' при выполнении под нагрузкой и включённом планировании по CPU. #83387 (Fan Ziqi).
- Исправлена ошибка, приводившая к возникновению исключения
TOO_DEEP_SUBQUERIES, когда определение CTE ссылалось на другое табличное выражение с тем же именем. #83413 (Dmitry Novik). - Исправлено некорректное поведение, при котором выполнение
REVOKE S3 ON system.*приводило к отзыву S3‑разрешений для*.*. Это исправляет #83417. #83420 (pufit). - Не используйте общие async_read_counters для разных запросов. #83423 (Azat Khuzhin).
- Отключать параллельные реплики, если подзапрос содержит FINAL. #83455 (zoomxi).
- Устранено незначительное целочисленное переполнение при конфигурировании настройки
role_cache_expiration_time_seconds(issue #83374). #83461 (wushap). - Исправлена ошибка, появившаяся в https://github.com/ClickHouse/ClickHouse/pull/79963. При вставке в MV с определяющим пользователем (definer) проверка прав должна выполняться на основе грантов этого пользователя. Это исправляет #79951. #83502 (pufit).
- Отключено отсечение файлов на основе границ для элементов массивов Iceberg и значений карт Iceberg, включая все их вложенные подполя. #83520 (Daniil Ivanik).
- Исправлены возможные ошибки «file cache not initialized» при использовании файлового кэша в качестве временного хранилища данных. #83539 (Bharat Nallan).
- Исправление в Keeper: корректное обновление общего числа наблюдений при удалении эфемерных узлов при закрытии сессии. #83583 (Antonio Andelic).
- Исправлена некорректная работа с памятью, связанная с
max_untracked_memory. #83607 (Azat Khuzhin). - INSERT SELECT с UNION ALL мог привести к разыменованию нулевого указателя в редком граничном случае. Это закрывает #83618. #83643 (Alexey Milovidov).
- Запрещено использование нулевого значения для max_insert_block_size, так как оно может приводить к логической ошибке. #83688 (Bharat Nallan).
- Исправлен бесконечный цикл в estimateCompressionRatio() при block_size_bytes=0. #83704 (Azat Khuzhin).
- Исправлены метрики
IndexUncompressedCacheBytes/IndexUncompressedCacheCells/IndexMarkCacheBytes/IndexMarkCacheFiles(ранее они учитывались в метрике без префиксаCache). #83730 (Azat Khuzhin). - Исправлено возможное аварийное завершение процесса (из-за ожидания завершения потоков задачи) и, вероятно, зависания (в модульных тестах) при остановке
BackgroundSchedulePool. #83769 (Azat Khuzhin). - Добавлена настройка обратной совместимости, позволяющая новому анализатору ссылаться на внешний псевдоним в предложении WITH в случае конфликта имён. Исправляет #82700. #83797 (Dmitry Novik).
- Исправлена взаимоблокировка при остановке из-за рекурсивной блокировки контекста во время очистки library bridge. #83824 (Azat Khuzhin).
Улучшения сборки/тестирования/упаковки
- Создана минимальная C-библиотека (10 КБ) для лексера ClickHouse. Это требуется для #80977. #81347 (Alexey Milovidov). Добавлен тест для автономного лексера, добавлен тестовый тег
fasttest-only. #82472 (Yakov Olkhovskiy). - Добавлена проверка входных параметров подмодулей Nix. #81691 (Konstantin Bogdanov).
- Исправлён ряд проблем, которые могут возникать при попытке запустить интеграционные тесты на локальной машине (localhost). #82135 (Oleg Doronin).
- Скомпилирован SymbolIndex на Mac и FreeBSD. (Но он будет работать только в системах с ELF, Linux и FreeBSD). #82347 (Alexey Milovidov).
- Обновлён Azure SDK до v1.15.0. #82747 (Smita Kulkarni).
- Добавлен модуль хранения из google-cloud-cpp в систему сборки. #82881 (Pablo Marcos).
- Изменён
Dockerfile.ubuntuдля clickhouse-server для соответствия требованиям Docker Official Library. #83039 (Mikhail f. Shiryaev). - Продолжение #83158 для исправления загрузки сборок через
curl clickhouse.com. #83463 (Mikhail f. Shiryaev). - Добавлены бинарник
busyboxи инструменты установки в образыclickhouse/clickhouse-serverи официальный образclickhouse. #83735 (Mikhail f. Shiryaev). - Добавлена поддержка переменной окружения
CLICKHOUSE_HOSTдля указания хоста сервера ClickHouse, в соответствии с уже существующими переменными окруженияCLICKHOUSE_USERиCLICKHOUSE_PASSWORD. Это упрощает конфигурацию без прямого изменения клиента или конфигурационных файлов. #83659 (Doron David).
Релиз ClickHouse 25.6, 2025-06-26
Обратное несовместимое изменение
- Ранее функция
countMatchesпрекращала подсчёт на первом пустом совпадении, даже если шаблон его допускал. Чтобы устранить эту проблему,countMatchesтеперь продолжает выполнение, продвигаясь на один символ вперёд при возникновении пустого совпадения. Пользователи, желающие сохранить старое поведение, могут включить настройкуcount_matches_stop_at_empty_match. #81676 (Elmi Ahmadov). - Минорное изменение: принудительно задать параметрам сервера
backup_threadsиrestore_threadsненулевые значения. #80224 (Raúl Marín). - Минорное изменение: исправлено поведение
bitNotдляString, чтобы во внутреннем представлении в памяти возвращалась строка с нулевым терминатором. Это не должно повлиять на какое-либо поведение, видимое пользователю, однако автор посчитал нужным выделить это изменение. #80791 (Azat Khuzhin).
Новая возможность
- Новые типы данных:
Time([H]HH:MM:SS) иTime64([H]HH:MM.fractional), а также некоторые базовые функции приведения типов и функции для работы с другими типами данных. Добавлены настройки для совместимости с существующей функциейtoTime. Параметрuse_legacy_to_timeпока установлен для сохранения старого поведения. #81217 (Yarik Briukhovetskyi). Добавлена поддержка сравнения между Time/Time64. #80327 (Yarik Briukhovetskyi). - Новый CLI-инструмент
chdig— TUI-интерфейс для ClickHouse (аналог top), входящий в состав ClickHouse. #79666 (Azat Khuzhin). - Добавлена поддержка параметра
diskдля движков баз данныхAtomicиOrdinary, который задаёт диск для хранения файлов метаданных таблиц. #80546 (Tuan Pham Anh). Это позволяет подключать базы данных из внешних источников. - Новый тип MergeTree,
CoalescingMergeTree— движок, который берёт первое значение, отличное от NULL, во время фоновых слияний. Это закрывает #78869. #79344 (scanhex12). - Добавлены функции для чтения WKB ("Well-Known Binary" — формат двоичного представления различных типов геометрий, используемый в ГИС-приложениях). См. #43941. #80139 (scanhex12).
- Добавлено планирование слотов запросов для рабочих нагрузок; подробности см. в разделе Workload scheduling. #78415 (Sergei Trifonov).
- Вспомогательные функции
timeSeries*для ускорения работы в некоторых сценариях при работе с временными рядами данных: - ресемплирование данных на временную сетку с заданными начальной меткой времени, конечной меткой времени и шагом - вычисление PromQL-подобныхdelta,rate,ideltaиirate. #80590 (Alexander Gololobov). - Добавлены функции
mapContainsValuesLike/mapContainsValues/mapExtractValuesLikeдля фильтрации по значениям вmapи их поддержка в индексах, основанных на фильтре Блума. #78171 (UnamedRus). - Теперь ограничения настроек могут задавать набор недопустимых значений. #78499 (Bharat Nallan).
- Добавлена настройка
enable_shared_storage_snapshot_in_queryдля использования общего снимка хранилища всеми подзапросами одного запроса. Это обеспечивает согласованное чтение из одной и той же таблицы, даже если таблица упоминается несколько раз внутри запроса. #79471 (Amos Bird). - Добавлена поддержка записи столбцов типа
JSONвParquetи прямого чтения столбцов типаJSONизParquet. #79649 (Nihal Z. Miaji). - Добавлена поддержка типа
MultiPolygonдляpointInPolygon. #79773 (Nihal Z. Miaji). - Добавлена поддержка запросов к таблицам Delta, смонтированным в локальную файловую систему, с помощью табличной функции
deltaLakeLocal. #79781 (roykim98). - Добавлена новая настройка
cast_string_to_date_time_mode, которая позволяет выбрать режим разбора значения DateTime при приведении из String. #80210 (Pavel Kruglov). Например, вы можете установить её в режим best effort. - Добавлены функции
bech32Encodeиbech32Decodeдля работы с алгоритмом Bech32 в Bitcoin (issue #40381). #80239 (George Larionov). - Добавлены SQL-функции для анализа имён частей MergeTree. #80573 (Mikhail Artemenko).
- Разрешена фильтрация частей, выбранных для запроса, по диску, на котором они находятся, с помощью нового виртуального столбца
_disk_name. #80650 (tanner-bruce). - Добавлена стартовая страница со списком встроенных веб-инструментов. Она будет открываться при обращении из браузероподобного пользовательского агента. #81129 (Alexey Milovidov).
- Функции
arrayFirst,arrayFirstIndex,arrayLastиarrayLastIndexтеперь отбрасывают значения NULL, возвращаемые выражением фильтра. В предыдущих версиях результаты фильтра с типом Nullable не поддерживались. Исправляет #81113. #81197 (Lennard Eijsackers). - Теперь можно писать
USE DATABASE nameвместоUSE name. #81307 (Yarik Briukhovetskyi). - Добавлена новая системная таблица
system.codecsдля получения сведений о доступных кодеках. (issue #81525). #81600 (Jimmy Aguilar Mena). - Добавлена поддержка оконных функций
lagиlead. Закрывает #9887. #82108 (Dmitry Novik). - Функция
tokensтеперь поддерживает новый токенизатор под названиемsplit, который хорошо подходит для логов. #80195 (Robert Schulze). - Добавлена поддержка аргумента
--databaseвclickhouse-local. Теперь можно переключаться на уже созданную базу данных. Это закрывает #44115. #81465 (Alexey Milovidov).
Экспериментальная возможность
- Реализована логика, аналогичная перераспределению (rebalance) в Kafka для
Kafka2с использованием ClickHouse Keeper. Для каждой реплики поддерживаются два типа блокировок партиций: постоянные и временные. Реплика старается удерживать постоянные блокировки как можно дольше; при этом в любой момент времени на реплике не более чемall_topic_partitions / active_replicas_countпостоянных блокировок (гдеall_topic_partitions— количество всех партиций, аactive_replicas_count— количество активных реплик). Если блокировок больше, реплика освобождает часть партиций. Некоторые партиции временно удерживаются репликой. Максимальное количество временных блокировок на реплике динамически изменяется, чтобы дать другим репликам возможность взять часть партиций в постоянные блокировки. При обновлении временных блокировок реплика освобождает их все и затем снова пытается захватить некоторые другие. #78726 (Daria Fomina). - Улучшение для экспериментального текстового индекса: явные параметры поддерживаются через пары ключ–значение. В настоящий момент поддерживаются параметры: обязательный
tokenizerи два необязательных —max_rows_per_postings_listиngram_size. #80262 (Elmi Ahmadov). - Ранее хранилище формата
packedне поддерживалось для полнотекстового индекса, поскольку идентификатор сегмента обновлялся «на лету» посредством чтения и записи файла (.gin_sid) на диск. В случае хранилищаpackedчтение значения из незакоммиченного файла не поддерживается, что приводило к проблеме. Теперь это исправлено. #80852 (Elmi Ahmadov). - Экспериментальные индексы типа
gin(которые мне не нравятся, потому что это внутренняя шутка разработчиков PostgreSQL) были переименованы вtext. Существующие индексы типаginпо-прежнему можно загрузить, но при попытке использовать их в поисковых запросах они будут выбрасывать исключение (предлагая вместо них индексыtext). #80855 (Robert Schulze).
Повышение производительности
- Включена поддержка фильтрации по нескольким проекциям, что позволяет задействовать более одной проекции для фильтрации на уровне частей. Это решает задачу #55525. Это второй шаг к реализации индекса проекций, следующий за #78429. #80343 (Amos Bird).
- По умолчанию в файловом кеше используется политика кеширования
SLRU. #75072 (Kseniia Sumarokova). - Устранено соперничество за ресурсы на шаге Resize в конвейере запросов. #77562 (Zhiguo Zhou).
- Добавлена опция, позволяющая вынести (де)сжатие и (де)сериализацию блоков в потоки конвейера (pipeline threads) вместо одного потока, связанного с сетевым подключением. Управляется настройкой
enable_parallel_blocks_marshalling. Это должно ускорить распределённые запросы, передающие значительные объёмы данных между инициатором и удалёнными узлами. #78694 (Nikita Taranov). - Улучшена производительность всех типов bloom-фильтров. Видео с конференции OpenHouse #79800 (Delyan Kratunov).
- Добавлен быстрый путь в
UniqExactSet::merge, когда один из наборов пуст. Кроме того, теперь если левый набор (LHS) двухуровневый, а правый (RHS) одноуровневый, мы больше не выполняем преобразование правого набора в двухуровневый. #79971 (Nikita Taranov). - Повышена эффективность повторного использования памяти и уменьшено количество отказов страниц при использовании двухуровневых хеш-таблиц, что должно ускорить выполнение GROUP BY. #80245 (Jiebin Sun).
- Исключены лишние обновления и снижена конкуренция за блокировки в кэше условий запросов. #80247 (Jiebin Sun).
- Незначительная оптимизация для
concatenateBlocks. Скорее всего, она пойдёт на пользу parallel hash join. #80328 (李扬). - При выборе диапазонов меток из диапазона первичного ключа двоичный поиск нельзя использовать, если первичный ключ обёрнут функциями. Этот pull request снимает это ограничение: двоичный поиск всё равно может применяться, когда первичный ключ обёрнут всегда монотонной цепочкой функций или когда RPN содержит элемент, который всегда является истинным. Закрывает #45536. #80597 (zoomxi).
- Ускорено завершение работы движка
Kafka(удалена дополнительная 3‑секундная задержка при наличии нескольких таблицKafka). #80796 (Azat Khuzhin). - Асинхронные вставки: уменьшают потребление памяти и повышают производительность запросов INSERT. #80972 (Raúl Marín).
- Профилирование процессоров не выполняется, если таблица логов отключена. #81256 (Raúl Marín). Это ускоряет выполнение очень коротких запросов.
- Ускорена работа
toFixedString, если исходное значение уже в точности соответствует запрошенному формату. #81257 (Raúl Marín). - Не обрабатывать значения квоты, если для пользователя не задано ограничение. #81549 (Raúl Marín). Это ускоряет очень короткие запросы.
- Исправлен регресс производительности в механизме отслеживания памяти. #81694 (Michael Kolupaev).
- Улучшена оптимизация шардирующего ключа для распределённых запросов. #78452 (fhw12345).
- Параллельные реплики: избегайте ожидания медленных, неиспользуемых реплик, если все задачи на чтение уже распределены по другим репликам. #80199 (Igor Nikonov).
- Для parallel replicas теперь используется отдельный таймаут подключения, см. настройку
parallel_replicas_connect_timeout_ms. Ранее в качестве таймаута подключения для запросов parallel replicas использовались настройкиconnect_timeout_with_failover_ms/connect_timeout_with_failover_secure_ms(по умолчанию 1 секунда). #80421 (Igor Nikonov). - В файловой системе с журналированием операция
mkdirзаписывается в журнал файловой системы, который затем сбрасывается на диск. В случае медленного диска это может занять много времени. Вынесите создание каталога из области действия резервной блокировки. #81371 (Kseniia Sumarokova). - Отложено чтение файлов манифестов Iceberg до выполнения первого запроса на чтение. #81619 (Daniil Ivanik).
- Разрешить перенос предиката
GLOBAL [NOT] INв предложениеPREWHERE, если это возможно. #79996 (Eduard Karacharov).
Улучшение
EXPLAIN SYNTAXтеперь использует новый анализатор. Он возвращает AST, которое строится на основе дерева запроса. Добавлена опцияquery_tree_passesдля управления числом проходов, выполняемых перед преобразованием дерева запроса в AST. #74536 (Vladimir Cherkasov).- Реализована «плоская» сериализация для Dynamic и JSON в формате Native, которая позволяет сериализовать и десериализовать данные Dynamic и JSON без специальных структур, таких как shared variant для Dynamic и shared data для JSON. Эту сериализацию можно включить, установив настройку
output_format_native_use_flattened_dynamic_and_json_serialization. Она может использоваться для упрощения поддержки Dynamic и JSON в протоколе TCP в клиентах на разных языках программирования. #80499 (Pavel Kruglov). - Обновлять учетные данные
S3после ошибкиAuthenticationRequired. #77353 (Vitaly Baranov). - Добавлены метрики словарей в
system.asynchronous_metrics-DictionaryMaxUpdateDelay— максимальная задержка (в секундах) обновления словаря. -DictionaryTotalFailedUpdates— количество ошибок с момента последней успешной загрузки во всех словарях. #78175 (Vlad). - Добавлено предупреждение о базах данных, которые могли быть созданы для сохранения повреждённых таблиц. #78841 (János Benjamin Antal).
- Добавлен виртуальный столбец
_timeв движкахS3QueueиAzureQueue. #78926 (Anton Ivashkin). - Сделать настройки, управляющие разрывом соединения при перегрузке CPU, поддерживающими «горячую» перезагрузку. #79052 (Alexey Katsman).
- Добавлен префикс контейнера к путям данных, отображаемым в
system.tablesдля обычных дисков в Azure Blob Storage, чтобы сделать их отображение согласованным с S3 и GCP. #79241 (Julia Kartseva). - Теперь clickhouse-client и local также могут принимать параметры запроса в виде
param-<name>(дефис) наряду сparam_<name>(подчёркивание). Это закрывает #63093. #79429 (Engel Danila). - Подробное предупреждающее сообщение о скидке на трафик при копировании данных из локального хранилища в удалённый S3 с включённой проверкой контрольной суммы. #79464 (VicoWu).
- Ранее при
input_format_parquet_max_block_size = 0(недопустимом значении) ClickHouse зависал. Теперь это поведение исправлено. Это закрывает #79394. #79601 (abashkeev). - Добавлена настройка
throw_on_errorдляstartup_scripts: когда параметрthrow_on_errorимеет значение true, сервер не запустится, пока все запросы не завершатся успешно. По умолчаниюthrow_on_errorимеет значение false, что сохраняет прежнее поведение. #79732 (Aleksandr Musorin). - Добавлена возможность добавлять
http_response_headersвhttp_handlersлюбого типа. #79975 (Andrey Zvonov). - Функция
reverseтеперь поддерживает типTuple. Закрывает #80053. #80083 (flynn). - Решена задача #75817: теперь можно получать данные
auxiliary_zookeepersиз таблицыsystem.zookeeper. #80146 (Nikolay Govorov). - Добавлены асинхронные метрики по TCP-сокетам сервера. Это повышает наблюдаемость. Закрывает #80187. #80188 (Alexey Milovidov).
- Добавлена поддержка
anyLast_respect_nullsиany_respect_nullsкакSimpleAggregateFunction. #80219 (Diskein). - Удалён лишний вызов
adjustCreateQueryForBackupдля реплицируемых баз данных. #80282 (Vitaly Baranov). - Разрешена передача дополнительных опций (которые идут после
--, например-- --config.value='abc') вclickhouse-localбез знака равенства. Закрывает #80292. #80293 (Alexey Milovidov). - Подсветка метасимволов в запросах
SHOW ... LIKE. Исправляет #80275. #80297 (Alexey Milovidov). - Сделать SQL UDF в
clickhouse-localпостоянной: ранее созданная функция теперь будет загружаться при запуске. Это закрывает #80085. #80300 (Alexey Milovidov). - Исправлено описание в плане выполнения запроса для предварительного шага DISTINCT. #80330 (UnamedRus).
- Добавлена возможность использования именованных коллекций в ODBC/JDBC. #80334 (Andrey Zvonov).
- Метрики числа дисков в режиме только для чтения и повреждённых дисков. Индикатор записывает сообщение в журнал при запуске DiskLocalCheckThread. #80391 (VicoWu).
- Реализована поддержка хранилища
s3_plain_rewritableс проекциями. В предыдущих версиях объекты метаданных в S3, ссылающиеся на проекции, не обновлялись при их перемещении. Закрывает #70258. #80393 (Sav). - Команда
SYSTEM UNFREEZEбольше не будет пытаться искать части на дисках только для чтения и с однократной записью. Исправляет #80430. #80432 (Alexey Milovidov). - Понижен уровень логирования сообщений о слиянии частей. #80476 (Hans Krutzer).
- Изменено поведение по умолчанию механизма отсечения партиций (partition pruning) для таблиц Iceberg. #80583 (Melvyn Peignon).
- Добавлены два новых события ProfileEvents для наблюдаемости алгоритмов поиска по индексу:
IndexBinarySearchAlgorithmиIndexGenericExclusionSearchAlgorithm. #80679 (Pablo Marcos). - Не выводить в логи предупреждение об отсутствии поддержки
MADV_POPULATE_WRITEв старых версиях ядра (чтобы не засорять логи). #80704 (Robert Schulze). - Добавлена поддержка
Date32иDateTime64в выраженияхTTL. #80710 (Andrey Zvonov). - Скорректированы значения совместимости для
max_merge_delayed_streams_for_parallel_write. #80760 (Azat Khuzhin). - Исправлен сбой: если при попытке удалить временный файл (они используются для выгрузки временных данных на диск) в деструкторе выбрасывается исключение, программа может аварийно завершиться. #80776 (Alexey Milovidov).
- Добавлен модификатор
IF EXISTSдля командыSYSTEM SYNC REPLICA. #80810 (Raúl Marín). - Расширено сообщение об исключении «Having zero bytes, but read range is not finished...», добавлен столбец finished_download_time в таблицу
system.filesystem_cache. #80849 (Kseniia Sumarokova). - Добавлен раздел об алгоритме поиска в вывод
EXPLAINпри использовании его сindexes = 1. В нём отображается либо "binary search", либо "generic exclusion search". #80881 (Pablo Marcos). - В начале 2024 года значение
prefer_column_name_to_aliasбыло жёстко зашито как true для обработчика MySQL, поскольку новый анализатор по умолчанию не был включён. Теперь это можно убрать. #80916 (Yarik Briukhovetskyi). - Теперь
system.iceberg_historyпоказывает историю для баз данных-каталогов, таких как Glue или Iceberg REST. Также столбцыtable_nameиdatabase_nameпереименованы вtableиdatabaseвsystem.iceberg_historyдля единообразия. #80975 (alesapin). - Включён режим только чтения для табличной функции
merge, поэтому для её использования больше не требуется привилегияCREATE TEMPORARY TABLE. #80981 (Miсhael Stetsyuk). - Улучшена интроспекция кэшей в памяти (теперь информация о кэшах предоставляется в
system.metricsвместо неполногоsystem.asynchronouse_metrics). Вdashboard.htmlдобавлен размер кэшей в памяти (в байтах).VectorSimilarityIndexCacheSize/IcebergMetadataFilesCacheSizeбыли переименованы вVectorSimilarityIndexCacheBytes/IcebergMetadataFilesCacheBytes. #81023 (Azat Khuzhin). - Пропускать базы данных с движками, которые не могут содержать таблицы
RocksDB, при чтении изsystem.rocksdb. #81083 (Pervakov Grigorii). - Разрешить
filesystem_cachesиnamed_collectionsв конфигурационном файлеclickhouse-local. #81105 (Alexey Milovidov). - Исправлена подсветка
PARTITION BYв операторахINSERT. В предыдущих версияхPARTITION BYне подсвечивался как ключевое слово. #81106 (Alexey Milovidov). - Два небольших улучшения в веб-интерфейсе: — корректная обработка запросов без вывода, таких как
CREATE,INSERT(до недавнего времени эти запросы приводили к бесконечной анимации загрузки); — при двойном щелчке по таблице выполняется прокрутка к началу. #81131 (Alexey Milovidov). - Метрика
MemoryResidentWithoutPageCacheпоказывает объём физической памяти, используемой серверным процессом в байтах, за вычетом кэша страниц в пользовательском пространстве (userspace page cache). Это даёт более точное представление о фактическом использовании памяти при задействованном кэше страниц в пользовательском пространстве. Когда кэш страниц в пользовательском пространстве отключён, это значение равноMemoryResident. #81233 (Jayme Bird). - Пометить исключения, вручную записанные в журнал в client, local server, keeper client и приложении disks, как уже записанные, чтобы они не попадали в журнал дважды. #81271 (Miсhael Stetsyuk).
- Параметры
use_skip_indexes_if_finalиuse_skip_indexes_if_final_exact_modeтеперь по умолчанию установлены в значениеTrue. Запросы с модификаторомFINALтеперь будут использовать skip-индексы (если применимо) для предварительного отбора гранул, а также читать любые дополнительные гранулы, попадающие в соответствующие диапазоны первичного ключа. Пользователи, которым требуется прежнее поведение с приблизительными/неточными результатами, могут установитьuse_skip_indexes_if_final_exact_modeвFALSEпосле тщательной оценки последствий. #81331 (Shankar Iyer). - Если в веб-интерфейсе у вас открыто несколько запросов, выполняется тот, под которым находится курсор. Продолжение #80977. #81354 (Alexey Milovidov).
- Этот pull request исправляет проблемы с реализацией
is_strictв проверках монотонности функций преобразования. В настоящее время некоторые функции преобразования, такие какtoFloat64(UInt32)иtoDate(UInt8), некорректно возвращаютis_strictсо значением false, когда должны возвращать true. #81359 (zoomxi). - При проверке того, соответствует ли
KeyConditionнепрерывному диапазону, когда ключ обёрнут цепочкой нестрогих функций,Constraint::POINTможет потребовать преобразования вConstraint::RANGE. Например:toDate(event_time) = '2025-06-03'подразумевает диапазон дляevent_time: ['2025-06-03 00:00:00', '2025-06-04 00:00:00'). Этот PR исправляет данное поведение. #81400 (zoomxi). - Алиасы
clickhouse/chбудут вызыватьclickhouse-clientвместоclickhouse-local, если заданы параметры--hostили--port. Продолжение #79422. Закрывает #65252. #81509 (Alexey Milovidov). - Теперь, когда у нас есть данные о распределении времени ответа Keeper, мы можем настроить интервалы гистограммы метрик. #81516 (Miсhael Stetsyuk).
- Добавлено событие профилирования
PageCacheReadBytes. #81742 (Kseniia Sumarokova). - Исправлена логическая ошибка в кэше файловой системы: «Having zero bytes but range is not finished». #81868 (Kseniia Sumarokova).
Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе)
- Исправлено параметризованное представление с запросом SELECT EXCEPT. Закрывает #49447. #57380 (Nikolay Degterinsky).
- Analyzer: исправлено имя проекции столбца после повышения типа столбца при
JOIN. Закрывает #63345. #63519 (Dmitry Novik). - Исправлена логическая ошибка при конфликте имён столбцов, когда включён analyzer_compatibility_join_using_top_level_identifier. #75676 (Vladimir Cherkasov).
- Исправлено использование CTE в проталкиваемых предикатах при включённом
allow_push_predicate_ast_for_distributed_subqueries. Устранена проблема #75647. Устранена проблема #79672. #77316 (Dmitry Novik). - Исправлена проблема, из-за которой SYSTEM SYNC REPLICA LIGHTWEIGHT 'foo' сообщала об успешном завершении, даже когда указанная реплика не существовала. Теперь команда корректно проверяет наличие реплики в Keeper, прежде чем пытаться выполнить синхронизацию. #78405 (Jayme Bird).
- Исправлен сбой в очень специфическом случае, когда функция
currentDatabaseиспользовалась в разделеCONSTRAINTзапросовON CLUSTER. Закрывает #78100. #79070 (pufit). - Исправлена передача внешних ролей в межсерверных запросах. #79099 (Andrey Zvonov).
- Попробуйте использовать IColumn вместо Field в SingleValueDataGeneric. Это позволит исправить некорректные возвращаемые значения для некоторых агрегатных функций, таких как
argMaxдля типовDynamic/Variant/JSON. #79166 (Pavel Kruglov). - Исправлено применение настроек
use_native_copyиallow_azure_native_copyдля Azure Blob Storage; поведение обновлено так, чтобы native copy использовалась только при совпадении учётных данных, что устраняет #78964. #79561 (Smita Kulkarni). - Исправлены логические ошибки, связанные с неизвестной областью происхождения столбца, возникавшие при проверке, коррелирован ли этот столбец. Исправлены #78183. Исправлены #79451. #79727 (Dmitry Novik).
- Исправлены некорректные результаты при использовании GROUPING SETS с ColumnConst и Analyzer. #79743 (Andrey Zvonov).
- Исправлено дублирование результатов локального шарда при чтении из распределённой таблицы, когда локальная реплика устарела. #79761 (Eduard Karacharov).
- Исправлен порядок сортировки NaN с отрицательным знаковым битом. #79847 (Pervakov Grigorii).
- Теперь GROUP BY ALL не учитывает секцию GROUPING. #79915 (Yarik Briukhovetskyi).
- Исправлено некорректное объединение состояний для функций
TopK/TopKWeighted, которое приводило к слишком большим значениям погрешности, даже когда ёмкость не была исчерпана. #79939 (Joel Höner). - Учитывать параметр
readonlyв объектном хранилищеazure_blob_storage. #79954 (Julia Kartseva). - Исправлены некорректные результаты запросов и аварийные завершения по нехватке памяти при использовании
match(column, '^…')с символами, экранированными обратной косой чертой. #79969 (filimonov). - Отключение разбиения Hive для озёр данных Частично решает https://github.com/issues/assigned?issue=ClickHouse%7CClickHouse%7C79937. #80005 (Daniil Ivanik).
- Пропускающие индексы с лямбда-выражениями не применялись. Исправлен случай, когда высокоуровневые функции в определении индекса в точности совпадают с функциями в запросе. #80025 (Nikolai Kochetov).
- Исправлена версия метаданных при присоединении парта на реплике, выполняющей команду ATTACH_PART из журнала репликации. #80038 (Aleksei Filatov).
- Имена исполняемых пользовательских функций (eUDF) не добавляются в столбец
used_functionsтаблицыsystem.query_log, в отличие от других функций. В этом PR реализовано добавление имени eUDF в случае её использования в запросе. #80073 (Kyamran). - Исправлена логическая ошибка в формате Arrow с
LowCardinality(FixedString). #80156 (Pavel Kruglov). - Исправлено чтение подстолбцов в движке Merge. #80158 (Pavel Kruglov).
- Исправлена ошибка при сравнении числовых типов в
KeyCondition. #80207 (Yarik Briukhovetskyi). - Исправлено возникновение AMBIGUOUS_COLUMN_NAME при применении ленивой материализации к таблице с проекциями. #80251 (Igor Nikonov).
- Исправлена некорректная оптимизация подсчёта для строковых фильтров по префиксу, таких как LIKE 'ab_c%', при использовании неявных проекций. Это исправляет #80250. #80261 (Amos Bird).
- Исправлена некорректная сериализация вложенных числовых полей в виде строк в документах MongoDB. Удалено ограничение максимальной глубины для документов MongoDB. #80289 (Kirill Nikiforov).
- Теперь выполняются менее строгие проверки метаданных для RMT в реплицируемой базе данных. Закрывает #80296. #80298 (Nikolay Degterinsky).
- Исправлено текстовое представление типов DateTime и DateTime64 для хранилища PostgreSQL. #80301 (Yakov Olkhovskiy).
- Добавлена возможность использования
DateTimeс часовым поясом в таблицахStripeLog. Это закрывает #44120. #80304 (Alexey Milovidov). - Отключено проталкивание фильтра вниз (filter-push-down) для предиката с недетерминированной функцией, если шаг плана запроса изменяет количество строк. Исправляет #40273. #80329 (Nikolai Kochetov).
- Исправлены возможные логические ошибки и сбои в проекциях с подстолбцами. #80333 (Pavel Kruglov).
- Исправлена ошибка
NOT_FOUND_COLUMN_IN_BLOCK, вызванная оптимизацией проталкивания фильтра (filter-push-down) на логическом шаге JOIN в случае, когда выражениеONне является простым равенством. Исправлены #79647 и #77848. #80360 (Nikolai Kochetov). - Исправлен некорректный результат при чтении ключей в обратном порядке в секционированных таблицах. Это исправляет #79987. #80448 (Amos Bird).
- Исправлена некорректная сортировка в таблицах с ключом типа Nullable и включённым параметром optimize_read_in_order. #80515 (Pervakov Grigorii).
- Исправлена проблема, из-за которой операция DROP для обновляемого материализованного представления зависала, если представление было приостановлено с помощью SYSTEM STOP REPLICATED VIEW. #80543 (Michael Kolupaev).
- Исправлена ошибка 'Cannot find column' при использовании константного кортежа в распределённом запросе. #80596 (Yakov Olkhovskiy).
- Исправлена функция
shardNumв таблицах Distributed сjoin_use_nulls. #80612 (János Benjamin Antal). - Исправлен некорректный результат при чтении столбца, который присутствует только в части таблиц в движке Merge. #80643 (Pavel Kruglov).
- Исправлена возможная проблема с протоколом SSH (из-за зависания в replxx). #80688 (Azat Khuzhin).
- Метка времени в таблице iceberg_history теперь должна быть правильной. #80711 (Melvyn Peignon).
- Исправлен возможный сбой при неудачной регистрации словаря (когда
CREATE DICTIONARYзавершалась ошибкойCANNOT_SCHEDULE_TASK, в реестре словарей мог оставаться висячий указатель, что впоследствии приводило к падению). #80714 (Azat Khuzhin). - Исправлена обработка glob-шаблонов enum с единственным элементом в табличных функциях объектного хранилища. #80716 (Konstantin Bogdanov).
- Исправлен неверный тип результата функций сравнения с Tuple(Dynamic) и String, приводивший к логической ошибке. #80728 (Pavel Kruglov).
- Добавлена недостающая поддержка типа данных
timestamp_ntzв Unity Catalog. Исправляет #79535 и #79875. #80740 (alesapin). - Исправлена ошибка
THERE_IS_NO_COLUMNдля распределённых запросов сIN cte. Устраняет #75032. #80757 (Nikolai Kochetov). - Исправлена проблема чрезмерного количества файлов (приводила к чрезмерному использованию памяти) для внешнего ORDER BY. #80777 (Azat Khuzhin).
- Этот PR может закрыть #80742. #80783 (zoomxi).
- Исправлен сбой в Kafka из‑за того, что get_member_id() пыталась создать std::string из NULL (вероятно, проблема проявлялась только при неуспешном подключении к брокеру). #80793 (Azat Khuzhin).
- Корректное ожидание завершения работы потребителей перед остановкой движка Kafka (активные потребители после остановки могут приводить к срабатыванию различных отладочных assert-ов, а также продолжать считывать данные у брокеров в фоновом режиме после удаления/открепления таблицы). #80795 (Azat Khuzhin).
- Исправлена ошибка
NOT_FOUND_COLUMN_IN_BLOCK, возникавшая из-за оптимизацииpredicate-push-down. Исправляет #80443. #80834 (Nikolai Kochetov). - Исправлена логическая ошибка при обработке шаблона со звездочкой (*) в табличной функции при выполнении JOIN с USING. #80894 (Vladimir Cherkasov).
- Исправлен учет использования памяти в кэше файлов метаданных Iceberg. #80904 (Azat Khuzhin).
- Исправлено неверное секционирование с nullable-ключом партиционирования. #80913 (Pervakov Grigorii).
- Исправлена ошибка
Table does not existдля распределённых запросов с проталкиванием предиката (allow_push_predicate_ast_for_distributed_subqueries=1), когда исходная таблица отсутствует на сервере-инициаторе запроса. Исправляет #77281. #80915 (Nikolai Kochetov). - Исправлена логическая ошибка во вложенных функциях с именованными окнами. #80926 (Pervakov Grigorii).
- Исправлена обработка экстремальных значений для столбцов с типом Nullable и столбцов с плавающей точкой. #80970 (Pervakov Grigorii).
- Исправлено возможное аварийное завершение при выполнении запроса к system.tables (вероятно при дефиците памяти). #80976 (Azat Khuzhin).
- Исправлено атомарное переименование с усечением для файлов, у которых тип сжатия определяется по расширению файла. #80979 (Pablo Marcos).
- Исправлена функция ErrorCodes::getName. #81032 (RinChanNOW).
- Исправлена ошибка, из-за которой пользователь не мог получить список таблиц в Unity Catalog без прав на каждую из них. Теперь все таблицы корректно перечисляются, а попытка чтения из таблицы с ограниченным доступом приведёт к исключению. #81044 (alesapin).
- Теперь ClickHouse игнорирует ошибки и неожиданные ответы от каталогов озера данных в запросе
SHOW TABLES. Исправляет #79725. #81046 (alesapin). - Исправлен разбор значения
DateTime64из целых чисел вJSONExtractи при разборе типа данныхJSON. #81050 (Pavel Kruglov). - Учитывать настройку date_time_input_format в кэше автоматического определения схемы. #81052 (Pavel Kruglov).
- Исправлен сбой при операции INSERT, если таблица была удалена (DROP) после запуска запроса, но до отправки данных. #81053 (Azat Khuzhin).
- Исправлена ошибка использования неинициализированного значения в quantileDeterministic. #81062 (Azat Khuzhin).
- Исправить управление счётчиком жёстких ссылок для транзакций диска
metadatastoragefromdisk. Добавить тесты. #81066 (Sema Checherinda). - Имена пользовательских функций (UDF) не записываются в таблицу
system.query_logв отличие от имён других функций. Этот PR добавляет запись имени UDF в один из двух столбцовused_executable_user_defined_functionsилиused_sql_user_defined_functions, если UDF была использована в запросе. #81101 (Kyamran). - Исправлены ошибки
Too large size ... passed to allocatorи возможные сбои при вставках через HTTP-протокол с текстовыми форматами (JSON,Valuesи др.) при пропуске полей типаEnum. #81145 (Anton Popov). - Исправлена ошибка LOGICAL_ERROR при наличии разреженного столбца (Sparse column) в блоке INSERT, направляемом в не-MT материализованное представление. #81161 (Azat Khuzhin).
- Исправлена ошибка
Unknown table expression identifierдляdistributed_product_mode_local=localв режиме кросс-репликации. #81162 (Nikolai Kochetov). - Исправлено некорректное кэширование количества строк в файлах Parquet после фильтрации. #81184 (Michael Kolupaev).
- Исправлен параметр fs cache max_size_to_total_space при использовании с относительным путем к каталогу кэша. #81237 (Kseniia Sumarokova).
- Исправлена ошибка, из-за которой clickhouse-local завершался с ошибкой при выводе константных кортежей или значений типа Map в формате Parquet. #81249 (Michael Kolupaev).
- Проверять смещения массивов, получаемых по сети. #81269 (Azat Khuzhin).
- Исправлен крайний случай в запросе, который выполняет
JOINпустых таблиц и использует оконные функции. Ошибка приводила к взрывному росту количества параллельных потоков, что вызывало переполнение памяти (OOM). #81299 (Alexander Gololobov). - Исправления для кластерных функций data lake (
deltaLakeCluster,icebergClusterи т.д.): (1) исправлена потенциальная ошибка сегментации вDataLakeConfigurationпри использовании функцииClusterсо старым анализатором; (2) убраны дублирующиеся обновления метаданных data lake (лишние запросы к объектному хранилищу); (3) исправлен избыточный листинг в объектном хранилище, когда формат явно не указан (что уже было сделано для некластерных движков data lake). #81300 (Kseniia Sumarokova). - Флаг force_restore_data теперь восстанавливает потерянные метаданные Keeper. #81324 (Raúl Marín).
- Исправлена ошибка региона в delta-kernel. Исправляет #79914. #81353 (Kseniia Sumarokova).
- Отключен некорректный JIT для divideOrNull. #81370 (Raúl Marín).
- Исправлена ошибка вставки данных, возникавшая, когда у таблицы MergeTree было слишком длинное имя столбца секции. #81390 (hy123q).
- Бэкпортировано в #81957: исправлена возможная аварийная остановка в
Aggregatorпри возникновении исключения во время слияния. #81450 (Nikita Taranov). - Не сохраняем содержимое нескольких файлов манифестов в памяти. #81470 (Daniil Ivanik).
- Исправлено возможное аварийное завершение во время остановки фоновых пулов (
background_.*pool_size). #81473 (Azat Khuzhin). - Исправлен выход за границы буфера при чтении в формате
Npy, происходивший при записи в таблицу с движкомURL. Это закрывает #81356. #81502 (Alexey Milovidov). - Возможно, что веб-интерфейс отобразит
NaN%(типичные проблемы JavaScript). #81507 (Alexey Milovidov). - Исправлен
DatabaseReplicatedприdatabase_replicated_enforce_synchronous_settings=1. #81564 (Azat Khuzhin). - Исправлен порядок сортировки типов LowCardinality(Nullable(...)). #81583 (Pervakov Grigorii).
- Сервер не должен поддерживать HTTP‑соединение, если запрос не был полностью прочитан из сокета. #81595 (Sema Checherinda).
- Теперь скалярные коррелированные подзапросы возвращают результат выражения проекции, допускающий NULL. Исправлен случай, когда коррелированный подзапрос возвращает пустой набор результатов. #81632 (Dmitry Novik).
- Исправлена ошибка
Unexpected relative path for a deduplicated partво время операцииATTACHкReplicatedMergeTree. #81647 (Azat Khuzhin). - Параметр запроса
use_iceberg_partition_pruningне будет применяться к хранилищу Iceberg, так как для него используется глобальный контекст, а не контекст запроса. Это не критично, так как его значение по умолчанию — true. Этот PR исправляет это. #81673 (Han Fei). - Бэкпортировано в #82128: исправлена ошибка "Context has expired" при слияниях, когда словарь использовался в выражении TTL. #81690 (Azat Khuzhin).
- Добавлена проверка настройки MergeTree
merge_max_block_size, чтобы гарантировать, что значение не равно нулю. #81693 (Bharat Nallan). - Исправлены проблемы в
clickhouse-local, связанные с зависающими запросамиDROP VIEW. #81705 (Bharat Nallan). - Исправлен join в StorageRedis в некоторых случаях. #81736 (Pervakov Grigorii).
- Исправлено падение в
ConcurrentHashJoinпри использовании пустогоUSING ()и включённом старом анализаторе. #81754 (Nikita Taranov). - Исправление в Keeper: блокировать фиксацию новых логов при наличии некорректной записи в логах. Ранее, если лидер некорректно применял часть логов, он продолжал фиксировать новые, хотя фолловер обнаруживал несоответствие дайджеста и прерывал работу. #81780 (Antonio Andelic).
- Исправлена проблема, из-за которой требуемые столбцы не считывались при обработке скалярных коррелированных подзапросов. Исправляет #81716. #81805 (Dmitry Novik).
- Кто-то засорил наш код Kusto. Я всё подчистил. Это закрывает #81643. #81885 (Alexey Milovidov).
- В предыдущих версиях сервер возвращал чрезмерный объём данных в ответ на запросы к
/js. Это закрывает #61890. #81895 (Alexey Milovidov). - Ранее определения движка таблиц
MongoDBмогли включать компонент пути в аргументеhost:port, который просто игнорировался. Интеграция сMongoDBотказывалась загружать такие таблицы. С этим исправлением теперь допускается загрузка таких таблиц, при этом компонент пути игнорируется, если движокMongoDBуказан с пятью аргументами, а имя базы данных берётся из аргументов. Примечание: исправление не применяется к вновь создаваемым таблицам или запросам с табличной функциейmongo, а также к источникам словарей и именованным коллекциям. #81942 (Vladimir Cherkasov). - Исправлено возможное падение
Aggregatorпри возникновении исключения во время слияния. #82022 (Nikita Taranov). - Исправлена ошибка copy-paste в
arraySimilarity, запрещено использование весов типовUInt32иInt32. Обновлены тесты и документация. #82103 (Mikhail f. Shiryaev). - Исправлена возможная гонка данных между потоком подсказок и основным потоком клиента. #82233 (Azat Khuzhin).
Улучшение сборки/тестирования/упаковки
- Используем
postgres16.9. #81437 (Konstantin Bogdanov). - Используйте
openssl3.2.4. #81438 (Konstantin Bogdanov). - Использовать версию
abseil-cppот 2025-01-27. #81440 (Konstantin Bogdanov). - Используйте
mongo-c-driver1.30.4. #81449 (Konstantin Bogdanov). - Используйте
krb51.21.3-final. #81453 (Konstantin Bogdanov). - Используйте
orc2.1.2. #81455 (Konstantin Bogdanov). - Используйте
grpc1.73.0. #81629 (Konстантин Богданов). - Используйте
delta-kernel-rsv0.12.1. #81707 (Konstantin Bogdanov). - Обновить
c-aresдоv1.34.5. #81159 (Konstantin Bogdanov). - Обновите
curlдо версии 8.14 для устранения уязвимостей CVE-2025-5025 и CVE-2025-4947. #81171 (larryluogit). - Обновлён
libarchiveдо версии 3.7.9 для устранения следующих уязвимостей: CVE-2024-20696 CVE-2025-25724 CVE-2024-48958 CVE-2024-57970 CVE-2025-1632 CVE-2024-48957 CVE-2024-48615. #81174 (larryluogit). - Обновите
libxml2до версии 2.14.3. #81187 (larryluogit). - Не копировать вендорные исходники Rust в
CARGO_HOME. #79560 (Konstantin Bogdanov). - Удалить зависимость от библиотеки Sentry, заменив её нашим собственным endpoint'ом. #80236 (Alexey Milovidov).
- Обновлены зависимости Python в CI-образах для устранения предупреждений Dependabot. #80658 (Raúl Marín).
- Повторно считывать флаг остановки реплицируемого DDL из Keeper при запуске, чтобы сделать тесты более надёжными при включённой инъекции сбоев в Keeper. #80964 (Alexander Gololobov).
- Использовать HTTPS для URL архива Ubuntu. #81016 (Raúl Marín).
- Обновлены зависимости Python в тестовых образах. #81042 (dependabot[bot]).
- Добавлен файл
flake.nixдля сборок Nix. #81463 (Konstantin Bogdanov). - Устранена зависимость
delta-kernel-rsот сетевого доступа во время сборки. Закрывает #80609. #81602 (Konstantin Bogdanov). Подробнее см. в статье A Year of Rust in ClickHouse.
Релиз ClickHouse 25.5, 2025-05-22
Обратные несовместимые изменения
- Функция
geoToH3теперь принимает аргументы в порядке (lat, lon, res) (что соответствует другим геометрическим функциям). Пользователи, которые хотят сохранить прежний порядок аргументов (lon, lat, res), могут установить настройкуgeotoh3_argument_order = 'lon_lat'. #78852 (Pratima Patel). - Добавлена настройка файлового кэша
allow_dynamic_cache_resize, по умолчаниюfalse, позволяющая динамически изменять размер файлового кэша. Причина: в некоторых средах (ClickHouse Cloud) все события масштабирования происходят через перезапуск процесса, и мы хотим, чтобы эта возможность была явно отключена, чтобы иметь больший контроль над поведением, а также в качестве меры безопасности. Этот PR помечен как обратно несовместимое изменение, потому что в старых версиях динамическое изменение размера кэша работало по умолчанию без специальной настройки. #79148 (Kseniia Sumarokova). - Удалена поддержка устаревших типов индексов
annoyиusearch. Оба уже долгое время были заглушками, то есть любая попытка использовать эти устаревшие индексы всё равно возвращала ошибку. Если у вас всё ещё есть индексыannoyиusearch, пожалуйста, удалите их. #79802 (Robert Schulze). - Удалена серверная настройка
format_alter_commands_with_parentheses. Эта настройка была добавлена и по умолчанию отключена в версии 24.2. В версии 25.2 она была включена по умолчанию. Поскольку сейчас нет LTS-версий, которые не поддерживают новый формат, мы можем удалить эту настройку. #79970 (János Benjamin Antal). - Реализация
delta-kernel-rsдля хранилищаDeltaLakeтеперь включена по умолчанию. #79541 (Kseniia Sumarokova). - Если чтение из
URLвключает несколько перенаправлений, настройкаenable_url_encodingтеперь корректно применяется ко всем перенаправлениям в цепочке. #79563 (Shankar Iyer). Значение по умолчанию настройкиenble_url_encodingтеперь равноfalse. #80088 (Shankar Iyer).
Новая возможность
- Поддержка скалярных коррелированных подзапросов в предложении WHERE. Закрывает #6697. #79600 (Dmitry Novik). Поддержка коррелированных подзапросов в списке проекций в простых случаях. #79925 (Dmitry Novik). #76078 (Dmitry Novik). Теперь покрывает 100% набора тестов TPC-H.
- Векторный поиск с использованием индекса векторного сходства получил статус бета-версии (ранее был экспериментальной функцией). #80164 (Robert Schulze).
- Добавлена поддержка типов геоданных в формате
Parquet. Это закрывает #75317. #79777 (scanhex12). - Новые функции
sparseGrams,sparseGramsHashes,sparseGramsHashesUTF8,sparseGramsUTF8для вычисления «разреженных n-грамм» — надёжного алгоритма извлечения подстрок для индексирования и поиска. #79517 (scanhex12). clickhouse-local(и его сокращённый псевдонимch) теперь неявно добавляютFROM table, когда есть входные данные для обработки. Это закрывает #65023. Также в clickhouse-local включено автоматическое определение формата, если не указан--input-formatи обрабатывается обычный файл. #79085 (Alexey Milovidov).- Добавлены функции
stringBytesUniqиstringBytesEntropyдля обнаружения потенциально случайных или зашифрованных данных. #79350 (Sachin Kumar Singh). - Добавлены функции кодирования и декодирования base32. #79809 (Joanna Hulboj).
- Добавлены функции
getServerSettingиgetMergeTreeSetting. Закрывает #78318. #78439 (NamNguyenHoai). - Добавлена новая настройка
iceberg_enable_version_hintдля использования файлаversion-hint.text. #78594 (Arnaud Briche). - Позволяет очищать (TRUNCATE) отдельные таблицы в базе данных, отфильтрованные с помощью ключевого слова
LIKE. #78597 (Yarik Briukhovetskyi). - Добавлена поддержка виртуального столбца
_part_starting_offsetв таблицах семействаMergeTree. Этот столбец представляет собой накопительный счетчик строк по всем предшествующим частям, вычисляемый во время выполнения запроса на основе текущего списка частей. Накопительные значения сохраняются на протяжении выполнения запроса и остаются актуальными даже после отсечения частей. Связанная внутренняя логика была переработана для поддержки такого поведения. #79417 (Amos Bird). - Добавлены функции
divideOrNull,moduloOrNull,intDivOrNull,positiveModuloOrNull, которые возвращают NULL, если правый аргумент равен нулю. #78276 (kevinyhzou). - Векторный поиск в ClickHouse теперь поддерживает как предварительную, так и последующую фильтрацию и предоставляет соответствующие настройки для более тонкого управления. (issue #78161). #79854 (Shankar Iyer).
- Добавлены функции
icebergHashиicebergBucket. Добавлена поддержка отсечения файлов с данными в таблицахIceberg, партиционированных с использованиемbucket transfom. #79262 (Daniil Ivanik).
Экспериментальная функциональность
- Новые типы данных
Time/Time64:Time(HHH:MM:SS) иTime64(HHH:MM:SS.<fractional>) и некоторые базовые функции приведения типов, а также функции для взаимодействия с другими типами данных. Кроме того, существующая функция toTime была переименована в toTimeWithFixedDate, так как функция toTime требуется для функции приведения типа. #75735 (Yarik Briukhovetskyi). - Каталог Hive Metastore для озера данных Iceberg. #77677 (scanhex12).
- Индексы типа
full_textбыли переименованы вgin. Это соответствует более привычной терминологии PostgreSQL и других баз данных. Существующие индексы типаfull_textпо‑прежнему можно загружать, но при попытке использовать их в поиске они будут выбрасывать исключение (с предложением использовать индексыgin). #79024 (Robert Schulze).
Повышение производительности
- Изменён формат Compact-частей, чтобы сохранять метки для каждого подпотока и тем самым обеспечить чтение отдельных подстолбцов. Старый формат Compact по-прежнему поддерживается для чтения и может быть включён для записи с помощью настройки MergeTree
write_marks_for_substreams_in_compact_parts. По умолчанию она отключена для более безопасного обновления, так как она изменяет способ хранения Compact-частей. В одном из следующих релизов она будет включена по умолчанию. #77940 (Pavel Kruglov). - Добавлена поддержка переноса условий с подстолбцами в PREWHERE. #79489 (Pavel Kruglov).
- Ускорена работа вторичных индексов за счет вычисления их выражений одновременно на нескольких гранулах. #64109 (Alexey Milovidov).
- Параметр
compile_expressions(JIT-компилятор для фрагментов обычных выражений) теперь включён по умолчанию. Это закрывает #51264, #56386 и #66486. #79907 (Alexey Milovidov). - Добавлена новая настройка:
use_skip_indexes_in_final_exact_mode. Если запрос к таблицеReplacingMergeTreeсодержит клаузу FINAL, чтение только диапазонов таблицы на основе пропускающих индексов может привести к некорректному результату. Эта настройка позволяет гарантировать корректные результаты за счет сканирования более новых частей таблицы, которые пересекаются с диапазонами первичного ключа, возвращаемыми пропускающим индексом. Установите значение 0, чтобы отключить, и 1 — чтобы включить. #78350 (Shankar Iyer). - Функции кластерных таблиц объектного хранилища (например,
s3Cluster) теперь распределяют файлы по репликам для чтения на основе консистентного хеша, чтобы улучшить локальность кэша. #77326 (Andrej Hoos). - Улучшена производительность
S3Queue/AzureQueueза счёт возможности параллельной вставки данных (INSERT), которую можно включить с помощью настройки очередиparallel_inserts=true. Ранее S3Queue/AzureQueue могли выполнять в несколько потоков только первую часть конвейера (загрузка, парсинг), аINSERTвыполнялся в одном потоке. При этом именноINSERTпочти всегда является узким местом. Теперь производительность масштабируется почти линейно с числом потоковprocessing_threads_num. #77671 (Azat Khuzhin). Более справедливое ограничение max_processed_files_before_commit в S3Queue/AzureQueue. #79363 (Azat Khuzhin). - Введён порог (настраивается с помощью
parallel_hash_join_threshold), при котором выполняется откат к алгоритмуhash, если размер правой таблицы меньше порогового значения. #76185 (Nikita Taranov). - Теперь для определения размера задачи при чтении с включёнными параллельными репликами мы используем число реплик. Это обеспечивает более равномерное распределение нагрузки между репликами, когда объём данных для чтения не слишком велик. #78695 (Nikita Taranov).
- Включена поддержка параллельного слияния состояний
uniqExactна финальной стадии распределённой агрегации. #78703 (Nikita Taranov). - Исправлена возможная деградация производительности при параллельном слиянии состояний
uniqExactдля агрегации с ключом. #78724 (Nikita Taranov). - Снижено количество вызовов API List Blobs к хранилищу Azure. #78860 (Julia Kartseva).
- Исправлена проблема с производительностью распределённого INSERT SELECT при использовании параллельных реплик. #79441 (Azat Khuzhin).
- Предотвращено выполнение очистки в
LogSeriesLimiterпри каждом создании экземпляра, чтобы избежать конфликтов блокировок и деградации производительности в высококонкурентных сценариях. #79864 (filimonov). - Ускорены запросы за счет тривиальной оптимизации count. #79945 (Raúl Marín).
- Улучшен инлайнинг некоторых операций с
Decimal. #79999 (Konstantin Bogdanov). - По умолчанию включить параметр
input_format_parquet_bloom_filter_push_down(значение true). Также исправить ошибку в истории изменений настроек. #80058 (Alexey Milovidov). - Оптимизированы мутации
ALTER ... DELETEдля кусков, в которых подлежат удалению все строки. Теперь в таких случаях вместо исходного куска сразу создаётся пустой кусок, и мутация не выполняется. #79307 (Anton Popov). - Избегать лишнего копирования блока при вставке в Compact-часть по возможности. #79536 (Pavel Kruglov).
- Добавлена настройка
input_format_max_block_size_bytes, позволяющая ограничить размер блоков, создаваемых во входных форматах, в байтах. Это помогает избежать избыточного потребления памяти при импорте данных, когда строки содержат большие значения. #79495 (Pavel Kruglov). - Удалены guard-страницы для потоков и async_socket_for_remote/use_hedge_requests. Изменён метод выделения памяти в
FiberStackсmmapнаaligned_alloc. Поскольку это дробит VMA, при высокой нагрузке может быть достигнут предел vm.max_map_count. #79147 (Sema Checherinda). - Ленивая материализация с параллельными репликами. #79401 (Igor Nikonov).
Улучшение
- Добавлена возможность применять операции лёгкого удаления «на лету» (при настройках
lightweight_deletes_sync = 0,apply_mutations_on_fly = 1). #79281 (Anton Popov). - Если данные в формате pretty выводятся в терминале и следующий блок имеет те же ширины столбцов, он может быть продолжением предыдущего блока, «склеивая» его с предыдущим за счет перемещения курсора вверх. Это закрывает #79333. Возможность управляется новой настройкой
output_format_pretty_glue_chunks. #79339 (Alexey Milovidov). - Функция
isIPAddressInRangeрасширена и теперь поддерживает типы данныхString,IPv4,IPv6,Nullable(String),Nullable(IPv4)иNullable(IPv6). #78364 (YjyJeff). - Добавлена возможность динамически изменять настройки пула подключений движка
PostgreSQL. #78414 (Samay Sharma). - Добавлена возможность указывать
_part_offsetв обычной проекции. Это первый шаг к построению индекса проекции. Эту возможность можно использовать вместе с #58224, и она может помочь в решении #63207. #78429 (Amos Bird). - Добавлены новые столбцы (
create_queryиsource) в таблицуsystem.named_collections. Закрывает #78179. #78582 (MikhailBurdukov). - В системной таблице
system.query_condition_cacheдобавлено новое полеcondition. Оно хранит условие в виде открытого текста, хэш которого используется в качестве ключа в кэше условий запроса. #78671 (Robert Schulze). - Индексы векторного сходства теперь можно создавать для столбцов типа
BFloat16. #78850 (Robert Schulze). - Добавлена поддержка Unix-меток времени с дробной частью при разборе
DateTime64в режиме best-effort. #78908 (Pavel Kruglov). - В реализации delta-kernel хранилища
DeltaLakeисправлен режим сопоставления столбцов и добавлены тесты эволюции схемы. #78921 (Kseniia Sumarokova). - Улучшена вставка в столбец
Variantв формате VALUES за счёт более корректного преобразования значений. #78923 (Pavel Kruglov). - Функция
tokensбыла расширена и теперь принимает дополнительный аргумент «tokenizer», а также дополнительные аргументы, специфичные для выбранного токенизатора. #79001 (Elmi Ahmadov). - Оператор
SHOW CLUSTERтеперь разворачивает макросы (если они есть) в своём аргументе. #79006 (arf42). - Функции хеширования теперь поддерживают значения
NULLвнутри массивов, кортежей и отображений (map). (задачи #48365 и #48623). #79008 (Michael Kolupaev). - Обновить cctz до версии 2025a. #79043 (Raúl Marín).
- Изменена обработка stderr по умолчанию для UDF на "log_last". Это повышает удобство использования. #79066 (Alexey Milovidov).
- Сделать вкладки в веб-интерфейсе поддерживающими отмену действий. Это закрывает задачу #71284. #79084 (Alexey Milovidov).
- Удалены настройки в ходе
recoverLostReplicaаналогично тому, как это было сделано в https://github.com/ClickHouse/ClickHouse/pull/78637. #79113 (Nikita Mikhaylov). - Добавлены события профилирования:
ParquetReadRowGroupsиParquetPrunedRowGroupsдля профилирования отсечения по индексу Parquet. #79180 (flynn). - Поддержка выполнения команды
ALTERдля базы данных в кластере. #79242 (Tuan Pham Anh). - Явно пропускайте пропуски запусков сбора статистики для QueryMetricLog, иначе журналу потребуется много времени, чтобы догнать текущее время. #79257 (Mikhail Artemenko).
- Небольшие оптимизации чтения форматов на основе
Arrow. #79308 (Bharat Nallan). - Настройка
allow_archive_path_syntaxпо ошибке была помечена как экспериментальная. Добавлен тест, чтобы предотвратить включение экспериментальных настроек по умолчанию. #79320 (Alexey Milovidov). - Параметры кэша страниц сделали настраиваемыми на уровне отдельного запроса. Это необходимо для более быстрого проведения экспериментов и возможности тонкой настройки запросов с высокой пропускной способностью и низкой задержкой. #79337 (Alexey Milovidov).
- Не выводить числовые подсказки в «красивом» формате для чисел, которые выглядят как типичные 64-битные хэши. Это закрывает #79334. #79338 (Alexey Milovidov).
- Цвета графиков на расширенных дашбордах будут рассчитываться на основе хеша соответствующего запроса. Это упрощает запоминание и поиск графика при прокрутке дашборда. #79341 (Alexey Milovidov).
- Добавлена асинхронная метрика
FilesystemCacheCapacity— общая ёмкость виртуальной файловой системыcache. Полезно для глобального мониторинга инфраструктуры. #79348 (Alexey Milovidov). - Оптимизирован доступ к system.parts (размеры столбцов и индексов читаются только при явном запросе). #79352 (Azat Khuzhin).
- Вычислять только необходимые поля для запроса
'SHOW CLUSTER <name>'вместо всех полей. #79368 (Tuan Pham Anh). - Добавлена возможность указывать настройки хранилища для
DatabaseCatalog. #79407 (Kseniia Sumarokova). - Добавлена поддержка локального хранилища в
DeltaLake. #79416 (Kseniia Sumarokova). - Добавлена настройка уровня запроса для включения delta-kernel-rs:
allow_experimental_delta_kernel_rs. #79418 (Kseniia Sumarokova). - Исправлена возможная ситуация с бесконечным циклом при перечислении блобов в хранилищах блобов Azure/S3. #79425 (Alexander Gololobov).
- Добавлена настройка кеша файловой системы
max_size_ratio_to_total_space. #79460 (Kseniia Sumarokova). - Для
clickhouse-benchmarkперенастроена опцияreconnect, чтобы принимать значения 0, 1 или N, определяющие число переподключений. #79465 (Sachin Kumar Singh). - Разрешить
ALTER TABLE ... MOVE|REPLACE PARTITIONдля таблиц, расположенных на разных дискахplain_rewritable. #79566 (Julia Kartseva). - Индекс векторного сходства теперь также используется, если опорный вектор имеет тип
Array(BFloat16). #79745 (Shankar Iyer). - Добавлены столбцы last_error_message, last_error_trace и query_id в таблицу system.error_log. Связанный тикет #75816. #79836 (Andrei Tinikov).
- По умолчанию включена отправка отчётов о сбоях. Это можно отключить в файле конфигурации сервера. #79838 (Alexey Milovidov).
- Системная таблица
system.functionsтеперь показывает, в какой версии ClickHouse функции впервые появились. #79839 (Robert Schulze). - Добавлена настройка
access_control_improvements.enable_user_name_access_type. Эта настройка позволяет включать или отключать детализированные привилегии GRANT для пользователей и ролей, добавленные в https://github.com/ClickHouse/ClickHouse/pull/72246. Имеет смысл отключить эту настройку, если в кластере есть реплики версии ниже 25.1. #79842 (pufit). - Корректная реализация метода
ASTSelectWithUnionQuery::clone()теперь также учитывает полеis_normalized. Это может помочь с #77569. #79909 (Nikita Mikhaylov). - Исправлено несогласованное форматирование некоторых запросов с оператором EXCEPT. Если левая часть оператора EXCEPT заканчивается на
*, отформатированный запрос теряет круглые скобки и затем интерпретируется как*с модификаторомEXCEPT. Эти запросы обнаруживаются фаззером и маловероятно, что они встретятся на практике. Это закрывает #79950. #79952 (Alexey Milovidov). - Небольшое улучшение разбора типа
JSONза счёт использования кэша порядка десериализации вариантов. #79984 (Pavel Kruglov). - Добавлена настройка
s3_slow_all_threads_after_network_error. #80035 (Vitaly Baranov). - Уровень логирования сообщений о выбранных для слияния частях был некорректным (Information). Закрывает #80061. #80062 (Alexey Milovidov).
- trace-visualizer: добавить runtime/share во всплывающие подсказки и сообщения о статусе. #79040 (Sergei Trifonov).
- trace-visualizer: загружать данные с сервера ClickHouse. #79042 (Sergei Trifonov).
- Добавлены метрики для отслеживания неуспешных слияний. #79228 (Miсhael Stetsyuk).
clickhouse-benchmarkбудет отображать процент выполнения, исходя из максимального числа итераций, если оно задано. #79346 (Alexey Milovidov).- Добавлен визуализатор таблицы system.parts. #79437 (Sergei Trifonov).
- Добавлен инструмент для анализа задержек запросов. #79978 (Sergei Trifonov).
Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе)
- Исправлено переименование столбцов, отсутствующих в части. #76346 (Anton Popov).
- Материализованное представление может начать работать слишком поздно, например после таблицы Kafka, которая передаёт в него данные. #72123 (Ilya Golshtein).
- Исправлена перезапись запроса
SELECTпри созданииVIEWс включённым анализатором. Закрывает #75956. #76356 (Dmitry Novik). - Исправлено применение настройки
async_insert, получаемой с сервера (черезapply_settings_from_server), которое ранее приводило к ошибкамUnknown packet 11 from serverна клиенте. #77578 (Azat Khuzhin). - Исправлена проблема, из-за которой обновляемое материализованное представление в реплицируемой базе данных не работало на недавно добавленных репликах. #77774 (Michael Kolupaev).
- Исправлена проблема, из-за которой обновляемые материализованные представления приводили к повреждению резервных копий. #77893 (Michael Kolupaev).
- Устранена давняя логическая ошибка в функции
transform. #78247 (Yarik Briukhovetskyi). - Исправлены некоторые случаи, когда вторичный индекс не применялся анализатором. Исправлены #65607, #69373. #78485 (Nikolai Kochetov).
- Исправлена выгрузка событий профилирования (
NetworkSendElapsedMicroseconds/NetworkSendBytes) для протокола HTTP с включённым сжатием (погрешность не должна превышать размер буфера, обычно около 1MiB). #78516 (Azat Khuzhin). - Исправлен анализатор, вызывавший LOGICAL_ERROR при
JOIN ... USINGс участием столбцаALIAS— теперь вместо этого выдаётся корректная ошибка. #78618 (Yakov Olkhovskiy). - Исправлен анализатор:
CREATE VIEW ... ON CLUSTERзавершался с ошибкой, еслиSELECTсодержал позиционные параметры. #78663 (Yakov Olkhovskiy). - Исправлена ошибка
Block structure mismatchпри выполненииINSERT SELECTв табличную функцию с автоопределением схемы, еслиSELECTсодержит скалярные подзапросы. #78677 (Pervakov Grigorii). - Исправлен анализатор запросов: при prefer_global_in_and_join = 1 для распределённой таблицы в запросе SELECT функция
inдолжна быть заменена наglobalIn. #78749 (Yakov Olkhovskiy). - Исправлено несколько типов запросов
SELECT, читающих из таблиц с движкомMongoDBили табличной функциейmongodb: запросы с неявным преобразованием константного значения в секцииWHERE(например,WHERE datetime = '2025-03-10 00:00:00'); запросы сLIMITиGROUP BY. Ранее они могли возвращать некорректный результат. #78777 (Anton Popov). - Исправлено преобразование между разными типами JSON. Теперь оно выполняется простым приведением типов через преобразование к/от String. Это менее эффективно, но на 100% корректно. #78807 (Pavel Kruglov).
- Исправлена логическая ошибка при преобразовании типа Dynamic в Interval. #78813 (Pavel Kruglov).
- Исправлен откат столбца при ошибке парсинга JSON. #78836 (Pavel Kruglov).
- Исправлена ошибка «bad cast» при выполнении join с использованием константного столбца-псевдонима. #78848 (Vladimir Cherkasov).
- Не разрешать использование PREWHERE в материализованных представлениях для столбцов, у которых в представлении и целевой таблице разные типы. #78889 (Pavel Kruglov).
- Исправлена логическая ошибка при разборе некорректных бинарных данных столбца типа Variant. #78982 (Pavel Kruglov).
- Выбрасывать исключение, если размер пакета Parquet установлен в 0. Ранее при output_format_parquet_batch_size = 0 ClickHouse зависал. Теперь это поведение исправлено. #78991 (daryawessely).
- Исправлена десериализация дискриминаторов типа Variant в базовом формате в компактных партах. Ошибка была внесена в https://github.com/ClickHouse/ClickHouse/pull/55518. #79000 (Pavel Kruglov).
- Словари типа
complex_key_ssd_cacheтеперь отклоняют нулевые или отрицательные значения параметровblock_sizeиwrite_buffer_size(issue #78314). #79028 (Elmi Ahmadov). - Избегайте использования Field для неагрегированных столбцов в SummingMergeTree. Это может привести к неожиданным ошибкам при работе с типами Dynamic/Variant, которые используются в SummingMergeTree. #79051 (Pavel Kruglov).
- Исправлено чтение из материализованного представления с распределённой целевой таблицей и отличающимся заголовком в анализаторе. #79059 (Pavel Kruglov).
- Исправляет ошибку, из-за которой
arrayUnion()возвращал лишние (некорректные) значения в таблицах при пакетных вставках. Исправляет #75057. #79079 (Peter Nguyen). - Исправлена ошибка сегментации в
OpenSSLInitializer. Закрывает #79092. #79097 (Konstantин Bogdanov). - Всегда задавайте префикс для операции ListObject в S3. #79114 (Azat Khuzhin).
- Исправляет ошибку, из-за которой arrayUnion() возвращала лишние (некорректные) значения в таблицах, в которые выполнялись пакетные вставки. Исправляет #79157. #79158 (Peter Nguyen).
- Исправлена логическая ошибка после проталкивания фильтра. #79164 (Pervakov Grigorii).
- Исправлена работа движка таблиц DeltaLake с реализацией delta-kernel при использовании через HTTP-эндпоинты, а также исправлен NOSIGN. Закрывает #78124. #79203 (Kseniia Sumarokova).
- Исправление в Keeper: предотвращено срабатывание watch-уведомлений при неуспешных multi-запросах. #79247 (Antonio Andelic).
- Запретить использование типов Dynamic и JSON в выражении
IN. При текущей реализацииINэто может приводить к некорректным результатам. Корректная поддержка этих типов вINсложна и может быть реализована в будущем. #79282 (Pavel Kruglov). - Исправлена проверка на дублирующиеся пути при разборе типа JSON. #79317 (Pavel Kruglov).
- Исправлены проблемы с подключением SecureStreamSocket. #79383 (Konstantin Bogdanov).
- Исправлена проблема с загрузкой дисков plain_rewritable, содержащих данные. #79439 (Julia Kartseva).
- Исправлен сбой при динамическом обнаружении подстолбцов в Wide‑частях таблиц MergeTree. #79466 (Pavel Kruglov).
- Проверяйте длину имени таблицы только для первичных запросов
CREATE. Не выполняйте эту проверку для последующих запросовCREATE, чтобы избежать проблем с обратной совместимостью. #79488 (Miсhael Stetsyuk). - Исправлена ошибка
Block structure mismatchв ряде случаев при работе с таблицами с разрежёнными столбцами. #79491 (Anton Popov). - Исправлены два случая, приводившие к ошибке "Logical Error: Can't set alias of * of Asterisk on alias". #79505 (Raúl Marín).
- Исправлено использование некорректных путей при переименовании базы данных Atomic. #79569 (Tuan Pham Anh).
- Исправлена работа ORDER BY по JSON-столбцу совместно с другими столбцами. #79591 (Pavel Kruglov).
- Исправлено дублирование результатов при чтении с удалённого сервера при отключённых
use_hedged_requestsиallow_experimental_parallel_reading_from_replicas. #79599 (Eduard Karacharov). - Исправлено аварийное завершение работы реализации delta-kernel при использовании Unity Catalog. #79677 (Kseniia Sumarokova).
- Реализовано разрешение макросов для кластеров автообнаружения. #79696 (Anton Ivashkin).
- Корректно обрабатываются случаи некорректной настройки параметра page_cache_limits. #79805 (Bharat Nallan).
- Исправляет результат работы SQL‑функции
formatDateTime, если спецификатор формата переменной длины (например,%W, он же день недели —Monday,Tuesdayи т. д.) следует за составным спецификатором формата (который выводит сразу несколько компонентов, например,%D, он же американский формат даты05/04/25). #79835 (Robert Schulze). - IcebergS3 поддерживает оптимизацию подсчёта, а IcebergS3Cluster — нет. В результате значение count(), возвращаемое в кластерном режиме, может быть кратно количеству реплик. #79844 (wxybear).
- Исправляет ошибку AMBIGUOUS_COLUMN_NAME при отложенной материализации, если до применения проекции ни один столбец не используется при выполнении запроса. Например, SELECT * FROM t ORDER BY rand() LIMIT 5. #79926 (Igor Nikonov).
- Пароль в запросе
CREATE DATABASE datalake ENGINE = DataLakeCatalog(\'http://catalog:8181\', \'admin\', \'password\')теперь скрывается. #79941 (Han Fei). - Добавлена возможность указывать псевдоним в JOIN USING. Указывайте этот псевдоним, если столбец был переименован (например, из‑за ARRAY JOIN). Это исправляет #73707. #79942 (Nikolai Kochetov).
- Обеспечена корректная работа материализованных представлений с UNION на новых репликах. #80037 (Samay Sharma).
- Спецификатор формата
%eв SQL‑функцииparseDateTimeтеперь распознаёт однозначные значения дня месяца (например,3), тогда как ранее требовался ведущий пробел (например,3). Это делает его поведение совместимым с MySQL. Чтобы сохранить прежнее поведение, установите настройкуparsedatetime_e_requires_space_padding = 1. (issue #78243). #80057 (Robert Schulze). - Исправлено появление предупреждений
Cannot find 'kernel' in '[...]/memory.stat'в логах ClickHouse (issue #77410). #80129 (Robert Schulze). - Проверяется размер стека в FunctionComparison, чтобы избежать аварийного завершения работы из-за переполнения стека. #78208 (Julia Kartseva).
- Исправлено состояние гонки при выполнении запроса SELECT из
system.workloads. #78743 (Sergei Trifonov). - Исправление: ленивая материализация в распределённых запросах. #78815 (Igor Nikonov).
- Исправлено преобразование из
Array(Bool)вArray(FixedString). #78863 (Nikita Taranov). - Выбор версии Parquet сделан менее запутанным. #78818 (Michael Kolupaev).
- Исправлено слияние
ReservoirSamplerс самим собой. #79031 (Nikita Taranov). - Исправлено хранение таблицы вставки в клиентском контексте. #79046 (Pervakov Grigorii).
- Исправлен порядок уничтожения членов данных классов
AggregatingSortedAlgorithmиSummingSortedAlgorithm. #79056 (Nikita Taranov). enable_user_name_access_typeне должен влиять на тип доступаDEFINER. #80026 (pufit).- Запрос к системной базе данных может зависать, если метаданные системной базы данных хранятся в Keeper. #79304 (Mikhail Artemenko).
Улучшения сборки/тестирования/упаковки
- Реализована возможность повторного использования уже собранного бинарного файла
chcacheвместо его пересборки при каждом запуске. #78851 (János Benjamin Antal). - Добавлено ожидание паузы в NATS. #78987 (Dmitry Novikov).
- Исправлена некорректная публикация ARM-сборки как
amd64compat. #79122 (Alexander Gololobov). - Используется заранее сгенерированный ассемблерный код для OpenSSL. #79386 (Konstantin Bogdanov).
- Исправления, позволяющие собирать с
clang20. #79588 (Konstantin Bogdanov). chcache: поддержка кэширования на Rust. #78691 (Konstantin Bogdanov).- Добавлена информация для раскрутки стека (unwind information) для ассемблерных файлов
zstd. #79288 (Michael Kolupaev).
Релиз ClickHouse 25.4, 2025-04-22
Обратные несовместимые изменения
- Проверяется, что все столбцы в материализованном представлении соответствуют целевой таблице, если
allow_materialized_view_with_bad_selectравенfalse. #74481 (Christoph Wurm). - Исправлены случаи, когда
dateTruncиспользуется с отрицательными аргументами Date/DateTime. #77622 (Yarik Briukhovetskyi). - Устаревшая интеграция с
MongoDBбыла удалена. Настройка сервераuse_legacy_mongodb_integrationустарела и теперь не оказывает никакого эффекта. #77895 (Robert Schulze). - Улучшена проверка
SummingMergeTree, чтобы пропускать агрегацию для столбцов, используемых в ключах партиционирования или сортировки. #78022 (Pervakov Grigorii).
Новая возможность
- Добавлено планирование слотов CPU для рабочих нагрузок, подробнее см. в документации. #77595 (Sergei Trifonov).
clickhouse-localбудет сохранять базы данных после перезапуска, если указать аргумент командной строки--path. Тем самым закрывается #50647. Тем самым закрывается #49947. #71722 (Alexey Milovidov).- Отклонять запросы, когда сервер перегружен. Решение принимается на основе отношения времени ожидания (
OSCPUWaitMicroseconds) к времени занятости (OSCPUVirtualTimeMicroseconds). Запрос с некоторой вероятностью отклоняется, если это отношение находится в диапазоне междуmin_os_cpu_wait_time_ratio_to_throwиmax_os_cpu_wait_time_ratio_to_throw(это настройки на уровне запроса). #63206 (Alexey Katsman). - Путешествие во времени в
Iceberg: добавлена настройка для выполнения запросов к таблицамIcebergпо состоянию на указанный момент времени. #71072 (Brett Hoerner). #77439 (Daniil Ivanik). - Кэш метаданных
Icebergв памяти, который хранит файлы манифестов и их список, а такжеmetadata.json, чтобы ускорить выполнение запросов. #77156 (Han Fei). - Добавлена поддержка движка таблицы
DeltaLakeдля Azure Blob Storage. Исправлено #68043. #74541 (Smita Kulkarni). - Добавлен кэш в оперативной памяти для десериализованных индексов поиска по сходству векторов. Это должно ускорить повторные запросы приблизительного поиска ближайших соседей (ANN). Размер нового кэша управляется настройками сервера
vector_similarity_index_cache_sizeиvector_similarity_index_cache_max_entries. Эта функция заменяет механизм кэширования пропускающих индексов, использовавшийся в более ранних версиях. #77905 (Shankar Iyer). - Реализована поддержка отсечения партиций (partition pruning) в DeltaLake. #78486 (Kseniia Sumarokova).
- Поддержка фонового обновления в таблицах
MergeTreeтолько для чтения, что позволяет выполнять запросы к обновляемым таблицам с неограниченным количеством распределённых читателей (нативное дата-озеро ClickHouse). #76467 (Alexey Milovidov). - Поддержка использования кастомных дисков для хранения файлов метаданных баз данных. Сейчас это можно настроить только на уровне всего сервера. #77365 (Tuan Pham Anh).
- Добавлена поддержка
ALTER TABLE ... ATTACH|DETACH|MOVE|REPLACE PARTITIONдля дискаplain_rewritable. #77406 (Julia Kartseva). - Добавлены параметры таблицы для настройки
SASLи учетных данных в движок таблицKafka. Это позволяет настраивать аутентификацию на основе SASL для Kafka и совместимых с Kafka систем непосредственно в инструкции CREATE TABLE, вместо использования файлов конфигурации или именованных коллекций. #78810 (Christoph Wurm). - Добавлена возможность задавать
default_compression_codecдля таблиц MergeTree: он используется, когда в CREATE-запросе явно не задан кодек для указанных столбцов. Это закрывает #42005. #66394 (gvoelfin). - Добавьте параметр
bind_hostв конфигурацию кластеров, чтобы ClickHouse мог использовать конкретную сеть для распределённых подключений. #74741 (Todd Yocum). - В таблицу
system.tablesдобавлен новый столбецparametrized_view_parameters. Закрывает https://github.com/clickhouse/clickhouse/issues/66756. #75112 (NamNguyenHoai). - Разрешить изменение комментария базы данных. Закрывает #73351 ### Запись в документации об изменениях, видимых пользователям. #75622 (NamNguyenHoai).
- Реализована поддержка аутентификации
SCRAM-SHA-256в протоколе совместимости PostgreSQL. #76839 (scanhex12). - Добавлены функции
arrayLevenshteinDistance,arrayLevenshteinDistanceWeightedиarraySimilarity. #77187 (Mikhail f. Shiryaev). - Настройка
parallel_distributed_insert_selectтеперь применяется кINSERT SELECTвReplicatedMergeTree(ранее для этого требовались таблицы движкаDistributed). #78041 (Igor Nikonov). - Добавлена функция
toInterval. Функция принимает два аргумента (значение и единицу измерения) и преобразует значение в соответствующий типInterval. #78723 (Andrew Davis). - Добавлено несколько удобных способов задания корневого файла
metadata.jsonв табличной функции и движке Iceberg. Закрывает #78455. #78475 (Daniil Ivanik). - Добавлена поддержка аутентификации по паролю в протоколе SSH в ClickHouse. #78586 (Nikita Mikhaylov).
Экспериментальная функциональность
- Поддержка коррелированных подзапросов в качестве аргумента выражения
EXISTSв предложенииWHERE. Закрывает #72459. #76078 (Dmitry Novik). - Добавлены функции
sparseGramsиsparseGramsHashesс вариантами для ASCII и UTF-8. Автор: scanhex12. #78176 (Pervakov Grigorii). Не используйте эти функции: реализация будет изменена в последующих версиях.
Повышение производительности
- Оптимизируйте производительность с помощью «ленивых» столбцов, которые читают данные после применения ORDER BY и LIMIT. #55518 (Xiaozhe Yu).
- Включено кеширование условий запроса по умолчанию. #79080 (Alexey Milovidov).
- Ускорено построение результата JOIN за счёт девиртуализации вызовов
col->insertFrom(). #77350 (Alexander Gololobov). - Объединять условия равенства из шага плана запроса
filterс условиемJOIN, если возможно, чтобы их можно было использовать как ключи хеш-таблицы. #78877 (Dmitry Novik). - Используйте динамический шардинг для JOIN, если ключ JOIN является префиксом первичного ключа (PK) для обеих таблиц. Эта оптимизация включается настройкой
query_plan_join_shard_by_pk_ranges(по умолчанию отключена). #74733 (Nikolai Kochetov). - Добавлена поддержка отсечения данных в
Icebergна основе нижних и верхних граничных значений столбцов. Исправлена проблема #77638. #78242 (alesapin). - Реализована простая оптимизация подсчёта для
Iceberg. Теперь запросы сcount()и без каких‑либо фильтров должны выполняться быстрее. Закрывает #77639. #78090 (alesapin). - Добавлена возможность настроить количество столбцов, которые при слияниях могут сбрасываться параллельно, с помощью
max_merge_delayed_streams_for_parallel_write(это должно примерно в 25 раз снизить потребление памяти для вертикальных слияний в S3). #77922 (Azat Khuzhin). - Отключайте
filesystem_cache_prefer_bigger_buffer_size, когда кэш используется пассивно, например для слияний. Это снижает потребление памяти при выполнении слияний. #77898 (Kseniia Sumarokova). - Теперь мы используем количество реплик для определения размера задачи чтения при включённых параллельных репликах. Это обеспечивает более равномерное распределение работы между репликами, когда объём читаемых данных не слишком велик. #78695 (Nikita Taranov).
- Добавлена поддержка асинхронной предварительной выборки (prefetch) операций ввода-вывода для формата
ORC, что повышает общую производительность за счет скрытия задержок удаленного ввода-вывода. #70534 (李扬). - Предварительно выделять память для асинхронных вставок, чтобы повысить производительность. #74945 (Ilya Golshtein).
- Уменьшено количество запросов к Keeper за счет замены одиночных запросов
getнаmultiReadтам, где он доступен, поскольку при увеличении числа реплик такие запросы могли создавать значительную нагрузку на Keeper. #56862 (Nikolay Degterinsky). - Незначительная оптимизация для выполнения функций с аргументами типа Nullable. #76489 (李扬).
- Оптимизирован
arraySort. #76850 (李扬). - Объединяйте метки одной и той же части и за один раз записывайте их в кэш условий запроса, чтобы сократить использование блокировок. #77377 (zhongyuankai).
- Оптимизирована производительность
s3Clusterдля запросов с одним раскрытием скобок. #77686 (Tomáš Hromada). - Оптимизирован ORDER BY по одиночным столбцам типа Nullable или LowCardinality. #77789 (李扬).
- Оптимизировано использование памяти форматом
Native. #78442 (Azat Khuzhin). - Тривиальная оптимизация: не переписывать
count(if(...))вcountIf, если требуется приведение типов. Закрывает #78564. #78565 (李扬). - Функция
hasAllтеперь может использовать полнотекстовые пропускающие индексыtokenbf_v1,ngrambf_v1. #77662 (UnamedRus). - Индекс векторного сходства мог выделять в оперативной памяти до двух раз больше ресурсов, чем требовалось. Это исправление изменяет стратегию выделения памяти, снижая ее потребление и повышая эффективность кэша индекса векторного сходства (issue #78056). #78394 (Shankar Iyer).
- Добавлен параметр
schema_typeдля таблицыsystem.metric_log, определяющий тип схемы. Допустимы три схемы:wide— текущая схема, каждая метрика/каждое событие в отдельном столбце (наиболее эффективна для чтения отдельных столбцов),transposed— аналогичноsystem.asynchronous_metric_log, метрики/события хранятся по строкам, и самая интересная —transposed_with_wide_view: создаётся подлежащая таблица со схемойtransposed, но также добавляется представление со схемойwide, которое транслирует запросы в подлежащую таблицу. Вtransposed_with_wide_viewсубсекундное разрешение для представления не поддерживается,event_time_microsecondsявляется лишь псевдонимом для сохранения обратной совместимости. #78412 (alesapin).
Улучшение
- Сериализация плана запроса для запросов к
Distributed. Добавлена новая настройкаserialize_query_plan. При ее включении запросы к таблицеDistributedбудут использовать сериализованный план запроса для удаленного выполнения. Это добавляет новый тип пакета в протокол TCP; для разрешения обработки этого пакета в конфигурацию сервера необходимо добавить<process_query_plan_packet>true</process_query_plan_packet>. #69652 (Nikolai Kochetov). - Добавлена поддержка чтения типа
JSONи его подстолбцов из представлений. #76903 (Pavel Kruglov). - Добавлена поддержка ALTER DATABASE ... ON CLUSTER. #79242 (Tuan Pham Anh).
- Операции обновления обновляемых материализованных представлений теперь отображаются в таблице
system.query_log. #71333 (Michael Kolupaev). - Пользовательские функции (UDF) теперь можно помечать как детерминированные с помощью нового параметра в их конфигурации. Кроме того, кэш запросов теперь проверяет, являются ли вызываемые в запросе UDF детерминированными. В этом случае результат запроса кэшируется. (Issue #59988). #77769 (Jimmy Aguilar Mena).
- Включена логика backoff для всех типов задач репликации. Это позволит снизить нагрузку на CPU, потребление памяти и размеры файлов логов. Добавлены новые настройки
max_postpone_time_for_failed_replicated_fetches_ms,max_postpone_time_for_failed_replicated_merges_msиmax_postpone_time_for_failed_replicated_tasks_ms, аналогичныеmax_postpone_time_for_failed_mutations_ms. #74576 (MikhailBurdukov). - Добавлен
query_idв таблицуsystem.errors. Закрывает #75815. #76581 (Vladimir Baikov). - Добавлена поддержка преобразования
UInt128вIPv6. Это позволяет выполнять операциюbitAndи арифметические операции дляIPv6, а также преобразовывать результат обратно вIPv6. Закрывает #76752. См. также #57707. #76928 (Muzammil Abdul Rehman). - По умолчанию специальные значения
Boolв текстовых форматах внутри типаVariantне разбираются. Это поведение можно включить с помощью настройкиallow_special_bool_values_inside_variant. #76974 (Pavel Kruglov). - Добавлена поддержка настраиваемого времени ожидания для задач низкоприоритетных запросов на уровне сессии и сервера. #77013 (VicoWu).
- Реализовано сравнение значений типа данных JSON. Теперь объекты JSON можно сравнивать так же, как Map. #77397 (Pavel Kruglov).
- Улучшена поддержка прав доступа в
system.kafka_consumers. Пробрасываются внутренние ошибкиlibrdkafka(стоит отметить, что эта библиотека оставляет желать лучшего). #77700 (Ilya Golshtein). - Добавлена проверка настроек движка таблицы Buffer. #77840 (Pervakov Grigorii).
- Добавлен параметр конфигурации
enable_hdfs_preadдля включения или отключения pread вHDFS. #77885 (kevinyhzou). - Добавлены события профилирования для количества
multi-запросов чтения и записи в ZooKeeper. #77888 (JackyWoo). - Разрешить создание и вставку данных во временные таблицы, когда включён
disable_insertion_and_mutation. #77901 (Xu Jia). - Уменьшено значение параметра
max_insert_delayed_streams_for_parallel_write(до 100). #77919 (Azat Khuzhin). - Исправлен разбор года в синтаксисе Joda (это из мира Java, если вам интересно), например для шаблона
yyy. #77973 (李扬). - Присоединение частей таблиц
MergeTreeбудет выполняться в порядке следования блоков, что важно для специальных алгоритмов слияния, напримерReplacingMergeTree. Это закрывает #71009. #77976 (Alexey Milovidov). - Правила маскировки запросов теперь могут генерировать
LOGICAL_ERRORв случае, если произошло совпадение. Это поможет проверить, не утекает ли заранее заданный пароль куда-либо в логах. #78094 (Nikita Mikhaylov). - Добавлен столбец
index_length_columnвinformation_schema.tablesдля повышения совместимости с MySQL. #78119 (Paweł Zakrzewski). - Добавлены две новые метрики:
TotalMergeFailuresиNonAbortedMergeFailures. Эти метрики нужны для выявления случаев, когда слишком много слияний завершается с ошибкой в течение короткого промежутка времени. #78150 (Miсhael Stetsyuk). - Исправлен некорректный разбор URL‑адресов S3, когда ключ не задан в URL в стиле path. #78185 (Arthur Passos).
- Исправлены некорректные значения асинхронных метрик
BlockActiveTime,BlockDiscardTime,BlockWriteTime,BlockQueueTimeиBlockReadTime(до изменения 1 секунда ошибочно сообщалась как 0.001). #78211 (filimonov). - Учитывается лимит
loading_retriesпри возникновении ошибок во время отправки данных в материализованное представление для StorageS3(Azure)Queue. Ранее такие ошибки повторялись неограниченное количество раз. #78313 (Kseniia Sumarokova). - В Delta Lake с реализацией
delta-kernel-rsулучшена производительность и исправлен индикатор прогресса. #78368 (Kseniia Sumarokova). - Добавлена поддержка директив
include,from_envиfrom_zkдля runtime-дисков. Закрывает #78177. #78470 (Kseniia Sumarokova). - Добавлено динамическое предупреждение в таблицу
system.warningsдля долго выполняющихся мутаций. #78658 (Bharat Nallan). - Добавлено поле
conditionв системную таблицуsystem.query_condition_cache. В нём хранится условие в открытом виде, хэш которого используется как ключ в кэше условий запросов. #78671 (Robert Schulze). - Разрешено использование пустого значения для секционирования Hive. #78816 (Arthur Passos).
- Исправлено приведение типов в операторе
INдляBFloat16(то есть теперьSELECT toBFloat16(1) IN [1, 2, 3];возвращает1). Закрывает #78754. #78839 (Raufs Dunamalijevs). - Не проверять части на других дисках в
MergeTreeпри указанииdisk = .... #78855 (Azat Khuzhin). - Сделать так, чтобы типы данных в
used_data_type_familiesвsystem.query_logзаписывались в виде канонических имён. #78972 (Kseniia Sumarokova). - Очистка настроек при
recoverLostReplicaвыполнена так же, как и в #78637. #79113 (Nikita Mikhaylov). - Использовать столбцы вставляемых данных для вывода схемы INFILE. #78490 (Pervakov Grigorii).
Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе)
- Исправлен некорректный анализ проекций при использовании
count(Nullable)в агрегатных проекциях, что устраняет проблему #74495. В этот PR также добавлены дополнительные логи в процессе анализа проекций, чтобы прояснить, почему проекция используется или не используется. #74498 (Amos Bird). - Исправлена проблема
Part <...> does not contain in snapshot of previous virtual parts. (PART_IS_TEMPORARILY_LOCKED)при выполненииDETACH PART. #76039 (Aleksei Filatov). - Исправлена некорректная работа пропускающих индексов с выражением, содержащим литералы, в анализаторе, а также удалены тривиальные приведения типов при анализе индексов. #77229 (Pavel Kruglov).
- Исправлена ошибка, из-за которой параметр запроса
close_sessionне имел эффекта, вследствие чего именованные сессии закрывались только послеsession_timeout. #77336 (Alexey Katsman). - Исправлено получение сообщений с сервера NATS без присоединённых материализованных представлений. #77392 (Dmitry Novikov).
- Исправлена логическая ошибка при чтении из пустого
FileLogс помощью табличной функцииmerge, закрыта #75575. #77441 (Vladimir Cherkasov). - Использовать настройки формата по умолчанию при сериализации
Dynamicиз общего варианта. #77572 (Pavel Kruglov). - Исправлена проверка наличия пути к данным таблицы на локальном диске. #77608 (Tuan Pham Anh).
- Исправлена отправка константных значений на удалённый сервер для некоторых типов данных. #77634 (Pavel Kruglov).
- Исправлен сбой из‑за истёкшего контекста в S3/AzureQueue. #77720 (Kseniia Sumarokova).
- Скрывать учетные данные в табличных движках RabbitMQ, Nats, Redis и AzureQueue. #77755 (Kseniia Sumarokova).
- Исправлено неопределённое поведение при сравнении значений
NaNвargMin/argMax. #77756 (Raúl Marín). - Регулярно проверяйте, были ли слияния и мутации отменены, даже если операция не порождает блоков для записи. #77766 (János Benjamin Antal).
- Исправлена проблема, когда обновляемое материализованное представление в реплицируемой базе данных не работало на новых репликах. #77774 (Michael Kolupaev).
- Исправлено возможное падение при возникновении ошибки
NOT_FOUND_COLUMN_IN_BLOCK. #77854 (Vladimir Cherkasov). - Исправлен сбой в S3/AzureQueue при заполнении данных. #77878 (Bharat Nallan).
- Отключён нечеткий поиск по истории в SSH-сервере (так как для него требуется библиотека skim). #78002 (Azat Khuzhin).
- Исправляет ошибку, при которой запрос векторного поиска по неиндексированному столбцу возвращал некорректные результаты, если в таблице был другой векторный столбец с заданным индексом векторного сходства. (Issue #77978). #78069 (Shankar Iyer).
- Исправлена незначительная ошибка в сообщении запроса "The requested output format is binary... Do you want to output it anyway? [y/N]". #78095 (Azat Khuzhin).
- Исправление ошибки в случае использования
toStartOfIntervalс аргументом origin, равным нулю. #78096 (Yarik Briukhovetskyi). - Запрещено задавать пустой параметр запроса
session_idв HTTP-интерфейсе. #78098 (Alexey Katsman). - Исправлена перезапись метаданных в базе данных
Replicated, которая могла произойти из-за выполнения запросаRENAMEсразу после запросаALTER. #78107 (Nikolay Degterinsky). - Устранён сбой в движке
NATS. #78108 (Dmitry Novikov). - Больше не выполняется попытка создать history_file во встроенном SSH-клиенте (в предыдущих версиях создание всегда завершалось неудачей, хотя попытка предпринималась). #78112 (Azat Khuzhin).
- Исправлена ошибка, из-за которой
system.detached_tablesотображала некорректную информацию после запросовRENAME DATABASEилиDROP TABLE. #78126 (Nikolay Degterinsky). - Исправлены проверки на слишком большое количество таблиц в базе данных
Replicatedпосле #77274. Также проверка теперь выполняется до создания хранилища, чтобы избежать создания неучтённых узлов в Keeper в случаеReplicatedMergeTreeилиKeeperMap. #78127 (Nikolay Degterinsky). - Исправлено возможное аварийное завершение из-за конкурентной инициализации метаданных
S3Queue. #78131 (Azat Khuzhin). - Функции
groupArray*теперь выдают ошибкуBAD_ARGUMENTSдля значения 0 типа Int в аргументеmax_size(как уже делается для значения типа UInt), вместо попытки выполнить их с этим значением. #78140 (Eduard Karacharov). - Предотвращено падение при восстановлении потерянной реплики, если локальная таблица была удалена до её отсоединения. #78173 (Raúl Marín).
- Исправлена ошибка, из-за которой столбец "alterable" в
system.s3_queue_settingsвсегда возвращалfalse. #78187 (Kseniia Sumarokova). - Скрывать подпись доступа Azure, чтобы она не отображалась пользователю и не попадала в логи. #78189 (Kseniia Sumarokova).
- Исправлена предвыборка подпотоков с префиксами в частях Wide. #78205 (Pavel Kruglov).
- Исправлены падения и некорректные результаты для
mapFromArraysв случае, когда массив ключей имеет типLowCardinality(Nullable). #78240 (Eduard Karacharov). - Исправлены параметры аутентификации для delta-kernel-rs. #78255 (Kseniia Sumarokova).
- Не планировать задачу Refreshable Materialized Views, если у реплики параметр
disable_insertion_and_mutationимеет значение true. Задача выполняет вставку, и она завершится с ошибкой, еслиdisable_insertion_and_mutationравно true. #78277 (Xu Jia). - Проверка доступа к исходным таблицам для движка
Merge. #78339 (Pervakov Grigorii). - Модификатор
FINALможно опускать при выполнении запросов к таблицеDistributed. #78428 (Yakov Olkhovskiy). bitmapMinвозвращает uint32_max, когда битовая карта пуста (и uint64_max, когда тип входных данных шире), что соответствует поведению минимального значения пустого roaring_bitmap. #78444 (wxybear).- Отключена параллелизация обработки запроса сразу после чтения FROM при включённом режиме
distributed_aggregation_memory_efficient, так как это может приводить к логической ошибке. Закрывает #76934. #78500 (flynn). - Устанавливается как минимум один поток чтения на случай, если после применения настройки
max_streams_to_max_threads_ratioне останется ни одного запланированного потока. #78505 (Eduard Karacharov). - В хранилище
S3Queueисправлена логическая ошибка «Cannot unregister: table uuid is not registered». Закрывает #78285. #78541 (Kseniia Sumarokova). - ClickHouse теперь умеет определять свой cgroup v2 на системах, где одновременно используются cgroups v1 и v2. #78566 (Grigory Korolev).
- Табличные функции
-Clusterзавершались с ошибкой при использовании настроек на уровне таблицы. #78587 (Daniil Ivanik). - Улучшены проверки в случаях, когда движок ReplicatedMergeTree не поддерживает транзакции при выполнении операций INSERT. #78633 (Azat Khuzhin).
- Очистка настроек запроса при выполнении ATTACH. #78637 (Raúl Marín).
- Исправлено аварийное завершение при указании недопустимого пути в
iceberg_metadata_file_path. #78688 (alesapin). - В движке таблицы
DeltaLakeс реализацией delta-kernel-s исправлена ситуация, когда схема чтения отличается от схемы таблицы и при этом присутствуют столбцы партиционирования, что приводило к ошибке «not found column». #78690 (Kseniia Sumarokova). - Исправлена проблема, при которой после планирования закрытия именованной сессии (но до истечения тайм-аута) создание новой именованной сессии с тем же именем приводило к её закрытию в момент, на который было запланировано закрытие первой сессии. #78698 (Alexey Katsman).
- Исправлено несколько типов запросов
SELECT, которые читают из таблиц с движкомMongoDBили табличной функциейmongodb: запросы с неявным преобразованием константного значения в предложенииWHERE(например,WHERE datetime = '2025-03-10 00:00:00'); запросы сLIMITиGROUP BY. Ранее они могли возвращать неверный результат. #78777 (Anton Popov). - Не блокировать остановку таблицы во время выполнения команды
CHECK TABLE. #78782 (Raúl Marín). - Keeper: скорректирован подсчёт эфемерных узлов во всех случаях. #78799 (Antonio Andelic).
- Исправлено некорректное приведение типов в
StorageDistributedпри использовании табличных функций, отличных отview. Закрывает #78464. #78828 (Konstantin Bogdanov). - Унифицировано форматирование для
tupleElement(*, 1). Закрывает #78639. #78832 (Konstantin Bogdanov). - Словари типа
ssd_cacheтеперь отклоняют нулевые или отрицательные значения параметровblock_sizeиwrite_buffer_size(#78314). #78854 (Elmi Ahmadov). - Исправлено падение обновляемого материализованного представления в случае выполнения ALTER после некорректного завершения работы. #78858 (Azat Khuzhin).
- Исправлен разбор некорректных значений
DateTimeв форматеCSV. #78919 (Pavel Kruglov). - Исправление в Keeper: исключено срабатывание наблюдателей при неуспешных multi-запросах. #79247 (Antonio Andelic).
- Исправлена ошибка чтения таблицы Iceberg, возникавшая, когда значение min-max указывалось явно, но было равно
NULL. Отмечено, что библиотека Go Iceberg генерировала настолько некорректные файлы. Закрывает #78740. #78764 (flynn).
Улучшения сборки/тестирования/упаковки
- Учитываются целевые возможности CPU в Rust и LTO включён во всех крейтах. #78590 (Raúl Marín).
Релиз ClickHouse 25.3 LTS, 2025-03-20
Обратно несовместимое изменение
- Запрещено усечение реплицируемых баз данных. #76651 (Bharat Nallan).
- Пропуск кэша индексов отменён. #77447 (Nikita Mikhaylov).
Новая возможность
- Тип данных
JSONготов к промышленной эксплуатации. См. https://jsonbench.com/. Типы данныхDynamicиVariantготовы к промышленной эксплуатации. #77785 (Alexey Milovidov). - Добавлена поддержка протокола SSH для clickhouse-server. Теперь к ClickHouse можно подключаться с помощью любого SSH-клиента. Тем самым закрывается задача: #74340. #74989 (George Gamezardashvili).
- Заменяет табличные функции их вариантами -Cluster, если задействованы параллельные реплики. Исправляет #65024. #70659 (Konstantin Bogdanov).
- Новая реализация Userspace Page Cache, которая позволяет кэшировать данные в памяти процесса вместо использования кэша страниц ОС, что полезно, когда данные хранятся на удалённой виртуальной файловой системе без локального файлового кэша. #70509 (Michael Kolupaev).
- Добавлен серверный параметр
concurrent_threads_scheduler, управляющий распределением слотов CPU между одновременными запросами. Может принимать значенияround_robin(предыдущее поведение) илиfair_round_robin, чтобы устранить проблему несправедливого распределения CPU между запросами INSERT и SELECT. #75949 (Sergei Trifonov). - Добавлена агрегатная функция
estimateCompressionRatio#70801. #76661 (Tariq Almawash). - Добавлена функция
arraySymmetricDifference. Она возвращает все элементы из нескольких массивов-аргументов, которые не содержатся во всех массивах одновременно. Пример:SELECT arraySymmetricDifference([1, 2], [2, 3])возвращает[1, 3]. (issue #61673). #76231 (Filipp Abapolov). - Добавлена возможность явно указывать файл метаданных для чтения Iceberg с помощью настройки функции хранилища/таблицы
iceberg_metadata_file_path. Исправляет #47412. #77318 (alesapin). - Добавлена хеш-функция
keccak256, широко используемая в блокчейн-реализациях, особенно в системах на базе EVM. #76669 (Arnaud Briche). - Добавлены три новые функции:
icebergTruncateв соответствии со спецификацией (https://iceberg.apache.org/spec/#truncate-transform-details),toYearNumSinceEpochиtoMonthNumSinceEpoch. Добавлена поддержка трансформацииtruncateпри отсечении партиций для движкаIceberg. #77403 (alesapin). - Добавлена поддержка типов данных
LowCardinality(Decimal)#72256. #72833 (zhanglistar). - События профилирования
FilterTransformPassedRowsиFilterTransformPassedBytesотображают количество строк и байт, отфильтрованных во время выполнения запроса. #76662 (Onkar Deshpande). - Поддержка типа метрик histogram. Интерфейс во многом повторяет клиент Prometheus: вы просто вызываете
observe(value), чтобы увеличить счётчик в бакете, соответствующем значению. Метрики типа histogram доступны черезsystem.histogram_metrics. #75736 (Miсhael Stetsyuk). - Поддержка неконстантного
CASEдля переключения по заданным значениям. #77399 (Yarik Briukhovetskyi).
Экспериментальная функциональность
- Добавлена поддержка Unity Catalog для таблиц Delta Lake поверх AWS S3 и локальной файловой системы. #76988 (alesapin).
- Представлена экспериментальная интеграция с каталогом данных службы AWS Glue для таблиц Iceberg. #77257 (alesapin).
- Добавлена поддержка динамического автообнаружения кластеров. Это расширяет существующую функцию автообнаружения узлов. ClickHouse теперь может автоматически обнаруживать и регистрировать новые кластеры по общему пути в ZooKeeper с использованием
<multicluster_root_path>. #76001 (Anton Ivashkin). - Добавлена возможность автоматической очистки слияний (merge) целых партиций по истечении настраиваемого тайм-аута с помощью новой настройки
enable_replacing_merge_with_cleanup_for_min_age_to_force_merge. #76440 (Christoph Wurm).
Повышение производительности
- Реализован кэш условий запроса для повышения производительности запросов с повторяющимися условиями. Диапазон участка данных, не удовлетворяющего условию, запоминается как временный индекс в памяти. Последующие запросы используют этот индекс. Закрыты #67768 #69236 (zhongyuankai).
- Данные теперь активно удаляются из кэша при удалении частей. Кэш больше не растёт до максимального размера, если объём данных меньше. #76641 (Alexey Milovidov).
Int256иUInt256в арифметических вычислениях заменены на встроенный в clang типi256, что даёт прирост производительности #70502. #73658 (李扬).- В некоторых случаях (например, пустой столбец-массив) части данных могут содержать пустые файлы. Теперь можно пропускать запись пустых блобов в ObjectStorage и хранить только метаданные для таких файлов, когда таблица размещена на диске с раздельным хранением метаданных и объектов. #75860 (Alexander Gololobov).
- Улучшена производительность
min/maxдляDecimal32/Decimal64/DateTime64. #76570 (李扬). - Компиляция запросов (настройка
compile_expressions) теперь учитывает тип машины, что значительно ускоряет такие запросы. #76753 (ZhangLiStar). - Оптимизирован
arraySort. #76850 (李扬). - Настройка
filesystem_cache_prefer_bigger_buffer_sizeотключена, когда кэш используется пассивно, например при слияниях. #77898 (Kseniia Sumarokova). - Атрибут
preserve_mostприменён в ряде мест кода, что позволяет немного улучшить генерацию кода. #67778 (Nikita Taranov). - Ускорено завершение работы серверов ClickHouse (убрана задержка 2,5 секунды). #76550 (Azat Khuzhin).
- Избегаются лишние аллокации в
ReadBufferFromS3и других буферах для удалённого чтения, их потребление памяти снижено вдвое. #76692 (Sema Checherinda). - Обновлён
zstdс 1.5.5 до 1.5.7, что может привести к некоторым улучшениям производительности. #77137 (Pradeep Chhetri). - Снижено потребление памяти при предзагрузке столбца JSON в частях формата Wide. Это актуально, когда ClickHouse используется поверх разделяемого хранилища, например в ClickHouse Cloud. #77640 (Pavel Kruglov).
Улучшение
- Добавлена поддержка атомарного переименования при использовании
TRUNCATEсINTO OUTFILE. Решает #70323. #77181 (Onkar Deshpande). - Больше нельзя использовать
NaNилиinfв качестве значений типа float для настроек. Да и раньше в этом не было особого смысла. #77546 (Yarik Briukhovetskyi). - Теперь параллельные реплики по умолчанию отключены, когда analyzer выключен, независимо от настройки
compatibility. При необходимости это поведение можно изменить, явно установивparallel_replicas_only_with_analyzerв значениеfalse. #77115 (Igor Nikonov). - Добавлена возможность определять список заголовков, которые будут пересылаться из заголовков клиентского запроса во внешний HTTP-аутентификатор. #77054 (inv2004).
- Учитывать регистронезависимое сопоставление столбцов для полей в столбцах-кортежах. Закрыта задача https://github.com/apache/incubator-gluten/issues/8324. #73780 (李扬).
- Параметры кодека Gorilla теперь всегда будут сохраняться в метаданных таблицы в .sql-файле. Это закрывает: #70072. #74814 (Nikita Mikhaylov).
- Реализованы улучшения парсинга для некоторых озёр данных (парсинг Sequence ID: добавлена возможность разбора идентификаторов последовательностей в manifest-файлах и парсинг метаданных Avro: переработан парсер метаданных Avro, чтобы его было легко расширять для будущих улучшений). #75010 (Daniil Ivanik).
- Из ORDER BY по умолчанию для
system.opentelemetry_span_logудалён столбецtrace_id. #75907 (Azat Khuzhin). - Шифрование (атрибут
encrypted_by) теперь может применяться к любому конфигурационному файлу (config.xml, users.xml, вложенные файлы конфигурации). Ранее оно работало только для корневого файла config.xml. #75911 (Mikhail Gorshkov). - Улучшена таблица
system.warningsи добавлены динамические сообщения о предупреждениях, которые можно добавлять, обновлять или удалять. #76029 (Bharat Nallan). - Этот PR предотвращает выполнение запроса
ALTER USER user1 ADD PROFILES a, DROP ALL PROFILES, потому что все операцииDROPдолжны идти первыми по порядку. #76242 (pufit). - Различные доработки для SYNC REPLICA (более информативные сообщения об ошибках, улучшенные тесты, проверки корректности). #76307 (Azat Khuzhin).
- Использовать корректный резервный вариант, когда multipart‑копирование в S3 завершается с ошибкой Access Denied во время резервного копирования. Многокомпонентное (multipart) копирование может приводить к ошибке Access Denied, когда резервное копирование выполняется между бакетами с разными учетными данными доступа. #76515 (Antonio Andelic).
- Обновлена librdkafka (которая представляет собой кучу дерьма) до версии 2.8.0 (этот хлам лучше от этого не становится) и улучшена процедура завершения работы для таблиц Kafka, что сократило задержки при удалении таблиц и перезапусках сервера.
engine=Kafkaбольше не выходит из consumer group явно при удалении таблицы. Вместо этого consumer остаётся в группе, пока не будет автоматически удалён послеsession_timeout_ms(по умолчанию: 45 секунд) бездействия. #76621 (filimonov). - Исправлена проверка параметров запросов к S3. #76658 (Vitaly Baranov).
- Системные таблицы, такие как
server_settingsилиsettings, имеют столбецdefault, что удобно. Вmerge_tree_settingsиreplicated_merge_tree_settingsтакже добавлен такой столбец. #76942 (Diego Nieto). - Добавлен
ProfileEvents::QueryPreempted, логика которого аналогичнаCurrentMetrics::QueryPreempted. #77015 (VicoWu). - Ранее реплицируемая база данных могла записывать в логи учетные данные, указанные в запросе. Это поведение исправлено. Исправлено в: #77123. #77133 (Nikita Mikhaylov).
- Разрешён ALTER TABLE DROP PARTITION для диска
plain_rewritable. #77138 (Julia Kartseva). - Настройка резервного копирования/восстановления
allow_s3_native_copyтеперь поддерживает три возможных значения: -False— S3 native copy не будет использоваться; -True(старое значение по умолчанию) — ClickHouse сначала попытается использовать S3 native copy, а в случае ошибки переключится на подход с чтением и записью; -'auto'(новое значение по умолчанию) — ClickHouse сначала сравнит учетные данные источника и назначения. Если они совпадают, ClickHouse попробует S3 native copy и затем при необходимости может переключиться на подход с чтением и записью. Если они различаются, ClickHouse сразу перейдет к подходу с чтением и записью. #77401 (Vitaly Baranov). - Добавлена поддержка использования сеансового токена AWS и учётных данных из переменных окружения в ядре Delta для движка таблиц DeltaLake. #77661 (Kseniia Sumarokova).
Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе)
- Исправлено зависание при обработке отложенного пакета для асинхронного распределённого INSERT (например, из‑за
No such file or directory). #72939 (Azat Khuzhin). - Улучшено преобразование DateTime во время анализа индексов за счет принудительного поведения с насыщением для неявных преобразований Date в DateTime. Это устраняет возможные неточности анализа индексов, вызванные ограничениями диапазона значений DateTime. Исправлена проблема #73307. Также исправлено явное преобразование
toDateTime, когдаdate_time_overflow_behavior = 'ignore', что является значением по умолчанию. #73326 (Amos Bird). - Исправлены различные ошибки, возникающие из‑за гонки между UUID и именами таблиц (например, устраняется гонка между
RENAMEиRESTART REPLICA: в случае одновременного выполненияRENAMEсSYSTEM RESTART REPLICAв итоге можно перезапустить не ту реплику и/или оставить одну из таблиц в состоянииTable X is being restarted). #76308 (Azat Khuzhin). - Исправлена потеря данных при включённом async insert и выполнении insert into ... from file ... с неравным размером блоков: если размер первого блока < async_max_size, а второго блока > async_max_size, второй блок не вставлялся. В результате эти данные оставались в состоянии
squashing. #76343 (Han Fei). - Поле 'marks' переименовано в 'marks_bytes' в
system.data_skipping_indices. #76374 (Robert Schulze). - Исправлена обработка динамического изменения размера кэша файловой системы при неожиданных ошибках во время вытеснения данных из кэша. #76466 (Kseniia Sumarokova).
- Исправлена инициализация
used_flagв параллельной хеш-таблице. Это могло приводить к сбою сервера. #76580 (Nikita Taranov). - Исправлена логическая ошибка при вызове функции
defaultProfilesвнутри проекции. #76627 (pufit). - Не запрашивать интерактивную базовую аутентификацию в браузере при работе с Web UI. Закрывает #76319. #76637 (Alexey Milovidov).
- Исправлено исключение THERE_IS_NO_COLUMN при выборке булевого литерала из распределённых таблиц. #76656 (Yakov Olkhovskiy).
- Подкаталог внутри каталога таблицы теперь выбирается более продуманным образом. #76681 (Daniil Ivanik).
- Исправлена ошибка
Not found column in blockпосле изменения таблицы с подколонкой в первичном ключе. После https://github.com/ClickHouse/ClickHouse/pull/72644 требуется https://github.com/ClickHouse/ClickHouse/pull/74403. #76686 (Nikolai Kochetov). - Добавить тесты производительности для обработки NULL по принципу короткого замыкания и исправить ошибки. #76708 (李扬).
- Сбрасывать выходные буферы записи перед их финализацией. Исправлен
LOGICAL_ERROR, возникавший при финализации некоторых форматов вывода, напримерJSONEachRowWithProgressRowOutputFormat. #76726 (Antonio Andelic). - Добавлена поддержка бинарного UUID MongoDB (#74452) - Исправлено проталкивание условия WHERE в MongoDB при использовании табличной функции (#72210) - Изменено сопоставление типов MongoDB → ClickHouse таким образом, что бинарный UUID MongoDB может интерпретироваться только как UUID ClickHouse. Это должно избежать двусмысленностей и неожиданных ситуаций в будущем. - Исправлено сопоставление OID с сохранением обратной совместимости. #76762 (Kirill Nikiforov).
- Исправлена обработка исключений при параллельной десериализации префиксов JSON-подстолбцов. #76809 (Pavel Kruglov).
- Исправлено поведение функции lgamma для отрицательных целых чисел. #76840 (Ilya Kataev).
- Исправлен анализ обратного ключа для явно заданных первичных ключей. Аналогично #76654. #76846 (Amos Bird).
- Исправлено красивое форматирование значений Bool в формате JSON. #76905 (Pavel Kruglov).
- Исправлено возможное аварийное завершение работы из-за некорректного отката JSON-столбца при ошибке во время асинхронной вставки данных. #76908 (Pavel Kruglov).
- Ранее
multiIfмог возвращать разные типы столбцов на этапе планирования и во время основного выполнения. Это приводило к неопределённому поведению кода с точки зрения C++. #76914 (Nikita Taranov). - Исправлена некорректная сериализация константных ключей Nullable в MergeTree. Тем самым исправлена #76939. #76985 (Amos Bird).
- Исправлена сортировка значений
BFloat16. Это исправление закрывает #75487. Также закрывает #75669. #77000 (Alexey Milovidov). - Исправлена ошибка в JSON с подколонкой Variant за счёт добавления проверки, пропускающей эфемерные подколонки при проверке целостности парта. #72187. #77034 (Smita Kulkarni).
- Исправлена ошибка, приводившая к сбою при разборе шаблона формата Values в случае несовпадения типов. #77071 (Pavel Kruglov).
- Запрещено создавать таблицу EmbeddedRocksDB с подколонкой в первичном ключе. Ранее такую таблицу можно было создать, но запросы SELECT завершались с ошибкой. #77074 (Pavel Kruglov).
- Исправлено некорректное сравнение в распределённых запросах, поскольку при проталкивании предикатов на удалённые узлы не учитываются типы литералов. #77093 (Duc Canh Le).
- Исправлено падение при создании таблицы Kafka из-за исключения. #77121 (Pavel Kruglov).
- Поддержка JSON и подстолбцов в движках Kafka и RabbitMQ. #77122 (Pavel Kruglov).
- Исправлена раскрутка стека исключений в macOS. #77126 (Eduard Karacharov).
- Исправлено чтение подстолбца 'null' функцией getSubcolumn. #77163 (Pavel Kruglov).
- Исправлена работа индекса фильтра Блума с Array и неподдерживаемыми функциями. #77271 (Pavel Kruglov).
- Проверять ограничение на число таблиц следует только при выполнении начального запроса CREATE. #77274 (Nikolay Degterinsky).
- Это не ошибка:
SELECT toBFloat16(-0.0) == toBFloat16(0.0)теперь корректно возвращаетtrue(ранее —false). Это делает поведение согласованным сFloat32иFloat64. #77290 (Shankar Iyer). - Исправлена возможная некорректная ссылка на неинициализированную переменную key_index, которая может приводить к сбою в отладочных (debug) сборках (эта неинициализированная ссылка не вызывает проблем в релизных (release) сборках, потому что последующий код, скорее всего, приведёт к ошибке). ### запись в документации о пользовательских изменениях. #77305 (wxybear).
- Исправлено имя партиции с логическим значением (Bool). Ошибка была внесена в https://github.com/ClickHouse/ClickHouse/pull/74533. #77319 (Pavel Kruglov).
- Исправлено сравнение между кортежами с элементами типа Nullable и строками. Например, до этого изменения сравнение кортежа
(1, null)и строки'(1,null)'приводило к ошибке. Другой пример — сравнение кортежа(1, a), гдеa— столбец типа Nullable, и строки'(1, 2)'. Это изменение устраняет эти проблемы. #77323 (Alexey Katsman). - Исправлено падение в ObjectStorageQueueSource, возникшее в https://github.com/ClickHouse/ClickHouse/pull/76358. #77325 (Pavel Kruglov).
- Исправлена проблема при использовании
async_insertсinput. #77340 (Azat Khuzhin). - Исправление:
WITH FILLможет завершаться с ошибкой NOT_FOUND_COLUMN_IN_BLOCK, когда сортируемый столбец удаляется планировщиком запросов. Аналогичная проблема была связана с неконсистентным DAG, рассчитанным для выражения INTERPOLATE. #77343 (Yakov Olkhovskiy). - Исправлены несколько LOGICAL_ERROR'ов при назначении псевдонимов некорректным узлам AST. #77445 (Raúl Marín).
- В реализации кэша файловой системы исправлена обработка ошибок при записи сегмента файла. #77471 (Kseniia Sumarokova).
- DatabaseIceberg теперь использует корректный файл метаданных, предоставляемый каталогом. Закрывает #75187. #77486 (Kseniia Sumarokova).
- Кэш запросов теперь предполагает, что UDF являются недетерминированными. Поэтому результаты запросов с UDF больше не кэшируются. Ранее пользователи могли определять недетерминированные UDF, результаты которых по ошибке кэшировались (issue #77553). #77633 (Jimmy Aguilar Mena).
- Исправлена проблема, из-за которой system.filesystem_cache_log работал только при включённой настройке
enable_filesystem_cache_log. #77650 (Kseniia Sumarokova). - Исправлена логическая ошибка при вызове функции
defaultRolesвнутри проекции. Доработка по задаче #76627. #77667 (pufit). - Использование второго аргумента типа
Nullableдля функцииarrayResizeтеперь запрещено. Ранее при передачеNullableв качестве второго аргумента могли возникать как ошибки, так и некорректные результаты (issue #48398). #77724 (Manish Gill). - Регулярно проверяйте, были ли слияния и мутации отменены, даже в случае, когда операция не создает блоков для записи. #77766 (János Benjamin Antal).
Улучшения сборки/тестирования/пакетирования
clickhouse-odbc-bridgeиclickhouse-library-bridgeперенесены в отдельный репозиторий: https://github.com/ClickHouse/odbc-bridge/. #76225 (Alexey Milovidov).- Исправлена кросс-компиляция на Rust и добавлена возможность полностью отключать Rust. #76921 (Raúl Marín).
Релиз ClickHouse 25.2, 2025-02-27
Обратное несовместимое изменение
- Полностью включён
async_load_databasesпо умолчанию (даже для тех установок, для которых не был обновлёнconfig.xml). #74772 (Azat Khuzhin). - Добавлены форматы
JSONCompactEachRowWithProgressиJSONCompactStringsEachRowWithProgress. Продолжение #69989.JSONCompactWithNamesиJSONCompactWithNamesAndTypesбольше не выводят "totals" — по-видимому, это была ошибка в реализации. #75037 (Alexey Milovidov). - Значение по умолчанию для
format_alter_operations_with_parenthesesизменено на true, чтобы устранить неоднозначность списка команд ALTER (см. https://github.com/ClickHouse/ClickHouse/pull/59532). Это нарушает репликацию с кластерами версий до 24.3. Если вы обновляете кластер со старыми релизами, выключите этот параметр в конфигурации сервера или сначала обновитесь до 24.3. #75302 (Raúl Marín). - Удалена возможность фильтровать сообщения лога с использованием регулярных выражений. Реализация приводила к гонке данных, поэтому её пришлось удалить. #75577 (János Benjamin Antal).
- Настройка
min_chunk_bytes_for_parallel_parsingбольше не может быть нулевой. Это исправляет #71110. #75239 (Nikita Mikhaylov). - Добавлена проверка настроек в конфигурации кэша. Ранее несуществующие настройки игнорировались, теперь будет генерироваться ошибка, и такие настройки необходимо удалить. #75452 (Kseniia Sumarokova).
Новые возможности
- Поддержка типа
Nullable(JSON). #73556 (Pavel Kruglov). - Поддержка подстолбцов в выражениях DEFAULT и MATERIALIZED. #74403 (Pavel Kruglov).
- Поддержка записи bloom-фильтров Parquet с использованием настройки
output_format_parquet_write_bloom_filter(включена по умолчанию). #71681 (Michael Kolupaev). - В Web UI теперь есть интерактивная навигация по базам данных. #75777 (Alexey Milovidov).
- Разрешено комбинировать диски только для чтения и диски для чтения и записи в политике хранения (как несколько томов или несколько дисков). Это позволяет читать данные со всего тома, в то время как вставки будут выполняться в первую очередь на диск с возможностью записи (то есть политика хранения Copy-on-Write). #75862 (Azat Khuzhin).
- Добавлен новый движок базы данных
DatabaseBackup, который позволяет мгновенно подключать таблицу/базу данных из бэкапа. #75725 (Maksim Kita). - Добавлена поддержка подготовленных запросов (prepared statements) в протоколе Postgres wire. #75035 (scanhex12).
- Добавлена возможность ATTACH таблиц без уровня базы данных, что полезно для таблиц MergeTree, расположенных в Web, S3 и подобных внешних виртуальных файловых системах. #75788 (Azat Khuzhin).
- Добавлена новая функция сравнения строк
compareSubstringsдля сравнения частей двух строк. Пример:SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS resultозначает «лексикографически сравнить 6 байт строк 'Saxon' и 'Anglo-Saxon', начиная со смещения 0 в первой строке и смещения 5 во второй строке». #74070 (lgbo). - Добавлена новая функция
initialQueryStartTime. Она возвращает время начала текущего запроса. Это значение одинаково на всех шардах при распределённом запросе. #75087 (Roman Lomonosov). - Добавлена поддержка SSL-аутентификации с использованием именованных коллекций для MySQL. Закрывает #59111. #59452 (Nikolay Degterinsky).
Экспериментальные возможности
- Добавлена новая настройка
enable_adaptive_memory_spill_scheduler, которая позволяет нескольким операциям Grace JOIN в одном запросе отслеживать их суммарное потребление памяти и адаптивно инициировать сброс (spilling) во внешнее хранилище, чтобы предотвратить MEMORY_LIMIT_EXCEEDED. #72728 (lgbo). - Новый экспериментальный движок таблиц
Kafkaтеперь полностью учитывает feature flags Keeper. #76004 (János Benjamin Antal). - Восстановлен кодек (Intel) QPL, который был удалён в v24.10 из-за лицензионных ограничений. #76021 (Konstantin Bogdanov).
- Для интеграции с HDFS добавлена поддержка конфигурационной опции
dfs.client.use.datanode.hostname. #74635 (Mikhail Tiukavkin).
Улучшение производительности
- Улучшена производительность чтения всего JSON-столбца в Wide-частях из S3. Это сделано за счёт добавления предварительной выборки для десериализации префиксов подстолбцов, кэша десериализованных префиксов и параллельной десериализации префиксов подстолбцов. В результате чтение JSON-столбца из S3 ускоряется в 4 раза для запросов вида
SELECT data FROM tableи примерно в 10 раз для запросов видаSELECT data FROM table LIMIT 10. #74827 (Pavel Kruglov). - Исправлена ненужная конкуренция потоков (contention) в
parallel_hash, когдаmax_rows_in_join = max_bytes_in_join = 0. #75155 (Nikita Taranov). - Исправлено двойное предварительное выделение памяти в
ConcurrentHashJoinв случае, когда стороны JOIN меняются местами оптимизатором. #75149 (Nikita Taranov). - Незначительное улучшение в некоторых сценариях JOIN: предварительный расчёт количества выходных строк и резервирование под них памяти. #75376 (Alexander Gololobov).
- Для запросов вида
WHERE a < b AND b < c AND c < 5теперь можно выводить новые условия сравнения (a < 5 AND b < 5) для повышения эффективности фильтрации. #73164 (Shichao Jin). - Улучшение Keeper: отключён расчёт дайджеста при фиксации в хранилище в памяти для повышения производительности. Его можно включить с помощью настройки
keeper_server.digest_enabled_on_commit. Дайджест по‑прежнему рассчитывается при предварительной обработке запросов. #75490 (Antonio Andelic). - По возможности выполняется проталкивание (push down) выражения фильтра из JOIN ON. #75536 (Vladimir Cherkasov).
- Ленивый расчёт размеров столбцов и индексов в MergeTree. #75938 (Pavel Kruglov).
- Повторно учтена настройка
ttl_only_drop_partsпри выполненииMATERIALIZE TTL; читаются только необходимые столбцы для перерасчёта TTL, а части удаляются путём замены их пустыми. #72751 (Andrey Zvonov). - Уменьшён размер буфера записи для файлов метаданных plain_rewritable. #75758 (Julia Kartseva).
- Снижено потребление памяти для некоторых оконных функций. #65647 (lgbo).
- Оценка Parquet bloom-фильтров и min/max-индексов теперь выполняется совместно. Это необходимо для корректной поддержки выражений вида:
x = 3 or x > 5, где data = [1, 2, 4, 5]. #71383 (Arthur Passos). - Запросы, передаваемые в хранилище
Executable, больше не ограничены однопоточным выполнением. #70084 (yawnt). - Части в
ALTER TABLE FETCH PARTITIONзагружаются (fetch) параллельно (размер пула потоков контролируется настройкойmax_fetch_partition_thread_pool_size). #74978 (Azat Khuzhin). - Разрешено перемещать предикаты с функцией
indexHintвPREWHERE. #74987 (Anton Popov).
Улучшение
- Исправлен расчет размера, занимаемого в памяти, для столбцов
LowCardinality. #74688 (Nikita Taranov). - Теперь для таблицы
processors_profile_logзадана конфигурация по умолчанию с TTL 30 дней. #66139 (Ilya Yatsishin). - Добавлена возможность задавать имена шардов в конфигурации кластера. #72276 (MikhailBurdukov).
- Изменён код статуса успешного ответа Prometheus remote write с 200/OK на 204/NoContent. #74170 (Michael Dempsey).
- Добавлена возможность перезагружать
max_remote_read_network_bandwidth_for_serveиmax_remote_write_network_bandwidth_for_serverна лету без перезапуска сервера. #74206 (Kai Zhu). - Добавлена возможность использовать пути к blob-объектам для вычисления контрольных сумм при создании резервной копии. #74729 (Vitaly Baranov).
- Добавлен столбец ID запроса в
system.query_cache(закрывает #68205). #74982 (NamHoaiNguyen). - Теперь разрешено отменять запросы
ALTER TABLE ... FREEZE ...с помощьюKILL QUERY, а также автоматически по истечении ограничения времени выполнения (max_execution_time). #75016 (Kirill). - Добавлена поддержка
groupUniqArrayArrayMapв качествеSimpleAggregateFunction. #75034 (Miel Donkers). - Скрыты параметры учётных данных каталога в движке базы данных
Iceberg. Закрывает #74559. #75080 (Kseniia Sumarokova). intExp2/intExp10: Определено поведение ранее неопределённых случаев: возвращать 0 для слишком малого аргумента,18446744073709551615для слишком большого аргумента, выбрасывать исключение, еслиnan. #75312 (Vitaly Baranov).- Добавлена нативная поддержка
s3.endpointиз конфигурации каталога вDatabaseIceberg. Закрывает #74558. #75375 (Kseniia Sumarokova). - Не завершать операцию молча, если у пользователя, выполняющего
SYSTEM DROP REPLICA, недостаточно прав. #75377 (Bharat Nallan). - Добавлен ProfileEvent, фиксирующий количество неудачных попыток сброса любым из системных журналов. #75466 (Alexey Milovidov).
- Добавлена проверка и дополнительное логирование при расшифровке и декомпрессии. #75471 (Vitaly Baranov).
- Добавлена поддержка символа «микро» (U+00B5) в функции
parseTimeDelta. Теперь и символ «микро» (U+00B5), и греческая буква мю (U+03BC) распознаются как корректные обозначения микросекунд, что приводит поведение ClickHouse в соответствие с реализацией Go (см. time.go и time/format.go). #75472 (Vitaly Orlov). - Заменена серверная настройка (
send_settings_to_client) на клиентскую (apply_settings_from_server), которая управляет тем, должен ли клиентский код (например, разбор данных INSERT и форматирование вывода запроса) использовать настройки из серверногоusers.xmlи профиля пользователя. В противном случае используются только настройки из командной строки клиента, сессии и самого запроса. Обратите внимание, что это относится только к нативному клиенту (а не, например, к HTTP) и не применяется к большей части обработки запроса (которая выполняется на сервере). #75478 (Michael Kolupaev). - Улучшены сообщения об ошибках синтаксиса. Ранее, если запрос был слишком большим, а токен, длина которого превышала ограничение, представлял собой очень длинный строковый литерал, сообщение о причине терялось посреди двух примеров этого очень длинного токена. Исправлена проблема, когда запрос в кодировке UTF-8 некорректно обрезался в сообщении об ошибке. Исправлено избыточное заключение фрагментов запроса в кавычки. Закрывает #75473. #75561 (Alexey Milovidov).
- Добавлены события профилирования в хранилище
S3(Azure)Queue. #75618 (Kseniia Sumarokova). - Отключена отправка настроек с сервера на клиент (
send_settings_to_client=false) для обеспечения совместимости (эта функциональность позже будет реализована заново как клиентская настройка для повышения удобства использования). #75648 (Michael Kolupaev). - Добавлен конфиг
memory_worker_correct_memory_trackerдля включения корректировки внутреннего трекера памяти на основе информации из различных источников, периодически читаемой в фоновом потоке. #75714 (Antonio Andelic). - Добавлен столбец
normalized_query_hashвsystem.processes. Примечание: хотя его можно легко вычислить на лету с помощью функцииnormalizedQueryHash, это нужно для подготовки к последующим изменениям. #75756 (Alexey Milovidov). - Запрос к
system.tablesне будет вызывать исключение, даже если существует таблица типаMerge, созданная поверх базы данных, которая больше не существует. Из таблицHiveудалён методgetTotalRows, поскольку мы не допускаем, чтобы он выполнял сложные операции. #75772 (Alexey Milovidov). - Хранить значения start_time/end_time для резервных копий с точностью до микросекунд. #75929 (Aleksandr Musorin).
- Добавлена метрика
MemoryTrackingUncorrected, показывающая значение внутреннего глобального трекера памяти, не скорректированное по RSS. #75935 (Antonio Andelic). - Разрешить разбор конечных точек вида
localhost:1234/handleв табличных функцияхPostgreSQLиMySQL. Исправляет регрессию, внесённую в https://github.com/ClickHouse/ClickHouse/pull/52503. #75944 (Nikita Mikhaylov). - Добавлена настройка сервера
throw_on_unknown_workload, которая позволяет выбрать поведение при выполнении запроса с настройкойworkloadс неизвестным значением: либо разрешать неограниченный доступ (по умолчанию), либо выдавать ошибкуRESOURCE_ACCESS_DENIED. Это полезно, чтобы принудительно использовать планирование рабочих нагрузок для всех запросов. #75999 (Sergei Trifonov). - Не переписывайте подколонки в
getSubcolumnвARRAY JOIN, если в этом нет необходимости. #76018 (Pavel Kruglov). - Ошибки координации повторных попыток при загрузке таблиц. #76020 (Alexander Tokmakov).
- Добавлена поддержка сброса отдельных логов в
SYSTEM FLUSH LOGS. #76132 (Raúl Marín). - Улучшена страница сервера
/binary. Вместо кривой Мортон используется кривая Гильберта. В квадрате отображается 512 МБ адресного пространства, что заполняет квадрат лучше (в предыдущих версиях адреса занимали только половину квадрата). Адреса окрашиваются в зависимости от близости к имени библиотеки, а не имени функции. Разрешена более широкая прокрутка за пределы области. #76192 (Alexey Milovidov). - Повтор выполнения запросов
ON CLUSTERпри ошибкеTOO_MANY_SIMULTANEOUS_QUERIES. #76352 (Patrick Galbraith). - Добавлена асинхронная метрика
CPUOverload, которая вычисляет относительный дефицит CPU сервера. #76404 (Alexey Milovidov). - Изменено значение по умолчанию параметра
output_format_pretty_max_rowsс 10000 на 1000. Считаю, что так удобнее в использовании. #76407 (Alexey Milovidov).
Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе)
- Исправлено форматирование исключений: теперь используется пользовательский формат, если они возникают во время интерпретации запроса. В предыдущих версиях исключения форматировались с использованием формата по умолчанию, а не формата, указанного в запросе. Закрывает #55422. #74994 (Alexey Milovidov).
- Исправлено сопоставление типов данных для SQLite (целочисленные типы в
int64, числа с плавающей запятой вfloat64). #73853 (Joanna Hulboj). - Исправлено разрешение идентификаторов из родительских областей видимости. Разрешено использование псевдонимов для выражений в предложении WITH. Исправлено #58994. Исправлено #62946. Исправлено #63239. Исправлено #65233. Исправлено #71659. Исправлено #71828. Исправлено #68749. #66143 (Dmitry Novik).
- Исправлена монотонность функции negate. В предыдущих версиях запрос
select * from a where -x = -42;, гдеx— первичный ключ, мог возвращать неверный результат. #71440 (Michael Kolupaev). - Исправлена обработка пустых кортежей в arrayIntersect. Это исправляет проблему #72578. #72581 (Amos Bird).
- Исправлено чтение подкoлонок подобъектов JSON с некорректным префиксом. #73182 (Pavel Kruglov).
- Корректно передавать настройки формата Native при взаимодействии клиент–сервер. #73924 (Pavel Kruglov).
- Добавлена проверка на неподдерживаемые типы для некоторых хранилищ. #74218 (Pavel Kruglov).
- Исправлено падение при выполнении запроса
INSERT INTO SELECTчерез интерфейс PostgreSQL на macOS (issue #72938). #74231 (Artem Yurov). - Исправлено неинициализированное значение max_log_ptr в реплицируемой базе данных. #74336 (Konstantин Морозов).
- Исправлен сбой при вставке интервала (issue #74299). #74478 (NamHoaiNguyen).
- Исправлено форматирование константных JSON-литералов. Ранее это могло приводить к синтаксическим ошибкам при отправке запроса на другой сервер. #74533 (Pavel Kruglov).
- Исправлен некорректный
CREATE‑запрос при использовании константных выражений в секцииPARTITIONс включёнными неявными проекциями. Исправлена проблема #74596. #74634 (Amos Bird). - Не оставляем соединение в некорректном состоянии после завершения INSERT с исключением. #74740 (Azat Khuzhin).
- Не переиспользуйте соединения, оставленные в промежуточном состоянии. #74749 (Azat Khuzhin).
- Исправлено падение при разборе объявления типа JSON, если имя типа указано не прописными буквами. #74784 (Pavel Kruglov).
- Keeper: исправлена logical_error, возникавшая при разрыве соединения до его установления. #74844 (Michael Kolupaev).
- Исправлена проблема, из-за которой сервер не мог запуститься, если была таблица, использующая
AzureBlobStorage. Таблицы загружаются без каких-либо запросов к Azure. #74880 (Alexey Katsman). - Исправлено отсутствие полей
used_privilegesиmissing_privilegesвquery_logдля операций BACKUP и RESTORE. #74887 (Alexey Katsman). - В HDFS теперь обновляется krb-билет при ошибке SASL во время запроса HDFS SELECT. #74930 (inv2004).
- Исправлены запросы к реплицируемой базе данных в startup_scripts. #74942 (Azat Khuzhin).
- Исправлены ошибки в выражениях с псевдонимами типов в предложении JOIN ON при использовании null-безопасного сравнения. #74970 (Vladimir Cherkasov).
- Возвращать состояние парта из
deletingобратно вoutdated, если операция удаления завершилась неуспешно. #74985 (Sema Checherinda). - В предыдущих версиях при наличии скалярного подзапроса мы начинали записывать прогресс (накопленный при обработке подзапроса) во время инициализации формата данных, то есть до записи HTTP-заголовков. Это приводило к потере HTTP-заголовков, таких как X-ClickHouse-QueryId и X-ClickHouse-Format, а также Content-Type. #74991 (Alexey Milovidov).
- Исправлены запросы вида
CREATE TABLE AS...дляdatabase_replicated_allow_replicated_engine_arguments=0. #75000 (Bharat Nallan). - Исправлена проблема, из-за которой после исключений при INSERT соединение клиента оставалось в некорректном состоянии. #75030 (Azat Khuzhin).
- Исправлен сбой, возникавший из‑за неперехваченного исключения при репликации PSQL. #75062 (Azat Khuzhin).
- SASL может завершиться с ошибкой при любом RPC‑вызове; это исправление позволяет повторить вызов, если истёк срок действия krb5‑тикета. #75063 (inv2004).
- Исправлено использование индексов (первичных и вторичных) для столбцов
Array,MapиNullable(..)при включённой настройкеoptimize_function_to_subcolumns. Ранее индексы для этих столбцов могли быть проигнорированы. #75081 (Anton Popov). - Отключайте
flatten_nestedпри создании материализованных представлений на внутренних таблицах, поскольку использовать преобразованные таким образом столбцы будет невозможно. #75085 (Christoph Wurm). - Исправлена некорректная интерпретация некоторых IPv6-адресов (например, ::ffff:1.1.1.1) в поле forwarded_for, приводившая к отключению клиента с исключением. #75133 (Yakov Olkhovskiy).
- Исправлена обработка nullsafe JOIN для нуллируемого типа данных LowCardinality. Ранее условия JOIN ON с nullsafe-сравнением, таким как
IS NOT DISTINCT FROM,<=>,a IS NULL AND b IS NULL OR a == b, работали некорректно со столбцами LowCardinality. #75143 (Vladimir Cherkasov). - Проверяет, что при подсчёте total_number_of_rows для NumRowsCache не указывается key_condition. #75164 (Daniil Ivanik).
- Исправлены запросы с неиспользуемой интерполяцией с помощью нового анализатора. #75173 (János Benjamin Antal).
- Исправлена ошибка, приводившая к падению при использовании CTE с INSERT. #75188 (Shichao Jin).
- Исправление в Keeper: не записывать в повреждённые журналы изменений при откате логов. #75197 (Antonio Andelic).
- Используйте
BFloat16в качестве супертипа там, где это уместно. Это закрывает задачу #74404. #75236 (Nikita Mikhaylov). - Исправлены неожиданные значения по умолчанию в результате JOIN при использовании any_join_distinct_right_table_keys и OR в JOIN ON. #75262 (Vladimir Cherkasov).
- Маскировать учетные данные движка таблицы azureblobstorage. #75319 (Garrett Thomas).
- Исправлено поведение, при котором ClickHouse мог ошибочно выполнять проталкивание фильтра (filter pushdown) во внешнюю СУБД, такую как PostgreSQL, MySQL или SQLite. Это исправляет: #71423. #75320 (Nikita Mikhaylov).
- Исправлен сбой в кэше схем Protobuf, который мог происходить во время вывода в формате Protobuf при параллельном выполнении запроса
SYSTEM DROP FORMAT SCHEMA CACHE. #75357 (Pavel Kruglov). - Исправлена возможная логическая ошибка или проблема с неинициализированной памятью при проталкивании фильтра из секции
HAVINGв режиме параллельных реплик. #75363 (Vladimir Cherkasov). - Скрытие конфиденциальной информации в табличных функциях и табличных движках
icebergS3иicebergAzure. #75378 (Kseniia Sumarokova). - Функция
TRIMс вычисляемым пустым набором символов для обрезки теперь корректно обрабатывается. Пример:SELECT TRIM(LEADING concat('') FROM 'foo')(issue #69922). #75399 (Manish Gill). - Исправлена гонка данных в IOutputFormat. #75448 (Pavel Kruglov).
- Исправлена возможная ошибка
Elements ... and ... of Nested data structure ... (Array columns) have different array sizesпри использовании в JOIN по распределённым таблицам JSON-подстолбцов типа Array. #75512 (Pavel Kruglov). - Исправлена порча данных при использовании
CODEC(ZSTD, DoubleDelta). Закрывает #70031. #75548 (Konstantin Bogdanov). - Исправлено взаимодействие между allow_feature_tier и настройкой совместимости движка MergeTree. #75635 (Raúl Marín).
- Исправлено некорректное значение processed_rows в system.s3queue_log при повторной попытке обработки файла. #75666 (Kseniia Sumarokova).
- Учитывать
materialized_views_ignore_errors, когда материализованное представление записывает в движок URL при возникновении проблем с подключением. #75679 (Christoph Wurm). - Исправлены редкие сбои при чтении из таблицы
MergeTreeпосле нескольких асинхронных запросовRENAME(сalter_sync = 0) между столбцами разных типов. #75693 (Anton Popov). - Исправлена ошибка
Block structure mismatch in QueryPipeline streamв некоторых запросах сUNION ALL. #75715 (Nikolai Kochetov). - Перестраивать проекцию при
ALTER MODIFYстолбца, входящего в её первичный ключ. Ранее это могло приводить к ошибкамCANNOT_READ_ALL_DATAпри выполнении запросовSELECTпослеALTER MODIFYстолбца, использованного в первичном ключе проекции. #75720 (Pavel Kruglov). - Исправлен некорректный результат
ARRAY JOINдля скалярных подзапросов (с анализатором). #75732 (Nikolai Kochetov). - Исправлено разыменование нулевого указателя в
DistinctSortedStreamTransform. #75734 (Nikita Taranov). - Исправить поведение параметра
allow_suspicious_ttl_expressions. #75771 (Aleksei Filatov). - Исправлено чтение из неинициализированной памяти в функции
translate. Это закрывает #75592. #75794 (Alexey Milovidov). - Передавать настройки формата в JSON как строковое форматирование в формате Native. #75832 (Pavel Kruglov).
- В истории изменений настроек зафиксировано включение по умолчанию параллельного хеш-алгоритма соединения в версии v24.12. Это означает, что ClickHouse будет и далее выполнять соединения, используя непараллельный хеш-алгоритм, если настроен уровень совместимости старше v24.12. #75870 (Robert Schulze).
- Исправлена ошибка, из-за которой таблицы с неявно добавленными индексами min-max невозможно было скопировать в новую таблицу (issue #75677). #75877 (Smita Kulkarni).
clickhouse-library-bridgeпозволяет открывать произвольные библиотеки из файловой системы, поэтому безопасно запускать его только в изолированной среде. Чтобы предотвратить уязвимость при запуске в одной среде с clickhouse-server, мы ограничим допустимые пути к библиотекам каталогом, указанным в конфигурации. Эта уязвимость была обнаружена в рамках программы ClickHouse Bug Bounty Program Арсением Дугиным. #75954 (Alexey Milovidov).- Мы по ошибке использовали JSON-сериализацию для некоторых метаданных, потому что JSON не поддерживает двоичные данные внутри строковых литералов, включая нулевые байты. SQL-запросы могут содержать двоичные данные и некорректный UTF-8, поэтому мы должны поддерживать это и в наших файлах метаданных. В то же время форматы ClickHouse
JSONEachRowи подобные обходят это ограничение, отходя от стандарта JSON ради идеального преобразования данных туда-обратно (roundtrip) для двоичных данных. См. обоснование здесь: https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790. Решение состоит в том, чтобы согласовать библиотекуPoco::JSONс форматами сериализации JSON в ClickHouse. Это закрывает #73668. #75963 (Alexey Milovidov). - Исправлена проверка ограничений на коммиты в хранилище
S3Queue. #76104 (Kseniia Sumarokova). - Исправлено подключение таблиц MergeTree с автоматическими индексами (
add_minmax_index_for_numeric_columns/add_minmax_index_for_string_columns). #76139 (Azat Khuzhin). - Исправлена проблема, при которой стеки вызовов из родительских потоков задания (настройка
enable_job_stack_trace) не выводились. Исправлена проблема, при которой настройкаenable_job_stack_traceнекорректно распространялась на потоки, из-за чего содержимое стека вызовов могло не соответствовать этой настройке. #76191 (Yakov Olkhovskiy). - Исправлена некорректная проверка прав, из-за которой для
ALTER RENAMEтребовался грантCREATE USER. Закрывает #74372. #76241 (pufit). - Исправлена работа функции reinterpretAs с типом FixedString на архитектуре big-endian. #76253 (Azat Khuzhin).
- Исправлена логическая ошибка в S3Queue: «Expected current processor to be equal to for bucket ». #76358 (Kseniia Sumarokova).
- Исправлена взаимоблокировка при операции ALTER в базе данных Memory. #76359 (Azat Khuzhin).
- Исправлена логическая ошибка при анализе индекса, если в условии
WHEREиспользуется функцияpointInPolygon. #76360 (Anton Popov). - Исправлен потенциально небезопасный вызов в обработчике сигналов. #76549 (Yakov Olkhovskiy).
- Исправлена поддержка обратного ключа в PartsSplitter. Исправляет #73400. #73418 (Amos Bird).
Улучшения в сборке/тестировании/упаковке
- Поддержка сборки HDFS на Mac с ARM и Intel. #74244 (Yan Xin).
- Включена поддержка ICU и GRPC при кросс-компиляции для Darwin. #75922 (Raúl Marín).
- Обновление встроенного LLVM до версии 19. #75148 (Konstantin Bogdanов).
- Отключён сетевой доступ для пользователя
defaultв docker-образе. #75259 (Mikhail f. Shiryaev). Все действия, связанные с clickhouse-server, вынесены в функцию и выполняются только при запуске бинарника по умолчанию вentrypoint.sh. Давнее улучшение было предложено в #50724. Добавлен флаг--usersкclickhouse-extract-from-configдля получения значений изusers.xml. #75643 (Mikhail f. Shiryaev). - Удалено около 20 МБ мёртвого кода из бинарника. #76226 (Alexey Milovidov).
Релиз ClickHouse 25.1, 2025-01-28
Обратимо несовместимые изменения
JSONEachRowWithProgressбудет записывать прогресс при каждом его обновлении. В предыдущих версиях прогресс показывался только после каждого блока результата, из-за чего он был бесполезен. Изменён способ отображения прогресса: нулевые значения показываться не будут. Это закрывает #70800. #73834 (Alexey Milovidov).- Таблицы
Mergeбудут унифицировать структуру подчинённых таблиц, используя объединение их столбцов и выводя общие типы. Это закрывает #64864. В некоторых случаях это изменение может быть несовместимым с предыдущими версиями. Один из примеров — когда между таблицами нет общего типа, но преобразование к типу первой таблицы всё ещё возможно, как в случае UInt64 и Int64 или любого числового типа и String. Если вы хотите вернуться к старому поведению, установитеmerge_table_max_tables_to_look_for_schema_inferenceравным1или установитеcompatibilityв24.12или более раннее значение. #73956 (Alexey Milovidov). - Формат вывода Parquet преобразует столбцы Date и DateTime в типы даты/времени, поддерживаемые Parquet, вместо записи их как «сырых» чисел.
DateTimeстановитсяDateTime64(3)(было:UInt32); установкаoutput_format_parquet_datetime_as_uint32возвращает старое поведение.DateстановитсяDate32(было:UInt16). #70950 (Michael Kolupaev). - По умолчанию не допускаются несравнимые типы (такие как
JSON/Object/AggregateFunction) вORDER BYи в функциях сравненияless/greater/equal/etc. #73276 (Pavel Kruglov). - Устаревший движок базы данных
MaterializedMySQLудалён и больше недоступен. #73879 (Alexey Milovidov). - Источник словаря
mysqlбольше не выполняет запросSHOW TABLE STATUS, так как он не даёт никакой полезной информации для таблиц InnoDB, а также для любых современных версий MySQL в целом. Это закрывает #72636. Это изменение обратно совместимо, но помещено в эту категорию, чтобы у вас была возможность его заметить. #73914 (Alexey Milovidov). - Запросы
CHECK TABLEтеперь требуют отдельного праваCHECK. В предыдущих версиях для выполнения этих запросов было достаточно праваSHOW TABLES. Но запросCHECK TABLEможет быть тяжёлым, и обычные лимиты сложности запроса для запросовSELECTк нему не применяются. Это создавало потенциальную возможность для DoS-атаки. #74471 (Alexey Milovidov). - Функция
h3ToGeo()теперь возвращает результаты в порядке(lat, lon)(который является стандартным порядком для геометрических функций). Пользователи, которые хотят сохранить устаревший порядок результата(lon, lat), могут установить настройкуh3togeo_lon_lat_result_order = true. #74719 (Manish Gill). - Новый драйвер MongoDB теперь используется по умолчанию. Пользователи, которые хотят продолжить использование устаревшего драйвера, могут установить серверную настройку
use_legacy_mongodb_integrationв значение true. #73359 (Robert Schulze).
Новая возможность
- Добавлена возможность применять незавершённые мутации (ещё не материализованные фоновым процессом) во время выполнения запросов
SELECTсразу после отправки. Эту возможность можно включить, установивapply_mutations_on_fly. #74877 (Anton Popov). - Реализовано отсечение партиций (
partition pruning) для таблицIcebergпри операциях партиционирования с временными преобразованиями. #72044 (Daniil Ivanik). - Добавлена поддержка подстолбцов в ключе сортировки движка MergeTree и пропускающих индексах. #72644 (Pavel Kruglov).
- Добавлена поддержка чтения значений
HALF_FLOATизApache Arrow/Parquet/ORC(они считываются какFloat32). Это закрывает #72960. Имейте в виду, что формат IEEE-754 с половинной точностью — это не то же самое, чтоBFloat16. Закрывает #73835. #73836 (Alexey Milovidov). - Таблица
system.trace_logбудет содержать два новых столбца —symbolsиlines, в которых хранится символизированный стек вызовов. Это позволяет легко собирать и экспортировать информацию для профилирования. Работа механизма управляется параметром конфигурации сервераsymbolizeв секцииtrace_logи по умолчанию он включён. #73896 (Alexey Milovidov). - Добавлена новая функция
generateSerialID, которую можно использовать для генерации автоинкрементных идентификаторов в таблицах. Продолжение #64310 от kazalika. Закрывает #62485. #73950 (Alexey Milovidov). - Добавлен синтаксис
query1 PARALLEL WITH query2 PARALLEL WITH query3 ... PARALLEL WITH queryNдля DDL-запросов. Это означает, что подзапросы{query1, query2, ... queryN}могут выполняться параллельно между собой (и это предпочтительно). #73983 (Vitaly Baranov). - Добавлен кэш в оперативной памяти для десериализованных гранул пропускающих индексов. Это должно ускорить повторные запросы, использующие пропускающие индексы. Размер нового кэша управляется настройками сервера
skipping_index_cache_sizeиskipping_index_cache_max_entries. Основной мотивацией для добавления кэша были индексы векторного сходства, которые теперь работают значительно быстрее. #70102 (Robert Schulze). - Теперь во встроенном веб-интерфейсе во время выполнения запроса отображается индикатор прогресса. Он позволяет отменять запросы. Отображается общее количество записей и расширенная информация о скорости. Таблица может отображаться по мере поступления данных. Включено HTTP-сжатие. Отрисовка таблицы стала быстрее. Заголовок таблицы стал фиксированным. Интерфейс позволяет выделять ячейки и перемещаться по ним с помощью клавиш со стрелками. Исправлена проблема, при которой контур выделенной ячейки делал её меньше. Ячейки больше не расширяются при наведении мыши, а только при выделении. Момент прекращения отрисовки поступающих данных теперь определяется на стороне клиента, а не сервера. Добавлена подсветка разрядных групп у чисел. Общий дизайн обновлён и стал более выразительным. Интерфейс проверяет доступность сервера и корректность учётных данных, а также отображает версию сервера и время его работы. Значок облака корректно отображается в виде контура во всех шрифтах, включая Safari. Большие целые числа внутри вложенных типов данных отображаются корректнее. Значения inf/nan отображаются корректно. Типы данных отображаются при наведении указателя мыши на заголовок столбца. #74204 (Alexey Milovidov).
- Добавлена возможность по умолчанию создавать min-max (пропускающие, skipping) индексы для столбцов в таблицах MergeTree с помощью настроек
add_minmax_index_for_numeric_columns(для числовых столбцов) иadd_minmax_index_for_string_columns(для строковых столбцов). Пока обе настройки отключены, поэтому поведение системы пока не изменилось. #74266 (Smita Kulkarni). - Добавлены поля
script_query_numberиscript_line_numberвsystem.query_log, в ClientInfo в нативном протоколе и в журналы сервера. Это закрывает задачу #67542. Благодарим pinsvin00 за запуск этой функциональности ранее в #68133. #74477 (Alexey Milovidov). - Добавлена агрегатная функция
sequenceMatchEvents, которая возвращает временные метки соответствующих событий для самой длинной цепочки событий по шаблону. #72349 (UnamedRus). - Добавлена функция
arrayNormalizedGini. #72823 (flynn). - Добавлена поддержка оператора вычитания для
DateTime64, что позволяет выполнять вычитание между значениямиDateTime64, а такжеDateTime. #74482 (Li Yin).
Экспериментальные возможности
- Тип данных
BFloat16готов к использованию в продуктивной среде. #73840 (Alexey Milovidov).
Повышение производительности
- Оптимизирована функция
indexHint. Теперь столбцы, которые используются только как аргументы функцииindexHint, не читаются из таблицы. #74314 (Anton Popov). Если функцияindexHint— ключевой элемент вашей корпоративной архитектуры данных, эта оптимизация спасёт вам жизнь. - Более точный учет настройки
max_joined_block_size_rowsдля JOIN-алгоритмаparallel_hash. Помогает избежать повышенного потребления памяти по сравнению с алгоритмомhash. #74630 (Nikita Taranov). - Поддерживается оптимизация проталкивания предикатов (predicate push down) на уровне плана запроса для шага
MergingAggregated. Это повышает производительность некоторых запросов при использовании анализатора. #74073 (Nikolai Kochetov). - Разбиение блоков левой таблицы по хэшу было исключено из фазы probe алгоритма
parallel_hashJOIN. #73089 (Nikita Taranov). - Оптимизирован формат ввода RowBinary. Закрывает #63805. #65059 (Pavel Kruglov).
- Записывайте части с уровнем 1, если включен
optimize_on_insert. Это позволяет использовать несколько оптимизаций запросов сFINALдля только что записанных частей. #73132 (Anton Popov). - Ускорена десериализация строк за счёт некоторых низкоуровневых оптимизаций. #65948 (Nikita Taranov).
- При выполнении сравнения на равенство между записями, например при слияниях, начинайте сравнивать строки с тех столбцов, значения в которых с наибольшей вероятностью отличаются. #63780 (UnamedRus).
- Повышена производительность операции grace hash join за счет повторного упорядочения правой таблицы соединения по ключам. #72237 (kevinyhzou).
- Разрешить
arrayROCAUCиarrayAUCPRвычислять частичную площадь под всей кривой, чтобы их расчёт можно было распараллелить на огромных наборах данных. #72904 (Emmanuel). - Избегайте создания слишком большого количества простаивающих потоков. #72920 (Guo Wangyang).
- Не перечислять ключи в blob-хранилище, если в табличной функции используется только раскрытие фигурных скобок. Закрывает #73333. #73518 (Konstantin Bogdanov).
- Оптимизация вычислений по принципу короткого замыкания для функций, выполняемых над аргументами Nullable. #73820 (李扬).
- Не применять
maskedExecuteк столбцам, не являющимся функциями; улучшена производительность выполнения по принципу короткого замыкания. #73965 (lgbo). - Отключите автоматическое определение заголовков во входных форматах для
Kafka/NATS/RabbitMQ/FileLogдля повышения производительности. #74006 (Azat Khuzhin). - Выполнять конвейер с более высокой степенью параллелизма после агрегации с использованием GROUPING SETS. #74082 (Nikita Taranov).
- Сокращена критическая секция в
MergeTreeReadPool. #74202 (Guo Wangyang). - Повышена производительность параллельных реплик. Десериализация пакетов на инициаторе запроса для пакетов, не относящихся к протоколу параллельных реплик, теперь всегда выполняется в потоке обработки конвейера. Ранее это могло происходить в потоке, отвечающем за диспетчеризацию конвейера, что могло снижать отзывчивость инициатора и задерживать выполнение конвейера. #74398 (Igor Nikonov).
- Улучшена производительность крупных многокомандных запросов в Keeper. #74849 (Antonio Andelic).
- Используйте обёртки для логирования по значению и не размещайте их в куче. #74034 (Mikhail Artemenko).
- Повторно устанавливать соединения с репликами словарей MySQL и Postgres в фоновом режиме, чтобы это не приводило к задержкам запросов к соответствующим словарям. #71101 (Yakov Olkhovskiy).
- Параллельные реплики использовали историческую информацию о доступности реплик для улучшения выбора реплики, но не обновляли счётчик ошибок реплики, когда подключение было недоступно. Этот PR обновляет счётчик ошибок реплики при её недоступности. #72666 (zoomxi).
- Добавлена настройка MergeTree
materialize_skip_indexes_on_merge, которая подавляет создание skip-индексов во время слияний. Это позволяет пользователям явно управлять тем, когда создаются skip-индексы (черезALTER TABLE [..] MATERIALIZE INDEX [...]). Это может быть полезно, если построение skip-индексов дорого обходится (например, индексов векторного сходства). #74401 (Robert Schulze). - Оптимизированы запросы к Keeper в Storage(S3/Azure)Queue. #74410 (Kseniia Sumarokova). #74538 (Kseniia Sumarokova).
- Теперь по умолчанию используется до
1000параллельных реплик. #74504 (Konstantin Bogdanov). - Улучшено повторное использование HTTP-сессий при чтении с диска S3 (#72401). #74548 (Julian Maicher).
Улучшение
- Добавлена поддержка секции SETTINGS в запросе CREATE TABLE с неявно заданным ENGINE, а также возможность совместного использования настроек движка и настроек запроса. #73120 (Raúl Marín).
- Включить
use_hive_partitioningпо умолчанию. #71636 (Yarik Briukhovetskyi). - Реализована поддержка
CASTиALTERмежду типамиJSONс разными параметрами. #72303 (Pavel Kruglov). - Добавлена поддержка сравнения значений столбца JSON на равенство. #72991 (Pavel Kruglov).
- Улучшено форматирование идентификаторов с JSON-подстолбцами для избежания лишних обратных кавычек. #73085 (Pavel Kruglov).
- Улучшения интерактивных метрик. Исправлена проблема, из-за которой метрики из параллельных реплик отображались не полностью. Метрики отображаются сначала по времени последнего обновления, затем в лексикографическом порядке по имени. Устаревшие метрики не отображаются. #71631 (Julia Kartseva).
- Формат вывода JSON по умолчанию сделан красиво отформатированным. Добавлена новая настройка
output_format_json_pretty_printдля управления этим поведением, она включена по умолчанию. #72148 (Pavel Kruglov). - Разрешить
LowCardinality(UUID)по умолчанию. На практике это оказалось удобным для клиентов ClickHouse Cloud. #73826 (Alexey Milovidov). - Улучшено сообщение при установке. #73827 (Alexey Milovidov).
- Улучшено сообщение о сбросе пароля в ClickHouse Cloud. #73831 (Alexey Milovidov).
- Улучшено сообщение об ошибке для таблицы File, которая не поддерживает добавление данных в файл. #73832 (Alexey Milovidov).
- Запрашивать подтверждение, когда пользователь по ошибке пытается вывести бинарный формат (такой как Native, Parquet, Avro) в терминал. Это закрывает #59524. #73833 (Alexey Milovidov).
- Подсвечивать пробелы в конце строк в форматах Pretty и Vertical в терминале для лучшей наглядности. Эта функция управляется настройкой
output_format_pretty_highlight_trailing_spaces. Первоначальная реализация — Braden Burns из задачи #72996. Закрывает задачу #71590. #73847 (Alexey Milovidov). clickhouse-clientиclickhouse-localтеперь автоматически определяют сжатие стандартного ввода (stdin) при его перенаправлении из файла. Это закрывает #70865. #73848 (Alexey Milovidov).- По умолчанию в форматах вывода
prettyслишком длинные имена столбцов обрезаются. Это поведение управляется настройкамиoutput_format_pretty_max_column_name_width_cut_toиoutput_format_pretty_max_column_name_width_min_chars_to_cut. Это продолжение работы tanmaydatta в #66502. Тем самым закрывается #65968. #73851 (Alexey Milovidov). - Сделать форматы
Prettyболее удобочитаемыми: объединять блоки, если с момента вывода предыдущего блока прошло немного времени. Поведение управляется новыми настройкамиoutput_format_pretty_squash_consecutive_ms(по умолчанию 50 мс) иoutput_format_pretty_squash_max_wait_ms(по умолчанию 1000 мс). Продолжение #49537. Закрывает #49153. #73852 (Alexey Milovidov). - Добавлена метрика числа исходных частей, которые в данный момент сливаются. Это закрывает #70809. #73868 (Alexey Milovidov).
- Подсвечивать столбцы в формате
Verticalпри выводе в терминал. Это можно отключить с помощью настройкиoutput_format_pretty_color. #73898 (Alexey Milovidov). - Улучшена совместимость с MySQL до уровня, при котором
mysqlsh(функциональная CLI-консоль MySQL от Oracle) может подключаться к ClickHouse. Это необходимо для упрощения тестирования. #73912 (Alexey Milovidov). - Форматы pretty могут отображать многострочные значения в ячейке таблицы, что улучшает читаемость. Это поведение включено по умолчанию и управляется настройкой
output_format_pretty_multiline_fields. Продолжение работы Volodyachan в #64094. Это закрывает #56912. #74032 (Alexey Milovidov). - HTTP-заголовки X-ClickHouse теперь доступны JavaScript в браузере. Это упрощает разработку приложений. #74180 (Alexey Milovidov).
- Формат
JSONEachRowWithProgressвключает события с метаданными, а также totals и extremes. Он также включаетrows_before_limit_at_leastиrows_before_aggregation. Формат корректно выводит исключение, если оно возникает после частичных результатов. Теперь прогресс включает прошедшие наносекунды. В конце генерируется одно финальное событие прогресса. Прогресс во время выполнения запроса будет выводиться не чаще, чем задано параметромinteractive_delay. #74181 (Alexey Milovidov). - Песочные часы в интерфейсе Play UI теперь будут плавно вращаться. #74182 (Alexey Milovidov).
- Даже если HTTP-ответ сжат, отправляйте пакеты сразу, как только они приходят. Это позволяет браузеру получать пакеты прогресса и сжатые данные. #74201 (Alexey Milovidov).
- Если число выходных записей больше N =
output_format_pretty_max_rows, то вместо отображения только первых N строк таблица будет обрезана посередине: будут показаны N/2 первых строк и N/2 последних строк. Продолжение #64200. Закрывает #59502. #73929 (Alexey Milovidov). - Добавлена поддержка более общего алгоритма планирования соединений при включённом алгоритме хеш-соединения. #71926 (János Benjamin Antal).
- Добавлена возможность создавать индекс bloom_filter для столбцов с типом данных
DateTime64. #66416 (Yutong Xiao). - Когда одновременно включены параметры
min_age_to_force_merge_secondsиmin_age_to_force_merge_on_partition_only, слияние частей будет игнорировать ограничение по максимальному размеру в байтах. #73656 (Kai Zhu). - Добавлены HTTP-заголовки в таблицу логов спанов OpenTelemetry для повышения трассируемости. #70516 (jonymohajanGmail).
- Поддержка записи файлов формата
orcс использованием произвольного часового пояса, а не только часового поясаGMT. #70615 (kevinyhzou). - Учитывать настройки планировщика ввода-вывода при создании резервных копий между облаками. #71093 (János Benjamin Antal).
- Добавлен псевдоним столбца
metric—name— вsystem.asynchronous_metrics. #71164 (megao). - По историческим причинам запрос
ALTER TABLE MOVE PARTITION TO TABLEпроверял праваSELECTиALTER DELETEвместо отдельного типа доступаALTER_MOVE_PARTITION. Этот PR начинает использовать этот тип доступа. Для совместимости это разрешение также будет неявно предоставляться, если выданыSELECTиALTER DELETE, но такое поведение будет удалено в будущих релизах. Закрывает #16403. #71632 (pufit). - Выбрасывать исключение при попытке материализовать столбец, входящий в ключ сортировки, вместо того чтобы допускать нарушение порядка сортировки. #71891 (Peter Nguyen).
- Скрывать секреты в выводе
EXPLAIN QUERY TREE. #72025 (Yakov Olkhovskiy). - Реализована поддержка логических целочисленных типов Parquet в «native» reader. #72105 (Arthur Passos).
- Интерактивно запрашивать учетные данные через браузер, если для пользователя по умолчанию требуется пароль. В предыдущих версиях сервер возвращал HTTP 403; теперь он возвращает HTTP 401. #72198 (Alexey Milovidov).
- Типы доступа
CREATE_USER,ALTER_USER,DROP_USER,CREATE_ROLE,ALTER_ROLE,DROP_ROLEпреобразованы из глобальных в параметризованные. Это означает, что пользователи теперь могут более точно выдавать привилегии на управление доступом. #72246 (pufit). - Добавлен столбец
latest_fail_error_code_nameв таблицуsystem.mutations. Этот столбец нужен для введения новой метрики по застрявшим мутациям и его использования для построения графиков ошибок, возникающих в облаке, а также, при необходимости, для добавления нового, менее шумного оповещения. #72398 (Miсhael Stetsyuk). - Уменьшено количество операций выделения памяти в запросе
ATTACH PARTITION. #72583 (Константин Морозов). - Лимит
max_bytes_before_external_sortтеперь зависит от общего потребления памяти запросом (ранее он соответствовал количеству байт в сортируемом блоке для одного потока сортировки, теперь он имеет тот же смысл, что иmax_bytes_before_external_group_by— это общий лимит памяти для всего запроса для всех потоков). Также добавлена ещё одна настройка для контроля размера блоков на диске —min_external_sort_block_bytes. #72598 (Azat Khuzhin). - Игнорировать ограничения по памяти со стороны сборщика трассировок. #72606 (Azat Khuzhin).
- Добавлены параметры сервера
dictionaries_lazy_loadиwait_dictionaries_load_at_startupвsystem.server_settings. #72664 (Christoph Wurm). - Добавляет настройку
max_backup_bandwidthв список настроек, которые можно задавать в запросахBACKUP/RESTORE. #72665 (Christoph Wurm). - Понижен уровень логирования для сообщений о появляющихся реплицированных частях в движке ReplicatedMergeTree, чтобы сократить объём логов, генерируемых в реплицированном кластере. #72876 (mor-akamai).
- Улучшено выделение общих выражений в дизъюнкциях. Добавлена возможность упрощать результирующее фильтрующее выражение, даже если нет общего подвыражения для всех дизъюнктов. Продолжение #71537. #73271 (Dmitry Novik).
- В хранилищах
S3Queue/AzureQueueтеперь можно добавлять настройки для таблиц, которые были созданы без них. #73283 (Kseniia Sumarokova). - Добавлена настройка
least_greatest_legacy_null_behavior(по умолчанию:false), которая определяет, должны ли функцииleastиgreatestпри наличии аргументовNULLбезусловно возвращатьNULL(еслиtrue) или игнорировать такие аргументы (еслиfalse). #73344 (Robert Schulze). - Теперь в потоке очистки ObjectStorageQueueMetadata используются мультизапросы Keeper. #73357 (Antonio Andelic).
- Когда ClickHouse работает в cgroup, мы по-прежнему собираем системные асинхронные метрики, связанные с нагрузкой на систему, планированием процессов, использованием памяти и т. д. Они могут давать полезные сигналы, когда ClickHouse — единственный процесс на хосте с высоким потреблением ресурсов. #73369 (Nikita Taranov).
- В хранилище
S3Queueпоявилась возможность переноса старых упорядоченных таблиц, созданных до версии 24.6, в новую структуру с бакетами. #73467 (Kseniia Sumarokova). - Добавлена таблица
system.azure_queue, аналогичная существующейsystem.s3queue. #73477 (Kseniia Sumarokova). - Функция
parseDateTime64(и её варианты) теперь выдаёт корректные результаты для дат, относящихся к периодам до 1970 года и после 2106 года. Пример:SELECT parseDateTime64InJodaSyntax('2200-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS'). #73594 (zhanglistar). - Устранены некоторые проблемы удобства использования
clickhouse-disks, сообщённые пользователями. Закрывает #67136. #73616 (Daniil Ivanik). - Добавлена возможность изменять настройки коммита в хранилище S3(Azure)Queue. (Настройки коммита:
max_processed_files_before_commit,max_processed_rows_before_commit,max_processed_bytes_before_commit,max_processing_time_sec_before_commit). #73635 (Kseniia Sumarokova). - В хранилище S3(Azure)Queue агрегируется прогресс по источникам для сравнения с настройками лимита коммита (commit limit). #73641 (Kseniia Sumarokova).
- Добавлена поддержка базовых настроек в запросах
BACKUPиRESTORE. #73650 (Vitaly Baranov). - Учитывайте
output_format_compression_levelпри выводе в формате Parquet. #73651 (Arthur Passos). - Добавлена поддержка чтения
fixed_size_listиз Apache Arrow какArrayвместо того, чтобы считать его неподдерживаемым типом. #73654 (Julian Meyers). - Добавлены два движка резервного копирования:
Memory(хранит резервные копии в рамках текущей пользовательской сессии) иNull(не сохраняет резервные копии), предназначенных для тестирования. #73690 (Vitaly Baranov). concurrent_threads_soft_limit_numиconcurrent_threads_soft_limit_num_ratio_to_coresможно изменять без перезапуска сервера. #73713 (Sergei Trifonov).- Добавлена поддержка расширенных числовых типов (
Decimal, большие целые числа) в функцияхformatReadable. #73765 (Raúl Marín). - Добавлена поддержка TLS для совместимости с сетевым протоколом PostgreSQL. #73812 (scanhex12).
- Функция
isIPv4Stringвозвращала true, если за корректным IPv4-адресом следовал нулевой байт, тогда как в этом случае она должна возвращать false. Продолжение #65387. #73946 (Alexey Milovidov). - Сделать код ошибки в сетевом протоколе MySQL совместимым с MySQL. Продолжение #56831. Закрывает #50957. #73948 (Alexey Milovidov).
- Добавлена настройка
validate_enum_literals_in_opearatorsдля проверки литералов перечислений в операторахIN,NOT INна соответствие типу перечисления и выброса исключения, если литерал не является допустимым значением этого перечисления. #73985 (Vladimir Cherkasov). - В хранилище
S3(Azure)Queueкоммитить все файлы (в одном батче, задаваемом настройками коммита) в одной транзакции Keeper. #73991 (Kseniia Sumarokova). - Отключено определение заголовков для исполняемых UDF и словарей (это могло приводить к ошибке
Function 'X': wrong result, expected Y row(s), actual Y-1). #73992 (Azat Khuzhin). - Добавлена опция
distributedдляEXPLAIN PLAN.ТеперьEXPLAIN distributed=1 ...дописывает удалённый план к шагамReadFromParallelRemote*. #73994 (Nikolai Kochetov). - Используется корректный тип возвращаемого значения для not/xor с аргументами Dynamic. #74013 (Pavel Kruglov).
- Добавлена возможность изменять
add_implicit_sign_column_constraint_for_collapsing_engineпосле создания таблицы. #74014 (Christoph Wurm). - Реализована поддержка подстолбцов в запросе SELECT для материализованного представления. #74030 (Pavel Kruglov).
- Теперь есть три простых способа задать пользовательскую строку приглашения (prompt) в
clickhouse-client: 1. с помощью параметра командной строки--prompt, 2. в конфигурационном файле, с помощью настройки<prompt>[...]</prompt>, и 3. также в конфигурационном файле, с помощью настроек для отдельных подключений<connections_credentials><prompt>[...]</prompt></connection_credentials>. #74168 (Christoph Wurm). - Автоматически определять защищённое соединение при подключении к порту 9440 клиентом ClickHouse. #74212 (Christoph Wurm).
- Аутентифицировать пользователей только по имени пользователя для http_handlers (ранее пользователю также требовалось указывать пароль). #74221 (Azat Khuzhin).
- Поддержка альтернативных языков запросов PRQL и KQL помечена как экспериментальная. Чтобы использовать их, укажите настройки
allow_experimental_prql_dialect = 1иallow_experimental_kusto_dialect = 1. #74224 (Robert Schulze). - Добавлена поддержка возврата типа Enum по умолчанию в большем количестве агрегатных функций. #74272 (Raúl Marín).
- В операторе
OPTIMIZE TABLEтеперь можно указывать ключевое словоFORCEв качестве альтернативы существующему ключевому словуFINAL. #74342 (Robert Schulze). - Добавлена метрика
IsServerShuttingDown, необходимая для срабатывания оповещения, когда завершение работы сервера занимает слишком много времени. #74429 (Miсhael Stetsyuk). - Добавлены имена таблиц Iceberg в вывод EXPLAIN. #74485 (alekseev-maksim).
- Улучшено сообщение об ошибке при использовании RECURSIVE CTE со старым анализатором. #74523 (Raúl Marín).
- Отображать подробные сообщения об ошибках в
system.errors. #74574 (Vitaly Baranov). - Разрешает использование пароля для клиентского подключения к clickhouse-keeper. Эта возможность не очень полезна, если вы указываете корректную конфигурацию SSL для сервера и клиента, но всё же может пригодиться в некоторых случаях. Пароль не может быть длиннее 16 символов. Это не связано с моделью аутентификации Keeper. #74673 (alesapin).
- Добавлен код ошибки для перезагрузчика конфигурации. #74746 (Garrett Thomas).
- Добавлена поддержка IPv6-адресов в табличных функциях и движках таблиц MySQL и PostgreSQL. #74796 (Mikhail Koviazin).
- Реализована оптимизация по принципу короткого замыкания для
divideDecimal. Исправляет #74280. #74843 (Kevin Mingtarja). - Теперь пользователей можно указывать в стартовых скриптах. #74894 (pufit).
- Добавлена поддержка токенов SAS для Azure. #72959 (Azat Khuzhin).
Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе)
- Задавать уровень сжатия Parquet только в том случае, если кодек сжатия поддерживает эту настройку. #74659 (Arthur Passos).
- Исправлена регрессия, из-за которой при использовании локалей сортировки с модификаторами возникала ошибка. Например, теперь корректно работает запрос
SELECT arrayJoin(['kk 50', 'KK 01', ' KK 2', ' KK 3', 'kk 1', 'x9y99', 'x9y100']) item ORDER BY item ASC COLLATE 'tr-u-kn-true-ka-shifted. #73544 (Robert Schulze). - Исправлена ошибка, из-за которой не удавалось создать узел SEQUENTIAL с помощью keeper-client. #64177 (Duc Canh Le).
- Исправлен некорректный подсчёт количества символов в функциях position. #71003 (思维).
- Операции
RESTOREдля сущностей доступа требовали больше прав, чем было необходимо, из-за необработанных частичных отзывов прав. Этот PR исправляет проблему. Закрывает #71853. #71958 (pufit). - Исключена пауза после
ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE. Обеспечено корректное получение настроек планирования фоновых задач. #72024 (Aleksei Filatov). - Исправлена обработка пустых кортежей в некоторых форматах ввода и вывода (например, Parquet, Arrow). #72616 (Michael Kolupaev).
- Операторы GRANT SELECT/INSERT, заданные на уровне столбцов для баз данных/таблиц, указанных с подстановочными символами, теперь приводят к ошибке. #72646 (Johann Gan).
- Исправлена ситуация, когда пользователь не может выполнить
REVOKE ALL ON *.*из-за неявно выданных прав в целевой сущности доступа. #72872 (pufit). - Исправлено форматирование положительных значений смещения часового пояса в скалярной функции formatDateTime. #73091 (ollidraese).
- Исправление для корректного отражения исходного порта при установлении соединения через PROXYv1 и включённом параметре
auth_use_forwarded_address— ранее некорректно использовался порт прокси. Добавлена функцияcurrentQueryID(). #73095 (Yakov Olkhovskiy). - Передавать настройки формата в
NativeWriterвнутриTCPHandler, чтобы такие настройки, какoutput_format_native_write_json_as_string, применялись корректно. #73179 (Pavel Kruglov). - Исправлена ошибка, вызывавшая аварийное завершение работы StorageObjectStorageQueue. #73274 (Kseniia Sumarokova).
- Исправлено редкое падение сервера при завершении работы из‑за обновляемого материализованного представления. #73323 (Michael Kolupaev).
- Спецификатор
%fфункцииformatDateTimeтеперь всегда генерирует шесть цифр для долей секунды. Это делает поведение совместимым с функцией MySQLDATE_FORMAT. Предыдущее поведение можно восстановить с помощью настройкиformatdatetime_f_prints_scale_number_of_digits = 1. #73324 (ollidraese). - Исправлена фильтрация по столбцу
_etagпри чтении из хранилищаs3и табличной функцииs3. #73353 (Anton Popov). - Исправлена ошибка
Not-ready Set is passed as the second argument for function 'in', возникавшая при использованииIN (subquery)в выраженииJOIN ONсо старым анализатором. #73382 (Nikolai Kochetov). - Исправлена подготовка к схлопыванию для Dynamic- и JSON-столбцов. Ранее в некоторых случаях новые типы могли быть вставлены в shared variant/shared data, даже если лимит на количество типов/путей не был достигнут. #73388 (Pavel Kruglov).
- Проверять размеры на повреждение при двоичном декодировании типов, чтобы избежать слишком больших выделений памяти. #73390 (Pavel Kruglov).
- Исправлена логическая ошибка при чтении из однорепликового кластера при включённом механизме параллельных реплик. #73403 (Michael Kolupaev).
- Исправлена работа очереди ObjectStorageQueue с ZooKeeper и более старыми версиями Keeper. #73420 (Antonio Andelic).
- Выполнено исправление, необходимое для включения секционирования Hive по умолчанию. #73479 (Yarik Briukhovetskyi).
- Исправлена гонка данных при создании индекса сходства векторов. #73517 (Antonio Andelic).
- Исправлена ошибка сегментации, возникающая, если источник словаря содержит функцию с некорректными данными. #73535 (Yarik Briukhovetskyi).
- Исправлена логика повторных попыток при неудачной вставке в хранилище S3(Azure)Queue. Закрывает #70951. #73546 (Kseniia Sumarokova).
- Исправлена ошибка в функции
tupleElement, которая могла возникать в некоторых случаях для кортежей с элементами типаLowCardinalityпри включённой настройкеoptimize_functions_to_subcolumns. #73548 (Anton Popov). - Исправлен разбор шаблона перечисления (enum glob), после которого следует диапазон. Это исправляет #73473. #73569 (Konstantin Bogdanov).
- Исправлена проблема, из-за которой parallel_replicas_for_non_replicated_merge_tree игнорировался в подзапросах для нереплицируемых таблиц. #73584 (Igor Nikonov).
- Исправление исключения
std::logical_error, возникающего, когда задачу невозможно запланировать. Обнаружено в стресс-тестах. #73629 (Alexander Gololobov). - Не интерпретировать запросы в режиме
EXPLAIN SYNTAX, чтобы избежать логических ошибок из-за некорректного этапа обработки распределённых запросов. Исправляет #65205. #73634 (Dmitry Novik). - Исправлена возможная несогласованность данных в динамическом столбце. Устранена потенциальная логическая ошибка
Nested columns sizes are inconsistent with local_discriminators column size. #73644 (Pavel Kruglov). - Исправлена ошибка
NOT_FOUND_COLUMN_IN_BLOCKв запросах сFINALиSAMPLE. Исправлен некорректный результат в запросах SELECT сFINALизCollapsingMergeTreeи включены оптимизацииFINAL. #73682 (Anton Popov). - Исправлена ошибка, приводившая к сбою в LIMIT BY COLUMNS. #73686 (Raúl Marín).
- Исправлена ошибка, когда при принудительном использовании обычной проекции и запросе, в точности совпадающем с определением проекции, сама проекция не выбиралась, из‑за чего возникала ошибка. #73700 (Shichao Jin).
- Исправлена ошибка в десериализации структуры Dynamic/Object. Это могло приводить к возникновению исключений CANNOT_READ_ALL_DATA. #73767 (Pavel Kruglov).
- Пропускать файл
metadata_version.txtпри восстановлении частей из резервной копии. #73768 (Vitaly Baranov). - Исправлена ошибка сегментации при приведении к Enum с использованием LIKE. #73775 (zhanglistar).
- Исправление проблемы, из-за которой корзина S3 Express не работала в качестве диска. #73777 (Sameer Tamsekar).
- Разрешить слияние строк с недопустимыми значениями в столбце
signв таблицах CollapsingMergeTree. #73864 (Christoph Wurm). - Исправлена ошибка, возникавшая при выполнении DDL-запроса с офлайн-репликой. #73876 (Tuan Pham Anh).
- Исправлена периодически возникающая ошибка при сравнении типов
map()из-за того, что можно создатьMapбез явного указания имён ('keys','values') для его вложенного кортежа. #73878 (Yakov Olkhovskiy). - Игнорировать оконные функции при обработке предложения GROUP BY ALL. Исправлена ошибка #73501. #73916 (Dmitry Novik).
- Исправлены неявные привилегии (раньше вели себя как подстановочный символ). #73932 (Azat Khuzhin).
- Исправлено повышенное потребление памяти при создании вложенных
Map. #73982 (Pavel Kruglov). - Исправлена обработка вложенного JSON с пустыми ключами. #73993 (Pavel Kruglov).
- Исправление: устранена ошибка, из-за которой псевдоним мог не добавляться в проекцию, если на него ссылался другой псевдоним и он выбирался в обратном порядке. #74033 (Yakov Olkhovskiy).
- Игнорировать ошибки «object not found» для Azure при инициализации диска plain_rewritable. #74059 (Julia Kartseva).
- Исправлено поведение
anyиanyLastс типами Enum и пустой таблицей. #74061 (Joanna Hulboj). - Исправлена ошибка, возникавшая при указании пользователем именованных аргументов в табличном движке Kafka. #74064 (Yarik Briukhovetskyi).
- Исправлена возможность изменения настроек хранилища
S3Queueиз варианта с префиксом «s3queue_» в вариант без префикса и наоборот. #74075 (Kseniia Sumarokova). - Добавлена настройка
allow_push_predicate_ast_for_distributed_subqueries. Она добавляет проталкивание предикатов на уровне AST (predicate push-down) для распределённых запросов с анализатором. Это временное решение, которое мы используем до тех пор, пока не будет добавлена поддержка распределённых запросов с сериализацией плана запроса. Закрывает #66878 #69472 #65638 #68030 #73718. #74085 (Nikolai Kochetov). - Исправляет проблему, когда после #73095 в поле forwarded_for может присутствовать порт, из‑за чего становится невозможно разрешить имя хоста, если в нём указан порт. #74116 (Yakov Olkhovskiy).
- Исправлено некорректное форматирование оператора
ALTER TABLE (DROP STATISTICS ...) (DROP STATISTICS ...). #74126 (Han Fei). - Исправление ошибки #66112. #74128 (Anton Ivashkin).
- Использовать
Loopв качестве движка таблицы вCREATE TABLEбольше нельзя. Ранее такая комбинация приводила к сегфолтам. #74137 (Yarik Briukhovetskyi). - Устранена уязвимость, чтобы предотвратить SQL‑инъекции в табличных функциях postgresql и sqlite. #74144 (Pablo Marcos).
- Исправлен сбой при чтении подстолбца из сжатой таблицы с движком Memory. Исправляет проблему #74009. #74161 (Nikita Taranov).
- Исправлен бесконечный цикл, возникавший при запросах к system.detached_tables. #74190 (Konstantin Morozov).
- Исправлена логическая ошибка в s3queue при пометке файла как ошибочного. #74216 (Kseniia Sumarokova).
- Исправлены настройки нативного копирования (
allow_s3_native_copy/allow_azure_native_copy) дляRESTOREиз базового бэкапа. #74286 (Azat Khuzhin). - Исправлена проблема, возникавшая, если количество отсоединённых таблиц в базе данных было кратно значению max_block_size. #74289 (Konstantin Morozov).
- Исправлено копирование через ObjectStorage (т.е. S3), когда учетные данные для источника и назначения различаются. #74331 (Azat Khuzhin).
- Исправлено определение параметра «использовать метод Rewrite в JSON API» при нативном копировании в GCS. #74338 (Azat Khuzhin).
- Исправлен некорректный расчёт
BackgroundMergesAndMutationsPoolSize(он был вдвое больше фактического значения). #74509 (alesapin). - Исправлена ошибка утечки наблюдателей Keeper при включении функции Cluster Discovery. #74521 (RinChanNOW).
- Исправлена ошибка выравнивания памяти, выявленная UBSan #74512. #74534 (Arthur Passos).
- Исправлена проблема конкурентной очистки KeeperMap при создании таблицы. #74568 (Antonio Andelic).
- Не удалять неиспользуемые столбцы проекций в подзапросах при наличии
EXCEPTилиINTERSECTдля сохранения корректного результата запроса. Исправляет #73930. Исправляет #66465. #74577 (Dmitry Novik). - Исправлены запросы
INSERT SELECTмежду таблицами со столбцами типаTupleпри включённой разрежённой сериализации. #74698 (Anton Popov). - Функция
rightработает некорректно при константном отрицательном смещении. #74701 (Daniil Ivanik). - Исправлена проблема, из-за которой вставка gzip-сжатых данных иногда завершалась сбоем из-за некорректной декомпрессии на стороне клиента. #74707 (siyuan).
- Частичный отзыв прав при грантах с шаблонами (wildcard) мог приводить к удалению большего количества привилегий, чем ожидалось. Закрывает #74263. #74751 (pufit).
- Keeper: исправлено чтение записей журнала с диска. #74785 (Antonio Andelic).
- Исправлена проверка привилегий для SYSTEM REFRESH/START/STOP VIEW: теперь для выполнения запроса с конкретным представлением не требуется иметь эти привилегии на
*.*, достаточно привилегий только на это представление. #74789 (Alexander Tokmakov). - Функция
hasColumnInTableне учитывала алиасы столбцов. Исправлена, теперь она также работает с алиасами столбцов. #74841 (Bharat Nallan). - Исправлена ошибка FILE_DOESNT_EXIST, возникавшая при слиянии частей данных таблицы с пустым столбцом в Azure Blob Storage. #74892 (Julia Kartseva).
- Исправлено имя столбца проекции при соединении временных таблиц, закрыта #68872. #74897 (Vladimir Cherkasov).
Улучшения сборки, тестирования и упаковки
- Универсальный скрипт установки теперь будет предлагать установку даже на macOS. #74339 (Alexey Milovidov).