Журнал изменений 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) условий фильтрации. Новый SETTINGuse_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-фильтров для
ANTIJOIN. Также выполнен рефакторинг реализации 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).
Улучшения сборки/тестирования/упаковки
- Использовать
clang-21в CI. #87074 (Konstantin Bogdanov). - Исключить загрузку через CMake при кросс-компиляции. #90506 (Raúl Marín).
Релиз 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 с конкретным часовым поясом, содержащим\). Экранирование можно отключить, изменив настройку MergeTreeescape_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иFULLJOIN теперь используют ConcurrentHashJoin, что обеспечивает более высокую степень параллелизма при их выполнении. В ряде сценариев производительностьRIGHTиFULLJOIN увеличена до двух раз. Исправляет #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принимает в качестве аргументов верхние границы и накопительные значения бакетов гистограммы и выполняет линейную интерполяцию между верхней и нижней границами бакета, в котором расположена требуемая квантиль. Ведёт себя аналогично функции PromQLhistogram_quantileдля классических гистограмм. #86294 (Stephen Chi). - Новая системная таблица для файлов метаданных Delta Lake. #87263 (scanhex12).
- Добавлена команда
ALTER TABLE REWRITE PARTS— полностью переписывает части таблицы заново, используя все новые настройки (поскольку некоторые, такие какuse_const_adaptive_granularity, применяются только к новым частям). #87774 (Azat Khuzhin). - Добавлена команда
SYSTEM RECONNECT ZOOKEEPERдля принудительного разрыва соединения с ZooKeeper и последующего переподключения (https://github.com/ClickHouse/ClickHouse/issues/87317). #87318 (Pradeep Chhetri). - Ограничено число именованных коллекций с помощью параметров
max_named_collection_num_to_warnиmax_named_collection_num_to_throw. Добавлена новая метрикаNamedCollectionи ошибкаTOO_MANY_NAMED_COLLECTIONS. #87343 (Pablo Marcos). - Добавлены оптимизированные варианты функций
startsWithиendsWith, нечувствительные к регистру:startsWithCaseInsensitive,endsWithCaseInsensitive,startsWithCaseInsensitiveUTF8иendsWithCaseInsensitiveUTF8. #87374 (Guang Zhao). - Добавлена возможность задавать определения
WORKLOADиRESOURCEв SQL с использованием секции конфигурации сервера «resources_and_workloads». #87430 (Sergei Trifonov). - Добавлена новая настройка таблицы
min_level_for_wide_part, позволяющая задать минимальный уровень части, которая будет создаваться как широкая. #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/ANTIJOIN, если условие фильтрации всегда ложно для совпадающих или несовпадающих строк. Эта оптимизация управляется новым параметромquery_plan_convert_any_join_to_semi_or_anti_join. 2. ПреобразованиеFULL ALL JOINвLEFT ALLилиRIGHT ALLJOIN, если условие фильтрации всегда ложно для несовпадающих строк с одной стороны. #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).
-
- Использование 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).
Улучшения сборки/тестирования/упаковки
- Исправлена совместимость с abseil-cpp 20250814.0, https://github.com/abseil/abseil-cpp/issues/1923. #85970 (Yuriy Chernyshov).
- Сборка отдельного WASM-лексера вынесена под флаг. #86505 (Konstantin Bogdanov).
- Исправлена сборка crc32c на старых ARM CPU без поддержки инструкции
vmull_p64. #86521 (Pablo Marcos). - Обновлён
openldapдо версии 2.6.10. #86623 (Konstantin Bogdanov). - Отключена попытка перехвата
memalignв darwin. #86769 (Konstantin Bogdanov). - Обновлён
krb5до версии 1.22.1-final. #86836 (Konstantin Bogdanov). - Исправлена распаковка имён Rust crate в
list-licenses.sh. #87305 (Konstantin Bogdanov).
Выпуск 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). - Операции
ALLLEFT/INNERJOIN будут автоматически преобразовываться вRightAny, если правая сторона функционально определяется столбцами ключа соединения (все строки имеют уникальные значения ключа соединения). #84010 (Nikita Taranov). - Добавлен
max_joined_block_size_bytesв дополнение кmax_joined_block_size_rowsдля ограничения использования памяти в операциях JOIN с ресурсоёмкими столбцами. #83869 (Nikolai Kochetov). - Добавлена новая логика (управляется настройкой
enable_producing_buckets_out_of_order_in_aggregation, по умолчанию включена), которая позволяет отправлять некоторые бакеты не по порядку при агрегации с экономным использованием памяти. Когда слияние некоторых бакетов агрегации занимает значительно больше времени, чем других, это повышает производительность, позволяя инициатору тем временем сливать бакеты с более высокими идентификаторами. Недостатком является потенциально более высокое потребление памяти (не должно быть значительным). #80179 (Nikita Taranov). - Добавлена настройка
optimize_rewrite_regexp_functions(по умолчанию включена), которая позволяет оптимизатору преобразовывать некоторые вызовыreplaceRegexpAll,replaceRegexpOneиextractв более простые и эффективные формы при обнаружении определённых шаблонов регулярных выражений (issue #81981). #81992 (Amos Bird). - Вынесена обработка
max_joined_block_rowsза пределы основного цикла 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: она не распознавала начало слова в начале строки, если предыдущая строка в блоке заканчивалась на буквенно-цифровой символ. Исправлена уязвимость безопасности формата ApacheORC, которая могла приводить к раскрытию неинициализированной памяти. Изменено поведение функцииreplaceRegexpAllи соответствующего псевдонимаREGEXP_REPLACE: теперь она может выполнять пустое совпадение в конце строки, даже если предыдущее совпадение обработало всю строку, как в случае^a*|a*$или^|.*— это соответствует семантике JavaScript, Perl, Python, PHP, Ruby, но отличается от семантики PostgreSQL. Реализация многих функций была упрощена и оптимизирована. Документация для нескольких функций была неверной и теперь исправлена. Имейте в виду, что выводbyteSizeдля столбцов типа String и составных типов, которые состоят из столбцов типа String, изменился (с 9 байт за пустую строку на 8 байт за пустую строку), и это нормально. #85063 (Alexey Milovidov). - Оптимизирована материализация констант в случаях, когда материализация выполняется только для возврата одной строки. #85071 (Alexey Milovidov).
- Улучшена параллельная обработка файлов с использованием бэкенда delta-kernel-rs. #85642 (Azat Khuzhin).
- Добавлен новый параметр enable_add_distinct_to_in_subqueries. При его включении ClickHouse будет автоматически добавлять DISTINCT в подзапросы в выражениях IN для распределённых запросов. Это может значительно уменьшить размер временных таблиц, передаваемых между сегментами, и повысить эффективность использования сети. Примечание: это компромисс — хотя сетевой трафик уменьшается, на каждом узле требуется дополнительная работа по объединению (удалению дубликатов). Включайте этот параметр, когда узким местом является сетевой трафик и стоимость объединения приемлема. #81908 (fhw12345).
- Снижены накладные расходы на отслеживание потребления памяти запросами для исполняемых пользовательских функций. #83929 (Eduard Karacharov).
- Во внутреннем механизме
delta-kernel-rsреализована фильтрация (статистика и отсечение партиций) в хранилищеDeltaLake. #84006 (Kseniia Sumarokova). - Более тонко управляется отключение пропускающих индексов, которые зависят от столбцов, обновляемых «на лету» или посредством patch parts. Теперь пропускающие индексы не используются только в тех частях, на которые повлияли мутации «на лету» или patch parts; ранее такие индексы отключались для всех частей. #84241 (Anton Popov).
- Выделять минимально необходимый объём памяти под encrypted_buffer для зашифрованных именованных коллекций. #84432 (Pablo Marcos).
- Улучшена поддержка индексов блум-фильтра (обычных, ngram и token) для их использования, когда первым аргументом выступает константный массив (множество), а вторым — индексируемый столбец (подмножество), что позволяет более эффективно выполнять запросы. #84700 (Doron David).
- Снижена конкуренция за блокировку хранилища в Keeper. #84732 (Antonio Andelic).
- Добавлена недостающая поддержка
read_in_order_use_virtual_rowвWHERE. Это позволяет пропускать чтение дополнительных частей для запросов с фильтрами, которые не были полностью перенесены вPREWHERE. #84835 (Nikolai Kochetov). - Обеспечивает асинхронный обход объектов таблицы Iceberg без явного хранения объектов для каждого файла данных. #85369 (Daniil Ivanik).
- Теперь некоррелированный
EXISTSвыполняется в виде скалярного подзапроса. Это позволяет использовать кэш скалярных подзапросов и выполнять константное свёртывание результата, что полезно для индексов. Для совместимости добавлена новая настройкаexecute_exists_as_scalar_subquery=1. #85481 (Nikolai Kochetov).
Улучшения
- Добавлены настройки
database_replicated, задающие значения по умолчанию для DatabaseReplicatedSettings. Если параметр не указан в запросе 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 появился APIExpressionVisitor, который реализован в этом 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).
Улучшения в области сборки, тестирования и упаковки
- Используется
postgresверсии 16.9. #81437 (Konstantин Bogданов). - Обновлён
opensslдо версии 3.2.4. #81438 (Konstantin Bogdanov). - Используем
abseil-cppот 2025-01-27. #81440 (Konstantin Bogdanов). - Используется
mongo-c-driverверсии 1.30.4. #81449 (Konstantin Bogdanov). - Используется
krb5версии 1.21.3-final. #81453 (Konstantin Bogdanov). - Используется
orcверсии 2.1.2. #81455 (Konstantин Bogdanov). - Используйте
grpc1.73.0. #81629 (Konstantin Bogdanov). - Теперь используется
delta-kernel-rsv0.12.1. #81707 (Konstantin Bogdanov). - Обновлён компонент
c-aresдо версииv1.34.5. #81159 (Konstantin Bogdanov). - Обновите
curlдо версии 8.14 для устранения уязвимостей CVE-2025-5025 и CVE-2025-4947. #81171 (larryluogit). - Обновлен
libarchiveдо версии 3.7.9 для устранения уязвимостей CVE-2024-20696 CVE-2025-25724 CVE-2024-48958 CVE-2024-57970 CVE-2025-1632 CVE-2024-48957 CVE-2024-48615. #81174 (larryluogit). - Обновлена
libxml2до 2.14.3. #81187 (larryluogit). - Не копировать поставляемые (vendored) исходники Rust в
CARGO_HOME. #79560 (Konstantin Bogdanov). - Удалена зависимость от библиотеки Sentry путём её замены на наш собственный endpoint. #80236 (Alexey Milovidov).
- Обновлены зависимости Python в CI-образах для устранения уведомлений Dependabot. #80658 (Raúl Marín).
- При запуске повторно считывать флаг остановки replicated DDL из Keeper, чтобы сделать тесты более надёжными при включённой инъекции сбоев в Keeper. #80964 (Alexander Gololobov).
- Использовать HTTPS для URL архива Ubuntu. #81016 (Raúl Marín).
- Обновлены зависимости Python в тестовых образах. #81042 (dependabot[bot]).
- Добавлен
flake.nixдля сборок Nix. #81463 (Konstantin Bogdanov). - Устранена необходимость доступа к сети при сборке
delta-kernel-rs. Закрывает #80609. #81602 (Konstantin Bogdanov). Прочтите статью Год Rust в ClickHouse.
Релиз 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.<fractional>), а также некоторые базовые функции приведения типов и функции для взаимодействия с другими типами данных. Также изменено имя существующей функции с 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_processed_files_before_commitв S3Queue/AzureQueue. #79363 (Azat Khuzhin). - Введён порог (регулируется параметром
parallel_hash_join_threshold) для перехода к алгоритмуhash, когда размер правой таблицы меньше этого порога. #76185 (Nikita Taranov). - Теперь для определения размера задачи чтения при включённых параллельных репликах мы используем число реплик. Это обеспечивает более равномерное распределение работы между репликами, когда объём данных для чтения относительно невелик. #78695 (Nikita Taranov).
- Добавлена поддержка параллельного слияния состояний
uniqExactна финальном этапе распределённой агрегации. #78703 (Nikita Taranov). - Исправлена потенциальная деградация производительности при параллельном слиянии состояний
uniqExactдля агрегации с ключом. #78724 (Nikita Taranov). - Уменьшено количество обращений к API List Blobs хранилища Azure. #78860 (Julia Kartseva).
- Улучшена производительность распределённого
INSERT SELECTс параллельными репликами. #79441 (Azat Khuzhin). - Предотвращено выполнение очистки в
LogSeriesLimiterпри каждом создании объекта, что позволяет избежать конкуренции за блокировки и деградации производительности в сценариях с высокой степенью параллелизма. #79864 (filimonov). - Ускорены запросы за счет оптимизации тривиальных операций подсчета. #79945 (Raúl Marín).
- Улучшен инлайнинг некоторых операций с
Decimal. #79999 (Konstantin Bogdanov). - Теперь значение
input_format_parquet_bloom_filter_push_downпо умолчанию равно true. Также исправлена ошибка в истории изменений настроек. #80058 (Alexey Milovidov). - Оптимизированы мутации
ALTER ... DELETEдля частей, из которых должны быть удалены все строки. Теперь в таких случаях вместо исходной части сразу создаётся пустая часть, и мутация не выполняется. #79307 (Anton Popov). - Исключено лишнее копирование блока при вставке в Compact-часть, когда это возможно. #79536 (Pavel Kruglov).
- Добавлена настройка
input_format_max_block_size_bytesдля ограничения размера в байтах блоков, создаваемых во входных форматах. Это может помочь избежать высокого потребления памяти при импорте данных, когда строки содержат очень большие значения. #79495 (Pavel Kruglov). - Удалены 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 = 0ClickHouse зависал. Теперь это поведение исправлено. #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 <...> 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-odbc-bridgeиclickhouse-library-bridgeперенесены в отдельный репозиторий, https://github.com/ClickHouse/odbc-bridge/. #76225 (Alexey Milovidov).- Исправлена кросс-компиляция Rust и добавлена возможность полностью отключать Rust. #76921 (Raúl Marín).
Версия ClickHouse 25.2, 2025-02-27
Изменение, нарушающее обратную совместимость
- Полностью включён
async_load_databasesпо умолчанию (даже для тех установок, где не обновлёнconfig.xml). #74772 (Azat Khuzhin). - Добавлены форматы
JSONCompactEachRowWithProgressиJSONCompactStringsEachRowWithProgress. Продолжение #69989. ФорматыJSONCompactWithNamesиJSONCompactWithNamesAndTypesбольше не выводят "totals" — по‑видимому, это было ошибкой в реализации. #75037 (Alexey Milovidov). - Значение по умолчанию для
format_alter_operations_with_parenthesesизменено на true, чтобы устранить неоднозначность в списке команд ALTER (см. https://github.com/ClickHouse/ClickHouse/pull/59532). Это нарушает репликацию с кластерами версий до 24.3. Если вы обновляете кластер на более старой версии, отключите этот параметр в конфигурации сервера или сначала обновитесь до 24.3. #75302 (Raúl Marín). - Удалена возможность фильтровать сообщения журнала с помощью регулярных выражений. Реализация приводила к состоянию гонки, поэтому её пришлось удалить. #75577 (János Benjamin Antal).
- Значение параметра
min_chunk_bytes_for_parallel_parsingбольше не может быть нулём. Это исправляет: #71110. #75239 (Nikita Mikhaylov). - Добавлена проверка параметров в конфигурации кэша. Ранее несуществующие параметры игнорировались, теперь они будут приводить к ошибке и должны быть удалены. #75452 (Kseniia Sumarokova).
Новые возможности
- Добавлена поддержка типа
Nullable(JSON). #73556 (Pavel Kruglov). - Добавлена поддержка подстолбцов в выражениях DEFAULT и MATERIALIZED. #74403 (Pavel Kruglov).
- Добавлена поддержка записи bloom-фильтров Parquet с помощью настройки
output_format_parquet_write_bloom_filter(включена по умолчанию). #71681 (Michael Kolupaev). - В Web UI теперь доступна интерактивная навигация по базам данных. #75777 (Alexey Milovidov).
- Разрешена комбинация дисков только для чтения и с поддержкой записи в политике хранения (как в виде нескольких томов, так и в виде нескольких дисков). Это позволяет читать данные со всего тома, при этом вставки будут выполняться на диск с поддержкой записи (то есть политика хранения Copy-on-Write). #75862 (Azat Khuzhin).
- Добавлен новый движок базы данных
DatabaseBackup, который позволяет мгновенно подключать таблицу/базу данных из резервной копии. #75725 (Maksim Kita). - Добавлена поддержка подготовленных запросов (prepared statements) в протоколе Postgres wire. #75035 (scanhex12).
- Добавлена возможность ATTACH таблиц без уровня базы данных, что полезно для таблиц MergeTree, размещённых в Web, S3 и аналогичных внешних виртуальных файловых системах. #75788 (Azat Khuzhin).
- Добавлена новая функция сравнения строк
compareSubstringsдля сравнения частей двух строк. Пример:SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS resultозначает «сравнить 6 байт строк „Saxon“ и „Anglo-Saxon“ лексикографически, начиная со смещения 0 в первой строке и со смещения 5 во второй строке». #74070 (lgbo). - Добавлена новая функция
initialQueryStartTime. Она возвращает время начала текущего запроса. Значение одинаково на всех сегментах при распределённом запросе. #75087 (Roman Lomonosov). - Добавлена поддержка SSL-аутентификации с именованными коллекциями для MySQL. Закрывает #59111. #59452 (Nikolay Degterinsky).
Экспериментальные возможности
- Добавлена новая настройка
enable_adaptive_memory_spill_scheduler, которая позволяет нескольким операциям Grace JOIN в одном запросе отслеживать их суммарный объём потребляемой памяти и адаптивно инициировать сброс данных во внешнее хранилище, чтобы предотвратить 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после выполнения нескольких асинхронных запросовRENAME(сalter_sync = 0) между столбцами разных типов. #75693 (Anton Popov). - Исправлена ошибка
Block structure mismatch in QueryPipeline stream, возникавшая для некоторых запросов сUNION ALL. #75715 (Nikolai Kochetov). - Проекция теперь перестраивается при выполнении
ALTER MODIFYдля столбца её первичного ключа. Ранее это могло приводить к ошибкамCANNOT_READ_ALL_DATAпри выполнении запросовSELECTпослеALTER MODIFYстолбца, используемого в первичном ключе проекции. #75720 (Pavel Kruglov). - Исправлен неверный результат
ARRAY JOINдля скалярных подзапросов при использовании 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в алгоритме JOINparallel_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).
- Добавлен псевдоним столбца
metric—nameв таблицуsystem.asynchronous_metrics. #71164 (megao). - Исторически по какой‑то причине запрос
ALTER TABLE MOVE PARTITION TO TABLEпроверял праваSELECTиALTER DELETEвместо отдельного праваALTER_MOVE_PARTITION. В этом PR используется этот тип доступа. Для совместимости это право доступа также будет неявно предоставляться, если предоставленыSELECTиALTER DELETE, но это поведение будет удалено в будущих релизах. Закрывает #16403. #71632 (pufit). - Вызывать исключение при попытке материализовать столбец, входящий в ключ сортировки, вместо того чтобы допускать нарушение порядка сортировки. #71891 (Peter Nguyen).
- Скрытие секретов в выводе
EXPLAIN QUERY TREE. #72025 (Yakov Olkhovskiy). - Добавлена поддержка логических целочисленных типов Parquet в «native» ридере. #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теперь всегда генерирует шесть цифр для долей секунды. Это делает поведение совместимым с функцией MySQLDATE_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).