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

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

Оглавление

Релиз ClickHouse v25.11, 2025-11-25
Релиз 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.11, 2025-11-25

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

  • Удалён устаревший тип данных Object. #85718 (Pavel Kruglov).
  • Удалена устаревшая возможность LIVE VIEW. Если вы используете LIVE VIEW, обновление до новой версии будет невозможно. #88706 (Alexey Milovidov).
  • В предыдущих версиях тип Geometry был алиасом типа String, но теперь это полноценный тип. #83344 (scanhex12).
  • Добавлено экранирование имён файлов, создаваемых для подстолбцов типа Variant в широких партах данных (Wide) таблиц MergeTree. Это изменение нарушает совместимость со старыми таблицами с типами данных Variant/Dynamic/JSON. Исправляет хранение типов со специальными символами внутри Variant (например, DateTime с определённым часовым поясом, который содержит \). Экранирование можно отключить, изменив настройку MergeTree escape_variant_subcolumn_filenames (для сохранения совместимости отключите эту настройку в конфигурации для MergeTree или установите настройку compatibility на предыдущую версию перед обновлением). Решает #69590. #87300 (Pavel Kruglov).
  • По умолчанию включён формат сериализации with_size_stream для типа данных String. Это изменение обратно совместимо, но новый формат сериализации поддерживается только начиная с версии 25.10, что означает невозможность отката до версий ранее 25.10. Если вы хотите сохранить возможность отката до версий 25.9 и более ранних, настройте serialization_info_version как basic и string_serialization_version как single_stream в разделе merge_tree конфигурации сервера. #89329 (Alexey Milovidov).
  • Добавлена поддержка пометки исключений тегами в HTTP-ответах, чтобы клиенты могли более надёжно анализировать исключения. Исправляет #75175. Настройка http_write_exception_in_output_format по умолчанию отключена для обеспечения единообразия между форматами. #88818 (Kaviraj Kanagaraj). Хотя не предполагается, что это нарушит какое-либо существующее поведение (в худшем случае к сообщению об исключении будет добавлена странная строка), всё же имеет смысл использовать «Изменение, нарушающее обратную совместимость» как категорию в changelog просто для информирования (потому что неизвестно, как какие-нибудь грязные скрипты могут разбирать сообщение об исключении).
  • TODO, @Michicosun — уточнить или удалить. Диски PlainRewritable хранят дерево своей файловой системы в памяти. Если другой диск изменит структуру объектного хранилища, структура в памяти не будет обновлена, что приведёт к некорректным операциям файловой системы и возможным ошибкам вида no such key. #89038 (Mikhail Artemenko).
  • Исправлен приоритет настроек SASL для хранилища Kafka. Табличные настройки SASL, заданные в запросах CREATE TABLE, теперь корректно переопределяют настройки consumer/producer из конфигурационных файлов. #89401 (János Benjamin Antal).
  • Временные метки Parquet без часового пояса (isAdjustedToUTC=false) теперь читаются как DateTime64(..., 'UTC') вместо DateTime64(...). Это менее ошибочно, так как преобразование такой временной метки в UTC в строку даёт корректное локальное время. Используйте input_format_parquet_local_time_as_utc = 0, чтобы вернуть старое поведение. Решает проблему #87469. #87872 (Michael Kolupaev).
  • Небольшое улучшение кодека T64: он больше не принимает типы данных, не выровненные по размеру элемента сжатия, что иначе приводило бы к ошибке. Исправляет #89282. #89432 (yanglongwei).

Новая функция

  • Добавлен тип Geometry. Для него поддерживается чтение форматов WKB и WKT. В предыдущих версиях тип Geometry был псевдонимом типа String, но теперь это полноценный тип. #83344 (scanhex12).
  • Добавлен новый оператор SQL EXECUTE AS для поддержки выполнения от имени других пользователей. Исправляет #39048. #70775 (Shankar).
  • Добавлена функция naiveBayesClassifier для классификации текста с использованием метода наивного Байеса на основе n-грамм. #88677 (Nihal Z. Miaji).
  • Добавлена поддержка дробных значений параметров LIMIT и OFFSET для выборки доли таблицы. Закрывает #81892. #88755 (Ahmed Gouda).
  • Подсистема ClickHouse для каталога Microsoft OneLake. #89366 (scanhex12).
  • Добавлена функция flipCoordinates, которая распаковывает заданное количество измерений массива и переставляет указатели местами внутри столбца Tuple. Исправляет #79469. #79634 (Sachin Kumar Singh).
  • Добавлена таблица system.unicode, содержащая список символов Юникода и их свойств. Закрывает #80055. #80857 (wxybear).
  • Добавлена новая настройка MergeTree merge_max_dynamic_subcolumns_in_wide_part, позволяющая ограничивать число динамических подстолбцов в широкой парте после слияния независимо от параметров, заданных в типе данных. #87646 (Pavel Kruglov).
  • Добавлена поддержка оконной функции cume_dist. Исправлена проблема #86920. #88102 (Manuel).
  • Теперь пользователь может добавить новый аргумент preprocessor при построении текстового индекса. Этот аргумент — произвольное выражение, которое преобразует каждый документ перед токенизацией. #88272 (Jimmy Aguilar Mena).
  • Добавляет поле memory_usage в X-ClickHouse-Progress и X-ClickHouse-Summary. Его можно использовать для сбора данных об использовании памяти запросами в режиме реального времени на стороне клиента. #88393 (Christoph Wurm).
  • Добавлена настройка into_outfile_create_parent_directories для автоматического создания родительских директорий для INTO OUTFILE, что предотвращает ошибки, когда путь вывода не существует. Это упрощает процессы, в которых запросы записывают результаты во вложенные директории. Исправляет #88610. #88795 (Saksham).
  • Добавлена поддержка синтаксиса CREATE OR REPLACE для временных таблиц. Закрывает #35888. #89450 (Aleksandr Musorin).
  • Поддержка функции arrayRemove для удаления всех элементов, равных elem, из массива arr. Она нужна только для совместимости с Postgres, поскольку в ClickHouse уже есть гораздо более мощная функция arrayFilter. Исправляет #52099. #89585 (tiwarysaurav).
  • Добавлена скалярная функция midpoint для вычисления среднего значения. Исправлена задача #89029. #89679 (simonmichal).
  • В веб-интерфейсе теперь доступна кнопка загрузки. Она позволяет скачать полный результат, даже если в интерфейсе отображается только его часть. #89768 (Alexey Milovidov).
  • Добавлена настройка arrow_flight_request_descriptor_type для поддержки Dremio и других серверов Arrow Flight, которым требуются дескрипторы командного типа. Реализует #89523. #89826 (Shreyas Ganesh).
  • Новые агрегатные функции argAndMin и argAndMax, которые возвращают аргумент и соответствующее минимальное/максимальное значение. В предыдущих версиях это также можно было сделать с использованием кортежа в качестве аргумента. #89884 (AbdAlRahman Gad).
  • Настройки записи и проверки контрольных сумм Parquet. #79012 (Michael Kolupaev).
  • Добавлена настройка kafka_schema_registry_skip_bytes в табличный движок Kafka для пропуска байт заголовка оболочки (например, 19-байтного префикса AWS Glue Schema Registry) перед разбором полезной нагрузки сообщения. Это позволяет ClickHouse читать сообщения из реестров схем, которые добавляют метаданные в заголовки. #89621 (Taras Polishchuk).
  • Добавлена функция h3PolygonToCells, которая заполняет геометрию h3‑шестиугольниками. Решает проблему #33991. #66262 (Zacharias Knudsen).
  • Добавлен новый виртуальный столбец _tags (Map(String, String)) со всеми тегами, связанными с объектом в S3 (обратите внимание, что если у объекта нет тегов, дополнительный запрос выполняться не будет). Решает #72945. #77773 (Zicong Qu).
  • TODO, @vdimir — объяснить разницу и перенести в другую категорию. Добавлены NULL-безопасные операторы сравнения <=> (псевдоним IS NOT DISTINCT FROM) и IS DISTINCT FROM для выполнения проверок на равенство с корректной обработкой значений NULL. Исправляет #86763. #87581 (yanglongwei).

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

  • Поддержка получения TLS-сертификатов от ACME-провайдеров, RFC 8555, таких как Let's Encrypt. Это позволяет автоматически настраивать TLS в распределённых кластерах. #66315 (Konstantin Bogdanov).
  • Поддержка части Prometheus HTTP Query API. Чтобы включить её, добавьте правило с типом query_api в раздел <prometheus> конфигурационного файла. Поддерживаемые обработчики: /api/v1/query_range и /api/v1/query. #86132 (Nikita Mikhaylov).
  • Полнотекстовый поиск теперь в статусе бета (ранее был экспериментальной возможностью). #88928 (Robert Schulze).
  • Alias переведён в разряд экспериментальных возможностей, может быть включён параметром allow_experimental_alias_table_engine = 1. #89712 (Kai Zhu).

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

  • Parquet reader v3 включен по умолчанию. #88827 (Michael Kolupaev).
  • Распределённое выполнение: лучше разбивать задачи по идентификаторам групп строк, а не по файлам. #87508 (scanhex12).
  • RIGHT и FULL JOIN теперь используют ConcurrentHashJoin; это означает, что эти типы соединений выполняются с более высокой степенью параллелизма. В различных сценариях RIGHT и FULL JOIN работают до двух раз быстрее. Устраняет #78027. #78462 (Yarik Briukhovetskyi).
  • Оптимизация обработки больших значений константных выражений в запросах. Закрывает #72880. #81104 (Yakov Olkhovskiy).
  • Запросы SELECT до 8 раз быстрее при интенсивном отсечении партиций на таблицах с более чем 10 000 частями. #85535 (James Morrison).
  • Когда запрос использует фиксированную хеш-таблицу для состояния агрегации (GROUP BY по небольшому целочисленному значению), ClickHouse параллельно объединяет состояние агрегации, чтобы ускорить выполнение запроса. #87366 (Jianfei Hu).
  • Разрешить использование проекций (которые выполняют SELECT _part_offset и используют иной ORDER BY) в качестве вторичного индекса. При включении параметра некоторые предикаты запроса могут использоваться для чтения из частей проекций и генерации битовых карт для эффективной фильтрации строк на этапе PREWHERE. Это третий шаг в реализации индекса проекций, следующий за #80343. #81021 (Amos Bird).
  • Исправлен VDSO для редких систем на базе Aarch64 и, возможно, других сочетаний архитектур и версий ядра. #86096 (Tomas Hulata).
  • Ускорена декомпрессия LZ4 за счёт упрощения кода и оптимизации алгоритма выбора. #88360 (Raúl Marín).
  • S3 внутренне распределяет объекты по разделам в зависимости от префиксов имён ключей и автоматически масштабируется до высокой интенсивности запросов на каждый раздел. Это изменение добавляет два новых параметра BACKUP: data_file_name_generator и data_file_name_prefix_length. Когда data_file_name_generator=checksum, файлы резервной копии данных получают имена на основе хэша их содержимого. Пример: для checksum = abcd1234ef567890abcd1234ef567890 и data_file_name_prefix_length = 3 результирующий путь будет: abc/d1234ef567890abcd1234ef567890. Получившееся распределение ключей улучшает балансировку нагрузки между разделами S3 и снижает риск ограничения пропускной способности (throttling). #88418 (Julia Kartseva).
  • Повышена производительность текстового индекса за счёт кэширования блоков словаря и использования хеш-таблиц для поиска токенов вместо бинарного поиска. #88786 (Elmi Ahmadov).
  • Запросы теперь могут одновременно использовать optimize_read_in_order и query_plan_optimize_lazy_materialization. Решает #88767. #88866 (Manuel).
  • Использовать агрегирующую проекцию для запросов с оператором DISTINCT. Закрывает #86925. #88894 (Nihal Z. Miaji).
  • Кэширование списков постинга для повышения производительности при последующих запусках. #88912 (Elmi Ahmadov).
  • Выполнять потоковую трансформацию LIMIT BY при совпадении порядка сортировки входных данных с ключами LIMIT BY. #88969 (Eduard Karacharov).
  • Добавлена возможность в некоторых случаях переписывать ANY LEFT JOIN или ANY RIGHT JOIN в ALL INNER JOIN. #89403 (Dmitry Novik).
  • Снизить накладные расходы на логирование: использовать меньше атомарных операций на запись. #89651 (Sergei Trifonov).
  • При включённых runtime-фильтрах в запросе с несколькими JOIN и несколькими runtime-фильтрами реализовано проталкивание (pushdown) заново добавленных шагов фильтрации с приоритетом над остальными. #89725 (Alexander Gololobov).
  • Незначительно ускорены некоторые операции uniqExact за счёт уменьшения накладных расходов на слияние хеш-таблиц. #89727 (Raúl Marín).
  • Увеличен лимит количества строк ленивой материализации с 10 до 100. #89772 (Alexey Milovidov).
  • По умолчанию включена настройка allow_special_serialization_kinds_in_output_formats. Это приведет к меньшему потреблению памяти и ускорит вывод результатов запросов для столбцов типов Sparse/Replicated в некоторых строковых форматах вывода. #89402 (Pavel Kruglov).
  • Добавлен параллельный режим выполнения запросов ALTER TABLE ... FREEZE. #71743 (Kirill).
  • Добавлен кэш для аутентификации с помощью bcrypt. #87115 (Nikolay Degterinsky).
  • Если пропускающий индекс, используемый в запросе с оператором FINAL, находится на столбце, который является частью первичного ключа, дополнительный шаг по проверке пересечения по первичному ключу в других частях запроса больше не требуется и теперь не выполняется. Исправлена #85897. #88368 (Shankar Iyer).
  • Оптимизация enable_lazy_columns_replication теперь включена по умолчанию, что позволит сократить потребление памяти при операциях JOIN. #89316 (Alexey Milovidov).
  • Ввести кэш ColumnsDescription на уровне таблицы для частей, чтобы сократить использование памяти, когда таблицы содержат много частей и много столбцов. #89352 (Azat Khuzhin).
  • Добавлен кэш для десериализованного заголовка текстового индекса для снижения объёма операций ввода-вывода и улучшения производительности запросов. Кэш можно настроить с помощью новых серверных настроек: - text_index_header_cache_policy - text_index_header_cache_size - text_index_header_cache_max_entries - text_index_header_cache_size_ratio. #89513 (Elmi Ahmadov).

Улучшение

  • UNION при необходимости должен приводить типы к Variant, если включён use_variant_as_common_type. Устраняет проблему #82772. #83246 (Mithun p).
  • Роли, заданные в SQL, теперь можно назначать пользователям, заданным в users.xml. #88139 (c-end).
  • Логировать внутренние запросы (выполняемые словарями, обновляемыми материализованными представлениями и т. д.) и добавить новый столбец is_internal в system.query_log. #83277 (Miсhael Stetsyuk).
  • clickhouse-client и clickhouse-local в интерактивном режиме будут подсвечивать в командной строке идентификаторы, которые имеют то же имя, что и текущий идентификатор под курсором. #89689 (Alexey Milovidov).
  • Настройки, связанные с форматом вывода, теперь не влияют на кэширование запросов. Кроме того, кэширование запросов игнорирует настройку http_response_headers. Это необходимо для реализации функций, например загрузки результата из кэша в веб‑интерфейсе. #89756 (Alexey Milovidov).
  • HTTP-интерфейс будет передавать заголовки Age и Expires при использовании кэша результатов запроса. Наличие заголовка Age показывает, что результат получен из кэша, а Expires также устанавливается при первой записи. Добавлены новые события профилирования: QueryCacheAgeSeconds, QueryCacheReadRows, QueryCacheReadBytes, QueryCacheWrittenRows, QueryCacheWrittenBytes. #89759 (Alexey Milovidov).
  • Разрешена вставка в удалённые таблицы и таблицы в data lake, когда включён параметр disable_insertion_and_mutation (что соответствует режиму только для чтения в ClickHouse Cloud). #88549 (Alexander Tokmakov).
  • Добавлен запрос SYSTEM DROP TEXT INDEX CACHES. #90287 (Anton Popov).
  • По умолчанию включена настройка enable_shared_storage_snapshot_in_query для обеспечения более строгих гарантий согласованности. Это изменение не должно иметь побочных эффектов. #82634 (Alexey Milovidov).
  • Добавлена настройка send_profile_events, которая позволяет клиентам уменьшить сетевой трафик, когда события профилирования не используются. #89588 (Kaviraj Kanagaraj).
  • Добавлена возможность отключать фоновую загрузку соседних сегментов на уровне отдельных запросов. Исправляет #89524. #89668 (tanner-bruce).
  • Разрешена операция FETCH PARTITION при наличии повреждённых дисков в реплицированных таблицах MergeTree. #58663 (Duc Canh Le).
  • Исправлено необработанное исключение при получении схемы таблицы MySQL в движке базы данных MySQL. #69358 (Duc Canh Le).
  • Все DDL-запросы ON CLUSTER теперь выполняются в контексте исходного пользователя запроса для более корректной проверки прав доступа. #71334 (pufit).
  • Добавлена поддержка типа UUID в Parquet, если он представлен как FixedString(16) с логическим типом UUID. #74484 (alekseev-maksim).
  • Отключить ThreadFuzzer по умолчанию в несерверных исполняемых файлах. #89115 (Raúl Marín).
  • Сделать оптимизации плана запроса видимыми для входного подплана коррелированного подзапроса за счёт откладывания его материализации. Часть #79890. #85455 (Dmitry Novik).
  • Вы можете наблюдать индикатор выполнения, логи и статистику производительности для запросов CREATE OR REPLACE TABLE с SELECT в clickhouse-client. Такой запрос больше не будет приводить к истечению времени ожидания, даже если SELECT требует довольно много времени на выполнение. Исправляет #38416. #87247 (Diskein).
  • Добавлена поддержка типов JSON и Dynamic в хеш-функциях. Исправляет #87734. #87791 (Pavel Kruglov).
  • Реализованы недостающие части сервера ArrowFlight. #88013 (Vitaly Baranov).
  • Добавлены несколько гистограммных метрик для сервера и Keeper для измерения длительностей этапов выполнения запросов Keeper. Для сервера добавлены следующие метрики: keeper_client_queue_duration_milliseconds, keeper_client_send_duration_milliseconds, keeper_client_roundtrip_duration_milliseconds. Для Keeper добавлены следующие метрики: keeper_server_preprocess_request_duration_milliseconds, keeper_server_process_request_duration_milliseconds, keeper_server_queue_duration_milliseconds, keeper_server_send_duration_milliseconds. #88158 (Miсhael Stetsyuk).
  • В запрос EXPLAIN добавлена опция input_headers для добавления входных заголовков к шагам. #88311 (János Benjamin Antal).
  • Добавлены профильные события для подсчёта количества запросов к S3 и AzureBlobStorage, задержанных троттлерами. Исправлена несогласованность между профильными событиями ThrottlerCount, связанными с дисками и не связанными с ними. Теперь HTTP‑запросы DELETE к AzureBlobStorage не подвергаются троттлингу. #88535 (Sergei Trifonov).
  • Кэшировать статистику на уровне таблиц: добавлены два параметра. Настройка MergeTree refresh_statistics_interval задаёт интервал обновления кэша статистики, значение 0 означает, что кэш создаваться не будет. Параметр сессии use_statistics_cache определяет, использовать ли статистику на уровне таблиц в запросе. Иногда нам нужна более точная статистика, поэтому мы можем отключить использование кэша. #88670 (Han Fei).
  • Исправлена бинарная десериализация Array и Map, чтобы при проверке ограничений размера использовать параметр max_binary_array_size вместо max_binary_string_size. Это гарантирует применение корректных лимитов при чтении в формате RowBinary. #88744 (Raufs Dunamalijevs).
  • Добавлен класс LockGuardWithStopWatch, который используется в фоновом пуле для выполнения слияний. Если мьютекс удерживается дольше секунды или какому‑то потоку не удаётся получить его в течение секунды, выводится предупреждающее сообщение. Ресурсоёмкий код из деструктора MergeMutateSelectedEntry перенесён в метод finalize, чтобы избежать слишком долгого удержания блокировки в исполнителе MergeTreeBackground. #88898 (Nikita Mikhaylov).
  • Разрешить автоматическое использование подключаемых регионов AWS для S3, если регион не указан в endpoint. См. также: opt-in AWS regions. #88930 (Andrey Zvonov).
  • Теперь в clickhouse-client можно отменить запрос, нажав Ctrl+C во время работы пейджера. Устраняет проблему #80778. #88935 (Grigorii).
  • Веб-интерфейс будет отображать столбики в таблице даже при отрицательных значениях. Таким образом, он может отображать двустороннюю столбчатую диаграмму с разными цветами столбиков для отрицательной и положительной сторон. #89016 (Alexey Milovidov).
  • Отключите shared_merge_tree_create_per_replica_metadata_nodes, чтобы сократить объем метаданных, которые SharedMergeTree хранит в Keeper. #89036 (Alexander Tokmakov).
  • Обеспечить, чтобы S3Queue учитывал серверный параметр disable_insertion_and_mutation. #89048 (Raúl Marín).
  • По умолчанию значение s3_retry_attempts установлено равным 500 в версии 25.6, чтобы обеспечить успешное выполнение резервного копирования при репартиционировании S3, когда S3 в течение более 10 минут отвечает ошибками замедления. #89051 (Nikita Mikhaylov).
  • Параметры kafka_compression_codec и kafka_compression_level теперь можно использовать для задания сжатия продюсеров Kafka в обоих движках Kafka. #89073 (János Benjamin Antal).
  • Добавлен новый столбец statistics в system.columns, который указывает типы статистики, построенных для этой таблицы. Если тип статистики создаётся автоматически, к нему в суффиксе добавляется пометка (auto). #89086 (Han Fei).
  • Улучшено сообщение об ошибке при передаче обобщённой подстановки вместо имени кластера в табличную функцию *Cluster. #89093 (Konstantin Bogdanov).
  • YTsaurus: разрешено использование replicated_table как источника данных. #89107 (MikhailBurdukov).
  • Запросы, начинающиеся с пробельных символов, больше не сохраняются в историю CLI. #89116 (Konstantin Bogdanov).
  • Добавлена поддержка массива строк в качестве аргумента функций hasAnyTokens и hasAllTokens. #89124 (Elmi Ahmadov).
  • Изменён способ хранения метаданных в памяти для дисков типа plain-rewritable, что исправляет множество ошибок, связанных с вложенностью каталогов и аналогичными ситуациями. #89125 (Mikhail Artemenko).
  • Подзапросы, которые используются внутри выражений IN при запросе к таблице Iceberg, будут корректно предварительно вычисляться перед анализом отсечения партиций. #89177 (Daniil Ivanik).
  • Включена настройка create_table_empty_primary_key_by_default по умолчанию. Это повышает удобство использования. #89333 (Alexey Milovidov).
  • Исправлен некорректный код в движке базы данных Backup, из-за которого мог быть сгенерирован неверный запрос при использовании SHOW CREATE DATABASE или при запросе engine_full из system.databases. Закрывает #89477. #89341 (Alexey Milovidov).
  • В предыдущих версиях настройка create_table_empty_primary_key_by_default не работала, если вы не указывали движок таблицы в запросе CREATE TABLE. #89342 (Alexey Milovidov).
  • Обновить chdig до v25.11.1 — содержит значительные улучшения логирования и ряд других доработок (примечания к выпуску 25.11). #89957 (Azat Khuzhin). (примечания к выпуску 25.10). #89452 (Azat Khuzhin).
  • Ресайзер текстового поля запроса в веб-интерфейсе сделан во всю ширину, что делает работу с ним немного удобнее. Кроме того, встроенный в браузер ресайзер был недоступен в Safari на iPad, а после этого изменения вы хотя бы можете перетаскивать нижнюю границу текстового поля, если знаете об этой возможности. #89457 (Alexey Milovidov).
  • Улучшено отслеживание памяти при формировании результата хеш-соединений. Ранее временные выделения памяти при формировании результата соединения отслеживались некорректно, что могло приводить к превышению лимита памяти. #89560 (Azat Khuzhin).
  • Асинхронный серверный лог: более ранний сброс и увеличенный размер очереди по умолчанию. #89597 (Raúl Marín).
  • Исправлены некорректные значения FilesystemCacheBytes (и других) в system.asynchronous_metrics. Запросы SYSTEM к файловым кэшем выполняются только один раз. Добавлено атомарное представление для кэшей, указывающее на тот же путь в system.filesystem_caches. #89640 (Azat Khuzhin).
  • Уточнены описания некоторых столбцов в system.view_refreshes. #89701 (Tuan Pham Anh).
  • Кэшировать учетные данные S3 при взаимодействии с конечной точкой STS для их повторного использования в разных вызовах функций. Количество закэшированных учетных данных можно контролировать с помощью s3_credentials_provider_max_cache_size. #89734 (Antonio Andelic).
  • Исправлено проталкивание runtime-фильтра при наличии нескольких нижележащих шагов выражения. #89741 (Alexander Gololobov).
  • Если объём оперативной памяти системы меньше 5 ГБ, по умолчанию не выполнять mlock для исполняемого файла. #89751 (Alexey Milovidov).
  • Подсказки типов в веб-интерфейсе больше не выходят за границы заголовка таблицы. Также исправлено отображение всплывающих подсказок — теперь они не скрываются за заголовком таблицы. #89753 (Alexey Milovidov).
  • Отображать свойства таблиц в веб-интерфейсе. При нажатии на число строк или байт открывается запрос к system.tables. При нажатии на движок таблицы выполняется SHOW TABLES. #89771 (Alexey Milovidov).
  • Добавлена поддержка non_replicated_deduplication_window для таблиц с диском, который не поддерживает дозапись (append). Исправляет #87281. #89796 (Tuan Pham Anh).
  • Добавлена возможность указывать список таблиц для сброса в команде SYSTEM FLUSH ASYNC INSERT QUEUE. #89915 (Sema Checherinda).
  • Идентификаторы блоков дедупликации сохраняются в system.part_log. #89928 (Sema Checherinda).
  • Изменено значение по умолчанию настройки файлового кэша keep_free_space_remove_batch с 10 до 100, так как это оптимальнее. #90030 (Kseniia Sumarokova).
  • Введён тип слияния TTL DROP; после таких слияний расписание следующего удаления по TTL больше не обновляется. #90077 (Mikhail Artemenko).
  • Использовать меньший лимит числа узлов в запросе RemoveRecursive Keeper при очистке S3Queue. #90201 (Antonio Andelic).
  • Сделать так, чтобы запрос SYSTEM FLUSH LOGS ожидал создание таблицы, даже если журналы пусты. #89408 (János Benjamin Antal).
  • Исправлена некорректная величина rows_before_limit_at_least, возникающая, когда в агрегирующей операции с распределённым слиянием задействовано несколько удалённых шардов или присутствуют подзапросы типа IN. Это исправляет #63280. #63511 (Amos Bird).
  • Исправлено появление сообщения 0 rows in set после запроса INSERT INTO ... SELECT. Закрывает #47800. #79462 (Engel Danila).

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

  • Исправлена работа multiIf с константными аргументами и укороченным вычислением. Закрывает #72714. #84546 (Yakov Olkhovskiy).
  • Исправлена логическая ошибка при выполнении выбора данных из таблицы с ограничением, использующим подзапрос. Устраняет #84190. #85575 (Pervakov Grigorii).
  • Исправлена ошибка для специальных запросов, использующих URI с вопросительными знаками. #85663 (Yarik Briukhovetskyi).
  • Исправлено периодическое отсутствие некоторых столбцов в выводе EXPLAIN indexes = 1. Решает #86696. #87083 (Michael Kolupaev).
  • Исправлена возможная ошибка «Cannot add subcolumn with parallel replicas». Закрывает #84888. #87514 (Pavel Kruglov).
  • В parquet writer добавлен вывод строки created_by в корректном формате, например ClickHouse version 25.10.1 (build 5b1dfb14925db8901a4e9202cd5d63c11ecfbb9f) вместо ClickHouse v25.9.1.1-testing. Исправлена совместимость parquet reader с файлами некорректного формата, записанными старой версией parquet-mr. #87735 (Michael Kolupaev).
  • Исправлено вычисление phi-squared, приводившее к неверным результатам в cramersV, cramersVBiasCorrected, theilsU и contingency. #87831 (Nihal Z. Miaji).
  • Исправлено чтение массивов в JSON, одновременно содержащих значения типов Float и Bool. Ранее вставка таких данных приводила к исключению. #88008 (Pavel Kruglov).
  • Использование shared_ptr для QueryState в TCPHandler для обнаружения, если состояние стало невалидным, в setProgressCallback, setFileProgressCallback и setBlockMarshallingCallback. #88201 (Tuan Pham Anh).
  • Исправлена логическая ошибка при перестановке операций CROSS JOIN, когда query_plan_optimize_join_order_limit > 1. Закрыта #89409. #88286 (Vladimir Cherkasov).
  • Исправление #88426: 1. Запретить явное задание столбцов в таблицах типа Alias, столбцы автоматически подгружаются из целевой таблицы. Это гарантирует, что Alias всегда соответствует схеме целевой таблицы. 2. Проксировать больше методов из IStorage. #88552 (Kai Zhu).
  • После восстановления реплика базы данных Replicated могла надолго «застрять», постоянно выводя сообщения вида Failed to marked query-0004647339 as finished (finished=No node, synced=No node), теперь это исправлено. #88671 (Alexander Tokmakov).
  • Исправлена возможная ошибка "Context has expired" при использовании нового анализатора запросов с подзапросами. #88694 (Azat Khuzhin).
  • Исправлена ошибка сегментации в считывателе Parquet, возникавшая, когда input_format_parquet_local_file_min_bytes_for_seek установлен в 0. Исправляет #78456. #88784 (Animesh).
  • Исправлен некорректный результат min(PK)/max(PK) при обратном порядке сортировки PK. Это исправляет #83619. #88796 (Amos Bird).
  • Исправлена передача ограничений на размер через настройки max_table_size_to_drop и max_partition_size_to_drop при выполнении операции DROP для внутренних таблиц. #88812 (Nikolay Degterinsky).
  • Исправлено поведение функции top_k, чтобы она учитывала параметр threshold при вызове с одним аргументом. Закрывает #88757. #88867 (Manuel).
  • Источники, использующие конечные точки ArrowFlight и требующие SSL‑соединения (например, за AWS ALB), теперь могут корректно запрашивать конкретный набор данных. #88868 (alex-shchetkov).
  • Исправлена обработка нематериализованных Nested(Tuple(...)), добавленных через ALTER. Исправляет #83133. #88879 (Azat Khuzhin).
  • Исправлена ошибка в функции reverseUTF8. В предыдущих версиях она ошибочно обращала порядок байт у четырёхбайтовых кодовых точек UTF-8. Это закрывает #88913. #88914 (Alexey Milovidov).
  • Исправлен протокол icebergS3Cluster. Добавлена поддержка эволюции схемы, позиционных удалений и удалений по равенству в функции icebergCluster. Устранена ошибка #88287. #88919 (Yang Jiang).
  • Отключена проекция parallel_replicas_support для запросов с параллельными репликами по распределённым таблицам. Закрывает #88899. #88922 (zoomxi).
  • Передача контекста во внутренних приведениях типов. Исправлены несколько проблем, из-за которых настройки приведения типов не передавались. Закрывает #88873. Закрывает #78025. #88929 (Manuel).
  • Исправлено определение формата файла по шаблонам (globs) в функции file(). Исправлена ошибка #88920. #88947 (Vitaly Baranov).
  • Не выполнять проверку доступа SET DEFINER <current_user>:definer при создании представления с SQL SECURITY DEFINER. #88968 (pufit).
  • Исправлена ошибка LOGICAL_ERROR в L2DistanceTransposed(vec1, vec2, p), из-за которой оптимизация частичного чтения QBit некорректно удаляла Nullable из возвращаемого типа, когда p был Nullable. #88974 (Raufs Dunamalijevs).
  • Исправлено падение при использовании неизвестного типа каталога. Исправляет #88819. #88987 (scanhex12).
  • Закрывает #88081. #88988 (scanhex12).
  • Исправлено снижение производительности при анализе пропускающих индексов. #89004 (Anton Popov).
  • Устранена ошибка ACCESS_ENTITY_NOT_FOUND при попытке выполнить clusterAllReplicas от имени пользователя с несуществующей ролью. Устраняет #87670. #89068 (pufit).
  • Исправлена обработка разреженных столбцов с помощью ограничения CHECK. Закрывает #88637. #89076 (Eduard Karacharov).
  • Исправлен некорректный подсчёт количества строк при заполнении виртуальных столбцов в MergeTreeReaderTextIndex, приводивший к сбою с LOGICAL_ERROR. #89095 (Peng Jian).
  • Предотвращены утечки счетчика слияний по TTL при возникновении исключений во время подготовки слияния. Устраняет проблему #89019. #89127 (save-my-heart).
  • Исправлен расчёт размера буфера, необходимого для операций кодирования и декодирования в base32/base58. #89133 (Antonio Andelic).
  • Исправлено использование освобождённой памяти (use-after-free) в движке Distributed из-за гонки состояний между остановкой и фоновыми операциями INSERT. Решает проблему #88640. #89136 (Azat Khuzhin).
  • Предотвращены возможные гонки данных из‑за изменяемых исключений при разборе Parquet. Исправляет #88385. #89174 (Azat Khuzhin).
  • Обновляемое материализованное представление: исправлен редкий сбой сервера, возникавший при полном удалении исходной таблицы во время обновления. #89203 (Michael Kolupaev).
  • Сбрасывать буферы при отправке ошибки в середине сжатого потока в HTTP-интерфейсе. #89256 (Alexander Tokmakov).
  • Исправлена ошибка, из-за которой правила маскирования запросов некорректно применялись к DDL-операторам. #89272 (MikhailBurdukov).
  • Исправлено неверное количество строк при заполнении виртуальных столбцов в MergeTreeReaderTextIndex, что приводило к аварийному завершению с LOGICAL_ERROR. Переоткрыта задача #89095. #89303 (Jimmy Aguilar Mena).
  • Исправлена ошибка LOGICAL_ERROR в Statistics countmin: не поддерживался тип данных estimate LowCardinality(Nullable(String)). #89343 (Han Fei).
  • Возможен сбой или неопределённое поведение в операторе IN, когда типы столбцов первичного ключа отличаются от типов столбцов в правой части оператора IN. Пример: SELECT string_column, int_column FROM test_table WHERE (string_column, int_column) IN (SELECT '5', 'not a number'). Проявляется, если выбирается много строк и среди них есть строки со значениями несовместимых типов. #89367 (Ilya Golshtein).
  • Исправлено усечение аргументов функции countIf(*). Закрывает #89372. #89373 (Manuel).
  • Предотвращена потеря несжатых контрольных сумм для статистики по мутациям. #89381 (Azat Khuzhin).
  • Исправлена LOGICAL_ERROR в L2DistanceTransposed(vec1, vec2, p), из-за которой при оптимизации частичного чтения QBit из типа возвращаемого значения ошибочно удалялся Nullable, когда p имел тип LowCardinality(Nullable(T)). Устраняет #88362. #89397 (Raufs Dunamalijevs).
  • Исправлена загрузка таблиц с некорректной разреженной сериализацией самого tuple, записанного старыми версиями ClickHouse. #89405 (Azat Khuzhin).
  • Исправлена некорректная обработка слияний частей, очищенных по TTL, с непустыми проекциями при использовании deduplicate_merge_projection_mode='ignore'. Решает #89430. #89458 (Amos Bird).
  • Исправлена логическая ошибка в соединении full_sorting_merge с дублирующимися столбцами. Устраняет #86957. #89495 (Vladimir Cherkasov).
  • Исправлено чтение журнала изменений при запуске Keeper в случае, если changelog не был корректно переименован при ротации. #89496 (Antonio Andelic).
  • Исправлены некорректные результаты JOIN при использовании условий OR с уникальными ключами правой таблицы. Решает проблему #89391. #89512 (Vladimir Cherkasov).
  • Исправлена возможная ошибка "Context has expired" при использовании анализатора и выражения PK IN (подзапрос) (v2). Исправляет #89433. #89527 (Azat Khuzhin).
  • Исправлена репликация MaterializedPostgreSQL для таблиц с именами столбцов, заданными в верхнем регистре. Решает проблему #72363. #89530 (Danylo Osipchuk).
  • Исправлена ошибка, приводившая к падению в случае, когда состояние агрегатной функции содержит сериализованное значение столбца типа LowCardinality(String). #89550 (Pavel Kruglov).
  • Исправлен сбой при использовании ARRAY JOIN на правой стороне JOIN при включённой настройке enable_lazy_columns_replication. #89551 (Pavel Kruglov).
  • Устранена логическая ошибка в query_plan_convert_join_to_in. Устраняет #89066. #89554 (Vladimir Cherkasov).
  • Исправлено исключение в оценщике статистики при попытке оценить условия с несовпадающими типами столбца и константы, которые нельзя преобразовать. #89596 (Han Fei).
  • Добавлять runtime-фильтры только для поддерживаемых алгоритмов соединения, то есть хеш-соединений. Фильтр может быть создан только тогда, когда алгоритм соединения сначала полностью читает правую сторону, а затем левую, но, например, FullSortingMergeJoin читает обе стороны одновременно. Исправляет #89220. #89652 (Alexander Gololobov).
  • Исправлено конкурентное выполнение функций hasAnyTokens, hasAllTokens и tokens с токенизатором sparseGrams. Устраняет проблему #89605. #89665 (Elmi Ahmadov).
  • Исправлена логическая ошибка, приводившая к сбоям при использовании runtime-фильтра JOIN в некоторых случаях. Исправляет #89062. #89666 (Alexander Gololobov).
  • Исправлена возможная логическая ошибка при выполнении ARRAY JOIN над столбцом Map при включённом enable_lazy_columns_replication. Закрывает #89705. #89717 (Pavel Kruglov).
  • Исправлена ошибка, вызывавшая сбой при чтении с удалённого сервера после отключения соединения в удалённых запросах при их отмене. Исправляет #89468. #89740 (Azat Khuzhin).
  • Исправлена гонка при чтении индекса проекций. Устраняет #89497. #89762 (Peng Jian).
  • Исправлена ошибка при чтении проекционного индекса, которая могла приводить к состояниям гонки. Решает проблему #89497. #89775 (Amos Bird).
  • Исправлена обработка табличной функции Paimon для таблиц без партиций. Устраняет проблему #89690. #89793 (JIaQi).
  • Исправлена возможная логическая ошибка при чтении путей и их подстолбцов в расширенной общей сериализации данных JSON. Закрывает #89805. #89819 (Pavel Kruglov).
  • Исправлено возможное переполнение стека при бинарной десериализации типов данных. Закрывает #88710. #89822 (Pavel Kruglov).
  • Исправлена логическая ошибка при использовании пустого кортежа в функции IN. Закрывает #88343. #89850 (Nihал Z. Miaji).
  • Удалены инъективные функции из GROUP BY в старом анализаторе вне зависимости от настройки optimize_injective_functions_in_group_by для обеспечения совместимости. Исправлена проблема #89854. #89870 (Raufs Dunamalijevs).
  • Если объединение было прервано, например, из‑за ограничения по памяти, фоновый исполнитель merge mutate вызовет cancel для задачи объединения без блокировки, но в этом случае частично созданная результирующая часть не будет удалена (поскольку она не была завершена и на этом этапе ещё не была видна). После этого задача объединения будет уничтожена, что приведёт к уничтожению результирующей части. Это откатит транзакцию на диске и приведёт к удалению данных из S3. В итоге эта очистка мусора была выполнена под блокировкой фонового исполнителя merge mutate. #89875 (Mikhail Artemenko).
  • Исправлена логическая ошибка при обработке пустого кортежа в функциях reverse и CAST. Закрывает #89137. #89908 (Nihал Z. Miaji).
  • Теперь ClickHouse по умолчанию будет показывать базу данных каталога Data Lake в результате запроса SHOW DATABASES. #89914 (alesapin).
  • Исправлено использование нативного копирования на GCS для создания резервных копий. Из-за некорректного клонирования клиента нативное копирование GCS всегда завершалось с ошибкой, и поэтому применялся менее оптимальный подход с ручным чтением и записью данных. #89923 (Antonio Andelic).
  • Исправлен расчёт размера буфера в base32Encode. Вычисление base32Encode для столбца строк длиной менее 5 символов могло приводить к сбоям. Устраняет проблему #89911. #89929 (Antonio Andelic).
  • Исправлено некорректное экранирование для запросов SHOW COLUMNS и SHOW FUNCTIONS. #89942 (alesapin).
  • Исправлена валидация URL в движке MongoDB для случаев, когда имя пользователя содержит символ '@'. Ранее такие имена пользователей вызывали ошибку из-за некорректного кодирования. #89970 (Kai Zhu).
  • Бэкпортировано в #90592: исправлено возможное аварийное завершение при выполнении удалённого запроса с ARRAY JOIN внутри IN при включённой настройке enable_lazy_columns_replication. Исправляет #90361. #89997 (Pavel Kruglov).
  • Бэкпортировано в #90448: исправлена интерпретация некорректных значений DateTime64 при разборе строк в текстовых форматах в ряде случаев. Закрывает #89368. #90013 (Pavel Kruglov).
  • Исправлена логическая ошибка, вызванная пустым столбцом типа Tuple в BSONEachRow и MsgPack. Закрывает #89814. Закрывает #71536. #90018 (Nihal Z. Miaji).
  • Бэкпортировано в #90457: выполнять проверку размера при десериализации данных из агрегатных состояний и других источников. #90031 (Raúl Marín).
  • Исправлена потенциальная ошибка 'Invalid number of rows in Chunk' при выполнении JOIN с повторяющимися столбцами. Исправляет #89411. #90053 (Vladimir Cherkasov).
  • Бэкпортировано в #90588: исправлена возможная ошибка Column with Array type is not represented by ColumnArray column: Replicated при вставке с использованием ARRAY JOIN и при включённой настройке enable_lazy_columns_replication. #90066 (Pavel Kruglov).
  • Разрешены файлы в user_files, имена которых начинаются с точки. Закрывает #89662. #90079 (Raúl Marín).
  • Бэкпортировано в #90647: исправлены логическая ошибка и ошибка вычисления остатка от деления (modulo) в системной таблице numbers при использовании большого шага. Закрывает #83398. #90123 (Nihал Z. Miaji).
  • Исправлено переполнение целого числа при разборе аргументов словаря. Закрывает #78506. #90171 (Raúl Marín).
  • Бэкпортировано в #90468: Исправлена несовместимость с Hive-партиционированием, препятствовавшая корректному обновлению до версии 25.8 (исправляет ошибку All hive partitioning columns must be present in the schema во время обновления). #90202 (Kseniia Sumarokova).
  • Исправлены возможные некорректные результаты запросов после выполнения легковесных обновлений в запросах SELECT при включённом кэше условий запроса. Исправлена проблема #90176. Исправлена проблема #90054. #90204 (Anton Popov).
  • Исправлен сбой в StorageDistributed при разборе некорректных имён каталогов шардов. #90243 (Aleksandr Musorin).
  • Реализована обработка неявного преобразования строк в целые числа и логические значения в LogicalExpressionOptimizerPass. Исправляет #89803. #90245 (Elmi Ahmadov).
  • Исправлено некорректное форматирование некоторых skip-индексов в определении таблицы, приводившее к ошибке METADATA_MISMATCH и мешавшее созданию новых реплик в реплицируемой базе данных. #90251 (Nikolay Degterinsky).
  • Бэкпортировано в #90381: исправлено несоответствие количества строк в MergeTreeReaderIndex, когда part содержит меньше строк, чем index_granularity. Устраняет #89691. #90254 (Peng Jian).
  • Бэкпортировано в #90608: Исправлена ошибка при чтении подстолбцов из JSON в компактных частях, которая могла приводить к ошибке CANNOT_READ_ALL_DATA. Закрывает #90264. #90302 (Pavel Kruglov).
  • Исправлена проблема, из-за которой функции trim, ltrim, rtrim не работали с двумя аргументами. Закрывает #90170. #90305 (Nihал Z. Miaji).
  • Бэкпортировано в #90625: исправлена возможная логическая ошибка в PREWHERE при обращении к несуществующему JSON-пути при index_granularity_bytes=0. Исправляет #86924. #90375 (Pavel Kruglov).
  • Бэкпортировано в #90484: исправлена ошибка в L2DistanceTransposed, приводившая к сбоям при выходе значения аргумента precision за допустимый диапазон. Закрывает #90401. #90405 (Raufs Dunamalijevs).
  • Бэкпортировано в #90577: исправлены некорректные вычисления расстояния в L2DistanceTransposed при использовании массивов опорных векторов (по умолчанию Array(Float64)) со столбцами QBit с элементами типов, отличных от Float64 (Float32, BFloat16). Функция теперь автоматически приводит тип опорного вектора к типу элемента QBit. Закрывает #89976. #90485 (Raufs Dunamalijevs).
  • Бэкпортировано в #90601: исправлена логическая ошибка, возникающая в редком случае в функции equals. Закрывает #88142. #90557 (Nihal Z. Miaji).
  • Исправлен CoalescingMergeTree для типов Tuple. #88828 (scanhex12).

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

  • Исправлена ошибка Connection refused при запуске ClickHouse в Docker с initdb SQL-скриптами и переопределённым TCP-портом. #88042 (Grigorii).
  • Экспериментально добавлена поддержка e2k как новой платформы для ClickHouse. #90159 (Ramil Sattarov).
  • Убрано оставшееся использование FindPackage в CMake. Сборка не должна зависеть от системных пакетов. #89380 (Alexey Milovidov).
  • Включено использование кэша компилятора при сборке на этапе конфигурации CMake (например, для protoc). #89613 (Konstantin Bogdanov).
  • Переведена сборка на использование sysroot FreeBSD 13.4. #89617 (Konstantin Bogdanov).

Релиз 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 в формате data lake. #84423 (JIaQi).
  • Добавлена агрегатная функция studentTTestOneSample. #85436 (Dylan).
  • Агрегатная функция quantilePrometheusHistogram, которая принимает в качестве аргументов верхние границы и накопленные значения бакетов гистограммы и выполняет линейную интерполяцию между верхней и нижней границами того бакета, в котором находится позиция квантиля. Ведёт себя аналогично функции PromQL histogram_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).
  • Добавлены рекурсивные варианты команд cp-cpr и mv-mvr в клиенте Keeper. #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 за счёт построения bloom-фильтра по правому поддереву во время выполнения и передачи этого фильтра в операцию сканирования в левом поддереве. Это может быть полезно для запросов вида 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).
  • Включено сохранение меток в кэше и исключён прямой ввод-вывод (direct I/O) для ридера MergeTreeLazy. Это повышает производительность запросов с ORDER BY и небольшим LIMIT. #87989 (Nikita Taranov).
  • Запрос SELECT с оператором FINAL по таблице ReplacingMergeTree с колонкой is_deleted теперь выполняется быстрее за счёт улучшенной параллелизации на базе двух существующих оптимизаций: 1. оптимизация do_not_merge_across_partitions_select_final для разделов (partitions) таблицы, которые содержат только одну часть (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, чтобы принимать - вместо _ в своих CLI-флагах. #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).
  • Добавлена возможность проверять статистику произвольного узла 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 теперь возвращает 0 совпадений для пустого токена (тогда как раньше в этом случае генерировалось исключение). #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).
  • Добавлена дополнительная информация для мониторинга производительности в запросах Iceberg SELECT. #87903 (Daniil Ivanik).
  • Улучшение файлового кэша: повторное использование итератора приоритета кэша между потоками, одновременно резервирующими место в кэше. #87914 (Kseniia Sumarokova).
  • Добавлена возможность ограничивать размер запросов для Keeper (настройка max_request_size, аналогична jute.maxbuffer для ZooKeeper, по умолчанию отключена для сохранения обратной совместимости, будет включена в следующих релизах). #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 (Konstantin Bogdanov).
  • Исправлена утечка памяти, обусловленная оператором 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).
  • Исправлена некорректная обработка дат до эпохи Unix с дробными секундами в различных функциях, связанных с датой и временем, таких как 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).
  • Исправлены таблицы озера данных с процентно-кодированной последовательностью в имени. Закрывает #86626. #87020 (Anton Ivashkin).
  • Исправлено некорректное поведение IS NULL для столбцов, допускающих NULL, в 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, которая не работала при наличии политики строк (row policy). Продолжение #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 часов мог накапливаться значительный дрейф, до ~100GiB) и в 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 из Variants, которые не могут быть 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).
  • Исправлено некорректное исключение гранул/партиций для datetime-ключей при использовании параметра session_timezone в запросах. #87987 (Eduard Karacharov).
  • Возвращает количество затронутых строк после выполнения запроса в интерфейсе PostgreSQL. #87990 (Artem Yurov).
  • Ограничивает использование проталкивания фильтров (filter pushdown) для PASTE JOIN, так как это может привести к некорректным результатам. #88078 (Yarik Briukhovetskyi).
  • Применяет нормализацию URI перед выполнением проверки прав доступа, добавленной в https://github.com/ClickHouse/ClickHouse/pull/84503. #88089 (pufit).
  • Исправлена логическая ошибка, возникавшая, когда ARRAY JOIN COLUMNS() не находил ни одного столбца в новом анализаторе. #88091 (xiaohuanlin).
  • Исправлено предупреждение «Высокое использование памяти ClickHouse» (исключая кэш страниц). #88092 (Azat Khuzhin).
  • Исправлено возможное повреждение данных в таблицах MergeTree с установленным для столбца TTL. #88095 (Anton Popov).
  • Исправлено возможное необработанное исключение при чтении из system.tables при наличии некорректных таблиц во внешних базах данных (PostgreSQL/SQLite/...), подключённых к системе. #88105 (Azat Khuzhin).
  • Исправлен сбой в функциях mortonEncode и hilbertEncode при вызове с пустым кортежем в качестве аргумента. #88110 (xiaohuanlin).
  • Теперь запросы с ON CLUSTER будут выполняться быстрее при наличии неактивных реплик в кластере. #88153 (alesapin).
  • Теперь DDL-воркер очищает набор реплик от устаревших хостов. Это уменьшает объём хранимых метаданных в 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).
  • Теперь каталоги data lake будут отображаться в системных таблицах интроспекции только при явном включении параметра 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 сделаны реплицируемыми, чтобы они фиксировались в метаданных реплицируемой базы данных и распространялись на все её реплики. Закрывает #88077. #88408 (Eduard Karacharov).
  • Исправлена ситуация с ложной циклической зависимостью у материализованных представлений в базе данных DatabaseReplicated, которая предотвращала добавление новых реплик в базу. #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 &lt;Trace&gt;: 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 впервые подключается к ZooKeeper после перезагрузки конфигурации. #88728 (Antonio Andelic).
  • Исправлена ошибка, при которой преобразование значения типа DateTime64 в Date с date_time_overflow_behavior = 'saturate' могло приводить к некорректным результатам для значений, выходящих за допустимый диапазон, при работе с часовыми поясами. #88737 (Manuel).
  • Очередная попытка исправить ошибку «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. Это закрывает #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: исправлено ухудшение производительности при анализе skipping-индексов. #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).
  • Изменено разрешение объединённого (coalesced) столбца из предложения 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) -- Before: a=0, t1.a=0, t2.a=2 (incorrect - 'a' resolved to t1.a) -- After: a=2, t1.a=0, t2.a=2 (correct - 'a' is coalesced). #80848 (Vladimir Cherkasov).
  • Увеличено окно дедупликации в реплицируемых таблицах до 10000. Это полностью совместимое изменение, но можно представить сценарии, когда оно может привести к высокому потреблению ресурсов при наличии большого количества таблиц. #86820 (Sema Checherinda).

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

  • Теперь пользователи могут использовать NATS JetStream для потребления сообщений, указывая новые параметры nats_stream и nats_consumer для движка NATS. #84799 (Dmitry Novikov).
  • Добавлена поддержка аутентификации и SSL в табличной функции arrowFlight. #87120 (Vitaly Baranov).
  • Добавлен новый параметр storage_class_name для движка таблиц S3 и табличной функции s3, который позволяет указывать режим Intelligent-Tiering, поддерживаемый AWS. Поддерживается как в формате ключ-значение, так и в позиционном (устаревшем) формате. #87122 (alesapin).
  • ALTER UPDATE для движка таблиц Iceberg. #86059 (scanhex12).
  • Добавлена системная таблица iceberg_metadata_log для получения файлов метаданных Iceberg во время выполнения операторов SELECT. #86152 (scanhex12).
  • Таблицы Iceberg и DeltaLake поддерживают пользовательскую конфигурацию диска с помощью настройки хранилища disk. #86778 (scanhex12).
  • Добавлена поддержка Azure для дисков Data Lake. #87173 (scanhex12).
  • Поддержка каталога Unity на базе хранилища Azure Blob Storage. #80013 (Smita Kulkarni).
  • Добавлена поддержка дополнительных форматов (ORC, Avro) при записи в Iceberg. Это закрывает #86179. #87277 (scanhex12).
  • Добавлена новая системная таблица database_replicas с информацией о репликах баз данных. #83408 (Konstantin Morozov).
  • Добавлена функция 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 window), а также два аргумента — для меток времени и значений, но требуя как минимум один сэмпл на окно вместо двух. Вычисляют PromQL changes/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).
  • Новая настройка для удаления файлов при удалении (DROP) таблиц 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). Note that the join order optimization currently has limited statistics support and primarily relies on row count estimates from storage engines - more sophisticated statistics collection and cardinality estimation will be added in future releases. If you encounter issues with JOIN queries after upgrading, you can temporarily disable the new implementation by setting SET query_plan_use_new_logical_join_step = 0 and report the issue for investigation. Note about resolution of identifiers from USING clause: Changed resolving of the coalesced column from OUTER JOIN ... USING clause to be more consistent: previously, when selecting both the USING column and qualified columns (a, t1.a, t2.a) in a OUTER JOIN, the USING column would incorrectly be resolved to t1.a, showing 0/NULL for rows from the right table with no left match. Now identifiers from USING clause are always resolved to the coalesced column, while qualified identifiers resolve to the non-coalesced columns, regardless of which other identifiers are present in the query. For example: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) -- Before: a=0, t1.a=0, t2.a=2 (incorrect - 'a' resolved to t1.a) -- After: a=2, t1.a=0, t2.a=2 (correct - 'a' is coalesced). #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/ANTI JOIN, если условие фильтрации всегда ложно для совпавших или несовпавших строк. Эта оптимизация управляется новой настройкой query_plan_convert_any_join_to_semi_or_anti_join. 2. Преобразование FULL ALL JOIN в LEFT ALL или RIGHT ALL JOIN, если условие фильтрации всегда ложно для несовпавших строк с одной из сторон. #86028 (Dmitry Novik).
  • Улучшена производительность вертикальных слияний после выполнения операции LIGHTWEIGHT DELETE. #86169 (Anton Popov).
  • Производительность HashJoin немного улучшена в случае, когда операция LEFT/RIGHT JOIN возвращает большое количество строк без соответствия. #86312 (Nikita Taranov).
  • Поразрядная сортировка (radix sort): помогает компилятору использовать SIMD и эффективнее выполнять предвыборку данных. Использует динамическую диспетчеризацию, чтобы применять программную предвыборку только на процессорах 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 Object Storage. Это расширяет действие предыдущей настройки 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 в определении партиции таблицы 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 настраиваемыми, чтобы можно было назначать отдельным потокам (merge/mutate, query, материализованное представление, клиент ZooKeeper) более высокий или низкий приоритет. #86703 (Miсhael Stetsyuk).
  • Исправлена вводящая в заблуждение ошибка с сообщением «specified upload does not exist», которая возникает, когда исходное исключение теряется при multipart-загрузке из-за состояния гонки. #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).
  • Включена короткая (short-circuit) оценка для функции 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).
    1. 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 (требуется для https://github.com/ClickHouse/ClickHouse/pull/81040). #85538 (Arthur Passos).
  • Предотвращена ненужная оптимизация первого аргумента функций IN, иногда приводившая к ошибке при использовании сопоставления массивов. #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).
  • Исправлена ошибка, из-за которой для path с подсказкой 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-индексом, если таблица (например, ReplacingMergeTree) была создана с настройкой index_granularity_bytes = 0. Эта ошибка теперь исправлена. #86147 (Shankar Iyer).
  • Устраняет неопределённое поведение и исправляет проблемы с разбором выражения секционирования Iceberg. #86166 (Daniil Ivanik).
  • Исправлено падение при одновременном использовании константных и неконстантных блоков в одном INSERT. #86230 (Azat Khuzhin).
  • Процесс по умолчанию использует include-директивы из /etc/metrika.xml при создании дисков из SQL. #86232 (alekar).
  • Исправлены функции accurateCastOrNull/accurateCastOrDefault при приведении типа String к JSON. #86240 (Pavel Kruglov).
  • Поддержка каталогов без '/' в движке Iceberg. #86249 (scanhex12).
  • Исправлен сбой при использовании replaceRegex со строкой типа FixedString и пустой подстрокой. #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 Khузhin).
  • Исправлена работа оператора 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 для таблиц движка базы данных postgres с числовыми и десятичными (DECIMAL) столбцами. #86480 (Julian Maicher).
  • Исправлено использование неинициализированной памяти в getSubcolumnType. #86498 (Raúl Marín).
  • Функции searchAny и searchAll при вызове с пустым списком строк (needles) теперь возвращают 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 processing. Исправление для https://github.com/ClickHouse/ClickHouse/pull/85995. Закрывает #86406. #86841 (Kseniia Sumarokova).
  • Исправлено поведение таблицы с движком TimeSeries, из‑за которого возникали сбои при создании новой реплики в Replicated Database. #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).
  • Исправлено чтение идентификаторов полей типов map и array из 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).

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

Релиз 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).
  • Отложенная материализация включена только при использовании анализатора (который используется по умолчанию), чтобы избежать необходимости поддерживать режим без анализатора, который, по нашему опыту, имеет некоторые проблемы (например, при использовании 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$, также известный как строковые литералы с долларовым кавычкованием. В предыдущих версиях на теги накладывалось меньше ограничений: они могли содержать произвольные символы, включая пунктуацию и пробелы. Это создаёт неоднозначность при разборе с идентификаторами, которые также могут начинаться с символа доллара. В то же время PostgreSQL разрешает в тегах только буквенно-цифровые символы и подчёркивание. Для решения проблемы теперь мы разрешаем в тегах heredoc только символы слова (буквенно-цифровые символы и подчёркивание). Закрывает #84731. #84846 (Alexey Milovidov).
  • Функции azureBlobStorage, deltaLakeAzure и icebergAzure были обновлены для корректной проверки разрешений AZURE. Все кластерные варианты функций (функции с суффиксом -Cluster) теперь сверяют разрешения с соответствующими некластерными аналогами. Дополнительно функции icebergLocal и deltaLakeLocal теперь применяют проверки разрешений FILE. #84938 (Nikita Mikhaylov).
  • Включить настройку allow_dynamic_metadata_for_data_lakes (настройка уровня Table Engine) по умолчанию. #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 (Konstantin Vedernikov).
  • Каталоги Glue для записи. #84136 (Konstantин Vedernikov).
  • REST-каталоги Iceberg для записи. #84684 (Konstantin Vedernikov).
  • Объединяет все файлы позиционных удалений 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 (Konstantin Vedernikov).
  • Добавлена поддержка записи в DeltaLake. Закрывает #79603. #85564 (Kseniia Sumarokova).
  • Добавлена настройка delta_lake_snapshot_version для чтения снимка указанной версии в табличном движке DeltaLake. #85295 (Kseniia Sumarokova).
  • Записывать расширенную статистику Iceberg (размеры столбцов, нижние и верхние границы) в метаданные (записи манифеста) для min-max‑отсечения. #85746 (Konstantin Vedernikov).
  • Добавлена поддержка операций add/drop/modify над столбцами в формате Iceberg для простых типов. #85769 (Konstantin Vedernikov).
  • 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 («очередь мёртвых писем»). #68873 (Ilya Golshtein).
  • Новая команда SYSTEM RESTORE DATABASE REPLICA для реплицируемых баз данных, аналогичная существующей функциональности восстановления для ReplicatedMergeTree. #73100 (Konstantин Morozov).
  • Протокол 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).
  • Добавлена возможность устанавливать произвольные наблюдения (watches) в запросах 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).
  • Лёгкие операции обновления и удаления переведены из экспериментального режима в бета-режим.
  • Приблизительный векторный поиск с использованием индексов векторного сходства переведён в статус GA. #85888 (Robert Schulze).
  • Добавлены движок таблиц Ytsaurus и табличная функция. #77606 (MikhailBurdukov).
  • Ранее данные текстового индекса разделялись на несколько сегментов (размер каждого сегмента по умолчанию составлял 256 MiB). Это могло снизить потребление памяти при построении текстового индекса, однако увеличивало требуемый объём дискового пространства и время ответа на запросы. #84590 (Elmi Ahmadov).

Улучшение производительности

  • Новая реализация считывателя Parquet. В целом она работает быстрее и поддерживает проталкивание фильтра на уровне страниц и 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 и vector (из-за простоты и селективности соответственно), а затем более компактным индексам. Среди индексов minmax/vector также предпочитаются индексы меньшего размера. #84094 (Maruth Goyal).
  • По умолчанию включена настройка MergeTree write_marks_for_substreams_in_compact_parts. Она значительно улучшает производительность чтения подколонок из вновь созданных Compact-частей. Серверы с версией ниже 25.5 не смогут читать новые Compact-части. #84171 (Pavel Kruglov).
  • Движок таблицы azureBlobStorage: кэшировать и повторно использовать токены аутентификации управляемой идентичности, когда это возможно, чтобы избежать ограничения частоты запросов. #79860 (Nick Blakely).
  • Операции ALL LEFT/INNER JOIN будут автоматически преобразовываться в 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 вне основного цикла hash JOIN. Незначительно улучшена производительность для ALL JOIN. #83216 (Nikolai Kochetov).
  • Сначала обрабатывать индексы min-max с более высокой детализацией. Закрывает #75381. #83798 (Maruth Goyal).
  • Сделать так, чтобы оконные агрегатные функции с DISTINCT работали за линейное время, и исправить ошибку в sumDistinct. Закрывает #79792. Закрывает #52253. #79859 (Nihal Z. Miaji).
  • Запросы векторного поиска с использованием индекса векторного сходства выполняются с меньшей задержкой за счет сокращения операций чтения из хранилища и снижения нагрузки на CPU. #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: она не распознавала начало слова в начале строки, если предыдущая строка в блоке заканчивалась на буквенно-цифровой символ. Исправлена уязвимость безопасности формата Apache ORC, которая могла приводить к раскрытию неинициализированной памяти. Изменено поведение функции 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).
  • Реализована внутренняя фильтрация в хранилище DeltaLake с использованием delta-kernel-rs (статистика и отсечение партиций). #84006 (Kseniia Sumarokova).
  • Более гибко настроено отключение пропускающих индексов, зависящих от столбцов, обновляемых «на лету» или с помощью patch‑частей. Теперь пропускающие индексы не используются только в тех частях, которые затронуты мутациями «на лету» или patch‑частями; ранее такие индексы отключались для всех частей. #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 КБ до 256 КБ для соответствия Spark и Hive. #80602 (李扬).
  • Добавлен файл columns_substreams.txt в части формата Wide для отслеживания всех подпотоков, хранящихся в части. Это помогает отслеживать динамические потоки в типах JSON и Dynamic и таким образом избегать чтения образца данных этих столбцов для получения списка динамических потоков (например, для расчёта размеров столбцов). Также теперь все динамические потоки отражены в system.parts_columns. #81091 (Pavel Kruglov).
  • В команду clickhouse format добавлен флаг CLI --show_secrets, который по умолчанию скрывает конфиденциальные данные. #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. В случае каких-либо проблем с запросами с JOIN, использующими параллельные реплики, попробуйте выполнить SET query_plan_use_new_logical_join_step=0 и сообщите об ошибке. #83801 (Vladimir Cherkasov).
  • Исправлена проблема совместимости функции cluster_function_process_archive_on_multiple_nodes. #83968 (Kseniia Sumarokova).
  • Реализована возможность изменять настройки вставки для материализованных представлений (mv) на уровне таблицы 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 теперь немного более удачный фавикон. #84076 (Alexey Milovidov).
  • Web UI: Теперь браузеры могут сохранять пароль. Также запоминаются значения URL. #84087 (Alexey Milovidov).
  • Добавлена поддержка применения дополнительного ACL на отдельных узлах Keeper с помощью конфигурации apply_to_children. #84137 (Antonio Andelic).
  • Исправлено использование варианта сериализации дискриминаторов Variant «compact» в 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 для отключения логирования обходчика выражений, поскольку такие логи могут быть избыточно подробными даже на уровне логирования test при отладке. #84315 (Kseniia Sumarokova).
  • Метрики уровня cgroup и уровня всей системы теперь экспортируются вместе. Метрики уровня cgroup имеют имена CGroup&lt;Metric&gt;, а метрики уровня ОС (собираемые из procfs) — имена OS&lt;Metric&gt;. #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 для настройки стратегии задержки перед повторными попытками S3, используемой во время операций резервного копирования и восстановления. #84421 (Julia Kartseva).
  • Исправление упорядоченного режима 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).
  • Сопоставлять заголовки external auth forward_headers без учета регистра. #84737 (ingodwerust).
  • Инструмент encrypt_decrypt теперь поддерживает шифрованные соединения с ZooKeeper. #84764 (Roman Vasin).
  • Добавлен столбец format_string в таблицу 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 держит все данные в оперативной памяти. Это может быть достаточно затратно, если файлы позиционного удаления большие, что часто и бывает. Моя реализация хранит в оперативной памяти только последнюю группу строк файлов удаления в формате 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 для управления добавлением в system.tables таблиц из data lake. Решает #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 (&lt;subquery&gt;) и включённым кэшем условий запроса (настройка 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 в интеграционных тестах, чтобы получать полные отладочные символы (без strip). #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).
  • Использование серверных ограничителей (throttlers) для локальных (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 (Konstantin Vedernikov).
  • Добавлена поддержка вставки данных (INSERT) в таблицы Iceberg. #82692 (Konstantin 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: новая векторная структура данных на основе bit-sliced-сжатия и Roaring-bitmap, с более чем 20 функциями для построения, анализа и покомпонентной арифметики. Может сократить объем хранимых данных и ускорить операции соединения (JOIN), фильтрацию и агрегации на разреженных данных. Реализует #70582 и идеи статьи “Large-Scale Metric Computation in Online Controlled Experiment Platform” авторов T. 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, возможности вывода схемы и т. д. #81505 (Alexey Milovidov).

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

  • Добавлены функции searchAny и searchAll, которые являются универсальными инструментами для поиска по текстовым индексам. #80641 (Elmi Ahmadov).
  • Текстовый индекс теперь поддерживает новый токенизатор split. #81752 (Elmi Ahmadov).
  • Изменено значение размера гранул индекса по умолчанию для индексов text на 64. Это повышает ожидаемую производительность среднего тестового запроса во внутренних бенчмарках. #82162 (Jimmy Aguilar Mena).
  • 256-битная битовая карта хранит исходящие метки состояния в упорядоченном виде, но исходящие состояния сохраняются на диск в том порядке, в котором они появляются в хеш-таблице. Поэтому при чтении с диска метка будет указывать на некорректное следующее состояние. #82783 (Elmi Ahmadov).
  • Включено сжатие zstd для блоба дерева FST в текстовых индексах. #83093 (Elmi Ahmadov).
  • Переведён индекс векторного сходства в стадию beta. Добавлен параметр-псевдоним enable_vector_similarity_index, который необходимо включить для использования индекса векторного сходства. #83459 (Robert Schulze).
  • Удалена экспериментальная логика send_metadata, связанная с экспериментальной репликацией без копирования (zero-copy). Она никогда не использовалась, и этот код никто не поддерживал. Поскольку не было даже тестов, связанных с ней, велика вероятность, что она уже давно была сломана. #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 Марин).
  • Параллельный распределённый 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 с использованием классов эквивалентности. Если для всех коррелированных столбцов существуют эквивалентные выражения и включена настройка query_plan_correlated_subqueries_use_substitution, оператор CROSS JOIN не генерируется. #82435 (Dmitry Novik).
  • Считывать в коррелированном подзапросе только требуемые столбцы, если он выступает аргументом функции EXISTS. #82443 (Dmitry Novik).
  • Немного ускорено сравнение деревьев запросов при анализе запроса. #82617 (Nikolai Kochetov).
  • Добавлено выравнивание в Counter из ProfileEvents для уменьшения эффекта ложного совместного использования кэша. #82697 (Jiebin Sun).
  • Оптимизации для null_map и JoinMask из #82308 были применены к операциям JOIN с несколькими дизъюнктами. Также была оптимизирована структура данных KnownRowsHolder. #83041 (Nikita Taranov).
  • Обычный std::vector<std::atomic_bool> используется для join-флагов, чтобы избежать вычисления хэша при каждом доступе к флагам. #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 и в выводе клиента будет работать так же, как подсветка в приглашении командной строки. #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).
  • Добавить метрики нагрузки к асинхронным метрикам ClickHouse. #80779 (Xander Garbett).
  • Добавлены метрики MarkCacheEvictedBytes, MarkCacheEvictedMarks, MarkCacheEvictedFiles для отслеживания вытеснений из кэша меток. (issue #60989). #80799 (Shivji Kumar Jha).
  • Добавлена поддержка записи Parquet enum в виде массива байт, как предписывает спецификация. #81090 (Arthur Passos).
  • Улучшение для движка таблиц DeltaLake: в delta-kernel-rs появился API ExpressionVisitor, который реализован в этом PR и используется для преобразования выражений по столбцам партиционирования (он заменит старый, устаревший способ в delta-kernel-rs, который ранее использовался в нашем коде). В будущем этот ExpressionVisitor также позволит реализовать отсечение (pruning) на основе статистики и некоторые проприетарные возможности Delta Lake. Дополнительно цель этого изменения — поддержать отсечение партиций в движке таблиц DeltaLakeCluster (результат разобранного выражения — ActionsDAG — будет сериализован и отправлен от инициатора вместе с путём к данным, потому что такая информация, необходимая для отсечения, доступна только как метаинформация при получении списка файлов с данными, что выполняется только инициатором, но должна применяться к данным на каждом сервере чтения). #81136 (Kseniia Sumarokova).
  • Сохранять имена элементов при выводе супертипов для именованных кортежей. #81345 (lgbo).
  • Подсчитывайте потреблённые сообщения вручную, чтобы не зависеть от ранее зафиксированного смещения в StorageKafka2. #81662 (János Benjamin Antal).
  • Добавлен clickhouse-keeper-utils — новый инструмент командной строки для управления и анализа данных ClickHouse Keeper. Инструмент поддерживает выгрузку состояния из снапшотов и журналов изменений (changelog), анализ файлов changelog и извлечение отдельных диапазонов логов. #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. Rust #82440 (Raúl Marín).
  • Теперь макросы, такие как {uuid}, можно использовать в параметре keeper_path движка таблицы S3Queue. #82463 (Nikolay Degterinsky).
  • Улучшение в Keeper: перемещение файлов журнала изменений между дисками в фоновом потоке. Ранее при перемещении журнала изменений на другой диск Keeper глобально блокировался до завершения операции. Это приводило к ухудшению производительности, если перемещение занимало много времени (например, на диск S3). #82485 (Antonio Andelic).
  • Улучшение в Keeper: добавлена новая настройка keeper_server.cleanup_old_and_ignore_new_acl. Если она включена, у всех узлов будут очищены ACL, а ACL для новых запросов будет игнорироваться. Если цель — полностью удалить ACL с узлов, важно оставить эту настройку включённой до тех пор, пока не будет создан новый snapshot. #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 со встроенной конфигурацией позволит использовать веб-интерфейс, отвечая на 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 и логировать их в виде сводки. #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. Обеспечено соблюдение предложения LIMIT в loop(remote(...)). #80299 (Julia Kartseva).
  • Исправлено некорректное поведение функций to_utc_timestamp и from_utc_timestamp при обработке дат до начала Unix-эпохи (1970-01-01) и после максимально допустимой даты (2106-02-07 06:28:15). Теперь эти функции корректно приводят значения к началу эпохи и максимально допустимой дате соответственно. #80498 (Surya Kant Ranjan).
  • Для некоторых запросов, выполняемых с параллельными репликами, оптимизация упорядоченного чтения может применяться на инициаторе, но не может применяться на удалённых узлах. Это приводит к использованию разных режимов чтения координатором параллельных реплик (на инициаторе) и на удалённых узлах, что является логической ошибкой. #80652 (Igor Nikonov).
  • Исправлена логическая ошибка при материализации проекции, возникавшая при изменении типа столбца на Nullable. #80741 (Pavel Kruglov).
  • Исправлен некорректный пересчёт TTL в TTL GROUP BY при обновлении TTL. #81222 (Evgeniy Ulasik).
  • Исправлена ошибка в блум-фильтре 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 Catalog. Теперь 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 (Konstantin Bogdanov).
  • Исправлена ошибка обработки аргументов 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).
  • Исправлена ошибка сокрытия значений именованных коллекций в логах и таблице query_log. Закрывает #82405. #82510 (Kseniia Sumarokova).
  • Исправлено возможное падение при логировании при завершении сессии, так как user_id иногда мог быть пустым. #82513 (Bharat Nallan).
  • Исправлены случаи, когда разбор Time мог приводить к проблемам msan. Это исправляет: #82477. #82514 (Yarik Briukhovetskyi).
  • Запрещено устанавливать threadpool_writer_pool_size в ноль, чтобы операции сервера не зависали. #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' под нагрузкой при включённом планировщике ЦП. #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 с определяющим пользователем проверка прав должна выполняться с использованием грантов этого пользователя. Это исправляет #79951. #83502 (pufit).
  • Отключена обрезка файлов по границам (bounds-based file pruning) для элементов массивов 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» — это формат двоичного кодирования различных типов геометрии, используемый в GIS‑приложениях). См. #43941. #80139 (scanhex12).
  • Добавлено планирование слотов запросов для рабочих нагрузок. Подробности см. в разделе workload scheduling. #78415 (Sergei Trifonov).
  • Вспомогательные функции timeSeries* для ускорения некоторых сценариев при работе с временными рядами: - ресемплирование данных по временной сетке с заданными начальной и конечной метками времени и шагом - вычисление PromQL-подобных delta, rate, idelta и irate. #80590 (Alexander Gololobov).
  • Добавлены функции mapContainsValuesLike/mapContainsValues/mapExtractValuesLike для фильтрации по значениям map и их поддержка в индексах на основе bloom-фильтров. #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).

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

  • Реализована логика ребалансировки, аналогичная механизму Kafka rebalance, для 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).
  • Добавлена опция переноса (де)сжатия и (де)сериализации блоков в конвейерные потоки вместо использования одного потока, связанного с сетевым подключением. Управляется настройкой enable_parallel_blocks_marshalling. Это должно ускорить распределённые запросы, которые передают значительные объёмы данных между инициатором и удалёнными узлами. #78694 (Nikita Taranov).
  • Улучшена производительность всех типов Bloom‑фильтров. Видео с конференции OpenHouse #79800 (Delyan Kratunov).
  • Добавлен оптимизированный путь выполнения в UniqExactSet::merge для случая, когда один из наборов пустой. Также теперь, если множество LHS двухуровневое, а RHS одноуровневое, не выполняется преобразование RHS в двухуровневое множество. #79971 (Nikita Taranov).
  • Повышена эффективность повторного использования памяти и уменьшено количество ошибок страничной памяти при использовании двухуровневых хеш-таблиц. Это позволяет ускорить выполнение GROUP BY. #80245 (Jiebin Sun).
  • Исключены лишние обновления и снижена конкуренция за блокировки в кэше условий запросов. #80247 (Jiebin Sun).
  • Тривиальная оптимизация для concatenateBlocks. Скорее всего, она также полезна для параллельного hash join. #80328 (李扬).
  • При выборе диапазонов меток из диапазона первичного ключа двоичный поиск не может быть использован, если первичный ключ обернут функциями. В этом PR это ограничение смягчено: двоичный поиск по-прежнему может применяться, когда первичный ключ обернут цепочкой всегда монотонных функций или когда 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, что делает представление данных единообразным с 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 больше не пытается искать части данных на дисках только для чтения (readonly) и одноразовой записи (write-once). Это закрывает #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...» расширено, в таблицу system.filesystem_cache добавлен столбец finished_download_time. #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. Также для единообразия в system.iceberg_history столбцы table_name и database_name были переименованы в table и database. #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, в байтах. Это даёт более точное представление о фактическом использовании памяти при использовании userspace page cache. Когда 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 теперь будут использовать пропускающие индексы (если применимо) для предварительного отбора гранул, а также считывать любые дополнительные гранулы, соответствующие диапазонам первичных ключей, попадающим под условие. Пользователи, которым требуется прежнее поведение с приблизительными/неточными результатами, могут установить use_skip_indexes_if_final_exact_mode в FALSE после тщательной оценки последствий. #81331 (Shankar Iyer).
  • Когда в веб-интерфейсе открыто несколько запросов, выполняется тот, который находится под курсором. Продолжение #80977. #81354 (Alexey Milovidov).
  • Этот PR устраняет проблемы с реализацией 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).
  • Пропускающие индексы с lambda-выражениями не применялись. Исправлен случай, когда высокоуровневые функции в определении индекса в точности совпадают с функциями в запросе. #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).
  • Исправлена некорректная оптимизация вычисления count() для фильтров по строковому префиксу вида 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).
  • Отключён push-down фильтра для предиката с недетерминированной функцией, если шаг плана запроса изменяет количество строк. Исправлено #40273. #80329 (Nikolai Kochetov).
  • Исправлены потенциальные логические ошибки и сбои в проекциях с подстолбцами. #80333 (Pavel Kruglov).
  • Исправлена ошибка NOT_FOUND_COLUMN_IN_BLOCK, вызванная оптимизацией проталкивания фильтра (filter-push-down) на этапе логического JOIN sep в случае, когда выражение ON не является тривиальным равенством. Исправляет #79647 и #77848. #80360 (Nikolai Kochetov).
  • Исправлен некорректный результат при чтении ключей в обратном порядке в секционированных таблицах. Это исправляет #79987. #80448 (Amos Bird).
  • Исправлена некорректная сортировка в таблицах с ключом, допускающим NULL, и включённым 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 (Azат Khuzhin).
  • Исправлена обработка glob-шаблонов перечислений с одним элементом в табличных функциях для объектного хранилища. #80716 (Konstantин 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 игнорирует ошибки и неожиданные ответы от каталогов data lake в запросе 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 в отличие от других функций. Этот pull request добавляет запись имени 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, отправляемом в не многопоточное материализованное представление (non-MT MV). #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 при выводе в формате 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).
  • Скалярные коррелированные подзапросы теперь возвращают результат проекционного выражения типа Nullable. Исправлен случай, когда коррелированный подзапрос возвращает пустое результирующее множество. #81632 (Dmitry Novik).
  • Исправлена ошибка Unexpected relative path for a deduplicated part во время операции ATTACH к ReplicatedMergeTree. #81647 (Azat Khuzhin).
  • Настройка запроса use_iceberg_partition_pruning не будет применяться для хранилища Iceberg, потому что оно использует глобальный контекст, а не контекст запроса. Это не критично, так как значение по умолчанию — true. Этот pull request исправляет это. #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).
  • Исправлена ошибка копирования и вставки в arraySimilarity, запрещено использование весов с типами UInt32 и Int32. Обновлены тесты и документация. #82103 (Mikhail f. Shiryaev).
  • Исправлена возможная гонка данных между потоком подсказок и основным клиентским потоком. #82233 (Azat Khuzhin).

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

Релиз 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).
  • Реализация хранилища DeltaLake на основе delta-kernel-rs теперь включена по умолчанию. #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.
  • Векторный поиск на основе индекса векторного сходства теперь имеет статус beta (ранее — experimental). #80164 (Robert Schulze).
  • Добавлена поддержка геопространственных типов данных в формате Parquet. Это закрывает #75317. #79777 (scanhex12).
  • Новые функции sparseGrams, sparseGramsHashes, sparseGramsHashesUTF8, sparseGramsUTF8 для вычисления «разрежённых n‑грамм» (sparse-ngrams) — надёжного алгоритма извлечения подстрок для индексации и поиска. #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.&lt;fractional&gt;), а также несколько базовых функций приведения типов и функций для взаимодействия с другими типами данных. Также было изменено имя существующей функции с toTime на toTimeWithFixedDate, потому что функция toTime требуется для реализации приведения типов. #75735 (Yarik Briukhovetskyi).
  • Каталог Hive metastore для озера данных Iceberg. #77677 (scanhex12).
  • Индексы типа full_text были переименованы в gin. Это соответствует более привычной терминологии PostgreSQL и других баз данных. Существующие индексы типа full_text по‑прежнему можно загружать, но при попытке использовать их в поиске они будут генерировать исключение (с предложением использовать индексы gin). #79024 (Robert Schulze).

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

  • Изменён формат компактных частей для сохранения меток для каждого подпотока, чтобы можно было читать отдельные подстолбцы. Старый компактный формат по-прежнему поддерживается для чтения и может быть включён для записи с помощью настройки MergeTree write_marks_for_substreams_in_compact_parts. По умолчанию она отключена для более безопасного обновления, так как изменяет хранение компактных частей. По умолчанию будет включена в одном из следующих релизов. #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, чтение только тех диапазонов таблицы, которые выбраны на основе skip-индексов, может привести к некорректному результату. Эта настройка позволяет гарантировать корректные результаты за счет сканирования более новых частей, которые пересекаются с диапазонами первичного ключа, возвращенными skip-индексом. Установите 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).
  • Ускорено выполнение запросов за счёт оптимизации тривиальных операций подсчёта. #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).
  • Удалены защитные страницы для потоков и 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).
  • В хранилище DeltaLake в реализации delta-kernel исправлен режим сопоставления столбцов и добавлены тесты для эволюции схемы. #78921 (Kseniia Sumarokova).
  • Улучшена вставка в столбец Variant в формате VALUES за счёт более корректного преобразования значений. #78923 (Pavel Kruglov).
  • Функция tokens была расширена: теперь она принимает дополнительный аргумент «tokenizer», а также другие аргументы, специфичные для токенизатора. #79001 (Elmi Ahmadov).
  • Оператор SHOW CLUSTER теперь раскрывает макросы (если они есть) в своём аргументе. #79006 (arf42).
  • Функции хеширования теперь поддерживают значения NULL внутри массивов, кортежей и отображений (issues #48365 и #48623). #79008 (Michael Kolupaev).
  • Обновлён cctz до версии 2025a. #79043 (Raúl Marín).
  • Изменили обработку stderr по умолчанию для UDF на "log_last". Это повышает удобство использования. #79066 (Alexey Milovidov).
  • Сделать закрытие вкладок в Web UI обратимым. Закрывает #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).
  • Исправлен возможный бесконечный цикл при получении списка BLOB-объектов из хранилищ 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. Эта настройка позволяет включать или отключать точное назначение прав доступа пользователям и ролям, добавленное в 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 для Distributed-таблицы функция in в запросе SELECT должна заменяться на 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 (Konstantin Bogdanov).
  • Всегда задавайте префикс при использовании S3 ListObject. #79114 (Azat Khuzhin).
  • Исправлена ошибка, из-за которой arrayUnion() возвращала лишние (некорректные) значения в таблицах с пакетной вставкой данных. Исправляет #79157. #79158 (Peter Nguyen).
  • Исправлена логическая ошибка после применения оптимизации проталкивания фильтра (filter pushdown). #79164 (Pervakov Grigorii).
  • Исправлен движок таблиц DeltaLake с реализацией delta-kernel при работе с HTTP-эндпоинтами, исправлен NOSIGN. Закрывает #78124. #79203 (Kseniia Sumarokova).
  • Исправление в Keeper: предотвращено срабатывание наблюдателей при неудачных мультизапросах. #79247 (Antonio Andelic).
  • Запрещены типы Dynamic и JSON в операторе IN. При текущей реализации IN это может приводить к некорректным результатам. Правильная поддержка этих типов в IN сложна и может быть реализована в будущем. #79282 (Pavel Kruglov).
  • Исправлена проверка на дублирующиеся пути при разборе типа JSON. #79317 (Pavel Kruglov).
  • Исправлены проблемы с подключением SecureStreamSocket. #79383 (Konstantin Bogdanov).
  • Исправлена загрузка дисков plain_rewritable, содержащих данные. #79439 (Julia Kartseva).
  • Исправлена ошибка, приводившая к аварийному завершению при динамическом определении подстолбцов в широких партах 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).
  • Исправлено дублирование результатов при чтении из remote, когда оба параметра 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 поддерживает оптимизацию операции count(), а 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) для ассемблерных файлов 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).
  • Добавлена поддержка отсечения партиций в 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).
  • Добавлен новый столбец parametrized_view_parameters в системную таблицу system.tables. Закрывает https://github.com/clickhouse/clickhouse/issues/66756. #75112 (NamNguyenHoai).
  • Разрешить изменение комментария базы данных. Closes #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).
  • Теперь условия равенства из шага плана запроса с фильтрацией объединяются с условием 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 (это должно снизить потребление памяти при вертикальных слияниях в S3 примерно в 25 раз). #77922 (Azat Khuzhin).
  • Отключайте filesystem_cache_prefer_bigger_buffer_size, когда кэш используется пассивно, например при слияниях. Это снижает потребление памяти во время слияний. #77898 (Kseniia Sumarokova).
  • Теперь для определения размера задачи при чтении с включёнными параллельными репликами используется количество реплик. Это обеспечивает более равномерное распределение нагрузки между репликами, когда объём данных для чтения не слишком велик. #78695 (Nikita Taranov).
  • Добавлена поддержка асинхронного предварительного чтения (I/O 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).
  • Индекс векторного сходства мог выделять оперативную память с избыточным запасом — до 2 раз больше необходимого. В этом исправлении переработана стратегия распределения памяти, что снизило её потребление и повысило эффективность кэша индекса векторного сходства. (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 субсекундная точность во 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. Это также позволяет конвертировать результат операции bitAnd над IPv6 обратно в IPv6. См. также #57707. #76928 (Muzammil Abdul Rehman).
  • По умолчанию не парсить специальные значения Bool в текстовых форматах внутри типа Variant. Это можно включить с помощью настройки allow_special_bool_values_inside_variant. #76974 (Pavel Kruglov).
  • Поддерживается настройка времени ожидания по задаче для низкоприоритетного запроса (priority) на уровне сессии и сервера. #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).
  • Добавлены profile events для количества запросов чтения и записи 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 при использовании path-style, когда ключ не указан. #78185 (Arthur Passos).
  • Исправлены некорректные значения асинхронных метрик BlockActiveTime, BlockDiscardTime, BlockWriteTime, BlockQueueTime и BlockReadTime (до изменения одна секунда ошибочно отображалась как 0,001 секунды). #78211 (filimonov).
  • Теперь учитывается ограничение loading_retries для ошибок при отправке данных в материализованное представление для StorageS3(Azure)Queue. Ранее такие ошибки повторялись бесконечно. #78313 (Kseniia Sumarokova).
  • В DeltaLake с реализацией 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).
  • Исправлена незначительная ошибка в запросе подтверждения «Запрошенный формат вывода — двоичный... Всё равно вывести? [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 для значения аргумента max_size, равного 0 и имеющего тип Int (как это уже делается для значения типа UInt), вместо попытки выполнить операцию с таким значением. #78140 (Eduard Karacharov).
  • Предотвращён сбой при восстановлении потерянной реплики, если локальная таблица была удалена до её отключения. #78173 (Raúl Marín).
  • Исправлена проблема, из-за которой столбец «alterable» в system.s3_queue_settings всегда возвращал false. #78187 (Kseniia Sumarokova).
  • Маскировать подпись доступа Azure, чтобы она не отображалась пользователю и в логах. #78189 (Kseniia Sumarokova).
  • Исправлена предвыборка подпотоков с префиксами в широких частях. #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 (issue #78314). #78854 (Elmi Ahmadov).
  • Исправлено падение Refreshable MATERIALIZED VIEW при выполнении ALTER после некорректного завершения работы. #78858 (Azat Khuzhin).
  • Исправлена обработка некорректных значений DateTime в формате CSV. #78919 (Pavel Kruglov).
  • Исправление в Keeper: предотвращает срабатывание наблюдателей (watches) при неуспешных multi‑запросах. #79247 (Antonio Andelic).
  • Исправлена ошибка чтения таблиц Iceberg, возникавшая, когда значения min/max были явно заданы, но имели значение NULL. Отмечено, что библиотека Go Iceberg генерировала как раз такие некорректные файлы. Закрывает #78740. #78764 (flynn).

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

  • Учитывать целевые особенности процессора в Rust и включать LTO во всех крейтах. #78590 (Raúl Marín).

Релиз ClickHouse 25.3 LTS, 2025-03-20

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

  • Операция TRUNCATE для реплицируемых баз данных запрещена. #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).
  • Поддержка метрик типа «гистограмма». Интерфейс во многом повторяет клиент Prometheus: вы просто вызываете observe(value), чтобы увеличить счётчик в бакете, соответствующем значению. Метрики-гистограммы доступны через system.histogram_metrics. #75736 (Miсhael Stetsyuk).
  • Поддержка неконстантного оператора CASE для переключения по явным значениям. #77399 (Yarik Briukhovetskyi).

Экспериментальная функциональность

  • Добавлена поддержка Unity Catalog для таблиц Delta Lake поверх AWS S3 и локальной файловой системы. #76988 (alesapin).
  • Представлена экспериментальная интеграция с каталогом данных (Data Catalog) сервиса AWS Glue для таблиц Iceberg. #77257 (alesapin).
  • Добавлена поддержка динамического автообнаружения кластеров. Это расширяет существующую функциональность автообнаружения узлов. Теперь ClickHouse может автоматически обнаруживать и регистрировать новые кластеры под общим путем в ZooKeeper, используя <multicluster_root_path>. #76001 (Anton Ivashkin).
  • Добавлена возможность автоматической очистки слияниями целых партиций по истечении настраиваемого тайм-аута с помощью нового параметра 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 (李扬).
  • В некоторых случаях (например, пустой столбец-массив) части данных могут содержать пустые файлы. Можно пропускать запись пустых blob-объектов в 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 в качестве значений параметров с плавающей запятой. Впрочем, раньше в этом всё равно не было никакого смысла. #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: добавлена возможность разбора идентификаторов последовательностей в манифест-файлах и парсинг метаданных Avro: переработан парсер метаданных Avro, чтобы его было проще расширять в будущем). #75010 (Daniil Ivanik).
  • trace_id убран из ORDER BY по умолчанию для system.opentelemetry_span_log. #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).
  • Используется корректный резервный механизм при ошибке Access Denied во время многочастного копирования в S3 при создании резервной копии. Многочастное копирование может приводить к ошибке Access Denied, когда резервное копирование выполняется между бакетами с разными учетными данными. #76515 (Antonio Andelic).
  • Обновлена librdkafka (которая представляет собой кучу мусора) до версии 2.8.0 (куча от этого лучше не стала) и улучшена процедура завершения работы для таблиц Kafka, что сократило задержки при удалении таблиц и перезапуске сервера. engine=Kafka больше не выходит из группы потребителей (consumer group) при удалении таблицы. Вместо этого потребитель остаётся в группе, пока не будет автоматически удалён после 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).
  • Ранее база данных Replicated могла выводить в логи учетные данные, указанные в запросе. Это поведение исправлено. Этим исправлением закрыт тикет: #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 session token и учетных данных, полученных из переменных окружения, в delta kernel для движка таблиц 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).
  • Исправлено форматирование (pretty print) значений типа 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 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).
  • Поддержка подстолбцов (subcolumns) в выражениях DEFAULT и MATERIALIZED. #74403 (Pavel Kruglov).
  • Поддержка записи bloom-фильтров Parquet с помощью настройки output_format_parquet_write_bloom_filter (включена по умолчанию). #71681 (Michael Kolupaev).
  • В веб-интерфейсе появилась интерактивная навигация по базам данных. #75777 (Alexey Milovidov).
  • Разрешено комбинировать диски только для чтения и для чтения-записи в политике хранения (как несколько томов или несколько дисков). Это позволяет считывать данные со всего тома, в то время как вставка будет выполняться на доступный для записи диск (то есть политика хранения Copy-on-Write). #75862 (Azat Khuzhin).
  • Добавлен новый движок базы данных DatabaseBackup, который позволяет мгновенно подключать таблицу/базу данных из резервной копии. #75725 (Maksim Kita).
  • Добавлена поддержка подготовленных запросов (prepared statements) в протоколе обмена Postgres (Postgres wire protocol). #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 в одном запросе отслеживать их совокупное потребление памяти и адаптивно инициировать сброс во внешнее хранилище для предотвращения 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. Это сделано за счет добавления предварительной выборки (prefetch) для десериализации префиксов подстолбцов, кеширования десериализованных префиксов и параллельной десериализации префиксов подстолбцов. Это ускоряет чтение JSON‑столбца из S3 в 4 раза в запросах вида SELECT data FROM table и примерно в 10 раз в запросах вида SELECT data FROM table LIMIT 10. #74827 (Pavel Kruglov).
  • Исправлен избыточный контеншн в parallel_hash, когда max_rows_in_join = max_bytes_in_join = 0. #75155 (Nikita Taranov).
  • Исправлено двойное предварительное выделение памяти в ConcurrentHashJoin в случае, когда стороны соединения меняются местами оптимизатором. #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: отключено вычисление дайджеста при фиксации (commit) в in-memory хранилище для повышения производительности. Его можно включить с помощью настройки keeper_server.digest_enabled_on_commit. Дайджест по‑прежнему вычисляется при предварительной обработке запросов. #75490 (Antonio Andelic).
  • Оптимизация: по возможности проталкивать выражение фильтра из секции 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 загружаются параллельно (размер пула потоков задается настройкой 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 No Content. #74170 (Michael Dempsey).
  • Добавлена возможность изменять значения max_remote_read_network_bandwidth_for_serve и max_remote_write_network_bandwidth_for_server на лету, без перезапуска сервера. #74206 (Kai Zhu).
  • Добавлена возможность использовать пути к BLOB-объектам для вычисления контрольных сумм при создании резервной копии. #74729 (Vitaly Baranov).
  • В таблицу system.query_cache добавлен столбец ID запроса (закрывает #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).
  • Добавлена поддержка символа «micro» (U+00B5) в функции parseTimeDelta. Теперь и символ «micro» (U+00B5), и греческая буква «mu» (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 с 10 000 на 1 000. Считаю, что так удобнее. #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).
  • Исправлено чтение субстолбцов вложенных объектов 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 (Konstantin Morozov).
  • Исправлен сбой при вставке interval (issue #74299). #74478 (NamHoaiNguyen).
  • Исправлено форматирование констант JSON-литералов. Ранее это могло приводить к синтаксическим ошибкам при отправке запроса на другой сервер. #74533 (Pavel Kruglov).
  • Исправлен некорректный запрос CREATE при использовании константных выражений секции (PARTITION) с включёнными неявными проекциями. Это исправляет #74596. #74634 (Amos Bird).
  • Не допускать, чтобы соединение оставалось в некорректном состоянии после завершения операции INSERT с исключением. #74740 (Azat Khузhin).
  • Избегайте повторного использования соединений, оставленных в промежуточном состоянии. #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 ticket при ошибке SASL во время запроса HDFS SELECT. #74930 (inv2004).
  • Исправлены запросы к базе данных Replicated в startup_scripts. #74942 (Azat Khuzhin).
  • Исправлены проблемы с выражениями, использующими псевдонимы типов, в условии JOIN ON при использовании null-safe-сравнения. #74970 (Vladimir Cherkasov).
  • Возвращает состояние части из «удаляемая» обратно в «устаревшая», если операция удаления завершилась неудачей. #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-ticket истёк. #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).
  • Исправлена обработка null-safe JOIN для допускающего значения NULL типа данных LowCardinality. Ранее JOIN ON с null-safe сравнением, таким как 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 при использовании JSON-подстолбцов типа Array в операциях JOIN с распределёнными таблицами. #75512 (Pavel Kruglov).
  • Исправлена порча данных при использовании CODEC(ZSTD, DoubleDelta). Закрывает #70031. #75548 (Konstantin Bogdanov).
  • Исправлено взаимодействие между allow_feature_tier и настройкой MergeTree compatibility. #75635 (Raúl Marín).
  • Исправлено неверное значение processed_rows в system.s3queue_log в случае повторной обработки файла. #75666 (Kseniia Sumarokova).
  • Учитывать materialized_views_ignore_errors при записи материализованного представления в движок URL при возникновении проблем с подключением. #75679 (Christoph Wurm).
  • Исправлены редкие сбои при чтении из таблицы MergeTree после нескольких асинхронных запросов RENAMEalter_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).
  • Зафиксировано включение по умолчанию параллельного hash в качестве алгоритма соединения (JOIN) в версии v24.12 в истории изменений настроек. Это означает, что ClickHouse продолжит выполнять соединение с использованием непараллельного hash, если настроен уровень совместимости ниже 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 в пользу идеального обратимого преобразования для двоичных данных. Обоснование см. здесь: 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, так и на Mac с Intel. #74244 (Yan Xin).
  • Включены ICU и GRPC при кросс-компиляции под Darwin. #75922 (Raúl Marín).
  • Обновлено встроенное LLVM до версии 19. #75148 (Konstantin Bogdanov).
  • Отключён сетевой доступ для пользователя default в образе Docker. #75259 (Mikhail f. Shiryaev). Все действия, связанные с clickhouse-server, оформлены в виде функции и выполняются только при запуске основного бинарника в entrypoint.sh. Давно откладываемое улучшение было предложено в #50724. В clickhouse-extract-from-config добавлен флаг --users для получения значений из 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).
  • Реализовано отсечение партиций таблиц Iceberg для операций партиционирования с временными преобразованиями. #72044 (Daniil Ivanik).
  • Поддержка подколонок в ключе сортировки MergeTree и пропускающих индексах. #72644 (Pavel Kruglov).
  • Добавлена поддержка чтения значений типа HALF_FLOAT из Apache Arrow/Parquet/ORC (они считываются как Float32). Это закрывает #72960. Имейте в виду, что формат половинной точности IEEE-754 (half float) — это не то же самое, что 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‑индексов. Это должно ускорить повторные запросы, использующие skipping‑индексы. Размер нового кэша контролируется серверными настройками 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).
  • Реализована оптимизация проталкивания предикатов на уровне плана запроса для шага MergingAggregated. Это повышает производительность некоторых запросов при использовании анализатора. #74073 (Nikolai Kochetov).
  • Разбиение блоков левой таблицы по хэшу больше не выполняется на фазе probe JOIN-алгоритма parallel_hash. #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 к столбцам, не являющимся функциями, улучшена производительность укороченного (short-circuit) выполнения. #73965 (lgbo).
  • Отключено автоматическое определение заголовков во входных форматах для Kafka/NATS/RabbitMQ/FileLog для повышения производительности. #74006 (Azat Khuzhin).
  • Выполнять конвейер с большей степенью параллелизма после агрегации с GROUPING SETS. #74082 (Nikita Taranov).
  • Сокращена критическая секция в MergeTreeReadPool. #74202 (Guo Wangyang).
  • Улучшена производительность параллельных реплик. Десериализация пакетов на инициаторе запроса для пакетов, не связанных с протоколом параллельных реплик, теперь всегда выполняется в потоке конвейера. Ранее десериализация могла выполняться в потоке, отвечающем за планирование конвейера, что могло снижать отзывчивость инициатора и задерживать выполнение конвейера. #74398 (Igor Nikonov).
  • Повышена производительность крупных multi-запросов в 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 теперь по умолчанию удобочитаемый (pretty). Добавлена новая настройка 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).
  • Разрешено использование более общего алгоритма планирования соединений при включённом алгоритме hash join. #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).
  • Добавлен псевдоним name для столбца metric в 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 в «нативном» ридере. #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 (Konstantин Morozov).
  • Сделано так, что лимит 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).
  • Использовать мультизапросы Keeper в потоке очистки ObjectStorageQueueMetadata. #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 агрегирован прогресс между источниками для сопоставления с настройками ограничения количества коммитов. #73641 (Kseniia Sumarokova).
  • Поддержка базовых настроек в запросах BACKUP и RESTORE. #73650 (Vitaly Baranov).
  • Учитывать output_format_compression_level при выводе в Parquet. #73651 (Arthur Passos).
  • Добавлено чтение Apache Arrow fixed_size_list как 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 для совместимости с сетевым протоколом Postgres. #73812 (scanhex12).
  • Функция isIPv4String возвращала true, если за корректным IPv4-адресом следовал нулевой байт, хотя в этом случае она должна возвращать false. Продолжение #65387. #73946 (Alexey Milovidov).
  • Код ошибки в протоколе MySQL wire приведён в соответствие с MySQL. Продолжение #56831. Закрывает #50957. #73948 (Alexey Milovidov).
  • Добавлена настройка validate_enum_literals_in_opearators, которая проверяет литералы enum в операторах IN и NOT IN на соответствие типу enum и выбрасывает исключение, если литерал не является допустимым значением enum. #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).
  • Теперь есть три простых способа задать пользовательскую строку приглашения в 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).
  • В EXPLAIN добавлены имена таблиц Iceberg. #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).
  • Исправлена ошибка, из-за которой с помощью keeper-client было невозможно создать узел SEQUENTIAL. #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 всегда генерирует шесть цифр долей секунды. Это делает его поведение совместимым с функцией MySQL DATE_FORMAT. Предыдущее поведение можно восстановить с помощью настройки formatdatetime_f_prints_scale_number_of_digits = 1. #73324 (ollidraese).
  • Исправлена фильтрация по столбцу _etag при чтении из хранилища 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).
  • Исправлена ошибка сегментации (segfault), возникавшая, когда источник словаря содержал функцию с некорректными данными. #73535 (Yarik Briukhovetskyi).
  • Исправлена логика повторных попыток при неудачной вставке в хранилище S3(Azure)Queue. Закрывает #70951. #73546 (Kseniia Sumarokova).
  • Исправлена ошибка в функции tupleElement, которая могла возникать в некоторых случаях для кортежей с элементами типа LowCardinality при включённой настройке optimize_functions_to_subcolumns. #73548 (Anton Popov).
  • Исправлен разбор маски enum, после которой следует диапазон. Устраняет проблему #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).
  • Исправлена возможная несогласованность данных в динамическом столбце Dynamic. Исправлена потенциальная логическая ошибка 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).
  • Исправлено повышенное потребление памяти при создании вложенных Maps. #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. Она включает проталкивание предикатов (predicate push-down) на основе AST для распределённых запросов с использованием анализатора. Это временное решение, которое будет использоваться до тех пор, пока не появится поддержка распределённых запросов с сериализацией плана запроса. Закрывает #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).
  • Исправлено определение опции «use the Rewrite method in the 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).
  • Частичные операции REVOKE при использовании грантов с подстановочными символами могли отзывать больше привилегий, чем ожидалось. Закрывает #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).