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

Журнал изменений 2025 года

Оглавление

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

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

  • ALTER MODIFY COLUMN теперь требует явного указания DEFAULT при преобразовании столбцов типа Nullable в не-Nullable типы. Ранее такие ALTER-команды могли зависать с ошибками cannot convert null to not null, теперь значения NULL заменяются выражением по умолчанию для столбца. Исправляет #5985. #84770 (Vladimir Cherkasov).
  • Токенизатор ngram больше не будет возвращать n‑граммы длиной меньше N, с которой он был настроен. Text Search не будет возвращать строки, если поисковые токены пустые. #89757 (George Larionov).
  • При изменении столбца с String на Nullable(String) мутация данных не выполняется. Но для агрегатной функции uniq используется другая структура данных: для nullable-столбца будет использоваться AggregateFunctionNull с вложенным агрегатором uniq. AggregateFunctionNull будет сериализовывать дополнительный булевый флаг. Это делает файл статистики несовместимым. Исправление заключается в добавлении флага для записи того, является ли столбец nullable во время сериализации. Формат статистики был изменён, и сервер может завершиться с ошибкой, если имеются статистики в старом формате. Этот PR #90904 исправляет сбой и выбрасывает исключение, когда существующая статистика использует устаревший формат. Чтобы избежать исключения, следует выполнить ALTER TABLE table MATERIALIZE STATISTICS ALL, чтобы пересоздать статистику и устранить проблему. #90311 (Han Fei).
  • Удалены настройки allow_not_comparable_types_in_order_by/allow_not_comparable_types_in_comparison_functions. Разрешение использования несравнимых типов в ORDER BY или функциях сравнения может приводить к логическим ошибкам и неожиданным результатам. Исправляет #90028. #90527 (Pavel Kruglov).
  • Изменено значение по умолчанию настройки check_query_single_value_result с true на false. Теперь CHECK TABLE возвращает подробные результаты по каждой части таблицы вместо агрегированного результата (1 = всё в порядке, 0 = обнаружены ошибки). По сравнению с предыдущим поведением это, вероятнее всего, лучше соответствует ожиданиям пользователя. #91009 (Robert Schulze).
  • Несколько исправлений, связанных с неявными индексами. Схема, отображаемая или сохраняемая (метаданные Keeper), не будет включать неявные индексы, такие как индексы, создаваемые параметрами add_minmax_index_for_numeric_columns или add_minmax_index_for_string_columns. Это может привести к ошибкам в метаданных при создании или обновлении таблицы ReplicatedMergeTree в более новой версии, пока в кластере есть реплика на более старом релизе. В таких случаях отправляйте DDL-запросы на старую реплику до полного обновления кластера. #91429 (Raúl Marín).
  • Обновлен clickhouse-client, чтобы возвращать ненулевой код выхода (159 — TIMEOUT_EXCEEDED), когда выполнение запроса прерывается по таймауту, заданному в receive_timeout. Ранее в случае таймаута возвращался код выхода 0 (успех), что затрудняло скриптам и системам автоматизации обнаружение таких сбоев. #91432 (Sav).
  • Теперь запрещено создавать специальные таблицы MergeTree (такие как ReplacingMergeTree, CollapsingMergeTree и т. д.) с пустым ключом ORDER BY, поскольку поведение слияния данных в таких таблицах не определено. Если вам всё же нужно создать такую таблицу, включите настройку allow_suspicious_primary_key. #91569 (Anton Popov).
  • Исправлены функции bitShiftLeft и bitShiftRight, чтобы они возвращали 0 или пустое значение при сдвиге на величину, равную размеру типа. #91943 (Pablo Marcos).
  • Продолжение #88380. Этот PR обозначает отключённые позиционные аргументы в проекциях как обратно несовместимое изменение. Кроме того, он добавляет настройку enable_positional_arguments_for_projections, позволяющую выполнить безопасное обновление кластера ClickHouse, если в проекциях используются позиционные аргументы. #92007 (Dmitry Novik).

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

  • Теперь пользователи могут настраивать таблицы S3/Azure Queue для перемещения или пометки тегами обработанных файлов, в дополнение к ранее доступным возможностям сохранения или удаления файлов. Решает #72944. #86907 (Murat Khairulin).
  • В хранилищах S3/Azure Queue добавлена настройка commit_on_select (для определения, нужно ли коммитить обработанные данные и нужно ли применять действие after_processing). Значение по умолчанию — false. Исправлена проверка для присоединённого материализованного представления при выполнении запроса SELECT. #91450 (Kseniia Sumarokova).
  • Добавлена возможность включать инструментацию во время выполнения с помощью XRay для отладки проблем в продакшене и детерминированного профилирования. Закрывает задачу #74249. #89173 (Pablo Marcos).
  • Позволяет использовать неконстантные значения во втором аргументе для IN. Также добавлена поддержка кортежа в качестве второго аргумента. #77906 (Yarik Briukhovetskyi).
  • Функции для вычисления площади и периметра для типа данных geometry. #89047 (Konstantин Vedernikov).
  • Реализована функция dictGetKeys, которая возвращает ключи словаря, для которых значение атрибута равно указанному. Она использует кэш обратного поиска по словарю на уровне запроса, настраиваемый с помощью параметра max_reverse_dictionary_lookup_cache_size_bytes, для ускорения повторных обращений. #89197 (Nihал Z. Miaji).
  • Добавлена настройка type_json_skip_invalid_typed_paths для отключения исключений при вставках/приведении типов к типу JSON, когда входной JSON не может быть приведён к явно типизированным путям в типе JSON. В этом случае используется значение null/ноль для типизированного пути. #89886 (Max Justus Spransy).
  • Добавлена поддержка соединения типа direct (nested loop) для таблиц MergeTree. Чтобы его использовать, укажите этот алгоритм в настройке как единственный вариант: join_algorithm = 'direct'. #89920 (Vladimir Cherkasov).
  • Поддержка ORDER BY в операции CREATE для Iceberg, а также сортировки при INSERT. Устраняет проблему #89916. #90141 (Konstantin Vedernikov).
  • Введены настройки на уровне проекций, доступные через новую конструкцию WITH SETTINGS в ALTER TABLE ... ADD PROJECTION. Эти настройки позволяют проекциям переопределять некоторые параметры хранения MergeTree (например, index_granularity, index_granularity_bytes) для каждой отдельной проекции. #90158 (Amos Bird).
  • Добавлена SQL-функция HMAC(algorithm, message, key) в рамках задач #73900 и #38775. #90837 (Mikhail f. Shiryaev).
  • Добавлена поддержка функции has для использования первичного ключа и индексов пропуска данных, если первый аргумент — константный массив. Закрывает #90980. #91023 (Nihal Z. Miaji).
  • Реализован новый формат ввода-вывода данных Buffers. Этот формат похож на Native, однако, в отличие от Native, не сохраняет имена столбцов, типы столбцов или какие-либо дополнительные метаданные. Закрывает #84017. #91156 (Nihal Z. Miaji).
  • Добавлена настройка max_streams_for_files_processing_in_cluster_functions для управления числом потоков при параллельном чтении файлов в табличных функциях Cluster. Закрывает #90223. #91323 (Pavel Kruglov).
  • Маскирование данных для безопасности на уровне строк (доступно только в ClickHouse Cloud). Добавлен парсер политики маскирования данных для поддержки этой функции в clickhouse-client. #90552 (pufit).
  • Добавлена опция allow_reentry для агрегатной функции windowFunnel. При включении вместе с strict_order она пропускает события, нарушающие порядок, вместо того чтобы прерывать анализ воронки. Это позволяет обрабатывать пути пользователя с обновлением страницы (A->A->B) или возвратом назад (A->B->A->C) без занижения показателей конверсии. #86916 (Lee ChaeRok).
  • Совместимость Keeper с ZooKeeper: создание с поддержкой статистики. #88797 (Konstantin Vedernikov).
  • Поддержка постоянных наблюдателей ZooKeeper в ClickHouse Keeper. Продолжение, часть 2: https://github.com/ClickHouse/ClickHouse/pull/78207. #88813 (Konstantin Vedernikov).
  • Добавлена настройка MergeTree alter_column_secondary_index_mode для управления обработкой индексов при мутациях. Возможные значения: throw, drop, rebuild и compatibility. Закрывает #77797. #89335 (Raúl Marín).
  • Поскольку типы данных Time и Time64 готовы для промышленной эксплуатации, настройка enable_time_time64_type теперь включена по умолчанию. #89345 (Yarik Briukhovetskyi).
  • Поддерживается чтение DeltaLake CDF через табличную функцию deltaLake с настройками delta_lake_snapshot_start_version, delta_lake_snapshot_end_version. CDF (Change Data Feed — возможность, которая позволяет автоматически фиксировать и выполнять запросы к изменениям данных на уровне строк, таким как вставки, обновления и удаления, между версиями таблицы Delta) включается в DeltaLake через delta.enableChangeDataFeed. Столбцы, возвращаемые вместе с данными: _change_type, _commit_version, _commit_timestamp. #90431 (Kseniia Sumarokova).
  • Добавлена поддержка отрицательных индексов для обращения к элементам кортежа (например, tuple.-1). #91665 (Amos Bird).

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

  • TODO: Ввести формат текстового индекса v3 и перевести его в статус Beta.
  • Добавлена новая логика для автоматического выполнения запросов с использованием параллельных реплик, управляемая настройкой automatic_parallel_replicas_mode. Во время обычного однопоточного выполнения на одном узле ClickHouse собирает статистику, которая позже будет учитываться на этапе планирования запроса. Если статистика показывает, что параллельные реплики, вероятно, будут полезны, ClickHouse автоматически выполнит данный запрос с параллельными репликами. Поддерживаемый набор запросов в настоящее время довольно ограничен. #87541 (Nikita Taranov).
  • Доступ к экземплярам ClickHouse Cloud с использованием учетных данных Cloud через --login. #89261 (Krishna Mannem).
  • Добавлена сеансовая настройка aggregate_function_input_format для улучшения запросов INSERT в таблицы со столбцами AggregateFunction, позволяя вставлять данные в виде сериализованного состояния, исходных значений или массивов. #88088 (Punith Nandyappa Subashchandra).

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

  • Оптимизированы запросы ORDER BY...LIMIT N за счёт использования пропускающего индекса и динамического порогового фильтра, что позволило значительно сократить количество обрабатываемых строк. #89835 (Shankar Iyer).
  • Теперь ClickHouse использует skip-индексы для выполнения индексного анализа по предложениям WHERE с составными условиями фильтрации, объединёнными операторами AND и OR. Ранее для использования skip-индексов предложение WHERE должно было представлять собой конъюнкцию (AND) условий фильтрации. Новый SETTING use_skip_indexes_for_disjunctions (по умолчанию: on) управляет этим поведением. (issue #75228). #87781 (Shankar Iyer).
  • Добавлена поддержка сохранения порядка чтения из левой таблицы в операциях LEFT/INNER JOIN, который может быть использован последующими шагами. Эту возможность можно отключить с помощью настройки query_plan_read_in_order_through_join. Добавлена оптимизация чтения с использованием виртуальной строки (см. настройку read_in_order_use_virtual_row) для LEFT/INNER JOIN. #89815 (Vladimir Cherkasov).
  • Улучшена производительность лениво материализуемых столбцов при большем значении лимита. #90309 (Nikolai Kochetov).
  • Пользователи должны заметить меньшую задержку при анализе индексов при наличии больших индексов minmax (миллионы гранул). #90428 (Shankar Iyer).
  • Реализован простой алгоритм перестановки порядка соединений DPsize для INNER JOINов. Новый экспериментальный параметр управляет тем, какие алгоритмы и в каком порядке используются, например, query_plan_optimize_join_order_algorithm='dpsize,greedy' означает, что сначала используется DPsize с переходом на greedy в случае неудачи. #91002 (Alexander Gololobov).
  • Быстро завершать выполнение запросов при достижении предельного числа строк. Решает #61872. #62804 (Sean Haynes).
  • #84477 добавил ограничения на запросы SELECT, которые можно использовать в запросах INSERT SELECT FROM s3Cluster(...) для параллельного распределённого выполнения. Это изменение позволяет использовать WHERE, что ранее было невозможно. #84611 (Igor Nikonov).
  • Выполнять предварительную загрузку ключей при обходе хеш-таблицы для уменьшения числа промахов кэша. #84708 (lgbo).
  • Оптимизирована агрегатная функция histogram за счёт сортировки только хвоста массива точек и пропуска сортировки для монотонных входных данных, что даёт ускорение примерно на 10%. #85760 (MakarDev).
  • Повышена производительность фильтрации для предикатов, использующих функции like, equals, has и другие, за счёт дополнительного предварительного фильтра, построенного на основе текстового индекса. Эта оптимизация включается с помощью настройки query_plan_text_index_add_hint. Улучшено использование текстового индекса для столбцов с типом данных Map. #88550 (Anton Popov).
  • Оптимизированы повторяющиеся обратные поиски в словаре за счёт более быстрого поиска по предвычисленному набору возможных значений ключей. Закрывает #7968. #88971 (Nihal Z. Miaji).
  • Улучшена производительность и поведение агрегатной функции topK. #90091 (Raúl Marín).
  • Улучшена производительность операций сравнения для типа Decimal. Устранена проблема #28192. #90153 (Konstantin Bogdanov).
  • Добавлена поддержка отсечения партиций (partition pruning) для функций Apache Paimon, продолжение работы из https://github.com/ClickHouse/ClickHouse/pull/84423. #90253 (JIaQi).
  • Используются расширенные операции SIMD для логических функций с динамической диспетчеризацией. #90432 (Raúl Marín).
  • Улучшена производительность JIT-функции за счёт отказа от ненужной инициализации результирующего столбца нулями. #90449 (Raúl Marín).
  • Ускорена декомпрессия T64 за счёт динамического диспетчинга. #90610 (Raúl Marín).
  • Оптимизирована inplace‑фильтрация в ридере MergeTree. Исправляет #87119. #90630 (Xiaozhe Yu).
  • Добавлена дополнительная эвристика для уменьшения ширины выбранных вариантов слияния. Более узкие слияния приведут к повышению write amplification, но в то же время могут помочь избежать возникновения ошибок TOO_MANY_PARTS. #91163 (Mikhail Artemenko).
  • Повышена производительность запросов для таблиц S3, созданных с использованием glob-шаблона, за счёт проталкивания фильтра по полю _path, что позволяет избежать операций перечисления в S3. Это поведение управляется настройкой s3_path_filter_limit. #91165 (Eduard Karacharov).
  • Ускорено преобразование столбцов в bool в условиях WHERE за счет динамической диспетчеризации. #91203 (Raúl Marín).
  • Ускорена сортировка отдельного числового блока за счёт динамического диспетчирования. #91213 (Raúl Marín).
  • Добавлена оптимизация для удаления неиспользуемых столбцов в планах выполнения запросов. Устраняет проблему #75152. #76487 (János Benjamin Antal).
  • Значение по умолчанию настройки query_plan_optimize_join_order_limit изменено на 10. #89312 (Alexey Milovidov).
  • Теперь по умолчанию включена настройка allow_statistics_optimize, поэтому оптимизатор операций JOIN использует статистику по столбцам. #89332 (Alexey Milovidov).
  • Добавлена поддержка runtime-фильтров для ANTI JOIN. Также выполнен рефакторинг реализации runtime-фильтров для снижения конкуренции за блокировки. #89710 (Dmitry Novik).
  • Снижает объём потребляемой памяти во время слияний в таблице system.metric_log (включён по умолчанию) за счёт установки значений min_bytes_for_wide_part и vertical_merge_algorithm_min_bytes_to_activate равными 128 МБ. #89811 (filimonov).
  • Добавлена поддержка использования инвертированного индекса в PREWHERE. Исправляет #89975. #89977 (Peng Jian).
  • Не добавляйте провайдеры S3 при использовании GCP OAuth — это повышает производительность на GCS. #91706 (Antonio Andelic).

Улучшения

  • Добавлена новая настройка apply_row_policy_after_final, которая позволяет запросу применять ROW POLICY только после FINAL, что делает поведение движка таблиц ReplacingMergeTree с ROW POLICY более корректным. Исправляет #90986. #91065 (Yarik Briukhovetskyi).
  • В формате Pretty именованные кортежи теперь отображаются в виде Pretty JSON. Это закрывает #65022. #91779 (Mostafa Mohamed Salah).
  • Добавлены поля last_error_time, last_error_message, last_error_query_id и last_error_trace в таблицу system.error_log. #89879 (Narasimha Pakeer).
  • CLI-клиент теперь может скрывать сообщение «Версия сервера ClickHouse старше, чем версия клиента ClickHouse. Это может означать, что сервер устарел и может быть обновлён», указав --no-server-client-version-message или значение false. #87784 (Larry Snizek).
  • Добавлено сообщение об ошибке, указывающее, что часть была удалена как дубликат. #80264 (Aleksandr Musorin).
  • Добавлены столбцы dependencies и missing_dependencies в system.kafka_consumers для отображения целевых таблиц materialized view для таблиц Kafka. Добавлен счётчик KafkaMVNotReady. #85346 (Ilya Golshtein).
  • Теперь выражения по умолчанию в таблицах корректно работают при вставке данных через протоколы remote и native. Исправляет проблему #87972. #88540 (Pervakov Grigorii).
  • Добавлена возможность отключать асинхронный сбор метрик PSI_*_*. #88557 (MikhailBurdukov).
  • Добавлена поддержка разреженной сериализации столбцов типа Nullable. Это продолжение #44539. #88999 (Amos Bird).
  • Диск plain-rewritable имеет собственную реализацию и структуру размещения. Не нужно строить его поверх обычных дисков plain. #89807 (Mikhail Artemenko).
  • Ни одно HTTP-исключение не должно содержать финальный нулевой фрагмент. #89998 (Kaviraj Kanagaraj).
  • Добавлена проверка на стороне keeper-сервера при установлении соединения, чтобы отклонять клиентов, когда last_zxid_seen (предоставлено клиентом) > last_processed_zxid. Это предотвращает получение устаревших результатов чтения, когда клиенты переподключаются к отстающим репликам. #90016 (Miсhael Stetsyuk).
  • Добавлен kafka_consumer_reschedule_ms в качестве настраиваемого параметра движка таблиц Kafka для регулирования времени ожидания потребителями новых данных. Решает #89204. #90112 (Jeremy Aguilon).
  • Добавлен новый столбец parts_in_progress_names в таблицу system.mutations для улучшения диагностики. #90155 (Shaohua Wang).
  • Повторять запрос при сетевых ошибках во время разбора XML‑ответа библиотекой S3. #90216 (Sema Checherinda).
  • Мы хотим запускать keepers в отдельных серверных процессах и, чтобы не перегружать Prometheus в крупных регионах, должны по-прежнему экспортировать только метрики, относящиеся к keepers. #90244 (Miсhael Stetsyuk).
  • Добавлена поддержка загрузки конфигурации клиента ClickHouse из путей XDG Base Directory (например, ~/.config/clickhouse/config.xml) помимо устаревшего расположения ~/.clickhouse-client/. Решает проблему #89882. #90306 (Wujun Jiang).
  • Добавлено ограничение на размер в байтах пакета запросов append в Keeper. Лимит управляется параметром keeper_server.coordination_settings.max_requests_append_bytes_size. #90342 (Antonio Andelic).
  • Добавлена настройка для Iceberg, предотвращающая создание чрезмерного количества партиций. #90365 (Konstantин Vedernikov).
  • Обновлены предупреждающие сообщения при приближении к ограничениям guardrails: теперь отображаются текущее значение и значение, при достижении которого будет выброшено исключение. #90438 (Nikita Fomichev).
  • Потоковая выдача фрагментов в таблице system.filesystem_cache вместо формирования одного фрагмента со всем состоянием кэша. Чтение состояния кэша файловой системы может занимать много времени при большом объеме кэша и потреблять много памяти, поэтому потоковая выдача незаменима для крупных развертываний. #90508 (Kseniia Sumarokova).
  • Исправлено некорректное сообщение об исключении при Hive-партиционировании: в нём отсутствовал пробел. #90685 (Alexey Milovidov).
  • Записи в кэше индекса векторного сходства теперь удаляются при удалении частей таблицы или их замене более новыми частями. Ранее они очищались только отложенно, посредством механизма вытеснения из кэша. #90750 (Shankar Iyer).
  • Обновлён chdig (консольный диагностический инструмент для ClickHouse) до версии v25.12.1. #91394 (Azat Khuzhin).
  • Теперь предварительно подписанные URL работают с S3. Закрыта задача #65032. #90827 (Yarik Briukhovetskyi).
  • Текстовый индекс теперь работает с таблицами ReplacingMergeTree. #90908 (Elmi Ahmadov).
  • Избегайте раскрытия версии сервера ClickHouse в HTTP-ответах об ошибках, возвращаемых до аутентификации. #91003 (filimonov).
  • Теперь исключение HTTP_CONNECTION_LIMIT_REACHED будет выбрасываться, когда будет достигнут hard_limit для подключений HTTP‑клиентов. Для подключений к диску значение этого параметра установлено в 20000. #91016 (Sema Checherinda).
  • Добавлены таблицы system.background_schedule_pool{,_log} для улучшения интроспекции фоновых задач. #91157 (Azat Khuzhin).
  • Теперь вы можете быстро комментировать или раскомментировать выделенные строки в редакторе запросов веб-интерфейса с помощью Ctrl+/ (или Cmd+/ на Mac), что упрощает временное отключение частей запроса при тестировании. #91160 (Samuel K.).
  • Добавлена таблица system.completions в список всегда доступных таблиц. #91166 (Yakov Olkhovskiy).
  • Добавлены события профилирования FailedInitialQuery и FailedInitialSelectQuery. #91172 (RinChanNOW).
  • Исправлено потенциальное истощение пула потоков при чтении образцов столбцов для JSON-столбцов с большим числом подстолбцов за счёт учёта настройки merge_tree_use_prefixes_deserialization_thread_pool вместо безусловного использования пула потоков. #91208 (Raufs Dunamalijevs).
  • Добавлена поддержка типа JSON в tupleElement. Закрывает #81630. #91327 (Pavel Kruglov).
  • Исправлены ложные ошибки ограничения памяти при включённом кэше страниц в пространстве пользователя. #91361 (Michael Kolupaev).
  • Токенизатор Ngrams теперь можно создавать с ngram_length = 1. #91529 (George Larionov).
  • Добавлена поддержка настроек хранения внутри функций в INSERT INTO FUNCTION, аналогично уже имеющейся поддержке для SELECT. Закрывает #89386. #91707 (Kseniia Sumarokova).
  • Выбрасывать исключение «not implemented» при выполнении запроса TRUNCATE для озёр данных вместо того, чтобы молча ничего не делать. Исправляет #86604. #91713 (Kseniia Sumarokova).
  • Установлен максимальный размер сообщения для ридера Parquet v3, чтобы избежать ошибки DB::Exception: apache::thrift::transport::TTransportException: MaxMessageSize reached. #91737 (Arthur Passos).
  • Добавлена настройка insert_select_deduplicate, которая делает более понятным, как обрабатывается дедупликация вставок при INSERT SELECT. В общем случае выполнять дедупликацию для таких запросов невозможно, но если таблица не изменяется и результат отсортирован, то дедупликацию можно выполнить при повторной попытке. Мы не можем отследить, что источник остался тем же самым, но можем проверить, что результат запроса SELECT отсортирован. На практике оказалось, что в общем случае это проверить очень сложно, но простой случай с ORDER BY ALL обрабатывается легко. В данный момент текущая логика фактически работает некорректно: мы пытаемся выполнять дедупликацию, но в большинстве случаев просто не видим дубликатов между блоками, потому что SELECT возвращает разные данные. #91830 (Sema Checherinda).
  • Теперь допускается неявное приведение типов при преобразовании Array в QBit. Массивы целых и вещественных чисел теперь можно вставлять напрямую в столбцы QBit без явного приведения типов. #91846 (Raufs Dunamalijevs).
  • Добавлено ограничение на размер сообщений CapnProto. Его можно изменить с помощью format_capn_proto_max_message_size. #91888 (Antonio Andelic).
  • Уточнены метрики кэша меток, чтобы отслеживать только запросы (после #83415, когда MarkCacheHits/MarkCacheMisses также начали учитываться при слияниях, этот PR возвращает прежнее поведение). #91910 (Azat Khuzhin).
  • Исправлена проблема, из-за которой client_info.interface устанавливался в значение TCP для локальных подключений. #91933 (Konstantin Bogdanov).
  • Параметр refresh_certificates_task_interval в конфигурации клиента ACME теперь должен задаваться в секундах. #92211 (Konstantин Bogdanов).
  • Логировать события частей в system.part_log для таблиц system.*_log. #92217 (Azat Khuzhin).

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

  • Исправлены некоторые ошибки в PREWHERE, связанные с супертипами для типов данных Time и Time64. Устраняет #84544. #84715 (Yarik Briukhovetskyi).
  • Перед использованием DNSResolver теперь инициализируется, чтобы учитывались пользовательские настройки. Исправлена проблема #76296. #81302 (Zhigao Hong).
  • Исправлено чтение подстолбцов из столбца, имя которого содержит точку, в некоторых случаях. Устраняет #81261, #82058, #88169. #87205 (Pavel Kruglov).
  • Исправлен сбой движка GenerateRandom при использовании нелитеральных параметров: теперь вместо LOGICAL_ERROR возвращается BAD_ARGUMENTS с понятным сообщением. #88157 (Shafi Ahmed).
  • Исправлено удаление неиспользуемых столбцов проекций при использовании UNION. Устранена проблема #88180. #88350 (Sema Checherinda).
  • Исправлено некорректное разбиение по сегментам при оптимизации JOIN, когда первичный ключ отсортирован по убыванию. Устраняет #88512. #88794 (Amos Bird).
  • Повторно включена настройка s3queue_keeper_fault_injection_probablility, исправлены ошибки. #88800 (Kseniia Sumarokova).
  • Исправлены несколько ошибок, вызванных преждевременным удалением столбцов по TTL. Исправляет #88002. #88860 (Amos Bird).
  • Выбрасывать исключение, если параметр temporary_files_buffer_size установлен в 0. Устраняет #88900. #88917 (Vladimir Cherkasov).
  • Исправлена ошибка Bad get, возникавшая во время анализа индекса Set, если предикат содержал константу NULL. Исправляет #84856 и #82974. #89429 (Nikolai Kochetov).
  • Исправлена ошибка Cannot add subcolumn X.Y: column with this name already exists. Устраняет проблему #89599. #89602 (Azat Khuzhin).
  • Исправлены ошибки в функциях theilsU и contingency, которые приводили к некорректным результатам. #89760 (Nihal Z. Miaji).
  • Устранены проблемы со стабильностью alias: скорректирован StrictnessLevel с SharedDatabaseCatalog, запрещено использование в качестве цели другого alias и реализованы дополнительные интерфейсы (getSerializationHints, supportsReplication, getStoragePolicy, totalBytesUncompressed, lifetimeRows, lifetimeBytes, storesDataOnDisk, tryLockForShare, lockForShare). Устраняет #89106. #89812 (Kai Zhu).
  • Исправлен возможный сбой во время удалённого запроса с ARRAY JOIN внутри IN при включённой настройке enable_lazy_columns_replication. Исправляет проблему #90361. #89997 (Pavel Kruglov).
  • Исправлена возможная логическая ошибка при использовании analyzer_compatibility_join_using_top_level_identifier с несколькими соединениями. #90010 (Vladimir Cherkasov).
  • Исправлено некорректное выведение значений DateTime64 из значений типа String в текстовых форматах в некоторых случаях. Устраняет #89368. #90013 (Pavel Kruglov).
  • Проверять размеры при десериализации данных из агрегатных состояний и других источников. #90031 (Raúl Marín).
  • Разделены диапазоны частей по характеристикам томов, чтобы включить TTL-слияния с удалением (drop) для холодных томов. После этого патча части с максимальным TTL < now будут удаляться из холодного хранилища. Алгоритм будет планировать только удаление одиночных частей. #90059 (Mikhail Artemenko).
  • В случае, если таблица Kafka была создана с настройкой kafka_handle_error_mode = 'dead_letter_queue', и таблица system.dead_letter_queue не была настроена, сервер мог аварийно завершить работу. Это поведение исправлено. Исправляет #87573. #90064 (Nikita Mikhaylov).
  • Исправлена возможная ошибка Column with Array type is not represented by ColumnArray column: Replicated при вставке с использованием ARRAY JOIN и включённым параметром enable_lazy_columns_replication. #90066 (Pavel Kruglov).
  • Исправлена ошибка, приводившая к аварийному завершению при корректном завершении работы сервера из‑за неверного порядка уничтожения объектов. Исправляет #82420. #90076 (Nikita Mikhaylov).
  • Исправлена логическая ошибка и ошибка в вычислении по модулю в системной таблице numbers при использовании большого размера шага. Закрывает #83398. #90123 (Nihал Z. Miaji).
  • Исправлена проблема с записью в формат Parquet, при которой не сохранялся исходный порядок при использовании однопоточной записи с нативным writer. Частично откатывает изменения из https://github.com/ClickHouse/ClickHouse/pull/64424/files. #90126 (Arthur Passos).
  • Не применять оптимизацию константного узла к выражению LIMIT/OFFSET. Исправляет #89607. #90156 (Yakov Olkhovskiy).
  • Исправлена несовместимость с hive‑партиционированием, мешавшая плавному обновлению до 25.8 (устранена ошибка All hive partitioning columns must be present in the schema при обновлении). #90202 (Kseniia Sumarokova).
  • Исправлено исключение JSON в таблице Iceberg со столбцом типа timestamp при использовании каталога Glue. Исправляет #90210. #90209 (Alsu Giliazova).
  • Исправлено несоответствие количества строк в MergeTreeReaderIndex, возникавшее, когда в части было меньше строк, чем index_granularity. Решает #89691. #90254 (Peng Jian).
  • Исправлен бесконечный WITH FILL-запрос с nan/inf. Исправляет #69261. #90255 (Konstantin Bogdanov).
  • Исправлена ошибка 'column not found', возникающая при query_plan_use_logical_join_step=0 и наличии остаточного условия в JOIN ON. Решает #88635. #90279 (Vladimir Cherkasov).
  • Исправлены некоторые запросы при оптимизации агрегированных проекций. #90288 (János Benjamin Antal).
  • Исправлена ошибка при чтении подстолбцов JSON в компактных частях, которая могла приводить к ошибке CANNOT_READ_ALL_DATA. Исправляет #90264. #90302 (Pavel Kruglov).
  • Теперь ClickHouse не будет использовать оптимизацию чтения по порядку для Iceberg, если порядок сортировки не указан в файлах манифеста или отличается от default_sort_order таблицы. Исправляет #89178. #90304 (alesapin).
  • Теперь типы Time и Time64 должны корректно учитывать часовые пояса при преобразовании из DateTime и DateTime64 (время должно отображаться в том же часовом поясе, что и для пользователя при выводе в формате DateTime[64]). Закрывает #89896. #90310 (Yarik Briukhovetskyi).
  • Исправлена ошибка, при которой SELECT CAST(CAST(now(), 'Time'), 'Time64') возвращал некорректный результат. Закрывает #88349. #90324 (Yarik Briukhovetskyi).
  • Исправлено падение при переполнении целого значения в randomStringUTF8. #90326 (Michael Kolupaev).
  • Исправлены обновления обнаружения кластеров в многокластерных конфигурациях с multicluster_root_path, чтобы избежать задержек и пропущенных обновлений ZooKeeper. #90341 (RinChanNOW).
  • Исправлена возможная логическая ошибка в prewhere при обращении к несуществующему JSON-пути при index_granularity_bytes=0. Устраняет #86924. #90375 (Pavel Kruglov).
  • Исправлена ошибка в L2DistanceTransposed, приводившая к сбоям при выходе аргумента точности за допустимый диапазон. Закрывает #90401. #90405 (Raufs Dunamalijevs).
  • Исправлена возможная логическая ошибка в arrayUnion с аргументом Array(Dynamic). Устраняет #90270. #90409 (Pavel Kruglov).
  • Исправлена потенциальная логическая ошибка при переименовании и изменении одного и того же столбца Nested в одном ALTER-запросе. Устранена проблема #90406. #90412 (Pavel Kruglov).
  • Исправлен разбор значений типов JSON/Dynamic/Variant из HTTP‑параметров. Устраняет проблему #88925. #90430 (Pavel Kruglov).
  • Исправлена гонка (race condition) в Hive-партиционировании, при которой статический KeyValuePairExtractor мог приводить к повреждению данных или сбоям при одновременном чтении файлов. #90474 (Paresh Joshi).
  • Исправлены некорректные вычисления расстояний в L2DistanceTransposed при использовании опорных векторов-массивов (которые по умолчанию имеют тип Array(Float64)) со столбцами QBit с элементами типов, отличных от Float64 (Float32, BFloat16). Функция теперь автоматически приводит опорный вектор к типу элементов столбца QBit. Исправляет #89976. #90485 (Raufs Dunamalijevs).
  • Исправлена ошибка, из-за которой функция toDateTimeOrNull при отрицательном аргументе возвращала NULL. #90490 (Yarik Briukhovetskyi).
  • Исправлена потенциальная логическая ошибка при выводе LowCardinality(Bool/Date32) в формате Arrow. Устраняет #83883. #90505 (Pavel Kruglov).
  • Исправлены функции разбора IPv4 (например, IPv4StringToNumOrDefault), которые для некоторых некорректных входных данных возвращали произвольные значения. Устраняет #90544. Устраняет #87583. #90545 (Michael Kolupaev).
  • Повторная попытка выполнения markReplicasActive при сбое разрешения адреса во время локальной проверки хоста: выводить предупреждающую запись в журнал, если возникает исключение во время проверки локального хоста в DDLTask. В DDLWorker::markReplicasActive выбрасывать исключение для повторной попытки, если локальный хост не найден, но в кластерах есть идентификаторы хостов. #90556 (Tuan Pham Anh).
  • Исправлена логическая ошибка, вызванная редким граничным случаем в функции equals. Закрывает #88142. #90557 (Nihал Z. Miaji).
  • Должно исправить сбои ThreadSanitizer в test_ssh/test.py::test_paramiko_password. #90612 (Govind R Nair).
  • Исправлена логическая ошибка в функции concatWithSeparator при использовании константного столбца нестрокового типа. Закрывает #90596. #90655 (Nihал Z. Miaji).
  • Исправлено форматирование для INTO OUTFILE, что решает #90207. #90656 (Azat Khuzhin).
  • Исправлено потенциальное аварийное завершение при выполнении мутаций с подзапросами и allow_statistics_optimize=1. Устраняет #90626. #90664 (Azat Khuzhin).
  • Исправлена валидация в анализаторе для LIMIT BY с GROUP BY, чтобы выдавать корректную ошибку NOT_AN_AGGREGATE вместо NOT_FOUND_COLUMN_IN_BLOCK, когда LIMIT BY использует столбцы, не входящие в GROUP BY. Закрывает #89713. #90665 (xiaohuanlin).
  • Исправлены ошибки приведения типов при использовании столбцов типа LowCardinality в ключах партиционирования. Закрыта задача #89412. #90666 (xiaohuanlin).
  • Исправлена проблема, из-за которой запросы с предикатами фильтрации, содержащими константы, полученные свёрткой недетерминированных функций (например, shardNum()), могли некорректно использовать кэш условий запроса. #90692 (Eduard Karacharov).
  • Исправлена ошибка сегментации при выполнении запроса с функцией EXISTS в секции JOIN ON. Теперь такой запрос просто возвращает ошибку INVALID_JOIN_ON_EXPRESSION. Закрывает #90698. #90719 (Vladimir Cherkasov).
  • Исправлена логическая ошибка: 'Inconsistent AST formatting' для AccessRightsElement при использовании базы данных по умолчанию без какой-либо таблицы. #90742 (Pablo Marcos).
  • Исправлена проверка прав доступа для запросов ALTER UPDATE при использовании табличной функции remote с localhost в качестве целевого хоста. #90761 (pufit).
  • Исправлено: сокрытие секретов в именованных коллекциях теперь зависит от display_secrets_in_show_and_select и format_display_secrets_in_show_and_select. #90765 (Pablo Marcos).
  • Отключена настройка enable_shared_storage_snapshot_in_query, так как она приводила к утечкам памяти. #90770 (Azat Khuzhin).
  • Исправлена проблема с дублированием данных в RIGHT JOIN с distributed таблицей при включённом режиме параллельных реплик. #90806 (zoomxi).
  • Исправлено возможное несогласованное состояние разделяемых данных и динамических путей в JSON, которые могли приводить к логическим ошибкам и неожиданным результатам. #90816 (Pavel Kruglov).
  • Исправлена работа оператора ALTER ... MODIFY QUERY с dictGet() и именем словаря в CSE для SharedCatalog (функция, доступная только в Cloud). #90860 (Azat Khuzhin).
  • Исправлена совместимость сериализации в памяти состояния агрегации для String. Различная сериализация могла приводить к дублирующимся результатам, если агрегирующий запрос выполнялся на экземплярах с разными версиями. Новую сериализацию можно включить с помощью настройки serialize_string_in_memory_with_zero_byte. #90880 (Antonio Andelic).
  • Исправлен фоновый сброс данных в движке Buffer при частых INSERT. #90892 (Azat Khuzhin).
  • Родительский каталог contrib/ больше не перечисляется в system.licenses. #90901 (Raúl Marín).
  • Исправлено высокое потребление памяти при чтении столбцов типов JSON/Dynamic/Variant. #90907 (Pavel Kruglov).
  • Исправлено выделение буфера для функции base58Decode. #90909 (Antonio Andelic).
  • Исправлена возможная ошибка логики при получении очередного запроса на чтение от реплики после того, как был отправлен ответ с флагом finish=true. Она могла возникать из‑за логической гонки в MergeTreeReadPoolParallelReplicas, хотя вероятность её проявления была крайне мала. #90921 (Nikita Taranov).
  • Исправлена проверка прав, выданных с подстановочными символами, при частичном отзыве. Добавлено больше тестов. #90922 (pufit).
  • Исправлена агрегация в SummingMergeTree для столбцов Nested с типом LowCardinality. #90927 (Ivan Babrou).
  • Исправлена обработка глобальных привилегий при отзыве с использованием подстановочных символов. Исправлена проблема, из‑за которой отзыв привилегии по шаблону мог случайно приводить к отзыву некоторых глобальных привилегий, например CREATE USER. #90928 (pufit).
  • Исправлен возможный бесконечный цикл при получении списка BLOB-объектов в Azure. #90947 (Julia Kartseva).
  • Исправлены чрезмерные сбросы Buffer (они нагружали CPU и создавали огромное количество логов). #91000 (Azat Khuzhin).
  • ... Запретить установку adaptive_write_buffer_initial_size в 0. #91001 (Pedro Ferreira).
  • Исправлена ошибка в JSON, возникавшая, когда путь мог одновременно находиться и в shared data, и в dynamic paths при чтении подобъекта в Compact-частях с отключённым write_marks_for_substreams_in_compact_parts. #91014 (Pavel Kruglov).
  • Исправлено исключение std::out_of_range в CTE при использовании dictGet без аргументов. Закрывает #91027. #91022 (Pavel Kruglov).
  • Исправлено чтение динамических подстолбцов из материализованных столбцов при выполнении мутаций. Закрывает #90653. #91040 (Pavel Kruglov).
  • Исправлена проблема, из-за которой функция arrayFilter не работала при использовании пустого массива вместе с функцией isNull. Закрывает #73849. #91105 (Nihal Z. Miaji).
  • Исправлена логическая ошибка в ARRAY JOIN, возникавшая, когда один из столбцов таблицы был пустым столбцом-кортежем. Закрывает #90801. #91123 (Nihал Z. Miaji).
  • Исправлена ленивая материализация столбца, добавленного через ALTER ADD COLUMN в старых частях. #91142 (Pavel Kruglov).
  • Исправлено слияние JSON-столбцов в Summing/Aggregating/Coalescing MergeTree. Ранее это могло приводить к неожиданным динамическим путям при записи данных в части. #91151 (Pavel Kruglov).
  • Исправлено возможное несогласованное состояние динамической структуры при записи в компактные части, которое могло приводить к ошибке сегментации (segfault). #91152 (Pavel Kruglov).
  • Исправлен разбор субнормальных чисел с плавающей запятой в научной нотации. Закрывает #78903. #91162 (Nihал Z. Miaji).
  • Исправлено некорректное определение схемы в INSERT SELECT из подзапроса, использующего источник с неявной схемой. #91204 (Pervakov Grigorii).
  • Исправлена проблема https://github.com/clickhouse/clickhouse/issues/91206, при которой при создании таблицы со статистикой, последующей записи данных и удалении одной статистики происходило аварийное завершение работы при повторном чтении. Это происходило потому, что предполагалось совпадение типов статистики при сериализации и десериализации. В этом исправлении мы проверяем, содержат ли актуальные метаданные сериализованную статистику; если нет, мы создаём фиктивную статистику и выполняем её десериализацию только для того, чтобы пропустить. #91227 (Han Fei).
  • Исправлена ошибка при вставке в столбец таблицы с движком CoalescingMergeTree с типом Tuple(JSON/Dynamic, LowCardinality). Закрывает #91215. #91270 (Pavel Kruglov).
  • Исправлена команда SYSTEM DROP FILESYSTEM CACHE ON CLUSTER. #91304 (Anton Ivashkin).
  • Исправлена потенциальная логическая ошибка "Bad cast from type DB::ColumnSparse to DB::ColumnNullable". Закрывает #91284. #91309 (Pavel Kruglov).
  • Исправлено аварийное завершение работы сервера при десериализации вредоносно сформированных потоков байтов во вложенные типы QBit, что вообще не должно быть возможным, но могло использоваться для падения сервера. #91313 (Raufs Dunamalijevs).
  • Исправлена ошибка в таблице Alias с пустыми аргументами в реплицируемой базе данных. Исправлено в #91378. #91382 (Kai Zhu).
  • В настоящее время параметр установлен в значение false, поэтому при сбросе очереди асинхронных вставок на удалённый сервер вставки всегда выполняются синхронно, даже если для пользователя этот параметр имеет значение True. #91386 (Mikhail f. Shiryaev).
  • Удалены разреженные столбцы из заголовка в алгоритмах слияния. Закрывает #91377. #91396 (Pavel Kruglov).
  • Исправлена ошибка hive-разбиения в версии 25.8, которая могла приводить к ошибочному выбрасыванию исключения A hive partitioned file can't contain only partition columns. #91403 (Kseniia Sumarokova).
  • Исправлена ошибка в dictGetDescendants, приводившая к сбою при значении NULL, когда тип словаря поддерживает иерархию, но ни один столбец не имеет тип HIERARCHICAL. Закрывает #92026. Закрывает #92121. #91420 (Nihал Z. Miaji).
  • Исправлено падение функции IN при использовании лямбда-выражений и неконстантных аргументов-кортежей. Закрывает #91379. #91446 (Nihal Z. Miaji).
  • Исправлена проблема параллельных записей, возникавших при вставках из MaterializedView в хранилища, которые их не поддерживают. #91449 (Pervakov Grigorii).
  • Обрабатываются значения NULL для XML-словарей Ytsaurus. #91465 (MikhailBurdukov).
  • Исправлена ошибка, из-за которой тип QBit вызывал сбой при использовании параметров запроса вроде SET param_q=[1,2,3,4]; SELECT {q:QBit(Float32,4)}. #91488 (Raufs Dunamalijevs).
  • Исправлена ошибка LOGICAL_ERROR при использовании untuple в константном выражении. #91507 (Pervakov Grigorii).
  • Устранена потенциальная гонка данных в librdkafka. #91521 (János Benjamin Antal).
  • Исправлена логическая ошибка, вызванная аргументом со звездочкой в функции remote. Закрывает #90568. #91524 (Nihal Z. Miaji).
  • Исправляет переполнение при чтении из формата ORC для типов Date и DateTime64. Закрывает #70976. #91572 (Yarik Briukhovetskyi).
  • Запрещены операции ALTER для табличных движков Object Storage. Например, ALTER ADD PROJECTION мог привести к невозможности перезапуска сервера, так как движки Object Storage не поддерживают проекции. #91573 (Nikolay Degterinsky).
  • Исправлена ошибка, из‑за которой L2DistanceTransposed возвращала некорректные результаты при использовании неконстантных опорных векторов (например, из таблицы). #91517. #91593 (Raufs Dunamalijevs).
  • Исправлена ошибка при выполнении JOIN с условием FALSE, из-за которой на этапе диспетчеризации возвращался LOGICAL_ERROR. Закрывает #91173. #91598 (Yarik Briukhovetskyi).
  • Исправлена проблема повышенного потребления памяти в join с "additional filter", закрыт #91011. #91664 (Vladimir Cherkasov).
  • Исправлены запросы JOIN с представлением при включённых параллельных репликах. #91813 (Igor Nikonov).
  • Исправлена настройка delta lake delta_lake_snapshot_version, которая могла давать некорректный результат при использовании с табличным движком (а не табличной функцией) и значением -1 (отключено) после того, как ранее уже была использована версия snapshot. Закрывает #87676. #91818 (Kseniia Sumarokova).
  • Исправлен LOGICAL_ERROR в RecursiveCTEChunkGenerator. #91827 (Pablo Marcos).
  • Исправлено несоответствие структуры блоков в запросах с FINAL и PREWHERE. #91847 (Antonio Andelic).
  • Исправлена логическая ошибка с join_use_nulls при выполнении нескольких операций JOIN вместе с CROSS JOIN. #91853 (Vladimir Cherkasov).
  • Добавлен механизм восстановления для JSON с дублированным путём в shared data и динамических путях, которое могло возникать из‑за ошибки, исправленной в https://github.com/ClickHouse/ClickHouse/pull/90816. #91886 (Pavel Kruglov).
  • Исправлена ошибка в ORC reader при чтении строковых столбцов, закодированных с помощью DICTIONARY_V2 и содержащих только значения NULL. #91889 (Peng Jian).
  • Исправлена проблема несогласованности сериализации между разреженными и Nullable подпотоками в столбцах типа Tuple, которая могла приводить к повреждённым частям или сбоям при чтении. Это исправление относится к https://github.com/ClickHouse/ClickHouse/pull/91851. @Algunenano, не могли бы вы, пожалуйста, помочь проверить, позволяет ли это пройти стресс‑тест в приватном репозитории? @CurtizJ, не могли бы вы также помочь и посмотреть на это, пожалуйста? Спасибо! #91932 (Amos Bird).
  • Исправлена ошибка Directory '{}' does not exist (LOGICAL_ERROR) при создании резервных копий на дисках типа plain-rewritable. #91935 (Julia Kartseva).
  • Исправлен сбой при подключении к MongoDB с именованными коллекциями. #91959 (Antonio Andelic).
  • Исправлена ошибка "TOO_MANY_MARKS", которая могла возникать после выполнения некоторых запросов ALTER для компактных частей. #91980 (alesapin).
  • Закрывает https://github.com/clickhouse/clickhouse/issues/87417: в схеме записи формата v1 есть ошибка: тип "added_snapshot_id" должен быть "long", а не "null, long", так как это обязательное поле. Это ошибка, поскольку такой формат несовместим с другими системами, например Spark. При совместном использовании их файлов манифестов проявляется эта проблема. #92078 (Han Fei).
  • Исправлены названия функций readWKT и readWKB, которые в предыдущих версиях не соответствовали принятому стилю. #92094 (Alexey Milovidov).
  • Исправлены многочисленные логические ошибки, ошибки переполнения и функциональные ошибки в функции midpoint. Закрывает #91816. #92102 (Nihал Z. Miaji).
  • Исправляет некорректные результаты, которые могли возникать при чтении некоторых подстолбцов (например, размера строки) при использовании разреженного кодирования. #92156 (Pavel Kruglov).
  • Исправлена ошибка, приводившая к тому, что system.view_refreshes завершался с ошибкой No macro 'replica' in config. #92203 (Michael Kolupaev).
  • Исправлена подстановка UDF в формате. #92210 (Raúl Marín).
  • В функции ddlworker::markreplicasactive, если не найден активный хост, но в remote_servers присутствуют какие-либо host_ids, мы логируем предупреждение вместо выбрасывания исключения. #92223 (Tuan Pham Anh).
  • Заключать операторы IN, NOT IN в скобки. Исправляет #85075. #92225 (Mikhail f. Shiryaev).
  • Исправлено резервное копирование таблиц KeeperMap и Memory. Создание резервной копии таблиц на одном из этих двух движков при max_compress_block_size, установленном в 0, могло приводить к аварийному завершению работы. #92237 (Antonio Andelic).
  • Исправлена ошибка, приводившая к сбою при одновременном чтении данных типа String и подстолбца .size из движка Log. Исправляет #89909. Включает некоторые коммиты из #92290. #92341 (Amos Bird).
  • Исправлена логическая ошибка, возникающая при использовании типа Nothing в аргументах функции caseWithExpression. Закрывает #85354. #92351 (Nihal Z. Miaji).
  • Исправлено возможное аварийное завершение работы агрегатных функций после ошибки MEMORY_LIMIT_EXCEEDED. #92390 (Azat Khuzhin).

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

Релиз ClickHouse 25.11 от 2025-11-27

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

  • Удалён устаревший тип 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 «Backward Incompatible Change» просто для информирования (потому что неизвестно, как какие‑нибудь кривые скрипты могут разбирать сообщение об исключении).
  • Запрещено создание нескольких дисков plain-rewritable поверх общего пути объектного хранилища, так как это может привести к неопределённому поведению при коллизиях различных транзакций хранения метаданных. #89038 (Mikhail Artemenko).
  • Исправлен приоритет настроек SASL для хранилища Kafka. Настройки SASL на уровне таблицы, указанные в запросах CREATE TABLE, теперь корректно переопределяют настройки SASL для потребителя/производителя из конфигурационных файлов. #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, содержащая список символов Unicode и их свойств. Закрывает #80055. #80857 (wxybear).
  • Добавлена новая настройка MergeTree merge_max_dynamic_subcolumns_in_wide_part, позволяющая ограничить количество динамических подстолбцов в Wide‑части после слияния независимо от параметров, указанных в типе данных. #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 для удаления из массива arr всех элементов, равных elem. Это нужно только для совместимости с 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).

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

  • Поддержка получения 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 v3 включён по умолчанию. #88827 (Michael Kolupaev).
  • Распределённое выполнение: задачи теперь разбиваются по идентификаторам групп строк, а не по файлам. #87508 (scanhex12).
  • RIGHT и FULL JOIN теперь используют ConcurrentHashJoin, что обеспечивает более высокую степень параллелизма при их выполнении. В ряде сценариев производительность RIGHT и FULL JOIN увеличена до двух раз. Исправляет #78027. #78462 (Yarik Briukhovetskyi).
  • Оптимизация обработки больших значений константных выражений в запросах. Закрывает #72880. #81104 (Yakov Olkhovskiy).
  • Запросы SELECT с агрессивным отсечением партиций на таблицах с более чем 10 тыс. частей выполняются до 8 раз быстрее. #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 (Nihал 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).
  • Когда в запросе с несколькими JOIN включены runtime‑фильтры и добавляются несколько runtime‑фильтров, реализовано проталкивание (pushdown) шагов вновь добавленных фильтров поверх остальных. #89725 (Alexander Gololobov).
  • Незначительно ускорены некоторые операции uniqExact за счёт уменьшения накладных расходов при слиянии хеш-таблиц. #89727 (Raúl Marín).
  • Увеличен лимит на число строк ленивой материализации с 10 до 100. #89772 (Alexey Milovidov).
  • Настройка allow_special_serialization_kinds_in_output_formats теперь включена по умолчанию. Это снизит потребление памяти и повысит скорость выполнения запросов при выводе разреженных/реплицированных столбцов в некоторых построчных форматах вывода. #89402 (Pavel Kruglov).
  • Добавлена параллельная обработка запросов ALTER TABLE ... FREEZE. #71743 (Kirill).
  • Добавлен кэш для bcrypt-аутентификации. #87115 (Nikolay Degterinsky).
  • Если skip index, используемый в запросе с 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).
  • Записывать внутренние запросы (те, которые выполняются словарями, refreshable materialized views и т. д.) и добавить новый столбец is_internal в таблицу system.query_log. #83277 (Miсhael Stetsyuk).
  • Улучшен оператор IS NOT DISTINCT FROM (<=>): добавлена поддержка обратного оператора IS DISTINCT FROM, а также поддержка совместимых числовых операндов разных типов (например, Nullable(UInt32) и Nullable(Int64)). Решает #86763. #87581 (yanglongwei).
  • 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).
  • Разрешена вставка в удалённые таблицы и таблицы в озёрах данных при включённом параметре 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).
  • В clickhouse-client теперь отображаются индикатор прогресса, логи и статистика производительности для запросов CREATE OR REPLACE TABLE с SELECT. Такой запрос больше не приводит к таймауту, даже если 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 (Michael Stetsyuk).
  • Добавлена опция input_headers для запроса EXPLAIN, позволяющая добавлять входные заголовки к шагам. #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).
  • Разрешено автоматическое использование opt-in регионов AWS для S3, когда регион не указан в конечной точке (endpoint). См. также: opt-in AWS regions. #88930 (Andrey Zvonov).
  • Теперь в clickhouse-client пользователь может отменить запрос, нажав Ctrl+C, когда запущен pager. Устраняет #80778. #88935 (Grigorii).
  • Web UI будет отображать полосы в таблице даже при отрицательных значениях. Благодаря этому можно строить двустороннюю столбчатую диаграмму с разными цветами столбцов для отрицательной и положительной частей. #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 (Konstantин Bogданов).
  • YTsaurus: разрешено использовать replicated_table в качестве источника данных. #89107 (MikhailBurdukov).
  • Запросы, начинающиеся с пробельных символов, больше не сохраняются в истории CLI. #89116 (Konstantin Bogdanov).
  • Добавлена поддержка массива типа String в качестве входного параметра для функций 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).
  • Ползунок изменения размера текстовой области для запроса в Web UI сделан во всю ширину, что делает работу немного удобнее. Кроме того, встроенный в браузер ресайзер был недоступен в 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).
  • Исправлено проталкивание фильтра времени выполнения при наличии под ним нескольких шагов вычисления выражений. #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).
  • Используется меньший лимит числа узлов для запроса Keeper RemoveRecursive при очистке 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 с константными аргументами и укороченной (short-circuit) оценкой. Закрывает #72714. #84546 (Yakov Olkhovskiy).
  • Исправлена логическая ошибка при выборке из таблицы с CONSTRAINT, содержащим подзапрос. Решает #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 (Nihал Z. Miaji).
  • Исправлено чтение массивов с элементами типов Float и Bool в JSON. Ранее вставка таких данных приводила к исключению. #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, чтобы параметр порога учитывался при вызове с одним аргументом. Закрывает #88757. #88867 (Manuel).
  • Источники конечных точек ArrowFlight, требующие SSL-соединения (например, находящиеся за AWS ALB), теперь могут корректно запрашивать конкретный набор данных. #88868 (alex-shchetkov).
  • Исправлена обработка нематериализованных Nested(Tuple(...)), добавленных с помощью ALTER. Исправлена ошибка #83133. #88879 (Azat Khuzhin).
  • Исправлена ошибка в функции reverseUTF8. В предыдущих версиях она по ошибке инвертировала порядок байтов UTF-8-кодовых точек длиной 4. Это закрывает #88913. #88914 (Alexey Milovidov).
  • Исправлен протокол icebergS3Cluster. В функции icebergCluster добавлена поддержка эволюции схемы, позиционных и удалений по равенству. Исправлена ошибка #88287. #88919 (Yang Jiang).
  • Отключена parallel_replicas_support_projection для запросов с параллельными репликами к distributed таблицам. Закрывает #88899. #88922 (zoomxi).
  • Теперь контекст передаётся при внутренних приведениях типов. Исправлено несколько проблем, из-за которых параметры приведения типов не передавались. Закрывает #88873. Закрывает #78025. #88929 (Manuel).
  • Исправлена ошибка определения формата файла при использовании glob-шаблонов в функции 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).
  • Refreshable materialized view: исправлен редкий сбой сервера, возникавший при полном удалении исходной таблицы в процессе обновления. #89203 (Michael Kolupaev).
  • Сбрасывать буферы во время отправки ошибки в середине сжатого потока через HTTP-интерфейс. #89256 (Alexander Tokmakov).
  • Исправлена ошибка, из-за которой правила маскировки запросов некорректно применялись к DDL-командам. #89272 (MikhailBurdukov).
  • Исправлен некорректный подсчёт строк при заполнении виртуальных столбцов в MergeTreeReaderTextIndex, что приводило к сбою с LOGICAL_ERROR. Повторно открыт #89095. #89303 (Jimmy Aguilar Mena).
  • Исправлена ошибка, из-за которой STATISTICS countmin не поддерживал тип данных estimate для LowCardinality(Nullable(String)), что приводило к LOGICAL_ERROR. #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, если журнал изменений не был корректно переименован во время ротации. #89496 (Antonio Andelic).
  • Исправлена ошибка, приводившая к некорректным результатам JOIN при использовании условий OR с уникальными ключами правой таблицы. Устранена проблема #89391. #89512 (Vladimir Cherkasov).
  • Исправлена возможная ошибка «Context has expired» при использовании analyzer и PK IN (subquery) (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-фильтры только для поддерживаемых алгоритмов JOIN, то есть для hash join. Фильтр может быть построен только в том случае, если алгоритм JOIN сначала полностью читает правую сторону, а затем левую; однако, например, FullSortingMergeJoin читает обе стороны одновременно. Исправляет #89220. #89652 (Alexander Gololobov).
  • Исправлены проблемы параллельного выполнения функций hasAnyTokens, hasAllTokens и tokens с токенизатором sparseGrams. Решает проблему #89605. #89665 (Elmi Ahmadov).
  • Исправлены логическая ошибка и возможное падение при использовании runtime-фильтра соединения в некоторых случаях. Устраняет #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 (Nihal Z. Miaji).
  • Удалять инъективные функции из GROUP BY независимо от настройки optimize_injective_functions_in_group_by в старом анализаторе для совместимости. Устраняет #89854. #89870 (Raufs Dunamalijevs).
  • Если merge был прерван, например, из‑за ограничения по памяти, фоновый исполнитель merge mutate вызовет cancel для задачи merge без блокировки, но в этом случае частично созданная результирующая часть не будет удалена (так как она не была завершена и на этом этапе не была видна). После этого задача merge будет уничтожена, что приведёт к уничтожению результирующей части. Это приведёт к откату транзакции на диске и удалению данных из S3. В конце эта очистка мусора выполнялась под блокировкой фонового исполнителя merge mutate. #89875 (Mikhail Artemenko).
  • Исправлена логическая ошибка при использовании пустого кортежа внутри функций reverse и CAST. Закрывает #89137. #89908 (Nihal Z. Miaji).
  • Теперь ClickHouse по умолчанию будет показывать базу данных каталога озера данных в результате выполнения запроса 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).
  • Исправлена логическая ошибка, возникавшая при наличии пустого столбца-кортежа в 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: исправлена логическая ошибка и баг в вычислении остатка по модулю в системной таблице numbers при большом размере шага. Закрывает #83398. #90123 (Nihal 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, когда в части меньше строк, чем 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, приводившая к сбоям при превышении аргументом точности допустимого диапазона. Закрывает #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, чтобы учитывать из метаданных Parquet/ORC/Arrow информацию о том, являются ли столбцы Nullable, вместо того чтобы делать все столбцы 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 к требуемому типу. #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 автоматически подставляет в LIMIT BY все неагрегатные выражения из предложения SELECT в качестве ключей. Например, SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALL эквивалентен SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, name. Эта возможность упрощает запросы, когда нужно ограничить результат по всем выбранным неагрегатным столбцам, не перечисляя их явно. Закрывает #59152. #84079 (Surya Kant Ranjan).
  • Добавлена поддержка выполнения запросов к Apache Paimon из ClickHouse. Эта интеграция позволяет пользователям ClickHouse напрямую работать с хранилищем озера данных Paimon. #84423 (JIaQi).
  • Добавлена агрегатная функция studentTTestOneSample. #85436 (Dylan).
  • Агрегатная функция quantilePrometheusHistogram принимает в качестве аргументов верхние границы и накопительные значения бакетов гистограммы и выполняет линейную интерполяцию между верхней и нижней границами бакета, в котором расположена требуемая квантиль. Ведёт себя аналогично функции 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, позволяющая задать минимальный уровень части, которая будет создаваться как широкая. #88179 (Christoph Wurm).
  • Добавлены рекурсивные варианты команд cp-cpr и mv-mvr в клиенте Keeper. #88570 (Mikhail Artemenko).
  • Добавлена сессионная настройка для исключения списка skip-индексов из материализации при вставках (exclude_materialize_skip_indexes_on_insert). Добавлена настройка таблиц семейства MergeTree для исключения списка skip-индексов из материализации во время слияния (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 теперь применяется до анализа первичного ключа и пропускающих индексов, что уменьшает избыточные вычисления индексов. Анализ индексов расширен для поддержки нескольких диапазонных фильтров, а его результаты фильтрации теперь сохраняются обратно в QCC. Это существенно ускоряет запросы, в которых анализ индексов занимает основную долю времени выполнения, особенно те, которые полагаются на пропускающие индексы (например, векторные или инвертированные индексы). #82380 (Amos Bird).
  • Целый ряд микрооптимизаций для ускорения выполнения небольших запросов. #83096 (Raúl Marín).
  • Сжимаются логи и события профилирования во внутреннем протоколе. На кластерах со 100+ реплик несжатые события профилирования занимают 1–10 МБ/с, а индикатор прогресса заметно тормозит при медленном интернет-соединении. Это закрывает #82533. #83586 (Alexey Milovidov).
  • Улучшена производительность поиска строк с учетом регистра (операции фильтрации, например WHERE URL LIKE '%google%') за счет использования библиотеки StringZilla, применяющей SIMD-инструкции CPU при наличии поддержки. #84161 (Raúl Marín).
  • Снижено количество операций выделения и копирования памяти при выполнении SELECT из таблицы типа AggregatingMergeTree с FINAL, когда таблица содержит столбцы типа SimpleAggregateFunction(anyLast). #84428 (Duc Canh Le).
  • Реализует логику проталкивания дизъюнктивных предикатов JOIN. Например, в TPC-H Q7 для условия для двух таблиц n1 и n2 вида (n1.n_name = 'FRANCE' AND n2.n_name = 'GERMANY') OR (n1.n_name = 'GERMANY' AND n2.n_name = 'FRANCE') мы извлекаем отдельные частичные фильтры для каждой таблицы: n1.n_name = 'FRANCE' OR n1.n_name = 'GERMANY' для n1 и n2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE' для n2. #84735 (Yarik Briukhovetskyi).
  • Повышена производительность выражений LIKE с префиксом или суффиксом за счёт нового значения по умолчанию для настройки optimize_rewrite_like_perfect_affix. #85920 (Guang Zhao).
  • Исправлено снижение производительности, связанное с большим сериализованным ключом при группировке по нескольким строковым и числовым столбцам. Это продолжение #83884. #85924 (李扬).
  • Добавлена новая настройка joined_block_split_single_row для уменьшения потребления памяти при хеш-соединениях с большим числом совпадений по ключу. Она позволяет разбивать результаты хеш-соединения на фрагменты даже в пределах совпадений для одной строки левой таблицы, что особенно полезно, когда одна строка из левой таблицы сопоставляется с тысячами или миллионами строк из правой таблицы. Ранее все совпадения приходилось материализовывать в памяти одновременно. Это снижает пиковое потребление памяти, но может увеличить нагрузку на CPU. #87913 (Vladimir Cherkasov).
  • Улучшен SharedMutex, что повысило производительность при большом числе одновременных запросов. #87491 (Raúl Marín).
  • Повышена производительность построения текстового индекса для документов, в которых большинство токенов встречается редко. #87546 (Anton Popov).
  • Оптимизирован типичный случай работы деструктора Field (улучшена производительность при большом количестве небольших запросов). #87631 (Raúl Marín).
  • Пропускается пересчёт статистики хеш-таблицы во время выполнения при оптимизации JOIN (что повышает производительность всех запросов с JOIN). Добавлены новые профильные события JoinOptimizeMicroseconds и QueryPlanOptimizeMicroseconds. #87683 (Vladimir Cherkasov).
  • В ридере MergeTreeLazy включено сохранение меток в кэше и устранён прямой доступ к диску. Это повышает производительность запросов с ORDER BY и небольшим LIMIT. #87989 (Nikita Taranov).
  • SELECT-запрос с оператором FINAL по таблице ReplacingMergeTree со столбцом is_deleted теперь выполняется быстрее благодаря улучшенной параллелизации на основе двух существующих оптимизаций: 1. оптимизация do_not_merge_across_partitions_select_final для партиций таблицы, содержащих только один part; 2. разделение остальных выбранных диапазонов таблицы на intersecting / non-intersecting, при этом через этап слияния FINAL проходят только пересекающиеся диапазоны. #88090 (Shankar Iyer).
  • Снижено влияние использования пути выполнения без fail points (пути выполнения по умолчанию при отключённой отладке). #88196 (Raúl Marín).
  • Теперь избегается полное сканирование system.tables при фильтрации по uuid (это может быть полезно, если у вас есть только UUID из логов или пути в ZooKeeper). #88379 (Azat Khuzhin).
  • Улучшена производительность функций tokens, hasAllTokens, hasAnyTokens. #88416 (Anton Popov).
  • Инлайнили AddedColumns::appendFromBlock для небольшого улучшения производительности операций JOIN в некоторых случаях. #88455 (Nikita Taranov).
  • Автодополнение в клиенте стало быстрее и более единообразным за счёт использования system.completions вместо выполнения нескольких запросов к системным таблицам. #84694 (|2ustam).
  • Добавлен новый параметр текстового индекса dictionary_block_frontcoding_compression, управляющий сжатием словаря. По умолчанию он включён, и используется сжатие front-coding. #87175 (Elmi Ahmadov).
  • Перед вставкой в materialized views данные со всех потоков объединяются в зависимости от настроек min_insert_block_size_rows_for_materialized_views и min_insert_block_size_bytes_for_materialized_views. Ранее, если parallel_view_processing был включен, каждый поток, выполнявший вставку в конкретный materialized view, объединял данные независимо, что могло приводить к увеличению числа создаваемых частей. #87280 (Antonio Andelic).
  • Добавлена настройка temporary_files_buffer_size для управления размером буфера при записи во временные файлы. * Оптимизировано потребление памяти операцией scatter (используется, например, в операции grace hash join) для столбцов типа LowCardinality. #88237 (Vladimir Cherkasov).
  • Добавлена поддержка прямого чтения из текстовых индексов на параллельных репликах. Улучшена производительность чтения текстовых индексов из объектного хранилища. #88262 (Anton Popov).
  • Запросы к таблицам из каталогов озёр данных будут использовать параллельные реплики для распределённой обработки. #88273 (scanhex12).
  • Внутренняя эвристика по настройке алгоритма фоновых слияний с именем "to_remove_small_parts_at_right" будет выполняться до вычисления оценки диапазона слияния. Ранее селектор слияний выбирал слияние большого диапазона, а затем отбрасывал его суффикс. Исправления: #85374. #88736 (Mikhail Artemenko).

Улучшения

  • Теперь функция generateSerialID поддерживает неконстантный аргумент, задающий имя серии. Закрывает #83750. #88270 (Alexey Milovidov).
  • В функцию generateSerialID добавлен необязательный параметр start_value для указания пользовательского начального значения для новых последовательностей. #88085 (Manuel).
  • Добавлена опция --semicolons_inline в clickhouse-format для форматирования запросов так, чтобы точки с запятой ставились в конце последней строки, а не на новой строке. #88018 (Jan Rada).
  • Добавлена возможность настраивать лимитирование на уровне сервера, когда конфигурация переопределена в Keeper. Закрывает #73964. #74066 (JIaQi).
  • mannWhitneyUTest больше не выбрасывает исключение, когда обе выборки содержат только одинаковые значения. Теперь возвращает корректный результат, соответствующий SciPy. Это закрывает: #79814. #80009 (DeanNeaht).
  • Транзакция переписывания диска в объектном хранилище удаляет предыдущие удалённые blob-объекты, если транзакция метаданных зафиксирована. #81787 (Sema Checherinda).
  • Исправлен проход оптимизации для избыточного выражения сравнения на равенство, если LowCardinality результирующего типа различается до и после оптимизации. #82651 (Yakov Olkhovskiy).
  • Когда HTTP‑клиенты устанавливают заголовок X-ClickHouse-100-Continue: defer в дополнение к Expect: 100-continue, ClickHouse не отправляет ответ 100 Continue клиенту до тех пор, пока не пройдет проверка квот, что предотвращает бессмысленную трату сетевой пропускной способности на передачу тел запросов, которые в итоге все равно будут отброшены. Это актуально для запросов INSERT, где сам запрос может быть отправлен в строке запроса URL (query string), а данные — в теле запроса. Прерывание запроса без отправки полного тела не позволяет повторно использовать соединение в HTTP/1.1, но дополнительная задержка, связанная с открытием новых соединений, обычно незначительна по сравнению с общей длительностью выполнения INSERT при больших объемах данных. #84304 (c-end).
  • Маскировать учётные данные S3 в логах при использовании DATABASE ENGINE = Backup с хранилищем S3. #85336 (Kenny Sun).
  • Теперь оптимизации плана запроса становятся видимыми для подплана входных данных коррелированного подзапроса за счёт отсрочки его материализации. Часть #79890. #85455 (Dmitry Novik).
  • Изменение для SYSTEM DROP DATABASE REPLICA: - При удалении базы данных или при удалении всей реплики: реплика также удаляется для каждой таблицы этой базы данных. - Если указан параметр «WITH TABLES», удалить реплику для каждого хранилища. - В противном случае логика не меняется: удаляется только реплика базы данных. - При удалении реплики базы данных с указанием пути в Keeper: - Если указан «WITH TABLES»: - Восстановить базу данных как Atomic. - Восстановить таблицы RMT из записей в Keeper. - Удалить базу данных (восстановленные таблицы также будут удалены). - В противном случае удалить только реплику по указанному пути в Keeper. #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).
  • Удалённые реплики будут пропускать анализ индекса при отсутствии PROJECTION. #87096 (zoomxi).
  • Добавлена возможность отключить кодировку UTF-8 для таблицы YTsaurus. #87150 (MikhailBurdukov).
  • По умолчанию отключён параметр s3_slow_all_threads_after_retryable_error. #87198 (Nikita Mikhaylov).
  • Переименовать табличную функцию arrowflight в arrowFlight. #87249 (Vitaly Baranov).
  • Обновлён clickhouse-benchmark, теперь он принимает - вместо _ в флагах командной строки. #87251 (Ahmed Gouda).
  • Сделана синхронной запись в system.crash_log при обработке сигналов. #87253 (Miсhael Stetsyuk).
  • Добавлена настройка inject_random_order_for_select_without_order_by, которая добавляет ORDER BY rand() в запросы SELECT верхнего уровня без оператора ORDER BY. #87261 (Rui Zhang).
  • Улучшено сообщение об ошибке в joinGet, чтобы оно корректно указывало, что количество join_keys не совпадает с количеством right_table_keys. #87279 (Isak Ellmer).
  • Добавлена возможность проверять stat произвольного узла Keeper в ходе транзакции записи. Это может помочь в обнаружении ABA-проблемы. #87282 (Mikhail Artemenko).
  • Перенаправлять ресурсоёмкие запросы ytsaurus на прокси для тяжёлых запросов. #87342 (MikhailBurdukov).
  • Исправляет откаты операций unlink/rename/removeRecursive/removeDirectory/etc, а также значения количества жёстких ссылок при любых возможных нагрузках для метаданных в дисковых транзакциях и упрощает интерфейсы, делая их более универсальными, чтобы их можно было повторно использовать в других хранилищах метаданных. #87358 (Mikhail Artemenko).
  • Добавлен конфигурационный параметр keeper_server.tcp_nodelay, который позволяет отключить TCP_NODELAY для Keeper. #87363 (Copilot).
  • Добавлена поддержка параметра --connection в clickhouse-benchmarks. Он работает так же, как в clickhouse-client: вы можете задать предопределённые подключения в клиентском config.xml/config.yaml в разделе connections_credentials, чтобы не указывать имя пользователя и пароль явно через аргументы командной строки. Добавлена поддержка параметра --accept-invalid-certificate в clickhouse-benchmark. #87370 (Azat Khuzhin).
  • Теперь настройка max_insert_threads будет применяться к таблицам Iceberg. #87407 (alesapin).
  • В PrometheusMetricsWriter добавлена поддержка гистограмм и многомерных метрик. Благодаря этому обработчик PrometheusRequestHandler получает все ключевые метрики и может использоваться для надежного сбора метрик с низкими накладными расходами в облаке. #87521 (Miсhael Stetsyuk).
  • Функция hasToken теперь возвращает ноль совпадений для пустого токена (в то время как раньше в этом случае выбрасывалось исключение). #87564 (Jimmy Aguilar Mena).
  • Добавлена поддержка текстового индекса для значений Array и Map (mapKeys и mapValues). Поддерживаемые функции: mapContainsKey и has. #87602 (Elmi Ahmadov).
  • Добавлена новая метрика ZooKeeperSessionExpired, показывающая количество истекших глобальных сессий ZooKeeper. #87613 (Miсhael Stetsyuk).
  • Теперь для серверного (нативного) копирования в место назначения бэкапа используется клиент хранилища S3 с настройками, специфичными для бэкапов (например, backup_slow_all_threads_after_retryable_s3_error). Настройка s3_slow_all_threads_after_retryable_error объявлена устаревшей. #87660 (Julia Kartseva).
  • Исправлена некорректная обработка настроек max_joined_block_size_rows и max_joined_block_size_bytes при сериализации плана запроса при использовании экспериментального make_distributed_plan. #87675 (Vladimir Cherkasov).
  • Настройка enable_http_compression теперь включена по умолчанию. Это означает, что если клиент поддерживает HTTP-сжатие, сервер будет его использовать. Однако у этого изменения есть определённые недостатки. Клиент может запросить ресурсоёмкий метод сжатия, такой как bzip2, что неоправданно и увеличит потребление ресурсов сервером (но это будет заметно только при передаче больших результатов). Клиент может запросить gzip, что не так уж плохо, но менее эффективно по сравнению с zstd. Закрывает #71591. #87703 (Alexey Milovidov).
  • Добавлена новая запись keeper_hosts в system.server_settings, которая отображает список хостов [Zoo]Keeper, к которым ClickHouse может подключаться. #87718 (Nikita Mikhaylov).
  • Добавлены значения from и to в системные дашборды для упрощения анализа исторических данных. #87823 (Mikhail f. Shiryaev).
  • Добавлена дополнительная информация для мониторинга производительности в запросах SELECT к Iceberg. #87903 (Daniil Ivanik).
  • Улучшение кэша файловой системы: повторное использование итератора приоритетов кэша между потоками, которые одновременно резервируют место в кэше. #87914 (Kseniia Sumarokova).
  • Добавлена возможность ограничивать размер запросов для Keeper (настройка max_request_size, аналогичная jute.maxbuffer для ZooKeeper, по умолчанию имеет значение OFF для обеспечения обратной совместимости; значение будет изменено в следующих релизах). #87952 (Azat Khuzhin).
  • Изменено поведение clickhouse-benchmark: по умолчанию трассировки стека больше не включаются в сообщения об ошибках. #87954 (Ahmed Gouda).
  • Избегайте использования асинхронной загрузки меток через пул потоков (load_marks_asynchronously=1), когда метки уже находятся в кэше (поскольку пул может быть под нагрузкой, и запросы понесут дополнительные накладные расходы даже при наличии меток в кэше). #87967 (Azat Khuzhin).
  • Ytsaurus: возможность создавать таблицы/табличные функции/словари с подмножеством столбцов. #87982 (MikhailBurdukov).
  • Теперь system.zookeeper_connection_log включён по умолчанию, и его можно использовать для получения информации о сессиях Keeper. #88011 (János Benjamin Antal).
  • Приведено к единообразию поведение TCP и HTTP при передаче дублирующихся внешних таблиц. HTTP позволяет передавать временную таблицу несколько раз. #88032 (Sema Checherinda).
  • Удалены кастомные MemoryPools для чтения Arrow/ORC/Parquet. Этот компонент, по-видимому, больше не нужен после #84082, так как теперь в любом случае отслеживаются все выделения памяти. #88035 (Nikita Mikhaylov).
  • Добавлена возможность создавать базу данных Replicated без аргументов. #88044 (Pervakov Grigorii).
  • clickhouse-keeper-client: Добавлена поддержка подключения к TLS-порту clickhouse-keeper; имена флагов сохранены такими же, как в clickhouse-client. #88065 (Pradeep Chhetri).
  • Добавлено новое событие профиля для отслеживания количества отклонённых фоновых слияний из‑за превышения лимита памяти. #88084 (Grant Holly).
  • Включает анализатор, проверяющий выражения значений по умолчанию столбцов в CREATE/ALTER TABLE. #88087 (Max Justus Spransy).
  • Внутреннее улучшение планировщика запросов: использовать JoinStepLogical для CROSS JOIN. #88151 (Vladimir Cherkasov).
  • Добавлены псевдонимы функций hasAnyTokens (hasAnyToken) и hasAllTokens (hasAllToken). #88162 (George Larionov).
  • Глобальный семплирующий профилировщик включён по умолчанию (то есть действует даже для серверных потоков, не связанных с запросами): он собирает стек-трейсы всех потоков каждые 10 секунд процессорного и реального времени. #88209 (Alexander Tokmakov).
  • Обновлён SDK Azure, чтобы включить исправление заголовка «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).
  • Исправлены таблицы в озере данных с percent-encoded последовательностью в имени. Закрывает #86626. #87020 (Anton Ivashkin).
  • Исправлено некорректное поведение IS NULL для столбцов типа Nullable в OUTER JOIN при использовании optimize_functions_to_subcolumns; закрыт #78625. #87058 (Vladimir Cherkasov).
  • Исправлен некорректный учет освобождений временных данных при отслеживании лимита max_temporary_data_on_disk_size, закрыт #87118. #87140 (JIaQi).
  • Функция checkHeaders теперь корректно проверяет переданные заголовки и отклоняет запрещённые. Автор исходной реализации: Michael Anastasakis (@michael-anastasakis). #87172 (Raúl Marín).
  • Делает поведение функций toDate и toDate32 одинаковым для всех числовых типов. Исправляет проверку на выход за нижнюю границу диапазона (underflow) для Date32 при приведении типа из int16. #87176 (Pervakov Grigorii).
  • Исправлена логическая ошибка при работе параллельных реплик в запросах с несколькими соединениями JOIN, в частности с RIGHT JOIN после LEFT/INNER JOIN. #87178 (Igor Nikonov).
  • Учитывать настройку input_format_try_infer_variants при работе кэша вывода схемы. #87180 (Pavel Kruglov).
  • Сделать так, чтобы функция pathStartsWith сопоставляла только пути, находящиеся под указанным префиксом. #87181 (Raúl Marín).
  • Исправлены логические ошибки в виртуальном столбце _row_number и в позиционированных операциях удаления для формата Iceberg. #87220 (Michael Kolupaev).
  • Исправлена ошибка LOGICAL_ERROR «Too large size passed to allocator» в операторе JOIN, возникавшая из-за сочетания константных и неконстантных блоков. #87231 (Azat Khuzhin).
  • Исправлены легковесные обновления с подзапросами, читающими из других таблиц типа MergeTree. #87285 (Anton Popov).
  • Исправлена оптимизация move-to-prewhere, которая не работала при действующей 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-настройками view или materialized view, если это представление было удалено асинхронно и сервер был перезапущен до завершения фоновой очистки. #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).
  • Исправлена ошибка чтения подстолбца карты с null из Variants, которые не могут находиться внутри Nullable. #87798 (Pavel Kruglov).
  • Исправлена обработка ошибки при невозможности полного удаления базы данных в кластере на вторичном узле. #87802 (Tuan Pham Anh).
  • Исправлены несколько ошибок в skip-индексах. #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).
  • Исправлено предупреждение «High ClickHouse memory usage» (без учёта page cache). #88092 (Azat Khuzhin).
  • Исправлена возможная порча данных в таблицах MergeTree с установленным TTL для столбца. #88095 (Anton Popov).
  • Исправлено возможное необработанное исключение при чтении system.tables при наличии некорректных таблиц во внешних базах данных (PostgreSQL/SQLite/...), подключённых к системе. #88105 (Azat Khuzhin).
  • Исправлен сбой в функциях mortonEncode и hilbertEncode при вызове с пустым кортежем в качестве аргумента. #88110 (xiaohuanlin).
  • Теперь запросы с ON CLUSTER будут выполняться быстрее при наличии неактивных реплик в кластере. #88153 (alesapin).
  • Теперь DDL-воркер очищает список реплик от устаревших хостов. Это уменьшит объём хранимых метаданных в ZooKeeper. #88154 (alesapin).
  • Исправлена работа ClickHouse без cgroups (случайно было введено требование наличия cgroups для асинхронных метрик). #88164 (Azat Khuzhin).
  • Корректно откатывать операцию перемещения каталога в случае ошибки. Необходимо перезаписывать все объекты prefix.path, изменённые во время выполнения операции, а не только корневой. #88198 (Mikhail Artemenko).
  • Исправлено распространение флага is_shared в ColumnLowCardinality. Это могло приводить к неверным результатам группировки, если после предварительного вычисления и кеширования хеш-значений в ReverseIndex в столбец вставлялось новое значение. #88213 (Nikita Taranov).
  • Исправлен параметр нагрузки max_cpu_share. Теперь его можно использовать без задания параметра нагрузки max_cpus. #88217 (Neerav).
  • Исправлена ошибка, из-за которой очень ресурсоёмкие мутации с подзапросами могли зависать на этапе подготовки. Теперь такие мутации можно остановить с помощью SYSTEM STOP MERGES. #88241 (alesapin).
  • Теперь коррелированные подзапросы работают с объектными хранилищами. #88290 (alesapin).
  • Не выполняйте попытки инициализировать базы данных DataLake во время доступа к system.projections и system.data_skipping_indices. #88330 (Azat Khuzhin).
  • Теперь каталоги дата-лейков будут отображаться в системных таблицах интроспекции только в том случае, если параметр show_data_lake_catalogs_in_system_tables явно включён. #88341 (alesapin).
  • Теперь DatabaseReplicated учитывает конфигурационный параметр interserver_http_host. #88378 (xiaohuanlin).
  • Позиционные аргументы теперь явно запрещены в контексте определения проекций, так как они не имеют смысла на этом внутреннем этапе обработки запроса. Это исправляет #48604. #88380 (Amos Bird).
  • Исправлена проблема с квадратичной сложностью в функции countMatches. Закрывает #88400. #88401 (Alexey Milovidov).
  • Сделать команды ALTER COLUMN ... COMMENT для таблиц KeeperMap реплицируемыми, чтобы они фиксировались в метаданных базы данных Replicated и распространялись на все реплики. Исправляет #88077. #88408 (Eduard Karacharov).
  • Исправлена ситуация ложной циклической зависимости с Materialized Views в Database Replicated, которая не позволяла добавлять новые реплики в базу данных. #88423 (Nikolay Degterinsky).
  • Исправлена агрегация разреженных столбцов, когда параметр group_by_overflow_mode имеет значение any. #88440 (Eduard Karacharov).
  • Исправлена ошибка «column not found» при использовании query_plan_use_logical_join_step=0 с несколькими операторами FULL JOIN USING. Закрывает #88103. #88473 (Vladimir Cherkasov).
  • Большие кластеры с числом узлов > 10 с высокой вероятностью завершают восстановление с ошибкой [941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 <Trace>: RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try again. Узел num_hosts перезаписывается множеством хостов одновременно. Исправление делает параметр, управляющий количеством попыток, динамическим. Закрывает #87721. #88484 (Mikhail f. Shiryaev).
  • Этот PR предназначен только для обеспечения совместимости с версиями 23.8 и более ранними. Проблема совместимости была вызвана этим PR: https://github.com/ClickHouse/ClickHouse/pull/54240. Этот SQL‑запрос завершится ошибкой при enable_analyzer=0 (до 23.8 он выполнялся нормально). #88491 (JIaQi).
  • Исправлено переполнение целого числа, обнаруживаемое UBSAN, в сообщении об ошибке accurateCast при преобразовании больших значений в DateTime. #88520 (xiaohuanlin).
  • Исправлен движок CoalescingMergeTree для типов Tuple. Это исправление закрывает #88469. #88526 (scanhex12).
  • Запрещены операции удаления для iceberg_format_version=1. Это закрывает #88444. #88532 (scanhex12).
  • Этот патч исправляет операцию перемещения для дисков plain-rewritable в папках произвольной глубины вложенности. #88586 (Mikhail Artemenko).
  • Исправлена работа SQL SECURITY DEFINER с функциями *cluster. #88588 (Julian Maicher).
  • Исправлено возможное падение сервера, вызванное конкурентной модификацией базовых константных столбцов PREWHERE. #88605 (Azat Khuzhin).
  • Исправлено чтение из текстового индекса и включён кэш условий запроса (при включённых настройках use_skip_indexes_on_data_read и use_query_condition_cache). #88660 (Anton Popov).
  • Исключение Poco::TimeoutException, возникающее в Poco::Net::HTTPChunkedStreamBuf::readFromDevice, приводит к аварийному завершению процесса с сигналом SIGABRT. #88668 (Miсhael Stetsyuk).
  • Было бэкпортировано в #88910: после восстановления реплика базы данных Replicated могла надолго зависать, выводя в лог сообщения вида Failed to marked query-0004647339 as finished (finished=No node, synced=No node), теперь это исправлено. #88671 (Alexander Tokmakov).
  • Исправлено добавление записей в system.zookeeper_connection_log при первом подключении ClickHouse после перезагрузки конфигурации. #88728 (Antonio Andelic).
  • Исправлена ошибка, при которой преобразование DateTime64 в Date при date_time_overflow_behavior = 'saturate' могло приводить к некорректным результатам для значений вне допустимого диапазона при использовании часовых поясов. #88737 (Manuel).
  • N-я попытка исправить ошибку «having zero bytes error» в движке таблицы S3 с включённым кэшем. #88740 (Kseniia Sumarokova).
  • Исправлена проверка прав доступа при выполнении запроса SELECT к табличной функции loop. #88802 (pufit).
  • Перехватывать исключения при ошибках асинхронного логирования, чтобы избежать аварийного завершения программы. #88814 (Raúl Marín).
  • Бэкпортировано в #89060: исправлена функция top_k, чтобы она учитывала параметр порога при вызове с одним аргументом. Закрывает #88757. #88867 (Manuel).
  • Бэкпортировано в #88944: исправлена ошибка в функции reverseUTF8. В предыдущих версиях она по ошибке инвертировала байты UTF-8 кодовых точек длиной 4 байта. Это исправляет #88913. #88914 (Alexey Milovidov).
  • Бэкпортировано в #88980: не проверять права доступа для SET DEFINER <current_user>:definer при создании представления с SQL SECURITY DEFINER. #88968 (pufit).
  • Бэкпортировано в #89058: исправлена ошибка LOGICAL_ERROR в L2DistanceTransposed(vec1, vec2, p), при которой оптимизация частичного чтения QBit некорректно удаляла Nullable из возвращаемого типа, если p был Nullable. #88974 (Raufs Dunamalijevs).
  • Бэкпортировано в #89167: исправлена ошибка, приводившая к падению при неизвестном типе каталога. Закрывает #88819. #88987 (scanhex12).
  • Бэкпортировано в #89028: Исправлено снижение производительности при анализе пропускающих индексов. #89004 (Anton Popov).

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

  • Использовать версию 18.0 библиотеки postgres. #87647 (Konstantin Bogdanov).
  • Включить ICU для FreeBSD. #87891 (Raúl Marín).
  • Использовать SSE 4.2, когда применяется динамическая диспетчеризация на SSE 4.2, а не на SSE 4. #88029 (Raúl Marín).
  • Не требовать флаг NO_ARMV81_OR_HIGHER, если Speculative Store Bypass Safe недоступен. #88051 (Konstantin Bogdanov).
  • Когда ClickHouse собран с ENABLE_LIBFIU=OFF, функции, связанные с failpoint, становятся операциями, не выполняющими действий (no-op), и больше не могут влиять на производительность. В этом случае запросы SYSTEM ENABLE/DISABLE FAILPOINT возвращают ошибку SUPPORT_IS_DISABLED. #88184 (c-end).

Релиз ClickHouse версии 25.9, 2025-09-25

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

  • Отключены бессмысленные бинарные операции с IPv4/IPv6: сложение/вычитание IPv4/IPv6 с нецелочисленным типом отключено. Ранее были допустимы операции с типами с плавающей точкой, а для некоторых других типов (таких как DateTime) возникали логические ошибки. #86336 (Raúl Marín).
  • Настройка allow_dynamic_metadata_for_data_lakes помечена как устаревшая. Теперь все таблицы Iceberg пытаются получить актуальную схему таблицы из хранилища перед выполнением каждого запроса. #86366 (Daniil Ivanik).
  • Изменён способ разрешения объединённого столбца из предложения OUTER JOIN ... USING для большей согласованности: ранее, при выборе и столбца из USING, и квалифицированных столбцов (a, t1.a, t2.a) в OUTER JOIN, столбец USING ошибочно разрешался в t1.a, показывая 0/NULL для строк из правой таблицы без соответствия слева. Теперь идентификаторы из предложения USING всегда разрешаются в объединённый столбец (coalesced column), тогда как квалифицированные идентификаторы разрешаются в необъединённые столбцы (non-coalesced), вне зависимости от того, какие ещё идентификаторы присутствуют в запросе. Например: ```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).
  • Добавлен новый параметр к движку таблицы S3 и табличной функции s3 с именем storage_class_name, который позволяет указывать интеллектуальный класс хранения, поддерживаемый AWS. Поддерживается как в формате ключ-значение, так и в позиционном формате (устаревшем). #87122 (alesapin).
  • ALTER UPDATE для табличного движка Iceberg. #86059 (scanhex12).
  • Добавлена системная таблица iceberg_metadata_log для получения файлов метаданных Iceberg во время выполнения команд SELECT. #86152 (scanhex12).
  • Таблицы Iceberg и DeltaLake поддерживают пользовательскую конфигурацию диска с помощью настройки уровня хранилища disk. #86778 (scanhex12).
  • Добавлена поддержка дисков Azure для озёр данных. #87173 (scanhex12).
  • Добавлена поддержка каталога Unity поверх хранилища Azure Blob Storage. #80013 (Smita Kulkarni).
  • Расширена поддержка форматов (ORC, Avro) при записи в Iceberg. Это закрывает #86179. #87277 (scanhex12).
  • Добавлена новая системная таблица database_replicas с информацией о репликах баз данных. #83408 (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).
  • Добавлены предупреждения о потреблении CPU и памяти в таблицу system.warnings. #86838 (Bharat Nallan).
  • Добавлена поддержка индикатора oneof во входных данных Protobuf. Для указания того, какой вариант oneof присутствует, может использоваться специальный столбец. Если сообщение содержит oneof и установлен параметр input_format_protobuf_oneof_presence, ClickHouse заполняет столбец, который указывает, какое поле oneof было найдено. #82885 (Ilya Golshtein).
  • Улучшено профилирование выделений памяти на основе внутреннего инструментария jemalloc. Глобальный профилировщик jemalloc теперь можно включить с помощью конфигурации jemalloc_enable_global_profiler. Выборочно собранные глобальные операции выделения и освобождения памяти могут сохраняться в system.trace_log с типом JemallocSample при включении конфигурации jemalloc_collect_global_profile_samples_in_trace_log. Профилирование jemalloc теперь можно включать для каждого запроса независимо, используя настройку jemalloc_enable_profiler. Сохранение выборок в system.trace_log можно контролировать на уровне отдельного запроса с помощью настройки jemalloc_collect_profile_samples_in_trace_log. Обновлён jemalloc до более новой версии. #85438 (Antonio Andelic).
  • Новый параметр, позволяющий удалять файлы при удалении таблиц Iceberg. Это закрывает #86211. #86501 (scanhex12).

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

  • Инвертированный текстовый индекс был полностью переработан, чтобы масштабироваться для работы с наборами данных, которые не помещаются в RAM. #86485 (Anton Popov).
  • Переупорядочивание JOIN теперь использует статистику. Функцию можно включить, установив allow_statistics_optimize = 1 и query_plan_optimize_join_order_limit = 10. #86822 (Han Fei).
  • alter table ... materialize statistics all теперь материализует всю статистику таблицы. #87197 (Han Fei).

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

  • Добавлена поддержка фильтрации частей данных с использованием skip-индексов при чтении для сокращения ненужных обращений к индексам. Управляется с помощью нового параметра use_skip_indexes_on_data_read (по умолчанию отключён). Тем самым решается задача #75774. Включает часть общей подготовительной работы, совместно используемой с #81021. #81526 (Amos Bird).
  • Добавлена оптимизация порядка выполнения JOIN, которая может автоматически менять порядок JOIN-ов для повышения производительности (управляется настройкой query_plan_optimize_join_order_limit). Обратите внимание, что оптимизация порядка JOIN в настоящее время имеет ограниченную поддержку статистики и в основном опирается на оценки количества строк от движков хранения — более продвинутый сбор статистики и оценка кардинальности будут добавлены в будущих релизах. Если после обновления вы сталкиваетесь с проблемами с JOIN-запросами, вы можете временно отключить новую реализацию, установив SET query_plan_use_new_logical_join_step = 0, и сообщить о проблеме для анализа. Замечание о разрешении идентификаторов из предложения USING: изменён способ разрешения объединённого столбца из предложения OUTER JOIN ... USING, чтобы сделать его более согласованным: ранее, при выборе и столбца из USING, и квалифицированных столбцов (a, t1.a, t2.a) в OUTER JOIN, столбец из USING некорректно разрешался в t1.a, показывая 0/NULL для строк из правой таблицы без соответствия слева. Теперь идентификаторы из предложения USING всегда разрешаются в объединённый столбец, в то время как квалифицированные идентификаторы разрешаются в необъединённые столбцы, независимо от того, какие другие идентификаторы присутствуют в запросе. Например: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) -- До: a=0, t1.a=0, t2.a=2 (некорректно — 'a' разрешался в t1.a) -- После: a=2, t1.a=0, t2.a=2 (корректно — 'a' является объединённым значением). #80848 (Vladimir Cherkasov).
  • Распределённый 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).
  • Повышена производительность вертикальных слияний после выполнения операции легковесного удаления. #86169 (Anton Popov).
  • Производительность HashJoin немного улучшена в случае LEFT/RIGHT JOIN с большим количеством несовпавших строк. #86312 (Nikita Taranov).
  • Сортировка Radix: помогает компилятору эффективнее использовать 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 при создании materialized view, например: 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, для которых возможна повторная попытка. Это изменение распространяет действие предыдущего SETTING 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 в отношении Catalog с повреждёнными метаданными. #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, materialized view, клиент 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).
  • Теперь мы записываем размеры BLOB-объектов для prefix.path при удалении директории на plain перезаписываемом диске. #86908 (alesapin).
  • Добавлена поддержка тестов производительности для удалённых инстансов ClickHouse, включая ClickHouse Cloud. Пример использования: tests/performance/scripts/perf.py tests/performance/math.xml --runs 10 --user <username> --password <password> --host <hostname> --port <port> --secure. #86995 (Raufs Dunamalijevs).
  • В некоторых местах, где известно, что выделяется значительный объем памяти (>16MiB) (сортировка, асинхронные вставки, журнал файлов), теперь соблюдаются ограничения на использование памяти. #87035 (Azat Khuzhin).
  • Выбрасывать исключение, если значение настройки network_compression_method не является поддерживаемым универсальным кодеком. #87097 (Robert Schulze).
  • Системная таблица system.query_cache теперь возвращает все записи кэша результатов запросов, тогда как ранее она возвращала только общие записи или неразделяемые записи того же пользователя и роли. Это приемлемо, поскольку неразделяемые записи не должны раскрывать результаты запросов, тогда как system.query_cache возвращает строки запросов. Это делает поведение системной таблицы более похожим на system.query_log. #87104 (Robert Schulze).
  • Включено вычисление с коротким замыканием для функции parseDateTime. #87184 (Pavel Kruglov).
  • Добавлен новый столбец statistics в таблицу system.parts_columns. #87259 (Han Fei).

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

  • Результаты ALTER-запросов теперь проверяются только на инициирующем узле для реплицируемых баз данных и таблиц с внутренней репликацией. Это исправит ситуации, когда уже зафиксированный ALTER-запрос мог застревать на других узлах. #83849 (János Benjamin Antal).
  • Ограничивается количество задач каждого типа в BackgroundSchedulePool. Это позволяет избежать ситуаций, когда все слоты заняты задачами одного типа, в то время как другие задачи не выполняются, а также предотвращает взаимоблокировки, когда задачи ждут друг друга. Это поведение настраивается параметром сервера background_schedule_pool_max_parallel_tasks_per_type_ratio. #84008 (Alexander Tokmakov).
  • Обеспечено корректное завершение работы таблиц при восстановлении реплики базы данных. Некорректное завершение приводило к возникновению LOGICAL_ERROR для некоторых движков таблиц во время восстановления реплики базы данных. #84744 (Antonio Andelic).
  • Проверять права доступа при формировании подсказок по исправлению опечаток в имени базы данных. #85371 (Dmitry Novik).
    1. Использование LowCardinality для столбцов Hive 2. Заполнять столбцы Hive перед виртуальными столбцами (требуется для https://github.com/ClickHouse/ClickHouse/pull/81040) 3. LOGICAL_ERROR при пустом формате для Hive #85528 4. Исправлена проверка, что столбцы партиции Hive являются единственными столбцами 5. Добавлена проверка (assert), что все столбцы 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).
  • Исправлено использование неверных значений по умолчанию для пути с подсказкой 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).
  • В DatabaseReplicatedSettings для logs_to_keep теперь используется NonZeroUInt64. #86142 (Tuan Pham Anh).
  • Исключение возникало при выполнении FINAL-запроса со skip index, если таблица (например, ReplacingMergeTree) была создана с параметром index_granularity_bytes = 0. Эта проблема теперь исправлена. #86147 (Shankar Iyer).
  • Удаляет неопределённое поведение (UB) и исправляет проблемы при разборе выражения партиции 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 с haystack типа FixedString и пустым needle. #86270 (Raúl Marín).
  • Исправлен сбой при выполнении ALTER UPDATE Nullable(JSON). #86281 (Pavel Kruglov).
  • Исправлена ошибка отсутствия определителя столбца в system.tables. #86295 (Raúl Marín).
  • Исправлено приведение типа из LowCardinality(Nullable(T)) к Dynamic. #86365 (Pavel Kruglov).
  • Исправлена логическая ошибка при записи в Delta Lake. Закрывает #86175. #86367 (Kseniia Sumarokova).
  • Исправлена ошибка с кодом 416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resource при чтении пустых blob-объектов из Azure Blob Storage для диска plain_rewritable. #86400 (Julia Kartseva).
  • Исправлена проблема с GROUP BY для Nullable(JSON). #86410 (Pavel Kruglov).
  • Исправлена ошибка в materialized view: представление могло не работать, если его создавали, удаляли, а затем снова создавали с тем же именем. #86413 (Alexander Tokmakov).
  • Выдавать ошибку, если все реплики недоступны при чтении с помощью функций *cluster. #86414 (Julian Maicher).
  • Устранена утечка MergesMutationsMemoryTracking, вызванная таблицами Buffer, а также исправлен query_views_log при потоковой загрузке из Kafka (и других источников). #86422 (Azat Khuzhin).
  • Исправлена работа SHOW TABLES после удаления ссылочной таблицы хранилища Alias. #86433 (RinChanNOW).
  • Исправлено отсутствие заголовка фрагмента при включённом send_chunk_header и вызове UDF по HTTP. #86469 (Vladimir Cherkasov).
  • Исправлена возможная взаимоблокировка при включённых сбросах профиля jemalloc. #86473 (Azat Khuzhin).
  • Исправлено чтение подстолбцов в движке таблицы DeltaLake. Закрывает #86204. #86477 (Kseniia Sumarokova).
  • Корректная обработка идентификатора loopback-хоста для предотвращения коллизий при обработке DDL-задач: #86479 (Tuan Pham Anh).
  • Исправлена работа операций DETACH/ATTACH для таблиц движка базы данных postgres со столбцами типов numeric/decimal. #86480 (Julian Maicher).
  • Исправлено использование неинициализированной памяти в функции getSubcolumnType. #86498 (Raúl Marín).
  • Функции searchAny и searchAll при вызове с пустыми строками поиска теперь возвращают true (то есть «совпадает со всем»). Ранее они возвращали false. (issue #86300). #86500 (Elmi Ahmadov).
  • Исправлена функция timeSeriesResampleToGridWithStaleness() при отсутствии значения в первом интервале. #86507 (Vitaly Baranov).
  • Исправлена ошибка, приводившая к сбою при установке merge_tree_min_read_task_size в 0. #86527 (yanglongwei).
  • При чтении формат для каждого файла данных теперь берётся из метаданных Iceberg (раньше он брался из аргументов таблицы). #86529 (Daniil Ivanik).
  • Игнорировать исключения при сбросе лога во время завершения работы и сделать процесс завершения более безопасным (чтобы избежать SIGSEGV). #86546 (Azat Khuzhin).
  • Исправлена ошибка в движке таблиц Backup, приводившая к возникновению исключения при запросах с файлами партиций нулевого размера. #86563 (Max Justus Spransy).
  • Исправлено отсутствие заголовка фрагмента при включённом параметре send_chunk_header и вызове UDF по протоколу HTTP. #86606 (Vladimir Cherkasov).
  • Исправлена логическая ошибка в S3Queue "Expected current processor to be equal to ", возникавшая из‑за истечения срока действия keeper‑сессии. #86615 (Kseniia Sumarokova).
  • Ошибки обработки Nullable при вставке данных и отсечении. Это закрывает #86407. #86630 (scanhex12).
  • Не отключайте кэш файловой системы, если отключён кэш метаданных Iceberg. #86635 (Daniil Ivanik).
  • Исправлена ошибка 'Deadlock in Parquet::ReadManager (single-threaded)' в parquet reader v3. #86644 (Michael Kolupaev).
  • Исправлена поддержка IPv6 в параметре listen_host для ArrowFlight. #86664 (Vitaly Baranov).
  • Исправлено завершение работы обработчика ArrowFlight. Этот PR исправляет #86596. #86665 (Vitaly Baranov).
  • Исправлена работа распределённых запросов при describe_compact_output=1. #86676 (Azat Khuzhin).
  • Исправлены ошибки при разборе определений окон и применении параметров запроса. #86720 (Azat Khuzhin).
  • Устранено исключение Partition strategy wildcard can not be used without a '_partition_id' wildcard. при создании таблицы с PARTITION BY, но без подстановочного символа партиции, что работало в версиях до 25.8. Закрывает https://github.com/ClickHouse/clickhouse-private/issues/37567. #86748 (Kseniia Sumarokova).
  • Исправлена ошибка LogicalError, возникавшая, когда параллельные запросы пытались получить одну общую блокировку. #86751 (Pervakov Grigorii).
  • Исправлена запись значения NULL в общие JSON‑данные во входном формате RowBinary и добавлены дополнительные проверки в ColumnObject. #86812 (Pavel Kruglov).
  • Исправлена ошибка при перестановке пустого Tuple с LIMIT. #86828 (Pavel Kruglov).
  • Не используйте отдельный узел Keeper для узлов persistent processing. Исправление для https://github.com/ClickHouse/ClickHouse/pull/85995. Закрывает #86406. #86841 (Kseniia Sumarokova).
  • Исправлена проблема в таблице с движком TimeSeries, из-за которой не удавалось создать новую реплику в реплицируемой базе данных. #86845 (Nikolay Degterinsky).
  • Исправлена ошибка при выполнении запросов к system.distributed_ddl_queue в случаях, когда у заданий отсутствуют некоторые узлы Keeper. #86848 (Antonio Andelic).
  • Исправлено позиционирование в конце декомпрессированного блока. #86906 (Pavel Kruglov).
  • Добавлена обработка исключения, выбрасываемого во время асинхронного выполнения Iceberg Iterator. #86932 (Daniil Ivanik).
  • Исправлена проблема с сохранением больших предварительно обработанных XML‑конфигов. #86934 (c-end).
  • Исправлено заполнение поля даты в таблице 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 (Konstantин 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, которые после выполнения DROP оставляли данные в ZooKeeper. #87112 (Nikolay Degterinsky).
  • Исправлено чтение идентификаторов полей maps и arrays при чтении файлов 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

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

  • Для массивов значений с разными типами в JSON теперь выводится тип Array(Dynamic) вместо безымянного Tuple. Чтобы использовать прежнее поведение, отключите настройку input_format_json_infer_array_of_dynamic_from_array_of_different_types. #80859 (Pavel Kruglov).
  • Метрики задержки S3 перенесены в гистограммы для однородности и упрощения. #82305 (Miсhael Stetsyuk).
  • Теперь требуются обратные кавычки вокруг идентификаторов с точками в выражениях по умолчанию, чтобы предотвратить их разбор как составных идентификаторов. #83162 (Pervakov Grigorii).
  • Ленивая материализация включена только при использовании analyzer (это значение по умолчанию), чтобы избежать сопровождения режима без analyzer, который, по нашему опыту, имеет ряд проблем (например, при использовании indexHint() в условиях). #83791 (Igor Nikonov).
  • По умолчанию значения типа Enum в формате вывода Parquet записываются как BYTE_ARRAY с логическим типом ENUM. #84169 (Pavel Kruglov).
  • По умолчанию включена настройка MergeTree write_marks_for_substreams_in_compact_parts. Это значительно улучшает производительность чтения подстолбцов из вновь создаваемых Compact-частей. Серверы версии ниже 25.5 не смогут читать новые Compact-части. #84171 (Pavel Kruglov).
  • Предыдущее значение по умолчанию для concurrent_threads_scheduler было round_robin, что оказалось несправедливым в условиях большого числа однопоточных запросов (например, INSERT). Это изменение делает более безопасный планировщик fair_round_robin значением по умолчанию. #84747 (Sergei Trifonov).
  • ClickHouse поддерживает heredoc-синтаксис в стиле PostgreSQL: $tag$ string contents... $tag$, также известный как dollar-quoted строковые литералы. В предыдущих версиях существовало меньше ограничений на теги: они могли содержать произвольные символы, включая пунктуацию и пробелы. Это приводило к неоднозначности при разборе с идентификаторами, которые также могут начинаться с символа доллара. При этом PostgreSQL разрешает в тегах только символьные (word) символы. Для решения проблемы мы теперь ограничиваем теги 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).
  • Добавлена поддержка позиционных удалений для Iceberg TableEngine. #83094 (Daniil Ivanik).
  • Добавлена поддержка Iceberg Equality Deletes. #85843 (Han Fei).
  • Поддержка записи в Iceberg для операций CREATE. Закрывает #83927. #83983 (Konstantin Vedernikov).
  • Каталоги Glue для записи. #84136 (Konstantin Vedernikov).
  • REST-каталоги Iceberg для записи. #84684 (Konstantin Vedernikov).
  • Добавлена возможность объединять все файлы позиционных удалений Iceberg в файлы с данными. Это сокращает количество и размеры файлов Parquet в хранилище Iceberg. Синтаксис: OPTIMIZE TABLE table_name. #85250 (Konstantин Vedernikov).
  • Поддержка команды DROP TABLE для Iceberg (удаление таблицы из каталогов REST/Glue и связанных метаданных). #85395 (Konstantin Vedernikov).
  • Добавлена поддержка мутаций ALTER DELETE для Iceberg в формате merge-on-read. #85549 (Konstantин Ведерников).
  • Добавлена поддержка записи в DeltaLake. Закрывает #79603. #85564 (Kseniia Sumarokova).
  • Добавлена настройка delta_lake_snapshot_version для чтения конкретной версии снимка (snapshot) в табличном движке DeltaLake. #85295 (Kseniia Sumarokova).
  • Записывать больше статистики для Iceberg (размеры столбцов, нижние и верхние границы) в метаданные (записи манифеста) для минимакс-прюнинга. #85746 (Konstantin Vedernikov).
  • Поддержка операций добавления, удаления и изменения столбцов в 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 («dead letter queue»). #68873 (Ilya Golshtein).
  • Добавлена новая команда SYSTEM RESTORE DATABASE REPLICA для реплицируемых баз данных, аналогичная существующей функциональности восстановления в ReplicatedMergeTree. #73100 (Konstantin 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 для рабочих нагрузок и обеспечивает максиминное справедливое распределение процессорного времени между ними. Добавлены новые настройки рабочих нагрузок для ограничения использования 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).
  • Добавлены две новые функции для работы с временными рядами: - timeSeriesRange(start_timestamp, end_timestamp, step), - timeSeriesFromGrid(start_timestamp, end_timestamp, step, values). #85435 (Vitaly Baranov).
  • Добавлен новый синтаксис GRANT READ ON S3('s3://foo/.*') TO user. #84503 (pufit).
  • Добавлен новый формат вывода Hash. Он вычисляет единое хеш-значение для всех столбцов и строк результата. Это полезно для вычисления «отпечатка» результата, например, в сценариях, когда передача данных является узким местом. Пример: SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hash возвращает e5f9e676db098fdb9530d2059d8c23ef. #84607 (Robert Schulze).
  • Добавлена возможность настройки произвольных наблюдателей в запросах Keeper Multi. #84964 (Mikhail Artemenko).
  • Добавлен параметр --max-concurrency для инструмента clickhouse-benchmark, позволяющий включить режим с постепенным увеличением числа параллельных запросов. #85623 (Sergei Trifonov).
  • Добавлена поддержка частично агрегированных метрик. #85328 (Mikhail Artemenko).

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

  • Поддержка коррелированных подзапросов включена по умолчанию, они больше не являются экспериментальными. #85107 (Dmitry Novik).
  • Каталоги озер данных Unity, Glue, REST и Hive Metastore переведены из экспериментального режима в бета-режим. #85848 (Melvyn Peignon).
  • Легковесные обновления и удаления переведены из экспериментального режима в бета-режим.
  • Приблизительный поиск по векторам с индексами сходства векторов теперь общедоступен (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 и векторным индексам (из-за простоты и селективности соответственно), а затем — небольшим индексам. Среди индексов minmax/векторных индексов также отдается предпочтение более мелким индексам. #84094 (Maruth Goyal).
  • По умолчанию включена настройка движка MergeTree write_marks_for_substreams_in_compact_parts. Она значительно улучшает производительность чтения подстолбцов из вновь созданных Compact-частей. Серверы с версией ниже 25.5 не смогут читать новые Compact-части. #84171 (Pavel Kruglov).
  • Движок таблицы azureBlobStorage: кэшировать и повторно использовать токены аутентификации для Managed Identity, когда это возможно, чтобы избежать ограничения частоты запросов. #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).
  • Для комбинаторов If реализована функция addManyDefaults, поэтому агрегатные функции с комбинаторами 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).
  • Во внутреннем механизме delta-kernel-rs реализована фильтрация (статистика и отсечение партиций) в хранилище DeltaLake. #84006 (Kseniia Sumarokova).
  • Более тонко управляется отключение пропускающих индексов, которые зависят от столбцов, обновляемых «на лету» или посредством patch parts. Теперь пропускающие индексы не используются только в тех частях, на которые повлияли мутации «на лету» или patch parts; ранее такие индексы отключались для всех частей. #84241 (Anton Popov).
  • Выделять минимально необходимый объём памяти под encrypted_buffer для зашифрованных именованных коллекций. #84432 (Pablo Marcos).
  • Улучшена поддержка индексов блум-фильтра (обычных, ngram и token) для их использования, когда первым аргументом выступает константный массив (множество), а вторым — индексируемый столбец (подмножество), что позволяет более эффективно выполнять запросы. #84700 (Doron David).
  • Снижена конкуренция за блокировку хранилища в Keeper. #84732 (Antonio Andelic).
  • Добавлена недостающая поддержка read_in_order_use_virtual_row в WHERE. Это позволяет пропускать чтение дополнительных частей для запросов с фильтрами, которые не были полностью перенесены в PREWHERE. #84835 (Nikolai Kochetov).
  • Обеспечивает асинхронный обход объектов таблицы Iceberg без явного хранения объектов для каждого файла данных. #85369 (Daniil Ivanik).
  • Теперь некоррелированный EXISTS выполняется в виде скалярного подзапроса. Это позволяет использовать кэш скалярных подзапросов и выполнять константное свёртывание результата, что полезно для индексов. Для совместимости добавлена новая настройка execute_exists_as_scalar_subquery=1. #85481 (Nikolai Kochetov).

Улучшения

  • Добавлены настройки database_replicated, задающие значения по умолчанию для DatabaseReplicatedSettings. Если параметр не указан в запросе CREATE DATABASE для реплицируемой БД, используется значение из этой настройки. #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 и обновлено его значение по умолчанию с 64KB до 256KB, чтобы оно соответствовало Spark и Hive. #80602 (李扬).
  • Добавлен файл columns_substreams.txt в Wide-часть для отслеживания всех подпотоков, хранящихся в части. Это помогает отслеживать динамические потоки в типах JSON и Dynamic и тем самым позволяет избежать чтения образца данных этих столбцов для получения списка динамических потоков (например, для расчёта размеров столбцов). Также теперь все динамические потоки отражены в system.parts_columns. #81091 (Pavel Kruglov).
  • Добавлен флаг CLI --show_secrets для clickhouse format; теперь конфиденциальные данные по умолчанию скрываются. #81524 (Nikolai Ryzhov).
  • Запросы чтения и записи в S3 теперь ограничиваются по скорости на уровне HTTP‑сокета (а не всего запроса к S3), чтобы избежать проблем с ограничением пропускной способности max_remote_read_network_bandwidth_for_server и max_remote_write_network_bandwidth_for_server. #81837 (Sergei Trifonov).
  • Разрешено смешивать разные правила сортировки (collation) для одного и того же столбца в разных окнах (для оконных функций). #82877 (Yakov Olkhovskiy).
  • Добавлен инструмент для моделирования, визуализации и сравнения селекторов слияния. #71496 (Sergei Trifonov).
  • Добавлена поддержка табличных функций remote* с параллельными репликами, если кластер задан в аргументе address_expression. Также исправлена ошибка #73295. #82904 (Igor Nikonov).
  • Установлен уровень TRACE для всех сообщений журнала, связанных с записью файлов резервных копий. #82907 (Hans Krutzer).
  • Пользовательские функции с необычными именами и кодеками могут некорректно форматироваться SQL-форматировщиком. Это изменение закрывает задачу #83092. #83644 (Alexey Milovidov).
  • Теперь можно использовать типы Time и Time64 внутри типа JSON. #83784 (Yarik Briukhovetskyi).
  • Операторы JOIN с параллельными репликами теперь используют логический шаг соединения. В случае любых проблем с запросами JOIN, использующими параллельные реплики, попробуйте выполнить SET query_plan_use_new_logical_join_step=0 и сообщите о проблеме. #83801 (Vladimir Cherkasov).
  • Исправлена проблема совместимости для cluster_function_process_archive_on_multiple_nodes. #83968 (Kseniia Sumarokova).
  • Добавлена поддержка изменения настроек вставки в материализованные представления на уровне таблицы S3Queue. Добавлены новые настройки для S3Queue: min_insert_block_size_rows_for_materialized_views и min_insert_block_size_bytes_for_materialized_views. По умолчанию будут использоваться настройки на уровне профиля, а настройки уровня S3Queue будут их переопределять. #83971 (Kseniia Sumarokova).
  • Добавлено событие профиля MutationAffectedRowsUpperBound, которое показывает количество затронутых строк в мутации (например, общее количество строк, удовлетворяющих условию в запросе ALTER UPDATE или ALTER DELETE). #83978 (Anton Popov).
  • Используется информация из cgroup (если применимо, т.е. когда доступны memory_worker_use_cgroup и cgroups) для корректировки счетчика памяти (memory_worker_correct_memory_tracker). #83981 (Azat Khuzhin).
  • MongoDB: неявное преобразование строк в числовые типы. Ранее если строковое значение поступало из источника MongoDB для числового столбца в таблице ClickHouse, выбрасывалось исключение. Теперь движок пытается автоматически извлечь и преобразовать числовое значение из строки. Закрывает #81167. #84069 (Kirill Nikiforov).
  • Подсвечивать группы цифр в форматах Pretty для чисел с типом Nullable. #84070 (Alexey Milovidov).
  • Dashboard: подсказка больше не будет выходить за пределы контейнера сверху. #84072 (Alexey Milovidov).
  • Чуть более аккуратные точки на дашборде. #84074 (Alexey Milovidov).
  • У Dashboard теперь немного лучше значок (favicon). #84076 (Alexey Milovidov).
  • Web UI: Добавлена возможность браузерам сохранять пароль. Также теперь будут запоминаться значения URL. #84087 (Alexey Milovidov).
  • Добавлена поддержка применения дополнительного ACL для конкретных узлов Keeper с помощью настройки apply_to_children. #84137 (Antonio Andelic).
  • Исправлено использование сериализации дискриминаторов Variant в формате "compact" в MergeTree. Ранее она в ряде случаев не применялась, хотя могла бы. #84141 (Pavel Kruglov).
  • Добавлен серверный параметр logs_to_keep в настройки реплицируемых баз данных, который позволяет изменять значение параметра logs_to_keep по умолчанию для таких баз. Меньшие значения уменьшают количество ZNodes (особенно если баз данных много), а большие значения позволяют отсутствующей реплике догнать кластер спустя более продолжительное время. #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<Metric>, а метрики на уровне ОС (собираемые из procfs) — имена OS<Metric>. #84317 (Nikita Taranov).
  • Немного улучшены графики в Web UI. Незначительно, но всё же лучше. #84326 (Alexey Milovidov).
  • Изменено значение по умолчанию для настройки базы данных Replicated 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).
  • Добавлена поддержка версии снимка для движков таблиц озер данных. #84659 (Pete Hampton).
  • Добавлена размерная метрика для ConcurrentBoundedQueue с метками по типу очереди (то есть для чего используется очередь) и идентификатору очереди (то есть случайно сгенерированному идентификатору текущего экземпляра очереди). #84675 (Miсhael Stetsyuk).
  • Таблица system.columns теперь содержит столбец column, являющийся псевдонимом для существующего столбца name. #84695 (Yunchi Pang).
  • Новая настройка MergeTree search_orphaned_parts_drives для ограничения области поиска частей (например, только диски с локальными метаданными). #84710 (Ilya Golshtein).
  • Добавлена 4LW-команда Keeper lgrq для включения и отключения логирования входящих запросов. #84719 (Antonio Andelic).
  • Сопоставлять заголовки внешней аутентификации forward_headers без учета регистра. #84737 (ingodwerust).
  • Инструмент encrypt_decrypt теперь поддерживает шифрованные подключения к ZooKeeper. #84764 (Roman Vasin).
  • Добавлен столбец с форматной строкой в system.errors. Этот столбец нужен для группировки по одному и тому же типу ошибки в правилах оповещения. #84776 (Miсhael Stetsyuk).
  • Обновлён clickhouse-format: добавлена поддержка --highlight в качестве синонима для --hilite. - Обновлён clickhouse-client: добавлена поддержка --hilite в качестве синонима для --highlight. - Обновлена документация clickhouse-format с учётом этого изменения. #84806 (Rishabh Bhardwaj).
  • Исправлено чтение данных Iceberg по идентификаторам полей для сложных типов. #84821 (Konstantin Vedernikov).
  • Добавлена новая настройка backup_slow_all_threads_after_retryable_s3_error для снижения нагрузки на S3 во время «штормов» повторных попыток, вызванных ошибками, такими как SlowDown, за счет замедления работы всех потоков после появления первой повторяемой ошибки. #84854 (Julia Kartseva).
  • Теперь пропускается создание и переименование старой временной таблицы для не-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 хранит все данные в оперативной памяти. Это может быть довольно накладно, если файлы позиционного удаления большие, что нередко бывает. Моя реализация хранит в памяти только последнюю группу строк (row-group) файлов удаления формата Parquet, что существенно дешевле. #85329 (Konstantin Vedernikov).
  • chdig: исправлены артефакты, остающиеся на экране, устранён сбой после редактирования запроса в редакторе, поиск editor в PATH, обновлён до версии 25.8.1. #85341 (Azat Khuzhin).
  • Добавлен недостающий параметр partition_columns_in_data_file в конфигурацию Azure. #85373 (Arthur Passos).
  • Разрешить нулевой шаг в функциях семейства timeSeries*ToGrid. Это часть #75036. #85390 (Vitaly Baranov).
  • Добавлен флаг show_data_lake_catalogs_in_system_tables для управления добавлением таблиц озер данных в system.tables. Исправлена проблема #85384. #85411 (Smita Kulkarni).
  • Добавлена поддержка расширения макросов в remote_fs_zero_copy_zookeeper_path. #85437 (Mikhail Koviazin).
  • AI в clickhouse-client станет выглядеть немного лучше. #85447 (Alexey Milovidov).
  • Включить trace_log.symbolize по умолчанию для существующих развертываний. #85456 (Azat Khuzhin).
  • Расширена поддержка составных идентификаторов, охватывается большее число случаев. В частности, улучшена совместимость ARRAY JOIN со старым анализатором. Добавлена новая настройка analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested для сохранения прежнего поведения. #85492 (Nikolai Kochetov).
  • При получении информации о размерах столбцов таблиц из system.columns игнорировать UNKNOWN_DATABASE. #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).

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

  • Этот PR исправляет определение метаданных при выполнении запросов к таблицам Iceberg через REST‑каталог. ... #80562 (Saurabh Kumar Ojha).
  • Исправлена работа markReplicasActive в DDLWorker и DatabaseReplicatedDDLWorker. #81395 (Tuan Pham Anh).
  • Исправлен механизм отката Dynamic column при ошибке парсинга. #82169 (Pavel Kruglov).
  • Если функция trim вызывается только с константными аргументами, теперь она возвращает константную строку-результат. (Ошибка #78796). #82900 (Robert Schulze).
  • Исправлена логическая ошибка с дублирующимися подзапросами при включённой настройке optimize_syntax_fuse_functions, закрыт #75511. #83300 (Vladimir Cherkasov).
  • Исправлен некорректный результат выполнения запросов с подзапросом в условии WHERE ... IN (<subquery>) при включённом кэше условий запроса (настройка use_query_condition_cache). #83445 (LB7666).
  • Ранее функция gcs не требовала никаких прав доступа для использования. Теперь при её использовании будет проверяться наличие привилегии GRANT READ ON S3. Закрывает #70567. #83503 (pufit).
  • Пропускать недоступные узлы при выполнении INSERT SELECT из s3Cluster() в реплицируемый MergeTree. #83676 (Igor Nikonov).
  • Исправлена обработка записей с добавлением (append) в MergeTree, используемом для экспериментальных транзакций, с типами метаданных plain_rewritable/plain, которые ранее просто игнорировались. #83695 (Tuan Pham Anh).
  • Скрывать данные аутентификации для Avro schema registry, чтобы они не отображались пользователю и не попадали в логи. #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 для случая сочетания const- и неконстантных аргументов. #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, возникающее, когда таблица содержит проекцию, 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, за которыми следует RIGHT JOIN. Не используйте параллельные реплики для таких запросов. #84299 (Vladimir Cherkasov).
  • Ранее индексы set не учитывали столбцы типа Nullable при проверке того, проходят ли гранулы фильтр (issue #75485). #84305 (Elmi Ahmadov).
  • Теперь ClickHouse читает таблицы из Glue Catalog, в которых тип таблицы указан в нижнем регистре. #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).
  • Исправлена проблема с нарушением порядка записей в changelog Keeper. Ранее могли выполняться незавершённые записи в changelog, но операция отката могла приводить к конкурентному изменению целевого файла. Это приводило к неконсистентным логам и возможной потере данных. #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).
  • Исправлена проблема с отсечением столбцов с 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).
  • Исправлено общее количество наблюдений, возвращаемое Keeper. #84890 (Antonio Andelic).
  • Исправлена работа легковесных обновлений для таблиц с движком ReplicatedMergeTree, созданных на серверах с версией ниже 25.7. #84933 (Anton Popov).
  • Исправлены легковесные обновления для таблиц с движком MergeTree без репликации после выполнения запроса ALTER TABLE ... REPLACE PARTITION. #84941 (Anton Popov).
  • Исправлена генерация названий столбцов для логических литералов: теперь используются "true"/"false" вместо "1"/"0", что предотвращает конфликты названий столбцов между логическими и целочисленными литералами в запросах. #84945 (xiaohuanlin).
  • Исправлен дрейф отслеживания памяти в фоновом пуле планировщика и исполнителе. #84946 (Azat Khuzhin).
  • Исправлены потенциальные ошибки сортировки в движке таблиц Merge. #85025 (Xiaozhe Yu).
  • Реализованы недостающие API для DiskEncrypted. #85028 (Azat Khuzhin).
  • Добавлена проверка при использовании коррелированного подзапроса в распределённом контексте, чтобы избежать сбоя. Исправляет #82205. #85030 (Dmitry Novik).
  • Теперь Iceberg больше не пытается кэшировать соответствующую версию snapshot между запросами select и всегда заново определяет snapshot. Предыдущая попытка кэшировать snapshot Iceberg приводила к проблемам при использовании таблиц Iceberg с функцией time travel. #85038 (Daniil Ivanik).
  • Исправлена ошибка двойного освобождения памяти в AzureIteratorAsync. #85064 (Nikita Taranov).
  • Улучшено сообщение об ошибке при попытке создать USER, идентифицированного по JWT. #85072 (Konstantin Bogdanov).
  • Исправлена очистка патч-частей в ReplicatedMergeTree. Ранее результат легковесного обновления мог временно не отображаться на реплике до тех пор, пока слитая или мутированная часть, материализующая патч-части, не будет загружена с другой реплики. #85121 (Anton Popov).
  • Исправлена ошибка illegal_type_of_argument при использовании mv с разными типами данных. #85135 (Sema Checherinda).
  • Исправлен segfault в реализации 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).
  • Исправлено состояние гонки в реализации движка DeltaLake на основе delta-kernel. #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 (Konstantин Vedernikov).
  • Запись нижней и верхней границ не поддерживается для сложных типов данных. #85332 (Konstantin Vedernikov).
  • Исправлена логическая ошибка при чтении функциями object storage через distributed таблицу или функцию remote. Исправляет ошибки: #84658, #85173, #52022. #85359 (alesapin).
  • Исправлено резервное копирование частей с повреждёнными проекциями. #85362 (Antonio Andelic).
  • Запрещено использование столбца _part_offset в PROJECTION в релизах до его стабилизации. #85372 (Sema Checherinda).
  • Исправлена проблема, приводившая к сбою и повреждению данных при выполнении ALTER UPDATE для JSON. #85383 (Pavel Kruglov).
  • Запросы с параллельными репликами, которые используют оптимизацию чтения в обратном порядке, могут давать некорректный результат. #85406 (Igor Nikonov).
  • Исправлено возможное неопределённое поведение (UB), приводившее к сбоям, в случае ошибки MEMORY_LIMIT_EXCEEDED во время десериализации String. #85440 (Azat Khuzhin).
  • Исправлены некорректные метрики KafkaAssignedPartitions и KafkaConsumersWithAssignment. #85494 (Ilya Golshtein).
  • Исправлено занижение статистики по обработанным байтам при использовании PREWHERE (явного или автоматического). #85495 (Michael Kolupaev).
  • Исправлено условие раннего выхода для замедления скорости запросов к S3: теперь для включения механизма замедления, когда все потоки приостановлены из-за повторяемой ошибки, достаточно, чтобы либо s3_slow_all_threads_after_network_error, либо backup_slow_all_threads_after_retryable_s3_error были установлены в true, вместо необходимости выполнения обоих условий одновременно. #85505 (Julia Kartseva).
  • Этот pull request исправляет проблему с разрешением метаданных при выполнении запросов к таблицам 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).
  • Исправлено чтение значения count из кэша для Delta Lake. #85704 (Kseniia Sumarokova).
  • Исправлен segfault в CoalescingMergeTree при обработке больших строк. Это изменение закрывает #84582. #85709 (Konstantin Vedernikov).
  • Обновлена метка времени метаданных при записях в Iceberg. #85711 (Konstantin Vedernikov).
  • Использование distributed_depth в качестве индикатора для функции *Cluster было ошибочным и могло приводить к дублированию данных; вместо этого используйте client_info.collaborate_with_initiator. #85734 (Konstantin Bogdanov).
  • Spark не может читать файлы удаления по позициям. #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 (Konstantин Bogdanov).
  • Исправлены HTTP-запросы, выполняемые табличной функцией url(), которые теперь корректно включают номера портов в заголовок Host при обращении к нестандартным портам. Это устраняет сбои аутентификации при использовании предподписанных URL-адресов с S3-совместимыми сервисами, такими как MinIO, работающими на нестандартных портах, что типично для сред разработки. (Исправляет #85898). #85921 (Tom Quist).
  • Теперь Unity Catalog будет игнорировать схемы с некорректными типами данных для таблиц, не относящихся к формату Delta. Исправляет #85699. #85950 (alesapin).
  • Исправлена корректность признаков допуска NULL для полей в Iceberg. #85977 (Konstantin Vedernikov).
  • Исправлена ошибка восстановления базы данных Replicated: если имя таблицы содержало символ %, при восстановлении таблица могла быть воссоздана под другим именем. #85987 (Alexander Tokmakov).
  • Исправлена ошибка, из‑за которой восстановление резервной копии завершалось с ошибкой BACKUP_ENTRY_NOT_FOUND при восстановлении пустой таблицы Memory. #86012 (Julia Kartseva).
  • Добавлены проверки для sharding_key при выполнении ALTER для distributed таблицы. Ранее некорректный ALTER портил определение таблицы и требовал перезапуска сервера. #86015 (Nikolay Degterinsky).
  • Не создавать пустой файл удаления Iceberg. #86061 (Konstantin Vedernikov).
  • Исправлена ошибка, из-за которой большие значения настроек нарушали работу таблиц S3Queue и вызывали перезапуск реплики. #86074 (Nikolay Degterinsky).

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

  • По умолчанию для тестов с S3 теперь используются зашифрованные диски. #59898 (Nikita Mikhaylov).
  • В интеграционных тестах используется исполняемый файл clickhouse, чтобы получать отладочные символы без вырезки. #83779 (Mikhail f. Shiryaev).
  • Обновлена встроенная библиотека libxml2 с версии 2.14.4 до 2.14.5. #84230 (Robert Schulze).
  • Обновлён встроенный curl с версии 8.14.0 до 8.15.0. #84231 (Robert Schulze).
  • Теперь в CI для кэшей используется меньше памяти и добавлены более качественные тесты механизма вытеснения. #84676 (alesapin).

Выпуск ClickHouse 25.7, 2025-07-24

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

  • Изменения в функции extractKeyValuePairs: добавлен новый аргумент unexpected_quoting_character_strategy, который управляет тем, что происходит, когда quoting_character неожиданно обнаруживается при чтении ключа или значения без кавычек. Значение может быть одним из: invalid, accept или promote. invalid отбросит ключ и вернётся в состояние ожидания ключа. accept будет трактовать его как часть ключа. promote отбросит предыдущий символ и начнёт разбор как ключа в кавычках. Кроме того, после разбора значения в кавычках следующий ключ будет анализироваться только в том случае, если найден разделитель пары. #80657 (Arthur Passos).
  • Поддержка совпадения нулевой длины в функции countMatches. Пользователи, которые хотят сохранить старое поведение, могут включить настройку count_matches_stop_at_empty_match. #81676 (Elmi Ahmadov).
  • Использование серверных ограничителей пропускной способности (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 (Konstantин Vedernиков).
  • Введены два новых типа доступа к источникам: 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 (Content-Type), возможности автоматического вывода схемы и т. д. #81505 (Alexey Milovidov).

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

  • Добавлены функции searchAny и searchAll, которые являются универсальными инструментами для поиска по текстовым индексам. #80641 (Elmi Ahmadov).
  • Текстовый индекс теперь поддерживает новый токенизатор split. #81752 (Elmi Ahmadov).
  • Изменено значение гранулярности индекса по умолчанию для текстовых индексов text на 64. Это улучшает ожидаемую производительность среднего тестового запроса во внутренних бенчмарках. #82162 (Jimmy Aguilar Mena).
  • 256-битовая битовая карта хранит исходящие метки состояния в упорядоченном виде, однако исходящие состояния сохраняются на диск в том порядке, в котором они появляются в хеш-таблице. Поэтому при чтении с диска метка может указывать на неверное следующее состояние. #82783 (Elmi Ahmadov).
  • Включено сжатие zstd для blob-а дерева FST в текстовых индексах. #83093 (Elmi Ahmadov).
  • Индекс векторного сходства переведён в статус бета-версии. Добавлен псевдоним настройки enable_vector_similarity_index, которую необходимо включить для использования индекса векторного сходства. #83459 (Robert Schulze).
  • Удалена экспериментальная логика send_metadata, связанная с экспериментальной репликацией без копирования (zero-copy). Она никогда не использовалась и код никто не поддерживает. Поскольку для неё не было даже тестов, велика вероятность, что она уже давно сломана. #82508 (alesapin).
  • Интегрирован StorageKafka2 в system.kafka_consumers. #82652 (János Benjamin Antal).
  • Оценка сложных выражений в форме КНФ/ДНФ, например (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 с использованием классов эквивалентности. Если существуют эквивалентные выражения для всех коррелированных столбцов, CROSS JOIN не добавляется при включённой настройке query_plan_correlated_subqueries_use_substitution. #82435 (Dmitry Novik).
  • Считывать только необходимые столбцы в коррелированном подзапросе, когда он используется в качестве аргумента функции EXISTS. #82443 (Dmitry Novik).
  • Незначительно ускорено сравнение деревьев запросов на этапе анализа запроса. #82617 (Nikolai Kochetov).
  • Добавлено выравнивание счётчика ProfileEvents для уменьшения ложного совместного использования кэша (false sharing). #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).
  • Добавлена поддержка записи типа enum в Parquet в виде массива байтов, как предписано спецификацией. #81090 (Arthur Passos).
  • Улучшение для движка таблиц DeltaLake: в delta-kernel-rs появился API ExpressionVisitor, который реализован в этом PR и применяется к преобразованию выражений столбцов партиций (он заменит старый, помеченный как устаревший, способ в delta-kernel-rs, который ранее использовался в нашем коде). В будущем этот ExpressionVisitor также позволит реализовать отсечение на основе статистики и некоторые проприетарные возможности Delta Lake. Кроме того, целью этого изменения является поддержка отсечения партиций в движке таблиц DeltaLakeCluster (результат разобранного выражения — ActionsDAG — будет сериализован и отправлен инициатором вместе с путем к данным, потому что такого рода информация, необходимая для отсечения, доступна только как метаинформация при листинге файлов данных, который выполняется только инициатором, но при этом она должна применяться к данным на каждом сервере чтения). #81136 (Kseniia Sumarokova).
  • Сохранять имена элементов при выводе супертипов для именованных кортежей. #81345 (lgbo).
  • Ручной подсчет потребленных сообщений, чтобы не полагаться на ранее зафиксированное смещение в StorageKafka2. #81662 (János Benjamin Antal).
  • Добавлен clickhouse-keeper-utils — новая консольная утилита для управления и анализа данных ClickHouse Keeper. Утилита поддерживает создание дампа состояния из снапшотов и журналов изменений, анализ файлов журналов изменений и извлечение конкретных диапазонов логов. #81677 (Antonio Andelic).
  • Глобальные и по-пользовательские ограничители сетевой пропускной способности никогда не сбрасываются, что гарантирует, что лимиты max_network_bandwidth_for_all_users и max_network_bandwidth_for_all_users не будут превышены. #81729 (Sergei Trifonov).
  • Добавлена поддержка вывода в формат GeoParquet. #81784 (Konstantин Ведерников).
  • Запрещен запуск 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 — тип данных фиксированного размера (задача #82621). #83399 (Shankar Iyer).
  • Теперь база данных Datalake выбрасывает более информативное исключение. Исправлена проблема #81211. #82304 (alesapin).
  • Улучшен оператор CROSS JOIN за счёт возврата значения false из HashJoin::needUsedFlagsForPerRightTableRow. #82379 (lgbo).
  • Разрешена запись и чтение столбцов типа Map как массива кортежей (Array of Tuples). #82408 (MikhailBurdukov).
  • Лицензии crate'ов Rust выводятся в таблице system.licenses. #82440 (Raúl Marín).
  • Макросы, такие как {uuid}, теперь можно использовать в настройке keeper_path движка таблицы S3Queue. #82463 (Nikolay Degterinsky).
  • Улучшение Keeper: перенос файлов журнала изменений (changelog) между дисками в фоновом потоке. Ранее перенос журнала изменений на другой диск глобально блокировал 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 без файла конфигурации также будет слушать порт 9005 для PostgreSQL, как и при использовании конфигурации по умолчанию. #82633 (Alexey Milovidov).
  • В ReplicatedMergeTree::executeMetadataAlter мы получаем StorageID и, не захватывая DDLGuard, пытаемся вызвать IDatabase::alterTable. За это время мы теоретически могли заменить рассматриваемую таблицу другой, поэтому при получении описания таблицы мы получили бы неверное. Чтобы избежать этого, мы добавляем дополнительную проверку совпадения UUID таблиц при вызове IDatabase::alterTable. #82666 (Nikolay Degterinsky).
  • При подключении базы данных с удалённым диском в режиме только для чтения необходимо вручную добавить UUID таблиц в DatabaseCatalog. #82670 (Tuan Pham Anh).
  • Запрещено использовать значения nan и inf с NumericIndexedVector. Исправляет #82239 и некоторые сопутствующие проблемы. #82681 (Raufs Dunamalijevs).
  • Не опускайте нулевые значения в форматах заголовков X-ClickHouse-Progress и X-ClickHouse-Summary. #82727 (Nikita Mikhaylov).
  • Улучшение в Keeper: поддержка конкретных прав доступа для ACL world:anyone. #82755 (Antonio Andelic).
  • Запретить операции RENAME COLUMN и DROP COLUMN для явно перечисленных столбцов, участвующих в суммировании в SummingMergeTree. Закрывает #81836. #82821 (Alexey Milovidov).
  • Улучшена точность преобразования из Decimal в Float32. Реализовано преобразование из Decimal в BFloat16. Закрывает #82660. #82823 (Alexey Milovidov).
  • Полосы прокрутки в веб-интерфейсе будут выглядеть немного лучше. #82869 (Alexey Milovidov).
  • clickhouse-server со встроенной конфигурацией позволит использовать Web UI, возвращая ответ HTTP OPTIONS. #82870 (Alexey Milovidov).
  • Добавлена поддержка указания дополнительных ACL Keeper'а для путей в конфигурации. Если вы хотите добавить дополнительные ACL для конкретного пути, задайте их в конфигурации в разделе zookeeper.path_acls. #82898 (Antonio Andelic).
  • Теперь снимок мутаций будет строиться из снимка видимых частей. Также счетчики мутаций, используемые в снимке, будут пересчитываться на основе включенных мутаций. #82945 (Mikhail Artemenko).
  • Добавлен ProfileEvent, который срабатывает, когда Keeper отклоняет запись из-за мягкого ограничения по памяти. #82963 (Xander Garbett).
  • Добавлены столбцы commit_time, commit_id в таблицу system.s3queue_log. #83016 (Kseniia Sumarokova).
  • В некоторых случаях нам нужно иметь несколько измерений для наших метрик. Например, считать неуспешные слияния или мутации по кодам ошибок, а не иметь один общий счётчик. Представлена таблица system.dimensional_metrics, которая как раз это и делает и добавляет первую многомерную метрику под названием failed_merges. #83030 (Miсhael Stetsyuk).
  • Объединены предупреждения о неизвестных настройках в clickhouse-client и добавлена их сводная запись в журнал. #83042 (Bharat Nallan).
  • Клиент ClickHouse теперь сообщает локальный порт при ошибке подключения. #83050 (Jianfei Hu).
  • Незначительно улучшена обработка ошибок в AsynchronousMetrics. Если каталог /sys/block существует, но недоступен, сервер запустится без мониторинга блочных устройств. Исправляет #79229. #83115 (Alexey Milovidov).
  • Завершать работу SystemLogs после обычных таблиц (и перед системными таблицами, вместо прежнего завершения до обычных таблиц). #83134 (Kseniia Sumarokova).
  • Добавлен вывод логов процесса завершения работы S3Queue. #83163 (Kseniia Sumarokova).
  • Возможность разбора значений типов Time и Time64 в форматах MM:SS, M:SS, SS или S. #83299 (Yarik Briukhovetskyi).
  • Когда distributed_ddl_output_mode='*_only_active', не ожидают новые или восстановленные реплики, у которых лаг репликации превышает max_replication_lag_to_enqueue. Это должно помочь избежать ошибки DDL task is not finished on some hosts, когда новая реплика становится активной после завершения инициализации или восстановления, но при инициализации накопила большой журнал репликации. Также реализован запрос SYSTEM SYNC DATABASE REPLICA STRICT, который ожидает, пока журнал репликации не станет меньше max_replication_lag_to_enqueue. #83302 (Alexander Tokmakov).
  • Не выводить слишком длинные описания операций с выражениями в сообщениях об исключениях. Закрывает #83164. #83350 (Alexey Milovidov).
  • Добавлена возможность разбирать префикс и суффикс части, а также проверять покрытие неконстантных столбцов. #83377 (Mikhail Artemenko).
  • Унифицированы имена параметров в ODBC и JDBC при использовании именованных коллекций. #83410 (Andrey Zvonov).
  • При остановке хранилища getStatus выбрасывает исключение ErrorCodes::ABORTED. Ранее это приводило к сбою запроса SELECT. Теперь такие исключения ErrorCodes::ABORTED перехватываются и преднамеренно игнорируются. #83435 (Miсhael Stetsyuk).
  • Добавлены метрики ресурсов процесса (такие как UserTimeMicroseconds, SystemTimeMicroseconds, RealTimeMicroseconds) в события профилирования журнала part_log для записей MergeParts. #83460 (Vladimir Cherkasov).
  • По умолчанию в Keeper включены флаги create_if_not_exists, check_not_exists, remove_recursive, которые позволяют использовать новые типы запросов. #83488 (Antonio Andelic).
  • Останавливать потоковую обработку S3(Azure/etc)Queue перед остановкой любых таблиц при завершении работы сервера. #83530 (Kseniia Sumarokova).
  • Добавлена поддержка Date/Date32 как целых чисел во входных форматах JSON. #83597 (MikhailBurdukov).
  • Улучшили читаемость сообщений об исключениях в некоторых ситуациях при загрузке и добавлении проекций. #83728 (Robert Schulze).
  • Добавлена опция конфигурации, позволяющая отключить проверку целостности бинарника clickhouse-server по контрольной сумме. Исправляет #83637. #83749 (Rafael Roquetto).

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

  • Исправлено некорректное значение параметра --reconnect по умолчанию в clickhouse-benchmark. Оно было изменено по ошибке в #79465. #82677 (Alexey Milovidov).
  • Устранено непоследовательное форматирование инструкции CREATE DICTIONARY. Закрывает #82105. #82829 (Alexey Milovidov).
  • Исправлено неконсистентное форматирование TTL, когда он содержит функцию materialize. Закрывает #82828. #82831 (Alexey Milovidov).
  • Исправлено неконсистентное форматирование EXPLAIN AST в подзапросе при наличии параметров вывода, таких как INTO OUTFILE. Закрывает #82826. #82840 (Alexey Milovidov).
  • Исправлено непоследовательное форматирование заключённых в скобки выражений с псевдонимами в контексте, где псевдонимы не допускаются. Закрывает #82836. Закрывает #82837. #82867 (Alexey Milovidov).
  • При умножении состояния агрегатной функции на IPv4 теперь используется корректный код ошибки. Закрывает #82817. #82818 (Alexey Milovidov).
  • Исправлена логическая ошибка в кэше файловой системы: «Having zero bytes but range is not finished». #81868 (Kseniia Sumarokova).
  • Пересчитывать индекс min-max, когда TTL удаляет строки, чтобы обеспечить корректность алгоритмов, зависящих от него, таких как minmax_count_projection. Это исправляет #77091. #77166 (Amos Bird).
  • Для запросов, содержащих сочетание ORDER BY ... LIMIT BY ... LIMIT N, при выполнении ORDER BY в режиме PartialSorting счётчик rows_before_limit_at_least теперь отражает количество строк, обработанных оператором LIMIT, а не количество строк, обработанных преобразованием сортировки. #78999 (Eduard Karacharov).
  • Исправлена избыточная пропускаемость гранул при фильтрации по token/ngram-индексам с помощью regexp, содержащего альтернацию и нелитеральную первую альтернативу. #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).
  • Исправлена логическая ошибка при материализации PROJECTION, возникавшая, если тип столбца изменялся на Nullable. #80741 (Pavel Kruglov).
  • Исправлен некорректный пересчёт TTL в TTL GROUP BY при обновлении TTL. #81222 (Evgeniy Ulasik).
  • Исправлена ошибка в bloom-фильтре Parquet, из-за которой условие вида WHERE function(key) IN (...) применялось так, как если бы это было WHERE key IN (...). #81255 (Michael Kolupaev).
  • Исправлено возможное падение Aggregator при возникновении исключения во время слияния. #81450 (Nikita Taranov).
  • Исправлен метод InterpreterInsertQuery::extendQueryLogElemImpl, чтобы при необходимости добавлять обратные кавычки к именам базы данных и таблиц (например, когда имена содержат специальные символы, такие как -). #81528 (Ilia Shvyrialkin).
  • Исправлена обработка оператора IN при transform_null_in=1, когда левый аргумент равен NULL, а результат подзапроса не-Nullable. #81584 (Pavel Kruglov).
  • Не выполнять проверку экспериментальных/подозрительных типов при выполнении выражений DEFAULT/MATERIALIZE при чтении из существующей таблицы. #81618 (Pavel Kruglov).
  • Исправлена ошибка "Context has expired" при слияниях, когда в выражении 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).
  • Исправлена ошибка в зависимостях таблиц, из-за которой materialized views пропускали запросы INSERT. #82222 (Nikolay Degterinsky).
  • Исправлена потенциальная гонка данных между потоком подсказок и основным потоком клиента. #82233 (Azat Khuzhin).
  • Теперь ClickHouse может читать таблицы Iceberg из каталога Glue после эволюции схемы. Исправлена ошибка #81272. #82301 (alesapin).
  • Исправлена валидация настроек асинхронных метрик asynchronous_metrics_update_period_s и asynchronous_heavy_metrics_update_period_s. #82310 (Bharat Nallan).
  • Исправлена логическая ошибка при обработке сопоставителя в запросе с несколькими JOIN, закрыта #81969. #82421 (Vladimir Cherkasov).
  • Добавлен срок действия токена AWS ECS, чтобы его можно было обновлять. #82422 (Konstantин Bogданов).
  • Исправлена ошибка при обработке аргументов NULL в функции CASE. #82436 (Yarik Briukhovetskyi).
  • Исправлены гонки данных в клиенте (за счёт отказа от использования глобального контекста) и логика переопределения session_timezone (ранее, если session_timezone был установлен, например, в users.xml/опциях клиента в непустое значение, а в контексте запроса — в пустое, то использовалось значение из users.xml, что неверно; теперь контекст запроса всегда имеет приоритет над глобальным контекстом). #82444 (Azat Khuzhin).
  • Исправлена работа отключения выравнивания по границам для кэшированного буфера в движках внешних таблиц. Оно было сломано в https://github.com/ClickHouse/ClickHouse/pull/81868. #82493 (Kseniia Sumarokova).
  • Исправлен сбой при объединении key-value-хранилища с ключом после приведения типа. #82497 (Pervakov Grigorii).
  • Исправлено скрытие значений именованных коллекций в logs/query_log. Закрывает #82405. #82510 (Kseniia Sumarokova).
  • Исправлено возможное падение при логировании при завершении сессии, если user_id может быть пустым. #82513 (Bharat Nallan).
  • Устраняет проблему, при которой парсинг Time мог приводить к ошибкам msan. Исправляет: #82477. #82514 (Yarik Briukhovetskyi).
  • Запрещена установка параметра threadpool_writer_pool_size в ноль, чтобы операции сервера не зависали. #82532 (Bharat Nallan).
  • Исправлен LOGICAL_ERROR, возникавший при анализе выражения ROW POLICY для коррелированных столбцов. #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: мьютекс не может быть 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).
  • Исправлена регрессия при использовании подстолбцов в materialized view. Данное изменение исправляет: #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. Его также можно задать для отдельных конечных точек с помощью настроек, задаваемых для этих конечных точек. #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).
  • Отключено отсечение файлов по границам для элементов массивов 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 (Azат Khuzhin).
  • Добавлена настройка обратной совместимости, которая позволяет новому анализатору ссылаться на внешний псевдоним в предложении WITH при совпадении имён. Исправляет #82700. #83797 (Dmitry Novik).
  • Исправлена взаимная блокировка (deadlock) при завершении работы из-за рекурсивной блокировки контекста во время очистки library bridge. #83824 (Azat Khuzhin).

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

  • Собрана минимальная C-библиотека (10 КБ) для лексера ClickHouse. Это нужно для #80977. #81347 (Alexey Milovidov). Добавлен тест для автономного лексера, добавлен тестовый тег fasttest-only. #82472 (Yakov Olkhovskiy).
  • Добавлена проверка inputs подмодулей 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).
  • Добавлен storage-модуль из 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).
  • Новый инструмент командной строки 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).
  • Добавлено планирование слотов выполнения запросов для нагрузок, подробности см. в разделе Планирование нагрузок. #78415 (Sergei Trifonov).
  • Вспомогательные функции timeSeries* для ускорения выполнения некоторых сценариев при работе с временными рядами: - ресемплирование данных по временной сетке с заданными начальной меткой времени, конечной меткой времени и шагом - вычисление PromQL-подобных delta, rate, idelta и irate. #80590 (Alexander Gololobov).
  • Добавлены функции mapContainsValuesLike/mapContainsValues/mapExtractValuesLike для фильтрации по значениям карт и их поддержка в индексах на основе блум-фильтра. #78171 (UnamedRus).
  • Теперь в ограничениях для настроек можно задавать набор недопустимых значений. #78499 (Bharat Nallan).
  • Добавлена настройка enable_shared_storage_snapshot_in_query для включения совместного использования одного и того же снимка хранилища всеми подзапросами в одном запросе. Это обеспечивает консистентное чтение из одной и той же таблицы, даже если таблица фигурирует в запросе несколько раз. #79471 (Amos Bird).
  • Добавлена поддержка записи столбцов JSON в Parquet и прямого чтения столбцов JSON из Parquet. #79649 (Nihал Z. Miaji).
  • Добавлена поддержка типа MultiPolygon в pointInPolygon. #79773 (Nihal Z. Miaji).
  • Добавлена поддержка выполнения запросов к таблицам Delta Lake, смонтированным из локальной файловой системы, через табличную функцию deltaLakeLocal. #79781 (roykim98).
  • Добавлена новая настройка cast_string_to_date_time_mode, которая позволяет выбрать режим разбора DateTime при приведении типа из String. #80210 (Pavel Kruglov). Например, вы можете установить её в режим best effort.
  • Добавлены функции bech32Encode и bech32Decode для работы с алгоритмом Bech32 в Bitcoin (задача #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).
  • Добавлена опция, позволяющая вынести (де)сжатие и (де)сериализацию блоков в потоки конвейера обработки (pipeline threads) вместо единственного потока, связанного с сетевым подключением. Управляется настройкой enable_parallel_blocks_marshalling. Это должно ускорить распределённые запросы, которые передают значительные объёмы данных между инициатором и удалёнными узлами. #78694 (Nikita Taranov).
  • Улучшена производительность всех типов Bloom-фильтров. Видео с конференции OpenHouse #79800 (Delyan Kratunov).
  • Добавлен быстрый путь в UniqExactSet::merge, когда одно из множеств пустое. Также теперь, если левое множество является двухуровневым, а правое — одноуровневым, мы не выполняем преобразование правого множества в двухуровневое. #79971 (Nikita Taranov).
  • Повышена эффективность повторного использования памяти и снижено число обращений к подкачке при использовании двухуровневых хеш-таблиц. Это ускоряет выполнение GROUP BY. #80245 (Jiebin Sun).
  • Избегать лишних обновлений и снижать конкуренцию за блокировки в кэше условий запроса. #80247 (Jiebin Sun).
  • Тривиальная оптимизация для concatenateBlocks. Скорее всего, она улучшает производительность параллельного хеш-соединения. #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).
  • Не обрабатывать значения QUOTA, если пользователь не ограничен квотами. #81549 (Raúl Marín). Это ускоряет выполнение очень коротких запросов.
  • Исправлена регрессия производительности в механизме отслеживания памяти. #81694 (Michael Kolupaev).
  • Улучшена оптимизация ключа сегментации для распределённых запросов. #78452 (fhw12345).
  • Parallel replicas: не ждать медленных незадействованных реплик, если все задачи чтения уже назначены другим репликам. #80199 (Igor Nikonov).
  • Параллельные реплики используют отдельный таймаут подключения, см. параметр parallel_replicas_connect_timeout_ms. Ранее для задания таймаута подключения для запросов с параллельными репликами использовались настройки 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).
  • Для движков S3Queue и AzureQueue добавлен виртуальный столбец _time. #78926 (Anton Ivashkin).
  • Добавить возможность горячей перезагрузки настроек, управляющих разрывом соединения при перегрузке CPU. #79052 (Alexey Katsman).
  • Добавлен префикс контейнера к путям данных, отображаемым в system.tables для обычных дисков в хранилище Azure Blob Storage, что обеспечивает единообразие с S3 и GCP. #79241 (Julia Kartseva).
  • Теперь clickhouse-client и local могут принимать параметры запроса не только в виде param_<name> (подчёркивание), но и в виде param-<name> (дефис). Это закрывает задачу #63093. #79429 (Engel Danila).
  • Подробное предупреждающее сообщение об экономии полосы пропускания при копировании данных из локального хранилища в удалённый S3 при включённой проверке контрольных сумм. #79464 (VicoWu).
  • Ранее при input_format_parquet_max_block_size = 0 (недопустимом значении) ClickHouse зависал. Теперь это поведение исправлено. Исправление закрывает #79394. #79601 (abashkeev).
  • Добавлена настройка throw_on_error для startup_scripts: когда throw_on_error установлена в true, сервер не запустится, пока все запросы не завершатся успешно. По умолчанию throw_on_error имеет значение false, что сохраняет предыдущее поведение. #79732 (Aleksandr Musorin).
  • Добавлена возможность добавлять http_response_headers в любые http_handlers. #79975 (Andrey Zvonov).
  • Функция reverse теперь поддерживает тип данных Tuple. Закрывает #80053. #80083 (flynn).
  • Исправлена проблема #75817: разрешено получать данные о auxiliary_zookeepers из таблицы system.zookeeper. #80146 (Nikolay Govorov).
  • Добавлены асинхронные метрики по TCP-сокетам сервера. Это улучшает обсервабилити. Закрывает #80187. #80188 (Alexey Milovidov).
  • Добавлена поддержка anyLast_respect_nulls и any_respect_nulls как SimpleAggregateFunction. #80219 (Diskein).
  • Удалён лишний вызов adjustCreateQueryForBackup для реплицируемых баз данных. #80282 (Vitaly Baranov).
  • Добавлена поддержка дополнительных опций (которые идут после --, например -- --config.value='abc') в clickhouse-local без знака равенства. Закрывает #80292. #80293 (Alexey Milovidov).
  • Подсветка метасимволов в запросах SHOW ... LIKE. Это закрывает #80275. #80297 (Alexey Milovidov).
  • Сделать SQL UDF в clickhouse-local постоянной. Ранее созданная функция будет загружаться при запуске. Это закрывает #80085. #80300 (Alexey Milovidov).
  • Исправлено описание в плане выполнения запроса для предварительного шага DISTINCT. #80330 (UnamedRus).
  • Добавлена поддержка использования именованных коллекций в ODBC/JDBC. #80334 (Andrey Zvonov).
  • Метрики числа дисков только для чтения и повреждённых дисков. Индикатор логируется при запуске DiskLocalCheckThread. #80391 (VicoWu).
  • Реализована поддержка хранилища s3_plain_rewritable с проекциями. В предыдущих версиях объекты метаданных в S3, ссылающиеся на проекции, не обновлялись при их перемещении. Закрывает #70258. #80393 (Sav).
  • Команда SYSTEM UNFREEZE больше не будет пытаться искать части на дисках только для чтения (read-only) и одноразовой записи (write-once). Это закрывает #80430. #80432 (Alexey Milovidov).
  • Уменьшен уровень логирования сообщений о слитых частях. #80476 (Hans Krutzer).
  • Изменено поведение прореживания партиций по умолчанию для таблиц 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 года для обработчика MySQL параметр prefer_column_name_to_alias был жестко зафиксирован в значении true, так как новый анализатор по умолчанию не был включен. Теперь параметр больше не зафиксирован жестко. #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).
  • Теперь при чтении из system.rocksdb игнорируются базы данных с движками, которые не могут содержать таблицы RocksDB. #81083 (Pervakov Grigorii).
  • Разрешить filesystem_caches и named_collections в конфигурационном файле clickhouse-local. #81105 (Alexey Milovidov).
  • Исправлена подсветка синтаксиса PARTITION BY в запросах INSERT. В предыдущих версиях PARTITION BY не подсвечивалось как ключевое слово. #81106 (Alexey Milovidov).
  • Два небольших улучшения в Web-интерфейсе: — корректная обработка запросов без вывода, таких как CREATE, INSERT (до недавнего времени при выполнении таких запросов индикатор загрузки крутился бесконечно); — при двойном щелчке по таблице выполняется прокрутка к началу. #81131 (Alexey Milovidov).
  • Метрика MemoryResidentWithoutPageCache показывает объём физической памяти в байтах, используемой серверным процессом, за вычетом кэша страниц в пользовательском пространстве (userspace page cache). Это даёт более точное представление о фактическом использовании памяти при использовании userspace page cache. Когда userspace page cache отключён, это значение равно MemoryResident. #81233 (Jayme Bird).
  • Помечайте вручную зарегистрированные исключения в клиенте, локальном сервере, клиенте Keeper и приложении для работы с дисками как уже зарегистрированные, чтобы они не протоколировались повторно. #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 и изменено поведение: нативное копирование теперь используется только при совпадении учетных данных, что исправляет #78964. #79561 (Smita Kulkarni).
  • Исправлены логические ошибки, связанные с неизвестной областью происхождения столбца, возникающие при проверке, коррелирован ли этот столбец. Исправляет #78183. Исправляет #79451. #79727 (Dmitry Novik).
  • Исправлены некорректные результаты для grouping sets при использовании ColumnConst и Analyzer. #79743 (Andrey Zvonov).
  • Исправлено дублирование результатов локального сегмента при чтении из distributed таблицы, если локальная реплика устарела. #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).
  • Имена Executable User Defined Functions (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 в базе данных Replicated. Закрывает #80296. #80298 (Nikolay Degterinsky).
  • Исправлено текстовое представление типов DateTime и DateTime64 при хранении в PostgreSQL. #80301 (Yakov Olkhovskiy).
  • Разрешено использование DateTime с часовым поясом в таблицах StripeLog. Закрывает #44120. #80304 (Alexey Milovidov).
  • Отключено проталкивание фильтра для предиката с недетерминированной функцией, если шаг плана запроса изменяет количество строк. Исправлена #40273. #80329 (Nikolai Kochetov).
  • Исправлены возможные логические ошибки и сбои в проекциях с подстолбцами. #80333 (Pavel Kruglov).
  • Исправлена ошибка NOT_FOUND_COLUMN_IN_BLOCK, возникавшая из-за оптимизации проталкивания фильтра (filter-push-down) на этапе логического JOIN в случае, когда условие ON не является тривиальным равенством. Исправляет #79647 и #77848. #80360 (Nikolai Kochetov).
  • Исправлен некорректный результат при чтении ключей в обратном порядке в партиционированных таблицах. Это исправляет #79987. #80448 (Amos Bird).
  • Исправлена некорректная сортировка в таблицах с Nullable-ключом при включённом параметре optimize_read_in_order. #80515 (Pervakov Grigorii).
  • Исправлена проблема, из-за которой операция DROP refreshable materialized view зависала, если представление было приостановлено с помощью SYSTEM STOP REPLICATED VIEW. #80543 (Michael Kolupaev).
  • Исправлена ошибка 'Cannot find column', возникавшая при использовании константного кортежа в распределённом запросе. #80596 (Yakov Olkhovskiy).
  • Исправлена функция shardNum в distributed таблицах при использовании join_use_nulls. #80612 (János Benjamin Antal).
  • Исправлена ошибка некорректного результата при чтении столбца, который присутствует только в части таблиц движка Merge. #80643 (Pavel Kruglov).
  • Исправлена потенциальная проблема с протоколом SSH (из-за зависания в replxx). #80688 (Azat Khuzhin).
  • Метка времени в таблице iceberg_history теперь корректна. #80711 (Melvyn Peignon).
  • Исправлен потенциальный краш при неудачной регистрации словаря (когда CREATE DICTIONARY завершался с ошибкой CANNOT_SCHEDULE_TASK, в реестре словарей мог оставаться висячий указатель, что впоследствии могло приводить к аварийному завершению работы). #80714 (Azat Khuzhin).
  • Исправлена обработка glob-шаблонов перечислений с одним элементом в табличных функциях для объектного хранилища. #80716 (Konstantин Богданов).
  • Исправлен неверный тип результата функций сравнения для Tuple(Dynamic) и String, который приводил к логической ошибке. #80728 (Pavel Kruglov).
  • Добавлена недостающая поддержка типа данных timestamp_ntz в Unity Catalog. Исправлены #79535, #79875. #80740 (alesapin).
  • Исправлена ошибка THERE_IS_NO_COLUMN в распределённых запросах с IN cte. Исправляет #75032. #80757 (Nikolai Kochetov).
  • Исправлена проблема, из-за которой при внешнем ORDER BY создавалось слишком много файлов, что приводило к чрезмерному потреблению памяти. #80777 (Azat Khuzhin).
  • Этот PR может закрыть #80742. #80783 (zoomxi).
  • Исправлен сбой Kafka из-за того, что get_member_id() создавал std::string из NULL (это, вероятно, проявлялось только в случае неудачного подключения к брокеру). #80793 (Azat Khuzhin).
  • Корректно дожидаться завершения работы потребителей перед остановкой движка Kafka (активные потребители после остановки могут приводить к срабатыванию различных отладочных assert-проверок, а также продолжать считывать данные с брокеров в фоновом режиме после удаления/отсоединения таблицы). #80795 (Azat Khuzhin).
  • Исправлена ошибка NOT_FOUND_COLUMN_IN_BLOCK, вызываемая оптимизацией predicate-push-down. Исправление для #80443. #80834 (Nikolai Kochetov).
  • Исправлена логическая ошибка при обработке шаблона звёздочки (*) в табличной функции при использовании JOIN с USING. #80894 (Vladimir Cherkasov).
  • Исправлен учет памяти для кеша файлов метаданных Iceberg. #80904 (Azat Khuzhin).
  • Исправлено некорректное разбиение на партиции с Nullable-ключом партиции. #80913 (Pervakov Grigorii).
  • Исправлена ошибка Table does not exist для распределённых запросов с проталкиванием предиката (allow_push_predicate_ast_for_distributed_subqueries=1), возникавшая, когда исходная таблица отсутствовала на инициаторе. Исправляет #77281. #80915 (Nikolai Kochetov).
  • Исправлена логическая ошибка во вложенных функциях, использующих именованные окна. #80926 (Pervakov Grigorii).
  • Исправлены экстремумы для столбцов Nullable и с плавающей запятой. #80970 (Pervakov Grigorii).
  • Исправлен возможный сбой при выполнении запросов к system.tables, который, вероятнее всего, возникал в условиях нехватки памяти. #80976 (Azat Khuzhin).
  • Исправлено атомарное переименование с усечением для файлов, тип сжатия которых определяется по их расширению. #80979 (Pablo Marcos).
  • Исправлен метод ErrorCodes::getName. #81032 (RinChanNOW).
  • Исправлена ошибка, из-за которой пользователь не мог получить список таблиц в Unity Catalog без прав на каждую из них. Теперь все таблицы корректно перечисляются, а попытка чтения из таблицы с ограниченным доступом вызовет исключение. #81044 (alesapin).
  • Теперь ClickHouse будет игнорировать ошибки и неожиданные ответы от каталогов озёр данных в запросе SHOW TABLES. Исправлена проблема #79725. #81046 (alesapin).
  • Исправлен разбор DateTime64 из целочисленных значений в JSONExtract и при разборе значений типа JSON. #81050 (Pavel Kruglov).
  • Учитывать настройку date_time_input_format в кэше вывода схемы. #81052 (Pavel Kruglov).
  • Исправлено аварийное завершение при выполнении INSERT, если таблица была удалена (DROP) после начала выполнения запроса, но до отправки столбцов. #81053 (Azat Khuzhin).
  • Исправлена ошибка использования неинициализированного значения в quantileDeterministic. #81062 (Azat Khuzhin).
  • Исправлено управление счётчиком жёстких ссылок для транзакций диска metadatastoragefromdisk. Добавлены тесты. #81066 (Sema Checherinda).
  • Имена пользовательских функций (UDF) не добавлялись в таблицу system.query_log в отличие от других функций. В этом pull request реализовано добавление имени UDF в один из двух столбцов used_executable_user_defined_functions или used_sql_user_defined_functions, если эта функция была использована в запросе. #81101 (Kyamran).
  • Исправлены ошибки Too large size ... passed to allocator и возможные аварийные остановки при вставках по протоколу HTTP в текстовых форматах (JSON, Values, ...) с пропущенными полями Enum. #81145 (Anton Popov).
  • Исправлена ошибка LOGICAL_ERROR, возникавшая при разреженном столбце в блоке 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).
  • Исправлен пограничный случай в запросе, который выполняет соединение пустых таблиц и использует оконные функции. Ошибка приводила к взрывному росту числа параллельных потоков и, как следствие, к ошибкам OOM. #81299 (Alexander Gololobov).
  • Исправления для кластерных функций озер данных (deltaLakeCluster, icebergCluster и т. д.): (1) исправлен потенциальный segfault в DataLakeConfiguration при использовании функции Cluster со старым анализатором; (2) удалены дублирующиеся обновления метаданных озер данных (избыточные запросы к объектному хранилищу); (3) устранено избыточное перечисление объектов (listing) в объектном хранилище, когда формат явно не указан (что уже было сделано для некластерных движков озер данных). #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).
  • Иногда Web UI может отображать 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. Этот PR исправляет проблему. #81673 (Han Fei).
  • Бэкпортировано в #82128: исправлена ошибка «Context has expired» во время слияний при использовании словаря в выражении TTL. #81690 (Azat Khuzhin).
  • Добавлена валидация настройки mergetree merge_max_block_size, чтобы гарантировать, что её значение не равно нулю. #81693 (Bharat Nallan).
  • Исправлены проблемы в clickhouse-local, связанные с зависавшими запросами DROP VIEW . #81705 (Bharat Nallan).
  • Исправлено выполнение JOIN в StorageRedis в некоторых случаях. #81736 (Pervakov Grigorii).
  • Исправлен сбой в ConcurrentHashJoin при пустом USING () и включенном старом анализаторе. #81754 (Nikita Taranov).
  • Исправление в Keeper: блокировать фиксацию новых записей лога, если в логе есть некорректная запись. Ранее, если лидер некорректно применял некоторые записи лога, он продолжал фиксировать новые записи, хотя фолловер обнаруживал несоответствие дайджеста и аварийно завершал работу. #81780 (Antonio Andelic).
  • Исправлена ошибка, при которой требуемые столбцы не читались при обработке скалярных коррелированных подзапросов. Исправляет #81716. #81805 (Dmitry Novik).
  • Кто‑то засорил наш код Kusto. Почистил. Это закрывает #81643. #81885 (Alexey Milovidov).
  • В предыдущих версиях сервер возвращал лишнее содержимое для запросов к /js. Это исправляет #61890. #81895 (Alexey Milovidov).
  • Ранее определения движка таблицы MongoDB могли включать компонент пути в аргументе host:port, который просто игнорировался. Интеграция с MongoDB отказывалась загружать таблицы с такими определениями. С этим исправлением теперь допускается загрузка таких таблиц и компонент пути игнорируется, если у движка MongoDB пять аргументов, при этом используется имя базы данных из аргументов. Примечание: Исправление не применяется для вновь создаваемых таблиц или запросов с табличной функцией mongo, а также для источников словарей и именованных коллекций. #81942 (Vladimir Cherkasov).
  • Исправлено возможное аварийное завершение работы Aggregator при возникновении исключения во время слияния. #82022 (Nikita Taranov).
  • Исправлена ошибка, допущенная при копировании и вставке кода в arraySimilarity; запрещено использование весов типов UInt32 и Int32. Обновлены тесты и документация. #82103 (Mikhail f. Shiryaev).
  • Устранено возможное состояние гонки между потоком подсказок и основным клиентским потоком. #82233 (Azat Khuzhin).

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

Релиз ClickHouse 25.5 от 22.05.2025

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

  • Функция 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 для вычисления «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 datalake. #77677 (scanhex12).
  • Индексы типа full_text были переименованы в gin. Это соответствует более привычной терминологии PostgreSQL и других баз данных. Существующие индексы типа full_text по-прежнему можно загрузить, но при попытке использовать их в поиске они будут выбрасывать исключение (предлагая вместо этого использовать индексы gin). #79024 (Robert Schulze).

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

  • Изменён формат Compact-частей для сохранения меток для каждого подпотока, чтобы можно было читать отдельные подстолбцы. Старый формат Compact по‑прежнему поддерживается для чтения и может быть включён для записи с помощью MergeTree-настройки write_marks_for_substreams_in_compact_parts. По умолчанию он отключён для более безопасного обновления, так как изменяет способ хранения Compact-частей. В одном из следующих релизов он будет включён по умолчанию. #77940 (Pavel Kruglov).
  • Добавлена возможность выносить условия с подстолбцами в PREWHERE. #79489 (Pavel Kruglov).
  • Ускорена работа вторичных индексов за счёт вычисления их выражений одновременно для нескольких гранул. #64109 (Alexey Milovidov).
  • По умолчанию включена настройка compile_expressions (JIT-компилятор для фрагментов обычных выражений). Это закрывает #51264, #56386 и #66486. #79907 (Alexey Milovidov).
  • Добавлена новая настройка: use_skip_indexes_in_final_exact_mode. Если запрос к таблице ReplacingMergeTree содержит оператор FINAL, чтение только диапазонов таблицы на основе 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&#95;processed&#95;files&#95;before&#95;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).
  • Удалены guard-страницы для потоков и async_socket_for_remote/use_hedge_requests. Изменён способ выделения памяти в FiberStack с mmap на aligned_alloc, так как это приводит к разбиению областей виртуальной памяти (VMA), и при высокой нагрузке может быть достигнут лимит vm.max_map_count. #79147 (Sema Checherinda).
  • Ленивая материализация с параллельными репликами. #79401 (Igor Nikonov).

Улучшения

  • Добавлена возможность применять легковесное удаление «на лету» (с настройками lightweight_deletes_sync = 0, apply_mutations_on_fly = 1). #79281 (Anton Popov).
  • Если данные в формате Pretty выводятся в терминале и следующий блок имеет те же ширины столбцов, вывод может быть продолжен с предыдущего блока, «склеивая» его с предыдущим за счёт перемещения курсора вверх. Тем самым закрывается #79333. Поведение управляется новой настройкой output_format_pretty_glue_chunks. #79339 (Alexey Milovidov).
  • Функция isIPAddressInRange расширена и теперь поддерживает типы данных String, IPv4, IPv6, Nullable(String), Nullable(IPv4) и Nullable(IPv6). #78364 (YjyJeff).
  • Разрешить динамическое изменение настроек пула подключений движка PostgreSQL. #78414 (Samay Sharma).
  • Добавлена возможность указывать _part_offset в обычной проекции. Это первый шаг к построению индекса проекции. Может использоваться с #58224 и помочь улучшить #63207. #78429 (Amos Bird).
  • Добавлены новые столбцы (create_query и source) для system.named_collections. Закрыта задача #78179. #78582 (MikhailBurdukov).
  • Добавлено новое поле condition в системную таблицу system.query_condition_cache. В нём хранится условие в виде обычного текста, хэш которого используется в качестве ключа в кэше условий запроса. #78671 (Robert Schulze).
  • Теперь можно создавать индексы векторного сходства для столбцов BFloat16. #78850 (Robert Schulze).
  • Добавлена поддержка Unix-меток времени с дробной частью при разборе DateTime64 в режиме best effort. #78908 (Pavel Kruglov).
  • В реализации delta-kernel хранилища DeltaLake исправлен режим сопоставления столбцов, добавлены тесты для поддержки эволюции схемы. #78921 (Kseniia Sumarokova).
  • Улучшена вставка в столбец Variant в формате VALUES за счёт более корректного преобразования значений. #78923 (Pavel Kruglov).
  • Функция tokens была расширена и теперь принимает дополнительный аргумент tokenizer, а также другие аргументы, специфичные для выбранного токенизатора. #79001 (Elmi Ahmadov).
  • Оператор SHOW CLUSTER теперь раскрывает макросы (если они заданы) в своём аргументе. #79006 (arf42).
  • Функции хеширования теперь поддерживают значения NULL внутри массивов, кортежей и типов Map (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).
  • Перестали выводиться подсказки для чисел в форматах Pretty для значений, которые выглядят как типичные 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 blob storage. #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).
  • materialized view может запускаться слишком поздно, например, после таблицы Kafka, которая отправляет в неё поток данных. #72123 (Ilya Golshtein).
  • Исправлена перезапись запроса SELECT при создании VIEW при включённом анализаторе. Закрывает #75956. #76356 (Dmitry Novik).
  • Исправлено применение настройки async_insert, передаваемой с сервера (через apply_settings_from_server), которое ранее приводило к ошибкам Unknown packet 11 from server на клиенте. #77578 (Azat Khuzhin).
  • Исправлена проблема, из-за которой refreshable materialized view в реплицируемой базе данных не работала на недавно добавленных репликах. #77774 (Michael Kolupaev).
  • Исправлена ошибка, из-за которой refreshable materialized views приводили к сбоям резервного копирования. #77893 (Michael Kolupaev).
  • Исправлена старая логическая ошибка в transform. #78247 (Yarik Briukhovetskyi).
  • Устранены отдельные случаи, при которых вторичный индекс не применялся анализатором. Исправляет #65607, исправляет #69373. #78485 (Nikolai Kochetov).
  • Исправлена запись событий профилирования (NetworkSendElapsedMicroseconds/NetworkSendBytes) для протокола HTTP с включённым сжатием (погрешность не должна превышать размер буфера, обычно около 1MiB). #78516 (Azat Khuzhin).
  • Исправлен анализатор, вызывавший LOGICAL_ERROR, когда в JOIN ... USING участвовал столбец-алиас — теперь выдаётся корректная ошибка. #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 таблицы в SELECT-запросе функция in должна заменяться на globalIn. #78749 (Yakov Olkhovskiy).
  • Исправлено несколько типов запросов SELECT, читающих из таблиц с движком MongoDB или табличной функцией mongodb: запросы с неявным приведением константного значения в условии WHERE (например, WHERE datetime = '2025-03-10 00:00:00'); запросы с LIMIT и GROUP BY. Ранее они могли возвращать некорректный результат. #78777 (Anton Popov).
  • Исправлено преобразование между разными типами JSON. Теперь оно выполняется простым приведением через преобразование в/из String. Это менее эффективно, но на 100% корректно. #78807 (Pavel Kruglov).
  • Исправлена логическая ошибка при преобразовании типа Dynamic в Interval. #78813 (Pavel Kruglov).
  • Исправлен откат столбца при ошибке парсинга JSON. #78836 (Pavel Kruglov).
  • Исправлена ошибка 'bad cast' при выполнении операции JOIN с использованием константного столбца-алиаса. #78848 (Vladimir Cherkasov).
  • Теперь не допускается использование prewhere в materialized view для столбцов с разными типами в представлении и целевой таблице. #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 со значением 0 или отрицательным значением (проблема #78314). #79028 (Elmi Ahmadov).
  • Следует избегать использования Field для неагрегированных столбцов в SummingMergeTree. Это может приводить к неожиданным ошибкам при работе с типами Dynamic/Variant в SummingMergeTree. #79051 (Pavel Kruglov).
  • Исправлена проблема чтения из materialized view с целевой таблицей Distributed и отличающимся заголовком в анализаторе. #79059 (Pavel Kruglov).
  • Исправляет ошибку, из-за которой arrayUnion() возвращала лишние (некорректные) значения при пакетных вставках в таблицы. Исправляет #75057. #79079 (Peter Nguyen).
  • Исправлен segfault в OpenSSLInitializer. Закрывает #79092. #79097 (Konstantin Bogdanov).
  • Всегда задавать префикс для операции S3 ListObject. #79114 (Azat Khuzhin).
  • Исправлена ошибка, из‑за которой arrayUnion() возвращала дополнительные (некорректные) значения в таблицах с пакетными вставками. Исправлена #79157. #79158 (Peter Nguyen).
  • Исправлена логическая ошибка, возникавшая после проталкивания фильтра. #79164 (Pervakov Grigorii).
  • Исправлена работа движка таблиц DeltaLake с реализацией delta-kernel при использовании HTTP-эндпоинтов, а также исправлен NOSIGN. Закрывает #78124. #79203 (Kseniia Sumarokova).
  • Исправление в Keeper: предотвращено срабатывание наблюдателей для неудачных multi-запросов. #79247 (Antonio Andelic).
  • Запрещено использование типов Dynamic и JSON в IN. При текущей реализации IN это может приводить к некорректным результатам. Полноценная поддержка этих типов в IN сложна и может быть реализована в будущем. #79282 (Pavel Kruglov).
  • Исправлена проверка на дублирующиеся пути при разборе типа JSON. #79317 (Pavel Kruglov).
  • Исправлены проблемы с соединением SecureStreamSocket. #79383 (Konstantin Bogdanov).
  • Исправлена проблема с загрузкой дисков plain_rewritable, содержащих данные. #79439 (Julia Kartseva).
  • Исправлена ошибка, приводившая к аварийному завершению работы при обнаружении динамических подстолбцов в широких частях в MergeTree. #79466 (Pavel Kruglov).
  • Проверять длину имени таблицы только для первичных запросов CREATE. Не выполнять эту проверку для последующих CREATE, чтобы избежать проблем с обратной совместимостью. #79488 (Miсhael Stetsyuk).
  • Исправлена ошибка Block structure mismatch в ряде случаев для таблиц с разреженными столбцами. #79491 (Anton Popov).
  • Были исправлены два случая ошибки "Logical Error: Can't set alias of * of Asterisk on alias". #79505 (Raúl Marín).
  • Исправлена ошибка использования некорректных путей при переименовании базы данных Atomic. #79569 (Tuan Pham Anh).
  • Исправлена работа ORDER BY по JSON-столбцу в сочетании с другими столбцами. #79591 (Pavel Kruglov).
  • Исправлено дублирование результатов при чтении с удалённого сервера при отключённых use_hedged_requests и allow_experimental_parallel_reading_from_replicas. #79599 (Eduard Karacharov).
  • Исправлен сбой в реализации delta-kernel при использовании Unity Catalog. #79677 (Kseniia Sumarokova).
  • Теперь макросы корректно разрешаются для кластеров autodiscovery. #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).
  • Обеспечена корректная работа materialized views с операторами 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

Изменения, нарушающие обратную совместимость

  • Добавлена проверка соответствия всех столбцов в materialized view столбцам целевой таблицы, если 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).
  • Добавлена возможность изменять комментарий базы данных. Закрывает #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. Эта функция принимает 2 аргумента (значение и единицу измерения) и преобразует значение в определённый тип 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 (это должно примерно в 25 раз снизить потребление памяти при вертикальных слияниях в S3). #77922 (Azat Khuzhin).
  • Отключайте filesystem_cache_prefer_bigger_buffer_size, если кэш используется в пассивном режиме, например, для слияний. Это уменьшает потребление памяти при слияниях. #77898 (Kseniia Sumarokova).
  • Теперь мы используем число реплик для определения размера задачи при чтении с включёнными параллельными репликами. Это обеспечивает более равномерное распределение работы между репликами, когда объём данных для чтения не слишком велик. #78695 (Nikita Taranov).
  • Добавлена поддержка асинхронной предварительной выборки данных (prefetch) для формата ORC, что повышает общую производительность за счёт сокрытия задержек удалённого ввода-вывода. #70534 (李扬).
  • Предварительно выделяется память, используемая асинхронными вставками, что повышает производительность. #74945 (Ilya Golshtein).
  • Уменьшено количество запросов к Keeper за счёт отказа от использования одиночных запросов get в пользу multiRead там, где он доступен, так как первые могли вызывать значительную нагрузку на Keeper при увеличении числа реплик. #56862 (Nikolay Degterinsky).
  • Небольшая оптимизация выполнения функций для аргументов типа Nullable. #76489 (李扬).
  • Оптимизирована функция arraySort. #76850 (李扬).
  • Объединяет метки одной и той же части и единовременно записывает их в кэш условий запроса, чтобы сократить использование блокировок. #77377 (zhongyuankai).
  • Оптимизирована производительность s3Cluster для запросов с одним раскрытием фигурных скобок. #77686 (Tomáš Hromada).
  • Оптимизирован ORDER BY для одиночного столбца типа Nullable или LowCardinality. #77789 (李扬).
  • Оптимизировано потребление памяти форматом Native. #78442 (Azat Khuzhin).
  • Тривиальная оптимизация: не переписывать count(if(...)) на countIf, если требуется приведение типов. Закрывает #78564. #78565 (李扬).
  • Функция hasAll теперь может использовать пропускающие индексы для полнотекстового поиска tokenbf_v1, ngrambf_v1. #77662 (UnamedRus).
  • Индекс векторного сходства мог выделять до 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 субсекундная точность для представления не поддерживается, 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).
  • Обновления refreshable materialized view теперь записываются в 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, считающие количество запросов чтения и записи ZooKeeper multi. #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).
  • Исправлен некорректный разбор S3 URL-адреса, когда ключ не указан в path-style. #78185 (Arthur Passos).
  • Исправлены некорректные значения асинхронных метрик BlockActiveTime, BlockDiscardTime, BlockWriteTime, BlockQueueTime и BlockReadTime (до изменения 1 секунда ошибочно учитывалась как 0.001). #78211 (filimonov).
  • Теперь соблюдается лимит loading_retries для ошибок при отправке данных в materialized view для 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 &lt;...&gt; 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 без привязанных materialized views. #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).
  • Исправлена проблема, из-за которой refreshable materialized view в реплицируемой базе данных не работала на вновь добавленных репликах. #77774 (Michael Kolupaev).
  • Исправлено возможное падение при возникновении ошибки NOT_FOUND_COLUMN_IN_BLOCK. #77854 (Vladimir Cherkasov).
  • Исправлена ошибка, приводившая к сбою в S3/AzureQueue при заполнении данных. #77878 (Bharat Nallan).
  • Отключён нечеткий поиск по истории в SSH-сервере (так как для него требуется библиотека skim). #78002 (Azat Khuzhin).
  • Исправлена ошибка, из-за которой запрос векторного поиска по неиндексированному столбцу возвращал некорректные результаты, если в таблице имелся другой векторный столбец с определённым индексом сходства векторов. (Issue #77978). #78069 (Shankar Iyer).
  • Исправлена незначительная ошибка в приглашении с запросом "The requested output format is binary... Do you want to output it anyway? [y/N]". #78095 (Azat Khuzhin).
  • Исправление ошибки при использовании toStartOfInterval с нулевым аргументом origin. #78096 (Yarik Briukhovetskyi).
  • Запрещена передача пустого параметра запроса session_id в HTTP-интерфейсе. #78098 (Alexey Katsman).
  • Исправлена проблема перезаписи метаданных в базе данных Replicated, которая могла произойти из‑за выполнения запроса RENAME сразу после запроса ALTER. #78107 (Nikolay Degterinsky).
  • Исправлена ошибка, приводившая к сбою в движке NATS. #78108 (Dmitry Novikov).
  • Не пытайтесь создавать history_file во встроенном SSH-клиенте (в предыдущих версиях создание всегда завершалось неудачей, хотя предпринимаялась попытка). #78112 (Azat Khuzhin).
  • Исправлена проблема, из-за которой в system.detached_tables отображалась некорректная информация после выполнения запросов RENAME DATABASE или DROP TABLE. #78126 (Nikolay Degterinsky).
  • Исправлена проверка на избыточное количество таблиц в базе данных Replicated после #77274. Также проверка теперь выполняется до создания хранилища, чтобы избежать создания неучтённых узлов в Keeper в случае ReplicatedMergeTree или KeeperMap. #78127 (Nikolay Degterinsky).
  • Исправлено возможное аварийное завершение работы из‑за параллельной инициализации метаданных S3Queue. #78131 (Azat Khuzhin).
  • Функции groupArray* теперь генерируют ошибку BAD_ARGUMENTS для значения 0 типа Int в аргументе max_size (как это уже делается для значения типа UInt), вместо попытки выполнения с ним. #78140 (Eduard Karacharov).
  • Исправлен сбой при восстановлении потерянной реплики, возникавший, если локальная таблица удалялась до её отсоединения. #78173 (Raúl Marín).
  • Исправлена ошибка, из-за которой столбец "alterable" в system.s3_queue_settings всегда возвращал false. #78187 (Kseniia Sumarokova).
  • Скрывать подпись доступа Azure, чтобы она не отображалась пользователю и не попадала в логи. #78189 (Kseniia Sumarokova).
  • Исправлена предварительная выборка подпотоков с префиксами в частях формата Wide. #78205 (Pavel Kruglov).
  • Исправлены падения и некорректные результаты mapFromArrays в случае массива ключей типа LowCardinality(Nullable). #78240 (Eduard Karacharov).
  • Исправлены параметры аутентификации в delta-kernel-rs. #78255 (Kseniia Sumarokova).
  • Не планировать задачу Refreshable Materialized Views, если у реплики параметр disable_insertion_and_mutation установлен в true. Поскольку задача представляет собой вставку, она завершится с ошибкой, если disable_insertion_and_mutation равно true. #78277 (Xu Jia).
  • Проверяется доступ к базовым таблицам движка Merge. #78339 (Pervakov Grigorii).
  • Модификатор FINAL может быть проигнорирован при выполнении запроса к таблице Distributed. #78428 (Yakov Olkhovskiy).
  • bitmapMin возвращает uint32_max, если bitmap пуст (и 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).
  • Улучшены проверки при выполнении INSERT, когда ReplicatedMergeTree не поддерживает транзакции. #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: не вызывать watch-события для неуспешных multi-запросов. #79247 (Antonio Andelic).
  • Исправлена ошибка чтения таблицы Iceberg, возникавшая, когда минимальное и максимальное значения указывались явно, но были NULL. Отмечено, что библиотека Go Iceberg генерирует чрезвычайно неудачные файлы. Исправление закрывает #78740. #78764 (flynn).

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

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

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

  • Добавлена поддержка Unity Catalog для таблиц DeltaLake поверх AWS S3 и локальной файловой системы. #76988 (alesapin).
  • Представлена экспериментальная интеграция с каталогом сервисов AWS Glue для таблиц Iceberg. #77257 (alesapin).
  • Добавлена поддержка динамического автообнаружения кластеров. Это расширяет существующую функцию автообнаружения node. ClickHouse теперь может автоматически обнаруживать и регистрировать новые clusters по общему пути в 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).
  • Реализованы улучшения парсинга для некоторых озер данных (парсинг идентификаторов последовательности: добавлена возможность разбора идентификаторов последовательности в manifest-файлах и парсинг Avro-метаданных: переработан парсер Avro-метаданных так, чтобы его было легко расширять для будущих улучшений). #75010 (Daniil Ivanik).
  • Из ORDER BY по умолчанию для таблицы system.opentelemetry_span_log удалён trace_id. #75907 (Azat Khuzhin).
  • Шифрование (атрибут encrypted_by) теперь можно применять к любому конфигурационному файлу (config.xml, users.xml, вложенным конфигурационным файлам). Ранее оно работало только для корневого файла config.xml. #75911 (Mikhail Gorshkov).
  • Улучшена таблица system.warnings и добавлена поддержка динамических сообщений-предупреждений, которые можно добавлять, обновлять и удалять. #76029 (Bharat Nallan).
  • Этот PR делает невозможным выполнение запроса ALTER USER user1 ADD PROFILES a, DROP ALL PROFILES, поскольку все операции DROP должны располагаться первыми. #76242 (pufit).
  • Различные улучшения в SYNC REPLICA (более информативные сообщения об ошибках, улучшенные тесты, проверки корректности). #76307 (Azat Khuzhin).
  • Теперь используется корректный резервный механизм, когда multipart‑копирование в S3 завершается с ошибкой Access Denied во время резервного копирования. Multipart‑копирование может приводить к ошибке Access Denied, когда резервное копирование выполняется между бакетами с разными учётными данными доступа. #76515 (Antonio Andelic).
  • Обновлена librdkafka (которая представляет собой кучу мусора) до версии 2.8.0 (и эта куча от этого не становится лучше) и улучшена последовательность завершения работы таблиц Kafka, что сократило задержки при удалении таблиц и перезапуске сервера. engine=Kafka больше не выходит из группы потребителей явно при удалении таблицы. Вместо этого потребитель остается в группе до тех пор, пока не будет автоматически удалён после периода бездействия, равного session_timeout_ms (по умолчанию — 45 секунд). #76621 (filimonov).
  • Исправлена валидация настроек запросов к S3. #76658 (Vitaly Baranov).
  • Системные таблицы, такие как server_settings или settings, имеют столбец default со значением по умолчанию, что удобно. Такой столбец добавлен в merge_tree_settings и replicated_merge_tree_settings. #76942 (Diego Nieto).
  • Добавлен ProfileEvents::QueryPreempted, который работает по той же логике, что и CurrentMetrics::QueryPreempted. #77015 (VicoWu).
  • Ранее реплицируемая база данных могла выводить в логи учетные данные, указанные в запросе. Это поведение исправлено. Исправлено: #77123. #77133 (Nikita Mikhaylov).
  • Разрешен ALTER TABLE DROP PARTITION для диска plain_rewritable. #77138 (Julia Kartseva).
  • Параметр резервного копирования и восстановления allow_s3_native_copy теперь поддерживает три возможных значения: - False — S3 native copy не будет использоваться; - True (старое значение по умолчанию) — ClickHouse сначала попробует S3 native copy и, если это не удастся, переключится на подход «чтение+запись»; - 'auto' (новое значение по умолчанию) — ClickHouse сначала сравнит учетные данные источника и назначения. Если они совпадают, ClickHouse попробует S3 native copy и затем при необходимости может переключиться на подход «чтение+запись». Если они различаются, ClickHouse сразу перейдет к подходу «чтение+запись». #77401 (Vitaly Baranov).
  • Добавлена поддержка использования AWS 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).
  • Не запрашивать интерактивную Basic-аутентификацию в браузере Web UI. Закрывает #76319. #76637 (Alexey Milovidov).
  • Исправлено исключение THERE_IS_NO_COLUMN, возникавшее при выборке логического литерала из distributed таблиц. #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-печать логических значений 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).
  • Исправлена работа индекса bloom filter с типом данных Array и неподдерживаемыми функциями. #77271 (Pavel Kruglov).
  • Следует проверять ограничение на число таблиц только при выполнении исходного запроса CREATE. #77274 (Nikolay Degterinsky).
  • Это не ошибка: SELECT toBFloat16(-0.0) == toBFloat16(0.0) теперь корректно возвращает true (ранее возвращал false). Это делает поведение согласованным с Float32 и Float64. #77290 (Shankar Iyer).
  • Исправлена возможная ошибочная ссылка на неинициализированную переменную key_index, которая может приводить к падению в отладочных сборках (эта неинициализированная ссылка не вызывает проблем в релизных сборках, потому что последующий код, скорее всего, выбросит исключение). ### запись в документации об изменениях, затрагивающих пользователей. #77305 (wxybear).
  • Исправлено имя партиции для значения типа Bool. Ошибка была внесена в https://github.com/ClickHouse/ClickHouse/pull/74533. #77319 (Pavel Kruglov).
  • Исправлено сравнение между кортежами, содержащими Nullable-элементы, и строками. Например, до изменения сравнение между Tuple (1, null) и String '(1,null)' приводило к ошибке. Другой пример — сравнение между Tuple (1, a), где a — столбец типа Nullable, и String '(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).
  • Добавлена поддержка подстолбцов в выражениях DEFAULT и MATERIALIZED. #74403 (Pavel Kruglov).
  • Добавлена поддержка записи bloom-фильтров Parquet с помощью настройки output_format_parquet_write_bloom_filter (включена по умолчанию). #71681 (Michael Kolupaev).
  • В Web UI теперь доступна интерактивная навигация по базам данных. #75777 (Alexey Milovidov).
  • Разрешена комбинация дисков только для чтения и с поддержкой записи в политике хранения (как в виде нескольких томов, так и в виде нескольких дисков). Это позволяет читать данные со всего тома, при этом вставки будут выполняться на диск с поддержкой записи (то есть политика хранения Copy-on-Write). #75862 (Azat Khuzhin).
  • Добавлен новый движок базы данных DatabaseBackup, который позволяет мгновенно подключать таблицу/базу данных из резервной копии. #75725 (Maksim Kita).
  • Добавлена поддержка подготовленных запросов (prepared statements) в протоколе Postgres wire. #75035 (scanhex12).
  • Добавлена возможность ATTACH таблиц без уровня базы данных, что полезно для таблиц MergeTree, размещённых в Web, S3 и аналогичных внешних виртуальных файловых системах. #75788 (Azat Khuzhin).
  • Добавлена новая функция сравнения строк compareSubstrings для сравнения частей двух строк. Пример: SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS result означает «сравнить 6 байт строк „Saxon“ и „Anglo-Saxon“ лексикографически, начиная со смещения 0 в первой строке и со смещения 5 во второй строке». #74070 (lgbo).
  • Добавлена новая функция initialQueryStartTime. Она возвращает время начала текущего запроса. Значение одинаково на всех сегментах при распределённом запросе. #75087 (Roman Lomonosov).
  • Добавлена поддержка SSL-аутентификации с именованными коллекциями для MySQL. Закрывает #59111. #59452 (Nikolay Degterinsky).

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

  • Добавлена новая настройка enable_adaptive_memory_spill_scheduler, которая позволяет нескольким операциям Grace JOIN в одном запросе отслеживать их суммарный объём потребляемой памяти и адаптивно инициировать сброс данных во внешнее хранилище, чтобы предотвратить MEMORY_LIMIT_EXCEEDED. #72728 (lgbo).
  • Новый экспериментальный движок таблиц Kafka теперь полностью учитывает функциональные флаги 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 в случае, когда стороны JOIN меняются местами оптимизатором. #75149 (Nikita Taranov).
  • Небольшое улучшение в некоторых сценариях JOIN: предварительно вычисляется количество выходных строк и заранее резервируется память под них. #75376 (Alexander Gololobov).
  • Для запросов вида WHERE a < b AND b < c AND c < 5 теперь можно выводить дополнительные условия сравнения (a < 5 AND b < 5) для повышения эффективности фильтрации. #73164 (Shichao Jin).
  • Улучшение в Keeper: отключено вычисление дайджеста при коммите в in-memory‑хранилище для повышения производительности. Его можно включить с помощью настройки keeper_server.digest_enabled_on_commit. Дайджест по-прежнему вычисляется при предварительной обработке запросов. #75490 (Antonio Andelic).
  • При возможности выполняется проталкивание (push down) выражения фильтра из JOIN ON. #75536 (Vladimir Cherkasov).
  • Ленивый расчет размеров столбцов и индексов в MergeTree. #75938 (Pavel Kruglov).
  • Повторно учтен параметр ttl_only_drop_parts при выполнении MATERIALIZE TTL; читаются только необходимые столбцы для пересчета TTL, а части удаляются путем замены их пустыми. #72751 (Andrey Zvonov).
  • Уменьшен размер буфера записи для файлов метаданных plain_rewritable. #75758 (Julia Kartseva).
  • Снижено потребление памяти некоторыми оконными функциями. #65647 (lgbo).
  • Оценка Bloom-фильтров Parquet и 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/NoContent. #74170 (Michael Dempsey).
  • Добавлена возможность изменять max_remote_read_network_bandwidth_for_serve и max_remote_write_network_bandwidth_for_server на лету без перезапуска сервера. #74206 (Kai Zhu).
  • Добавлена возможность использовать пути к BLOB-объектам для вычисления контрольных сумм при создании резервной копии. #74729 (Vitaly Baranov).
  • Добавлен столбец идентификатора запроса в system.query_cache (закрывает #68205). #74982 (NamHoaiNguyen).
  • Теперь разрешено отменять запросы ALTER TABLE ... FREEZE ... с помощью команды KILL QUERY, а также автоматически по истечении тайм-аута (max_execution_time). #75016 (Kirill).
  • Добавлена поддержка groupUniqArrayArrayMap в качестве SimpleAggregateFunction. #75034 (Miel Donkers).
  • В движке базы данных Iceberg скрыты параметры учетных данных каталога. Закрывает #74559. #75080 (Kseniia Sumarokova).
  • intExp2 / intExp10: Определено поведение для ранее неопределённых случаев: возвращать 0 при слишком малом аргументе, 18446744073709551615 при слишком большом аргументе и выбрасывать исключение, если аргумент — nan. #75312 (Vitaly Baranov).
  • Добавлена нативная поддержка параметра s3.endpoint из конфигурации каталога в DatabaseIceberg. Закрывает #74558. #75375 (Kseniia Sumarokova).
  • Не завершать выполнение команды без сообщения об ошибке, если у пользователя, выполняющего SYSTEM DROP REPLICA, недостаточно прав. #75377 (Bharat Nallan).
  • Добавлен ProfileEvent, фиксирующий количество неудачных попыток сброса любого из системных журналов. #75466 (Alexey Milovidov).
  • Добавлена проверка и дополнительное логирование для расшифровки и распаковки. #75471 (Vitaly Baranov).
  • Добавлена поддержка символа микро (U+00B5) в функции parseTimeDelta. Теперь и символ микро (U+00B5), и греческая буква «мю» (U+03BC) распознаются как допустимые обозначения микросекунд, что приводит поведение ClickHouse в соответствие с реализацией Go (см. time.go и time/format.go). #75472 (Vitaly Orlov).
  • Серверная настройка (send_settings_to_client) заменена на клиентскую (apply_settings_from_server), которая определяет, должен ли клиентский код (например, разбор данных INSERT и форматирование вывода запроса) использовать настройки из users.xml сервера и профиля пользователя. В противном случае используются только настройки, заданные в командной строке клиента, сессии и запросе. Обратите внимание, что это относится только к нативному клиенту (а не, например, к HTTP) и не применяется к большей части обработки запроса (которая выполняется на сервере). #75478 (Michael Kolupaev).
  • Улучшены сообщения о синтаксических ошибках. Ранее, если запрос был слишком большим, и токен, длина которого превышает лимит, представлял собой очень большой строковый литерал, сообщение о причине ошибки терялось посреди двух примеров этого очень длинного токена. Исправлена проблема, когда запрос в кодировке UTF-8 некорректно обрезался в сообщении об ошибке. Исправлено избыточное экранирование фрагментов запроса. Исправление закрывает #75473. #75561 (Alexey Milovidov).
  • В хранилище S3(Azure)Queue добавлены события профиля. #75618 (Kseniia Sumarokova).
  • Отключена отправка настроек с сервера на клиент (send_settings_to_client=false) для совместимости (позже эта функция будет реализована на стороне клиента как настройка для улучшения удобства использования). #75648 (Michael Kolupaev).
  • Добавлен конфигурационный параметр memory_worker_correct_memory_tracker, который включает корректировку внутреннего трекера памяти с использованием информации из различных источников, периодически считываемой фоновым потоком. #75714 (Antonio Andelic).
  • Добавлен столбец normalized_query_hash в system.processes. Примечание: хотя его можно легко вычислить на лету с помощью функции normalizedQueryHash, он требуется для подготовки к последующим изменениям. #75756 (Alexey Milovidov).
  • Выполнение запроса к system.tables больше не приводит к исключению, даже если существует таблица Merge, созданная поверх уже несуществующей базы данных. Метод getTotalRows удалён из таблиц Hive, поскольку мы не допускаем, чтобы он выполнял сложные операции. #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. Это полезно, чтобы принудительно заставить все запросы использовать планирование по workload. #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_SIMULTANЕОUS_QUERIES. #76352 (Patrick Galbraith).
  • Добавлена асинхронная метрика CPUOverload, рассчитывающая относительный дефицит CPU сервера. #76404 (Alexey Milovidov).
  • Изменено значение параметра output_format_pretty_max_rows по умолчанию с 10000 на 1000. Считаю, что так удобнее. #76407 (Alexey Milovidov).

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

  • Исправлено форматирование исключений: если они возникают во время интерпретации запроса, используется пользовательский формат. В предыдущих версиях исключения форматировались с использованием формата по умолчанию, а не формата, указанного в запросе. Закрывает #55422. #74994 (Alexey Milovidov).
  • Исправлено сопоставление типов для SQLite (целочисленные типы в int64, числа с плавающей запятой в float64). #73853 (Joanna Hulboj).
  • Исправлено разрешение идентификаторов из внешних областей видимости. Добавлена возможность использовать псевдонимы для выражений в предложении WITH. Исправляет #58994. Исправляет #62946. Исправляет #63239. Исправляет #65233. Исправляет #71659. Исправляет #71828. Исправляет #68749. #66143 (Dmitry Novik).
  • Исправлена ошибка в монотонности функции negate. В предыдущих версиях запрос select * from a where -x = -42;, где x — первичный ключ, мог вернуть неверный результат. #71440 (Michael Kolupaev).
  • Исправлена обработка пустых кортежей в функции arrayIntersect. Это устраняет #72578. #72581 (Amos Bird).
  • Исправлено чтение подстолбцов подобъектов JSON с некорректным префиксом. #73182 (Pavel Kruglov).
  • Обеспечена корректная передача настроек формата Native при клиент-серверном взаимодействии. #73924 (Pavel Kruglov).
  • Добавлена проверка на неподдерживаемые типы для некоторых хранилищ. #74218 (Pavel Kruglov).
  • Исправлена ошибка, приводившая к падению при выполнении запроса INSERT INTO SELECT через интерфейс PostgreSQL на macOS (issue #72938). #74231 (Artem Yurov).
  • Исправлен неинициализированный max_log_ptr в реплицируемой базе данных. #74336 (Konstantин Morozov).
  • Исправлено аварийное завершение при вставке интервала (issue #74299). #74478 (NamHoaiNguyen).
  • Исправлено форматирование константных JSON-литералов. Ранее это могло приводить к синтаксическим ошибкам при отправке запроса на другой сервер. #74533 (Pavel Kruglov).
  • Исправлена некорректная работа запроса CREATE при использовании константных выражений партиционирования с включёнными неявными проекциями. Исправляет #74596. #74634 (Amos Bird).
  • Не оставлять соединение в некорректном состоянии после завершения INSERT с исключением. #74740 (Azat Khuzhin).
  • Исключено повторное использование соединений, оставленных в промежуточном состоянии. #74749 (Azat Khuzhin).
  • Исправлена ошибка, приводившая к сбою при разборе объявления типа JSON, когда имя типа указано не в верхнем регистре. #74784 (Pavel Kruglov).
  • Keeper: исправлена ошибка logical_error, возникавшая при разрыве соединения до его установления. #74844 (Michael Kolupaev).
  • Исправлена ошибка, из-за которой сервер не мог запуститься, если была таблица, использующая AzureBlobStorage. Таблицы загружаются без каких-либо запросов к Azure. #74880 (Alexey Katsman).
  • Добавлены отсутствующие поля used_privileges и missing_privileges в query_log для операций BACKUP и RESTORE. #74887 (Alexey Katsman).
  • В HDFS обновлять krb‑тикет в случае ошибки SASL во время запроса hdfs select. #74930 (inv2004).
  • Исправлены запросы к реплицируемой базе данных в startup_scripts. #74942 (Azat Khuzhin).
  • Исправлены проблемы с выражениями, тип которых задан через псевдоним в условии JOIN ON при использовании null-safe сравнения. #74970 (Vladimir Cherkasov).
  • Возвращать состояние парта из deleting обратно в outdated при неудаче операции удаления. #74985 (Sema Checherinda).
  • В предыдущих версиях при наличии скалярного подзапроса мы начинали выводить информацию о прогрессе (накапливаемую при обработке подзапроса) во время инициализации формата данных, то есть до записи HTTP-заголовков. Это приводило к потере HTTP-заголовков, таких как X-ClickHouse-QueryId и X-ClickHouse-Format, а также заголовка Content-Type. #74991 (Alexey Milovidov).
  • Исправлена работа запросов CREATE TABLE AS... при database_replicated_allow_replicated_engine_arguments=0. #75000 (Bharat Nallan).
  • Исправлена проблема, при которой соединение в клиенте оставалось в некорректном состоянии после исключений при выполнении INSERT. #75030 (Azat Khuzhin).
  • Исправлено аварийное завершение работы из-за необработанного исключения в репликации PSQL. #75062 (Azat Khузhin).
  • SASL мог приводить к сбою любого вызова RPC; исправление позволяет повторить вызов в случае истечения билета krb5. #75063 (inv2004).
  • Исправлена работа индексов (первичных и вторичных) для столбцов типа Array, Map и Nullable(..) при включённой настройке optimize_function_to_subcolumns. Ранее индексы для таких столбцов могли игнорироваться. #75081 (Anton Popov).
  • Отключите flatten_nested при создании materialized views с внутренними таблицами, так как использовать такие сплющенные столбцы будет невозможно. #75085 (Christoph Wurm).
  • Исправлена ошибка интерпретации некоторых IPv6-адресов (таких как ::ffff:1.1.1.1) в поле forwarded_for, приводившая к отключению клиента с исключением. #75133 (Yakov Olkhovskiy).
  • Исправлена обработка null-safe JOIN для типа данных LowCardinality Nullable. Ранее JOIN с null-safe сравнением в условии ON, таким как IS NOT DISTINCT FROM, <=>, a IS NULL AND b IS NULL OR a == b, работал некорректно со столбцами LowCardinality. #75143 (Vladimir Cherkasov).
  • Теперь проверяется, что key_condition не указывается при подсчёте total_number_of_rows для NumRowsCache. #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 по distributed-таблицам. #75512 (Pavel Kruglov).
  • Исправлена ошибка, приводившая к порче данных при использовании CODEC(ZSTD, DoubleDelta). Закрывает #70031. #75548 (Konstantin Bogdanov).
  • Исправлено взаимодействие между allow_feature_tier и параметром совместимости движка MergeTree. #75635 (Raúl Marín).
  • Исправлено некорректное значение processed_rows в system.s3queue_log в случае повторной попытки обработки файла. #75666 (Kseniia Sumarokova).
  • Учитывать параметр materialized_views_ignore_errors, когда materialized view пишет в движок 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 для скалярных подзапросов при использовании Analyzer. #75732 (Nikolai Kochetov).
  • Исправлено разыменование нулевого указателя в DistinctSortedStreamTransform. #75734 (Nikita Taranov).
  • Исправлено поведение настройки allow_suspicious_ttl_expressions. #75771 (Aleksei Filatov).
  • Исправлено чтение неинициализированной памяти в функции translate. Это исправление закрывает #75592. #75794 (Alexey Milovidov).
  • Распространять настройки формата на JSON как строковое форматирование в формате Native. #75832 (Pavel Kruglov).
  • В историю изменений настроек внесено включение по умолчанию параллельного хеша как алгоритма JOIN в v24.12. Это означает, что ClickHouse продолжит выполнять JOIN, используя непараллельный хеш, если настроен уровень совместимости старее v24.12. #75870 (Robert Schulze).
  • Исправлена ошибка, из-за которой таблицы с неявно добавленными min-max-индексами было невозможно скопировать в новую таблицу (#75677). #75877 (Smita Kulkarni).
  • clickhouse-library-bridge позволяет загружать произвольные библиотеки из файловой системы, поэтому его безопасно запускать только в изолированной среде. Чтобы предотвратить уязвимость при запуске рядом с clickhouse-server, мы ограничим пути к библиотекам расположением, заданным в конфигурации. Эта уязвимость была обнаружена в рамках ClickHouse Bug Bounty Program Арсением Дугиным. #75954 (Alexey Milovidov).
  • Мы по случайности использовали сериализацию в JSON для некоторых метаданных, что оказалось ошибкой, потому что JSON не поддерживает двоичные данные внутри строковых литералов, включая нулевые байты. SQL‑запросы могут содержать двоичные данные и некорректный UTF‑8, поэтому мы должны поддерживать это и в наших файлах метаданных. В то же время форматы ClickHouse JSONEachRow и подобные ему обходят это ограничение, намеренно отклоняясь от стандарта JSON ради идеального round-trip для двоичных данных. Мотивацию см. здесь: 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 как на ARM, так и на Intel Mac. #74244 (Yan Xin).
  • Включены ICU и GRPC при кросс-компиляции под Darwin. #75922 (Raúl Marín).
  • Обновление встроенного LLVM до версии 19. #75148 (Konstantin Bogdanov).
  • Отключён сетевой доступ для пользователя по умолчанию в docker-образе. #75259 (Mikhail f. Shiryaev). Все действия, связанные с clickhouse-server, вынесены в функцию и выполняются только при запуске бинарного файла по умолчанию в entrypoint.sh. Давно откладываемое улучшение было предложено в #50724. Добавлен флаг --users к clickhouse-extract-from-config для получения значений из users.xml. #75643 (Mikhail f. Shiryaev).
  • Удалено около 20 МБ «мёртвого» кода из исполняемого файла. #76226 (Alexey Milovidov).

Релиз ClickHouse 25.1, 2025-01-28

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

  • JSONEachRowWithProgress будет выводить прогресс каждый раз при его обновлении. В предыдущих версиях прогресс показывался только после каждого блока результата, что делало его бесполезным. Изменён способ отображения прогресса: нулевые значения не отображаются. Это закрывает #70800. #73834 (Alexey Milovidov).
  • Таблицы Merge будут унифицировать структуру базовых таблиц, используя объединение их столбцов и выводя общие типы. Это закрывает #64864. В некоторых случаях это изменение может быть несовместимым с предыдущими версиями. Один из примеров — когда нет общего типа между таблицами, но преобразование к типу первой таблицы всё ещё возможно, как в случае UInt64 и Int64 или любого числового типа и String. Если вы хотите вернуться к старому поведению, установите merge_table_max_tables_to_look_for_schema_inference в значение 1 или установите compatibility в 24.12 или более раннее значение. #73956 (Alexey Milovidov).
  • Формат вывода Parquet конвертирует столбцы Date и DateTime в типы даты/времени, поддерживаемые Parquet, вместо записи их как «сырых» чисел. DateTime становится DateTime64(3) (было: UInt32); установка output_format_parquet_datetime_as_uint32 возвращает старое поведение. Date становится Date32 (было: UInt16). #70950 (Michael Kolupaev).
  • По умолчанию больше не допускаются несравнимые типы (такие как JSON/Object/AggregateFunction) в ORDER BY и в функциях сравнения less/greater/equal/etc. #73276 (Pavel Kruglov).
  • Устаревший движок базы данных MaterializedMySQL удалён и больше недоступен. #73879 (Alexey Milovidov).
  • Источник словаря mysql больше не выполняет запрос SHOW TABLE STATUS, потому что он не даёт полезной информации для таблиц InnoDB, как и для любых недавних версий MySQL. Это закрывает #72636. Это изменение обратно совместимо, но оно помещено в этот раздел, чтобы у вас была возможность его заметить. #73914 (Alexey Milovidov).
  • Запросы CHECK TABLE теперь требуют отдельной привилегии CHECK. В предыдущих версиях было достаточно привилегии SHOW TABLES, чтобы выполнять эти запросы. Но запрос CHECK TABLE может быть «тяжёлым», и обычные лимиты сложности запросов для запросов SELECT к нему не применяются. Это создавало риск DoS. #74471 (Alexey Milovidov).
  • Функция h3ToGeo() теперь возвращает результат в порядке (lat, lon) (что является стандартным порядком для геометрических функций). Пользователи, которые хотят сохранить устаревший порядок результата (lon, lat), могут установить настройку h3togeo_lon_lat_result_order = true. #74719 (Manish Gill).
  • Новый драйвер MongoDB теперь используется по умолчанию. Пользователи, которые хотят продолжать использовать устаревший драйвер, могут установить серверную настройку use_legacy_mongodb_integration в значение true. #73359 (Robert Schulze).

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

  • Добавлена возможность применять незавершённые (не материализованные фоновым процессом) мутации при выполнении запросов SELECT — сразу после их отправки. Это можно включить с помощью настройки apply_mutations_on_fly. #74877 (Anton Popov).
  • Реализовано отсечение партиций (partition pruning) таблиц Iceberg для операций партиционирования с временными преобразованиями в Iceberg. #72044 (Daniil Ivanik).
  • Добавлена поддержка подстолбцов в ключе сортировки таблиц MergeTree и в пропускающих индексах. #72644 (Pavel Kruglov).
  • Добавлена поддержка чтения значений HALF_FLOAT из Apache Arrow/Parquet/ORC (они считываются в Float32). Это закрывает #72960. Имейте в виду, что формат half float по стандарту IEEE-754 — это не то же самое, что BFloat16. Также закрывает #73835. #73836 (Alexey Milovidov).
  • Таблица system.trace_log будет содержать два новых столбца, symbols и lines, в которых хранится символизированный стек-трейс. Это позволяет легко собирать и экспортировать профильную информацию. Поведение управляется параметром конфигурации сервера symbolize в trace_log и по умолчанию включено. #73896 (Alexey Milovidov).
  • Добавлена новая функция generateSerialID, которую можно использовать для генерации автоинкрементных идентификаторов в таблицах. Продолжение #64310 от kazalika. Закрывает #62485. #73950 (Alexey Milovidov).
  • Добавлен синтаксис query1 PARALLEL WITH query2 PARALLEL WITH query3 ... PARALLEL WITH queryN для DDL-запросов. Это означает, что запросы {query1, query2, ... queryN} могут выполняться параллельно друг с другом (и это предпочтительно). #73983 (Vitaly Baranov).
  • Добавлен кэш в оперативной памяти для десериализованных гранул пропускающего индекса. Это должно ускорить повторные запросы, использующие пропускающие индексы. Размер нового кэша управляется серверными настройками skipping_index_cache_size и skipping_index_cache_max_entries. Исходной мотивацией для добавления кэша были индексы векторного сходства, которые теперь работают значительно быстрее. #70102 (Robert Schulze).
  • Теперь во встроенном веб-интерфейсе во время выполнения запроса отображается индикатор прогресса. Он позволяет отменять запросы. Отображается общее количество строк и расширенная информация о скорости. Таблица может отображаться постепенно по мере поступления данных. Добавлена поддержка HTTP-сжатия. Отрисовка таблицы стала быстрее. Заголовок таблицы закреплён. Появилась возможность выделять ячейки и перемещаться по ним с помощью клавиш-стрелок. Исправлена проблема, при которой контур выделенной ячейки делал её меньше. Ячейки больше не расширяются при наведении курсора, а только при выборе. Момент остановки отрисовки входящих данных теперь определяется на стороне клиента, а не сервера. Добавлена подсветка разрядов в числах. Общий дизайн был обновлён и стал более выразительным. Выполняется проверка доступности сервера и корректности учётных данных, а также отображается версия сервера и время его работы. Значок облака контурный во всех шрифтах, включая Safari. Большие целые числа во вложенных типах данных будут отображаться лучше. Значения inf/nan будут отображаться корректно. При наведении курсора на заголовок столбца будут отображаться типы данных. #74204 (Alexey Milovidov).
  • Добавлена возможность по умолчанию создавать min-max (пропускающие) индексы для столбцов, управляемых движком 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).
  • Не перечислять ключи объектного хранилища, если в табличной функции используется только раскрытие фигурных скобок. Closes #73333. #73518 (Konstantin Bogdanov).
  • Оптимизация вычислений с коротким замыканием для функций с аргументами типа Nullable. #73820 (李扬).
  • Не применять maskedExecute к нефункциональным столбцам; улучшена производительность выполнения с коротким замыканием. #73965 (lgbo).
  • Отключено автоматическое определение заголовков во входных форматах для Kafka/NATS/RabbitMQ/FileLog для повышения производительности. #74006 (Azat Khuzhin).
  • Выполнять конвейер с большей степенью параллелизма после агрегации с GROUPING SETS. #74082 (Nikita Taranov).
  • Сокращена критическая секция в MergeTreeReadPool. #74202 (Guo Wangyang).
  • Улучшена производительность параллельных реплик. Десериализация пакетов на инициаторе запроса для пакетов, не относящихся к протоколу параллельных реплик, теперь всегда выполняется в потоке конвейера. Ранее она могла выполняться в потоке, отвечающем за планирование конвейера, что могло делать инициатор менее отзывчивым и задерживать выполнение конвейера. #74398 (Igor Nikonov).
  • Улучшена производительность крупных многозапросных операций в Keeper. #74849 (Antonio Andelic).
  • Используйте логовые обёртки по значению и не размещайте их в куче. #74034 (Mikhail Artemenko).
  • Восстановление соединения с репликами словарей MySQL и Postgres в фоновом режиме, чтобы не задерживать запросы к соответствующим словарям. #71101 (Yakov Olkhovskiy).
  • Параллельные реплики использовали исторические данные о доступности реплик для улучшения выбора реплики, но не обновляли счётчик ошибок реплики, когда подключение было недоступно. Этот PR обновляет счётчик ошибок реплики при её недоступности. #72666 (zoomxi).
  • Добавлена настройка движка MergeTree materialize_skip_indexes_on_merge, которая предотвращает создание skip-индексов во время слияния. Это позволяет явно контролировать (через ALTER TABLE [..] MATERIALIZE INDEX [...]), когда создаются skip-индексы. Это может быть полезно, если построение skip-индексов дорогостояще (например, индексов векторной близости). #74401 (Robert Schulze).
  • Оптимизированы запросы к Keeper в Storage(S3/Azure)Queue. #74410 (Kseniia Sumarokova). #74538 (Kseniia Sumarokova).
  • По умолчанию можно использовать до 1000 параллельных реплик. #74504 (Konstantin Bogdanov).
  • Улучшено повторное использование HTTP-сеансов при чтении с S3-диска (#72401). #74548 (Julian Maicher).

Улучшения

  • Добавлена поддержка использования SETTINGS в запросе CREATE TABLE с неявным ENGINE и возможность комбинировать настройки движка и запроса. #73120 (Raúl Marín).
  • Включено использование use_hive_partitioning по умолчанию. #71636 (Yarik Briukhovetskyi).
  • Добавлена поддержка CAST и ALTER между типами JSON с разными параметрами. #72303 (Pavel Kruglov).
  • Добавлена поддержка сравнения на равенство значений в столбце JSON. #72991 (Pavel Kruglov).
  • Улучшено форматирование идентификаторов с JSON-подстолбцами, чтобы избежать лишнего использования обратных кавычек. #73085 (Pavel Kruglov).
  • Улучшена работа интерактивных метрик. Исправлена проблема, при которой метрики от параллельных реплик отображались не полностью. Метрики теперь отображаются в порядке последнего обновления, а затем лексикографически по имени. Устаревшие метрики не отображаются. #71631 (Julia Kartseva).
  • Сделать формат вывода JSON по умолчанию удобочитаемым. Добавить новую настройку output_format_json_pretty_print для управления этим поведением и включить её по умолчанию. #72148 (Pavel Kruglov).
  • Разрешить LowCardinality(UUID) по умолчанию. Это показало свою практическую полезность среди клиентов ClickHouse Cloud. #73826 (Alexey Milovidov).
  • Улучшено сообщение при установке. #73827 (Alexey Milovidov).
  • Улучшено уведомление о сбросе пароля для ClickHouse Cloud. #73831 (Alexey Milovidov).
  • Улучшено сообщение об ошибке для таблицы File при невозможности дозаписи в файл. #73832 (Alexey Milovidov).
  • Запрашивать подтверждение, если пользователь по ошибке пытается вывести в терминал данные в бинарном формате (например, Native, Parquet, Avro). Закрывает #59524. #73833 (Alexey Milovidov).
  • В форматах Pretty и Vertical в терминале теперь подсвечиваются завершающие пробелы для лучшей наглядности. Поведение управляется настройкой output_format_pretty_highlight_trailing_spaces. Первоначальная реализация выполнена Braden Burns в #72996. Закрывает #71590. #73847 (Alexey Milovidov).
  • clickhouse-client и clickhouse-local автоматически определяют тип сжатия стандартного ввода (stdin), если он перенаправлен из файла. Это закрывает #70865. #73848 (Alexey Milovidov).
  • По умолчанию слишком длинные имена столбцов в форматах Pretty обрезаются. Это поведение управляется настройками output_format_pretty_max_column_name_width_cut_to и output_format_pretty_max_column_name_width_min_chars_to_cut. Является продолжением работы tanmaydatta в #66502. Закрывает #65968. #73851 (Alexey Milovidov).
  • Сделаны форматы Pretty ещё более удобочитаемыми: блоки схлопываются, если с момента вывода предыдущего блока прошло мало времени. Поведение управляется новыми настройками output_format_pretty_squash_consecutive_ms (по умолчанию 50 мс) и output_format_pretty_squash_max_wait_ms (по умолчанию 1000 мс). Продолжение #49537. Закрывает #49153. #73852 (Alexey Milovidov).
  • Добавлена метрика количества исходных частей, которые в данный момент сливаются. Это закрывает #70809. #73868 (Alexey Milovidov).
  • Подсвечивать столбцы в формате Vertical, если вывод идет в терминал. Это можно отключить с помощью настройки output_format_pretty_color. #73898 (Alexey Milovidov).
  • Повышена совместимость с MySQL до уровня, при котором mysqlsh (функциональная CLI‑утилита MySQL от Oracle) теперь может подключаться к ClickHouse. Это необходимо для упрощения тестирования. #73912 (Alexey Milovidov).
  • Форматы Pretty поддерживают отображение многострочных полей внутри ячейки таблицы, что улучшает читаемость. Это поведение включено по умолчанию и может управляться с помощью настройки output_format_pretty_multiline_fields. Продолжение работы Volodyachan в #64094. Это закрывает #56912. #74032 (Alexey Milovidov).
  • Теперь HTTP-заголовки X-ClickHouse могут быть доступны JavaScript в браузере. Это упрощает разработку приложений. #74180 (Alexey Milovidov).
  • Формат JSONEachRowWithProgress теперь включает события с метаданными, а также totals и extremes. Он также включает rows_before_limit_at_least и rows_before_aggregation. Формат корректно выводит исключение, если оно приходит после частичных результатов. Теперь прогресс содержит прошедшее время в наносекундах. В конце генерируется одно финальное событие прогресса. Прогресс во время выполнения запроса будет выводиться не чаще, чем это допускает значение настройки interactive_delay. #74181 (Alexey Milovidov).
  • Иконка песочных часов теперь будет плавно вращаться в интерфейсе Play. #74182 (Alexey Milovidov).
  • Даже если HTTP‑ответ сжат, отправляйте пакеты сразу, как только они поступают. Это позволяет браузеру получать пакеты прогресса и сжатые данные. #74201 (Alexey Milovidov).
  • Если количество выводимых строк превышает N = output_format_pretty_max_rows, вместо отображения только первых N строк выходная таблица будет усечена в середине: будут показаны N/2 первых строк и N/2 последних строк. Продолжение #64200. Тем самым закрывается #59502. #73929 (Alexey Milovidov).
  • Разрешено использование более общего алгоритма планирования соединений (JOIN), когда включён алгоритм 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).
  • Добавлен псевдоним столбца metricname в таблицу system.asynchronous_metrics. #71164 (megao).
  • Исторически по какой‑то причине запрос ALTER TABLE MOVE PARTITION TO TABLE проверял права SELECT и ALTER DELETE вместо отдельного права ALTER_MOVE_PARTITION. В этом PR используется этот тип доступа. Для совместимости это право доступа также будет неявно предоставляться, если предоставлены SELECT и ALTER DELETE, но это поведение будет удалено в будущих релизах. Закрывает #16403. #71632 (pufit).
  • Вызывать исключение при попытке материализовать столбец, входящий в ключ сортировки, вместо того чтобы допускать нарушение порядка сортировки. #71891 (Peter Nguyen).
  • Скрытие секретов в выводе EXPLAIN QUERY TREE. #72025 (Yakov Olkhovskiy).
  • Добавлена поддержка логических целочисленных типов Parquet в «native» ридере. #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. Этот столбец необходим для добавления новой метрики для зависших мутаций и использования её для построения графиков ошибок, возникающих в Cloud, а также, при необходимости, нового, менее шумного оповещения. #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).
  • Использовать multi-запросы 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 прогресс между источниками теперь агрегируется для сравнения с параметрами предельного значения фиксации (commit limit). #73641 (Kseniia Sumarokova).
  • Добавлена поддержка базовых настроек в запросе BACKUP/RESTORE. #73650 (Vitaly Baranov).
  • При выводе в формате Parquet учитывает параметр output_format_compression_level. #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 для совместимости с протоколом взаимодействия PostgreSQL (wire protocol). #73812 (scanhex12).
  • Функция isIPv4String возвращала значение true, если за корректным IPv4‑адресом следовал нулевой байт, хотя в этом случае она должна была возвращать false. Продолжение #65387. #73946 (Alexey Milovidov).
  • Сделать код ошибки в сетевом протоколе MySQL (MySQL wire protocol) совместимым с 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‑запросе materialized view. #74030 (Pavel Kruglov).
  • Теперь есть три простых способа задать настраиваемый prompt в clickhouse-client: 1) через параметр командной строки --prompt, 2) в конфигурационном файле, через настройку <prompt>[...]</prompt>, и 3) также в конфигурационном файле, через настройки для отдельных подключений <connections_credentials><prompt>[...]</prompt></connection_credentials>. #74168 (Christoph Wurm).
  • Автоматическое определение защищённого соединения при подключении к порту 9440 в клиенте ClickHouse. #74212 (Christoph Wurm).
  • Разрешить аутентификацию пользователей только по имени пользователя для http_handlers (ранее также требовалось указывать пароль). #74221 (Azat Khuzhin).
  • Поддержка альтернативных языков запросов PRQL и KQL помечена как экспериментальная. Для их использования установите настройки allow_experimental_prql_dialect = 1 и allow_experimental_kusto_dialect = 1. #74224 (Robert Schulze).
  • Расширена поддержка возврата значения типа Enum по умолчанию в большем количестве агрегатных функций. #74272 (Raúl Marín).
  • В операторе OPTIMIZE TABLE теперь можно использовать ключевое слово FORCE как альтернативу существующему ключевому слову FINAL. #74342 (Robert Schulze).
  • Добавлена метрика IsServerShuttingDown, необходимая для срабатывания оповещения, когда завершение работы сервера занимает слишком много времени. #74429 (Miсhael Stetsyuk).
  • Добавлены имена таблиц формата Iceberg в вывод EXPLAIN. #74485 (alekseev-maksim).
  • Улучшено сообщение об ошибке при использовании RECURSIVE CTE со старым анализатором. #74523 (Raúl Marín).
  • Добавлен вывод расширенных сообщений об ошибках в system.errors. #74574 (Vitaly Baranov).
  • Добавлена возможность использовать пароль для клиентского подключения к clickhouse-keeper. Эта функция не очень полезна, если у вас корректно настроена SSL-конфигурация для сервера и клиента, но всё же может быть полезна в некоторых случаях. Пароль не может быть длиннее 16 символов. Это не связано с моделью аутентификации Keeper. #74673 (alesapin).
  • Добавлен код ошибки для перезагрузчика конфигурации. #74746 (Garrett Thomas).
  • Добавлена поддержка IPv6-адресов в табличных функциях и движках для MySQL и PostgreSQL. #74796 (Mikhail Koviazin).
  • Реализована оптимизация с коротким замыканием для divideDecimal. Исправляет #74280. #74843 (Kevin Mingtarja).
  • Теперь пользователей можно задавать непосредственно в стартовых скриптах. #74894 (pufit).
  • Добавлена поддержка SAS-токенов Azure. #72959 (Azat Khuzhin).

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

  • Устанавливать уровень сжатия Parquet только если кодек сжатия его поддерживает. #74659 (Arthur Passos).
  • Исправлена регрессия, из-за которой при использовании локалей сортировки с модификаторами возникала ошибка. Например, теперь запрос SELECT arrayJoin(['kk 50', 'KK 01', ' KK 2', ' KK 3', 'kk 1', 'x9y99', 'x9y100']) item ORDER BY item ASC COLLATE 'tr-u-kn-true-ka-shifted выполняется без ошибок. #73544 (Robert Schulze).
  • Исправлена ошибка, из-за которой невозможно было создать узел SEQUENTIAL с помощью keeper-client. #64177 (Duc Canh Le).
  • Исправлен некорректный подсчёт символов в функциях position. #71003 (思维).
  • Операции RESTORE для объектов доступа требовали больше прав, чем необходимо, из‑за некорректной обработки частичных отзывов прав. Этот PR исправляет проблему. Закрывает #71853. #71958 (pufit).
  • Устранена пауза после выполнения ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE. Обеспечено получение корректных настроек для планирования выполнения фоновых задач. #72024 (Aleksei Filatov).
  • Исправлена обработка пустых кортежей в некоторых форматах ввода и вывода (например, Parquet, Arrow). #72616 (Michael Kolupaev).
  • Команды GRANT SELECT/INSERT на уровне столбцов для баз данных/таблиц с подстановочными символами теперь вызывают ошибку. #72646 (Johann Gan).
  • Исправлена ошибка, из-за которой пользователь не мог выполнить REVOKE ALL ON *.* из-за неявных предоставлений прав у целевой сущности доступа. #72872 (pufit).
  • Исправлено форматирование положительных смещений часового пояса в скалярной функции formatDateTime. #73091 (ollidraese).
  • Исправлено некорректное определение исходного порта при подключении через PROXYv1 и включённом параметре auth_use_forwarded_address — ранее использовался порт прокси. Добавлена функция currentQueryID(). #73095 (Yakov Olkhovskiy).
  • Теперь в TCPHandler настройки формата передаются в NativeWriter, чтобы такие настройки, как output_format_native_write_json_as_string, применялись корректно. #73179 (Pavel Kruglov).
  • Исправлена ошибка, приводившая к падению StorageObjectStorageQueue. #73274 (Kseniia Sumarokova).
  • Исправлено редкое падение refreshable materialized view при завершении работы сервера. #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 и более старыми версиями ClickHouse 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 glob, за которым следует одиночный диапазон. Исправляет #73473. #73569 (Konstantin Bogdanov).
  • Исправлена ошибка, из-за которой parallel_replicas_for_non_replicated_merge_tree игнорировался в подзапросах для нереплицируемых таблиц. #73584 (Igor Nikonov).
  • Исправлено выбрасывание исключения std::logical_error при невозможности запланировать задачу. Обнаружено в стресс‑тестах. #73629 (Alexander Gololobov).
  • Не интерпретировать запросы в EXPLAIN SYNTAX, чтобы избежать логических ошибок из-за неправильного этапа обработки распределённых запросов. Исправляет #65205. #73634 (Dmitry Novik).
  • Устранена потенциальная несогласованность данных в столбце 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 bucket не работал как диск. #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).
  • Исправление: псевдоним может не добавляться в PROJECTION, если на него ссылается другой псевдоним и они выбираются в обратном порядке. #74033 (Yakov Olkhovskiy).
  • Игнорировать ошибки «object not found» от Azure при инициализации диска plain_rewritable. #74059 (Julia Kartseva).
  • Исправлено поведение функций any и anyLast при работе с типами Enum и пустой таблицей. #74061 (Joanna Hulboj).
  • Исправлена ошибка, возникавшая при указании пользователем именованных аргументов в движке таблиц Kafka. #74064 (Yarik Briukhovetskyi).
  • Исправлена ошибка при изменении настроек Storage S3Queue с префиксом "s3queue_" на такие же без префикса и обратно. #74075 (Kseniia Sumarokova).
  • Добавлена настройка allow_push_predicate_ast_for_distributed_subqueries. Она включает основанное на AST проталкивание предикатов (predicate push-down) для распределённых запросов с анализатором. Это временное решение, которое мы используем до тех пор, пока не будет поддержана сериализация плана запроса для распределённых запросов. Закрывает #66878 #69472 #65638 #68030 #73718. #74085 (Nikolai Kochetov).
  • Исправлена проблема, при которой после #73095 порт мог присутствовать в поле forwarded_for, что приводило к невозможности разрешить имя хоста с указанным портом. #74116 (Yakov Olkhovskiy).
  • Исправлено неверное форматирование конструкции ALTER TABLE (DROP STATISTICS ...) (DROP STATISTICS ...). #74126 (Han Fei).
  • Исправление ошибки #66112. #74128 (Anton Ivashkin).
  • Больше нельзя использовать движок таблицы Loop в CREATE TABLE. Это сочетание ранее приводило к ошибкам сегментации (segfault). #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).
  • Частичный отзыв прав при использовании шаблонных привилегий (wildcard grants) мог удалять больше привилегий, чем ожидалось. Закрывает #74263. #74751 (pufit).
  • Keeper fix: исправление чтения записей журнала с диска. #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).