Оглавление
Релиз 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 в типы, не допускающие NULL. Раньше такие ALTER могли зависать с ошибкой cannot convert null to not null; теперь значения NULL заменяются выражением DEFAULT столбца. Устраняет #5985. #84770 (Vladimir Cherkasov).
- Токенизатор n-грамм больше не будет возвращать n-граммы короче заданной для него длины N. Текстовый поиск не будет возвращать строки, если поисковые токены пусты. #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: теперь при тайм-ауте запроса из-заreceive_timeoutон возвращает ненулевой код выхода (159 - TIMEOUT_EXCEEDED). Ранее при тайм-аутах возвращался код выхода 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). - По умолчанию включено расширенное использование общих данных для JSON. После этого изменения откат на версии ниже 25.8 станет невозможен, поскольку они не смогут читать новые части данных с JSON-столбцом. Для безопасного обновления рекомендуется установить для настройки
compatibilityзначение предыдущей версии или задать настройки MergeTreedynamic_serialization_version='v2', object_serialization_version='v2'. #92511 (Pavel Kruglov).
Новая возможность
- Теперь пользователи могут настраивать таблицы S3/Azure Queue так, чтобы перемещать или помечать обработанные файлы, помимо прежних вариантов — сохранять или удалять их. Закрывает #72944. #86907 (Murat Khairulin).
- Для хранилищ S3/Azure Queue добавлена настройка
commit_on_select(чтобы задать, нужно ли фиксировать обработанные данные и применять действиеafter_processing). Значение по умолчанию —false; исправлена проверка присоединённого mv при выполнении select. #91450 (Kseniia Sumarokova). - Добавлена поддержка инструментирования во время выполнения с помощью XRay для отладки неполадок в продакшене и детерминированного профилирования. Устраняет #74249. #89173 (Pablo Marcos).
- Разрешает использовать неконстантные вторые аргументы для
IN. Также поддерживаетTupleв качестве второго аргумента. #77906 (Yarik Briukhovetskyi). - Функции для вычисления площади и периметра для типа Geometry. #89047 (Konstantin Vedernikov).
- Реализована функция
dictGetKeys, которая возвращает ключ или ключи словаря, атрибут которого равен указанному значению. Она использует кэш обратного поиска на уровне запроса, настраиваемый параметромmax_reverse_dictionary_lookup_cache_size_bytes, чтобы ускорить повторные обращения. #89197 (Nihal Z. Miaji). - Добавлена настройка
type_json_skip_invalid_typed_paths, которая отключает исключения при вставке/приведении типов к типу JSON, если входной JSON нельзя привести к явно типизированным путям в типе JSON. В этом случае используется значение null/0 для типизированного пути. #89886 (Max Justus Spransy). - Добавлена поддержка
direct(JOIN на вложенных циклах) для таблиц 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: create со statistics. #88797 (Konstantin Vedernikov).
- Поддержка постоянных наблюдений ZooKeeper в ClickHouse Keeper. Продолжение, часть 2: https://github.com/ClickHouse/ClickHouse/pull/78207. #88813 (Konstantin Vedernikov).
- Добавлена настройка MergeTree
alter_column_secondary_index_mode, чтобы управлять тем, как обрабатывать индексы во время мутаций. Возможные значения: сгенерировать исключение, удалить, перестроить и режим совместимости. Закрывает #77797. #89335 (Raúl Marín). - Поскольку типы данных
TimeиTime64готовы к использованию в production, настройка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).
Экспериментальные возможности
- Представлен формат текстового индекса v3, получивший статус бета.
- Добавлена новая логика для автоматического выполнения запросов с использованием параллельных реплик, управляемая настройкой
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 использует индексы пропуска данных для анализа индексов в предложениях WHERE со смешанными условиями фильтрации, объединёнными
ANDиOR. Ранее, чтобы задействовать индексы пропуска данных, предложение WHERE должно было быть конъюнкцией (AND) условий фильтрации. Этой возможностью управляет новая настройкаuse_skip_indexes_for_disjunctions(по умолчанию: включено). (issue #75228). #87781 (Shankar Iyer). - Добавлена поддержка сохранения чтения по порядку из левой таблицы при операциях LEFT/INNER JOIN, что может использоваться на следующих этапах. Эту возможность можно отключить с помощью настройки
query_plan_read_in_order_through_join. Для LEFT/INNER JOIN также добавлена поддержка оптимизации чтения с виртуальной строкой (см. настройкуread_in_order_use_virtual_row). #89815 (Vladimir Cherkasov). - Повышена производительность отложенно материализуемых столбцов благодаря увеличению лимита. #90309 (Nikolai Kochetov).
- Пользователи должны заметить снижение задержки при анализе индексов, если присутствуют большие индексы
minmax(миллионы гранул). #90428 (Shankar Iyer). - Реализован простой алгоритм переупорядочивания INNER JOIN на основе DPsize. Новая экспериментальная настройка задаёт, какие алгоритмы и в каком порядке использовать; например,
query_plan_optimize_join_order_algorithm='dpsize,greedy'означает, что сначала пробуется DPsize, а затем выполняется fallback на 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и другие, за счёт использования дополнительного предварительного фильтра, построенного на основе text index. Эта оптимизация включается настройкойquery_plan_text_index_add_hint. Также улучшено использование text index для столбцов типа данныхMap. #88550 (Anton Popov). - Оптимизированы повторяющиеся обратные обращения к словарю за счёт более быстрых поисков по заранее вычисленному набору возможных значений ключей. Закрывает #7968. #88971 (Nihal Z. Miaji).
- Улучшены производительность и работа агрегатной функции
topK. #90091 (Raúl Marín). - Повышена производительность операций сравнения
Decimal. Устранена проблема #28192. #90153 (Konstantin Bogdanov). - Добавлена поддержка отсечения партиций для функций 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).
- Добавлена дополнительная эвристика, уменьшающая количество частей в выбранных вариантах слияния. Более узкие слияния увеличивают усиление записи, но при этом могут помочь избежать ошибок
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). - Добавлена поддержка JOIN Runtime Filters для
ANTIJOIN. Также переработана реализация runtime-фильтров, чтобы снизить конкуренцию за блокировки. #89710 (Dmitry Novik). - Снижает использование памяти при слияниях в таблице
system.metric_log(включено по умолчанию), задаваяmin_bytes_for_wide_partиvertical_merge_algorithm_min_bytes_to_activateзначение 128MB. #89811 (filimonov). - Добавлена возможность использовать инвертированный индекс в PREWHERE. Устраняет #89975. #89977 (Peng Jian).
- Не добавляйте провайдеры S3 при использовании GCP OAuth — это повышает производительность в GCS. #91706 (Antonio Andelic).
Улучшения
- Добавлена новая настройка
apply_row_policy_after_final, которая позволяет применять политику строк к запросу только после FINAL, что делает поведение ReplacingMergeTree с политиками строк более корректным. Исправляет #90986. #91065 (Yarik Briukhovetskyi). - В формате
Prettyименованные кортежи теперь отображаются в виде Pretty JSON. Это закрывает #65022. #91779 (Mostafa Mohamed Salah). - В таблицу
system.error_logдобавлены поляlast_error_time,last_error_message,last_error_query_idиlast_error_trace. #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. Добавлен CounterKafkaMVNotReady. #85346 (Ilya Golshtein). - Теперь выражения по умолчанию в таблице корректно работают при вставке через remote и собственный протокол. Закрывает #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 (provided by the client) > last_processed_zxid. Это предотвращает чтение устаревших данных, когда клиенты повторно подключаются к отстающим репликам. #90016 (Miсhael Stetsyuk). - Добавлен настраиваемый параметр
kafka_consumer_reschedule_msдля движка таблицыKafka, позволяющий задавать, как долго потребители ждут новых данных. Исправляет #89204. #90112 (Jeremy Aguilon). - В
system.mutationsдобавлен новый столбецparts_in_progress_namesдля улучшения диагностики. #90155 (Shaohua Wang). - Повторная попытка при сетевых ошибках, когда библиотека S3 разбирает XML-ответ. #90216 (Sema Checherinda).
- Мы хотим запускать Keeper в отдельных процессах сервера и, чтобы не перегружать Prometheus в крупных регионах, по-прежнему экспортировать только метрики Keeper. #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 (Konstantin 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).
- Теперь при достижении
hard_limitдля HTTP-подключений клиентов будет сгенерировано исключениеHTTP_CONNECTION_LIMIT_REACHED. Для подключений к дискам это значение установлено в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).
- Токенизатор n-грамм теперь можно создавать при
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 (Konstantin Bogdanov). - Логирование событий частей в
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). - Исправлены проблемы со стабильностью псевдонимов: исправлен StrictnessLevel для SharedDatabaseCatalog, запрещено, чтобы target также был псевдонимом, и реализованы дополнительные интерфейсы (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с несколькими операциями JOIN. #90010 (Vladimir Cherkasov). - Исправлено распознавание некорректных значений DateTime64 из строк в текстовых форматах в некоторых случаях. Устраняет #89368. #90013 (Pavel Kruglov).
- Добавлены проверки размера при десериализации данных из состояний агрегации и других источников. #90031 (Raúl Marín).
- Разделение диапазонов частей по характеристикам томов, чтобы включить TTL-слияния с удалением для холодных томов. После этого исправления части, у которых max 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 (Nihal Z. Miaji). - Исправлена запись в Parquet, при которой исходный порядок не сохранялся при использовании собственного механизма однопоточной записи. Частично отменяет 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 со столбцом с временной меткой при использовании Glue catalog. Устранена проблема #90210. #90209 (Alsu Giliazova).
- Исправляет несоответствие числа строк в MergeTreeReaderIndex, когда в части данных меньше строк, чем в index_granularity. Устраняет #89691. #90254 (Peng Jian).
- Исправлен бесконечный запрос
WITH FILLсnan/inf. Исправляет #69261. #90255 (Konstantin Bogdanov). - Исправлена ошибка ‘столбец не найден’ при 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, если порядок сортировки не указан в файлах manifest (или не совпадает с 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).
- Исправлены обновления Cluster Discovery в мультикластерных конфигурациях с
multicluster_root_path, чтобы избежать задержек и пропуска обновлений ZooKeeper. #90341 (RinChanNOW). - Исправлена возможная логическая ошибка в prewhere при обращении к несуществующему пути JSON с index_granularity_bytes=0. Устраняет #86924. #90375 (Pavel Kruglov).
- Исправлена ошибка в
L2DistanceTransposed, которая приводила к сбоям, если аргументprecisionвыходил за пределы допустимого диапазона. Закрывает #90401. #90405 (Raufs Dunamalijevs). - Исправлена возможная логическая ошибка в
arrayUnionпри аргументеArray(Dynamic). Устраняет проблему #90270. #90409 (Pavel Kruglov). - Исправлена возможная логическая ошибка при переименовании и изменении одного и того же вложенного столбца в одной команде ALTER. Устраняет #90406. #90412 (Pavel Kruglov).
- Исправлен разбор значений JSON/Dynamic/Variant, передаваемых через HTTP-параметры. Устраняет #88925. #90430 (Pavel Kruglov).
- Исправлено состояние гонки в партиционировании 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 (Nihal Z. Miaji). - Предположительно устраняет сбои ThreadSanitizer в
test_ssh/test.py::test_paramiko_password. #90612 (Govind R Nair). - Исправлена логическая ошибка в функции
concatWithSeparatorпри использовании константного столбца нестрокового типа. Закрывает #90596. #90655 (Nihal Z. Miaji). - Исправлено форматирование в
INTO OUTFILE. Устранена проблема #90207. #90656 (Azat Khuzhin). - Устранено возможное аварийное завершение при выполнении мутаций с подзапросами и
allow_statistics_optimize=1. Устраняет #90626. #90664 (Azat Khuzhin). - Исправлена валидация analyzer для
LIMIT BYсGROUP BY, чтобы при использовании вLIMIT BYстолбцов, отсутствующих вGROUP BY, возвращалась корректная ошибкаNOT_AN_AGGREGATEвместоNOT_FOUND_COLUMN_IN_BLOCK. Закрывает #89713. #90665 (xiaohuanlin). - Исправлены ошибки приведения типов при использовании столбцов
LowCardinalityв ключах партиционирования. Исправление закрывает #89412. #90666 (xiaohuanlin). - Исправлена проблема, из-за которой запросы с фильтрующими предикатами, содержащими константы, полученные свёрткой недетерминированных функций (например,
shardNum()), могли некорректно использовать кэш условий запроса. #90692 (Eduard Karacharov). - Исправлен segfault в запросе с функцией EXISTS в секции ON оператора JOIN. Теперь запрос просто возвращает ошибку
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 (Только в ClickHouse 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для столбцовNestedLowCardinality. #90927 (Ivan Babrou). - Исправлена обработка глобальных привилегий при отзыве привилегий с подстановочными знаками. Устраняет проблему, из-за которой при отзыве привилегии с подстановочным знаком могли случайно отозваться некоторые привилегии глобального уровня, такие как
CREATE USER. #90928 (pufit). - Исправлен возможный бесконечный цикл при выполнении azure list blobs. #90947 (Julia Kartseva).
- Исправлены слишком частые сбросы Buffer (нагружают CPU и создают массу журналов). #91000 (Azat Khuzhin).
- … Не разрешать устанавливать adaptive_write_buffer_initial_size в 0. #91001 (Pedro Ferreira).
- Исправлена ошибка в JSON, возникавшая, когда путь мог одновременно присутствовать и в общих данных, и в динамических путях при чтении подобъекта в компактных частях с отключённым
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 (Nihal Z. Miaji). - Исправлена отложенная материализация столбца, добавленного через alter add column в старых частях. #91142 (Pavel Kruglov).
- Исправлено слияние JSON-столбцов в Summing/Aggregating/Coalescing MergeTree. Ранее это могло приводить к появлению неожиданных динамических путей при записи в части данных. #91151 (Pavel Kruglov).
- Исправлена возможная несогласованность динамической структуры при записи в компактных частях, из-за которой мог возникать segfault. #91152 (Pavel Kruglov).
- Исправлен парсинг субнормальных значений с плавающей запятой в научной нотации. Закрывает #78903. #91162 (Nihal Z. Miaji).
- Исправлен неверный вывод схемы в INSERT SELECT из подзапроса с источником с неявной схемой. #91204 (Pervakov Grigorii).
- Исправлена проблема https://github.com/clickhouse/clickhouse/issues/91206: если создать таблицу со STATISTICS, записать в нее данные и удалить одну статистику, при повторном чтении происходил сбой. Это было связано с тем, что предполагалось совпадение типов статистики при сериализации и десериализации. В этом исправлении проверяется, содержит ли текущая метадата сериализованную статистику; если нет, создается фиктивная статистика, а десериализация выполняется только для того, чтобы ее пропустить. #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-таблица с пустыми аргументами в базе данных Replicated. Исправлено в #91378. #91382 (Kai Zhu).
- Сейчас этот параметр имеет значение false, поэтому при сбросе очереди async insert на удалённый server вставки всегда выполняются синхронно — даже если для пользователя этот параметр имеет значение 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, когда тип словаря поддерживает Hierarchy, но ни один столбец не являетсяHIERARCHICAL. Закрывает #92026. Закрывает #92121. #91420 (Nihal 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 для движков таблиц Объектного хранилища. Например, команда ALTER ADD PROJECTION могла привести к невозможности перезапустить сервер, поскольку движки Объектного хранилища не поддерживают проекции. #91573 (Nikolay Degterinsky).
- Исправлена ошибка, из-за которой
L2DistanceTransposedвозвращала некорректные результаты при использовании неконстантных опорных векторов (например, из table). #91517. #91593 (Raufs Dunamalijevs). - Исправлена ошибка, из-за которой JOIN при условиях FALSE возвращали
LOGICAL_ERRORна этапе диспетчеризации. Закрывает #91173. #91598 (Yarik Briukhovetskyi). - Устранено повышенное использование памяти при JOIN с “дополнительным фильтром”, закрыт #91011. #91664 (Vladimir Cherkasov).
- Исправлена ошибка в JOIN-запросах с представлением и включенными параллельными репликами. #91813 (Igor Nikonov).
- Исправлена настройка delta lake
delta_lake_snapshot_version, которая могла давать некорректный результат при использовании с движком таблицы (а не с табличной функцией) и значением -1 (отключено), если до этого уже использовалась версия снимка. Закрывает #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 со дублирующимся путём в общих данных и динамических путях, что могло происходить из-за ошибки, исправленной в https://github.com/ClickHouse/ClickHouse/pull/90816. #91886 (Pavel Kruglov).
- Исправлена ошибка в ридере ORC при чтении строковых столбцов, закодированных с помощью 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)при создании резервных копий на обычных дисках с возможностью перезаписи. #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. При смешивании их manifest files возникает эта ошибка. #92078 (Han Fei).
- Исправлены некорректные названия
readWKTиreadWKB, которые в предыдущих версиях были оформлены в неправильном стиле. #92094 (Alexey Milovidov). - Исправлены многочисленные логические ошибки, переполнения и ошибки в работе функции
midpoint. Закрывает #91816. #92102 (Nihal 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_id, мы записываем предупреждение в лог вместо того, чтобы генерировать исключение. #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).
Улучшение сборки/тестирования/упаковки
- В CI теперь используется
clang-21. #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 data part таблиц MergeTree. Это изменение нарушает совместимость со старыми таблицами с типами данных Variant/Dynamic/JSON. Оно исправляет хранение типов со специальными символами внутри Variant (например, DateTime с определённой временной зоной, содержащей\). Экранирование можно отключить, изменив настройку MergeTreeescape_variant_subcolumn_filenames(чтобы сохранить совместимость, отключите эту настройку в конфигурации MergeTree или перед обновлением установите настройкуcompatibilityна предыдущую версию). Исправляет #69590. #87300 (Pavel Kruglov). - Для типа данных
Stringпо умолчанию включён формат сериализацииwith_size_stream. Это изменение обратно совместимо, но новый формат сериализации поддерживается только начиная с версии 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 «Обратно несовместимое изменение» всё же имеет смысл использовать просто для информирования (потому что кто знает, как какие-нибудь кривые скрипты разбирают сообщение об исключении). - Запрещено создавать несколько дисков
plain-rewritableповерх общего пути Объектного хранилища, поскольку это может привести к неопределённому поведению при коллизиях разных транзакций хранения метаданных. #89038 (Mikhail Artemenko). - Исправлен приоритет настроек SASL для хранилища Kafka. Настройки SASL на уровне таблицы, указанные в запросах CREATE TABLE, теперь корректно переопределяют настройки consumer/producer из файлов конфигурации. #89401 (János Benjamin Antal).
- Временные метки Parquet без часового пояса (isAdjustedToUTC=false) теперь читаются как DateTime64(…, ‘UTC’) вместо DateTime64(…). Это менее ошибочно, поскольку преобразование такой UTC-временной метки в строку даёт корректное представление локального времени. Используйте
input_format_parquet_local_time_as_utc = 0, чтобы получить прежнее поведение. Исправляет #87469. #87872 (Michael Kolupaev). - Небольшое улучшение для кодека
T64: он больше не принимает типы данных, не выровненные по размеру элемента сжатия, поскольку иначе это приводит к ошибке. Исправляет #89282. #89432 (yanglongwei).
Новая возможность
- Добавлен тип
Geometry. Поддерживается чтение для него форматовWKBиWKT. В предыдущих версиях типGeometryбыл псевдонимомString, а теперь это полнофункциональный тип. #83344 (scanhex12). - Добавлен новый SQL-оператор
EXECUTE ASдля поддержки выполнения от имени другого пользователя. Исправляет #39048. #70775 (Shankar). - Добавлена функция
naiveBayesClassifierдля классификации текста с помощью Naive Bayes на основе 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; это означает, что такие JOIN теперь выполняются с более высокой степенью параллелизма. В ряде случаев это ускоряетRIGHTиFULLJOIN до двух раз. Решает #78027. #78462 (Yarik Briukhovetskyi).- Оптимизация обработки больших значений в константных выражениях запросов. Закрывает #72880. #81104 (Yakov Olkhovskiy).
- Запросы
SELECTвыполняются до 8 раз быстрее при интенсивном отсечении партиций в таблицах с 10K+ частями. #85535 (James Morrison). - Когда запрос использует фиксированную хеш-таблицу для состояния агрегации (при группировке по небольшому целому числу), 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 и снижает риск троттлинга. #88418 (Julia Kartseva). - Повышена производительность текстового индекса за счёт кэширования блоков словаря и использования хеш-таблиц для поиска токенов вместо двоичного поиска. #88786 (Elmi Ahmadov).
- Теперь запросы могут одновременно использовать преимущества
optimize_read_in_orderиquery_plan_optimize_lazy_materialization. Исправлено #88767. #88866 (Manuel). - Используйте агрегатную проекцию для запросов с
DISTINCT. Закрывает #86925. #88894 (Nihal Z. Miaji). - Кэширование списков вхождений для повышения производительности при повторных запусках. #88912 (Elmi Ahmadov).
- Выполнять потоковое преобразование LIMIT BY в случаях, когда порядок сортировки входных данных соответствует ключам LIMIT BY. #88969 (Eduard Karacharov).
- В некоторых случаях разрешено переписывать
ANY LEFT JOINилиANY RIGHT JOINвALL INNER JOIN. #89403 (Dmitry Novik). - Снижены накладные расходы на логирование: на каждую запись используется меньше атомарных операций. #89651 (Sergei Trifonov).
- Когда в запросе с несколькими JOIN включены runtime filters и добавляется несколько runtime filters, реализован pushdown шагов вновь добавленных фильтров поверх остальных. #89725 (Alexander Gololobov).
- Немного ускорили некоторые операции
uniqExact, снизив накладные расходы на слияние хеш-таблиц. #89727 (Raúl Marín). - Увеличен лимит количества строк для lazy materialization с 10 до 100. #89772 (Alexey Milovidov).
- Параметр
allow_special_serialization_kinds_in_output_formatsтеперь включён по умолчанию. Это позволит снизить использование памяти и ускорить выполнение запроса при выводе разреженных/Replicated столбцов в некоторых построчных форматах вывода. #89402 (Pavel Kruglov). - Добавлена поддержка параллельного выполнения запросов
ALTER TABLE ... FREEZE. #71743 (Kirill). - Добавлен кэш для bcrypt-аутентификации. #87115 (Nikolay Degterinsky).
- Если индекс пропуска данных, используемый в запросе с
FINAL, построен по столбцу, входящему в первичный ключ, дополнительный шаг проверки пересечения по первичному ключу в других частях не нужен и теперь не выполняется. Устраняет #85897. #88368 (Shankar Iyer). - Оптимизация
enable_lazy_columns_replicationтеперь включена по умолчанию, что позволит экономить память при JOIN. #89316 (Alexey Milovidov). - Добавлен кэш
ColumnsDescriptionна уровне таблицы для частей, что уменьшает использование памяти, если таблицы содержат много частей и столбцов. #89352 (Azat Khuzhin). - Добавлен кэш для десериализованного заголовка текстового индекса, чтобы снизить объём I/O и повысить производительность запросов. Кэш можно настроить с помощью новых настроек сервера: -
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 interface будет передавать заголовки
AgeиExpiresпри использовании кэша результатов запроса. Наличие заголовкаAgeпоказывает, получен ли результат из кэша, аExpiresтакже устанавливается при первой записи. Добавлены новые profile events: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, которая позволяет клиентам сократить сетевой трафик, если 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 (Miсhael Stetsyuk). - Добавлена опция
input_headersвEXPLAIN-запрос, чтобы добавлять входные заголовки к шагам. #88311 (János Benjamin Antal). - Добавлены события profile events для подсчёта числа запросов к S3 и AzureBlobStorage, задержанных троттлерами. Устранено несоответствие между событиями profile events 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, который используется во фоновом пуле для выполнения слияний. Еслиmutexудерживается в течение секунды или какому-либоthreadне удаётся получить его в течение секунды, выводится предупреждение. Тяжёлый код был перенесён из деструктораMergeMutateSelectedEntryв методfinalize, чтобы не удерживать блокировку слишком долго в исполнителеMergeTreeBackground. #88898 (Nikita Mikhaylov). - Разрешено автоматически использовать opt-in-регионы AWS для S3, если регион не указан в конечной точке. См.: opt-in AWS regions. #88930 (Andrey Zvonov).
- Теперь пользователь может отменить запрос в clickhouse-client, нажав Ctrl-C при запущенном пейджере. Устраняет #80778. #88935 (Grigorii).
- Веб-интерфейс будет отображать полосы в таблице, даже если значения отрицательные. Таким образом, он сможет показывать двустороннюю столбчатую диаграмму, где для отрицательной и положительной частей используются полосы разных цветов. #89016 (Alexey Milovidov).
- Отключите
shared_merge_tree_create_per_replica_metadata_nodes, чтобы сократить объём метаданных, хранимыхSharedMergeTreeв Keeper. #89036 (Alexander Tokmakov). - Теперь
S3Queueучитывает настройку сервераdisable_insertion_and_mutation. #89048 (Raúl Marín). - В версии 25.6 значение
s3_retry_attemptsпо умолчанию установлено равным 500, чтобы резервные копии успешно выполнялись, если в S3 происходит переразбиение и S3 более 10 минут отвечает ошибками SlowDown. #89051 (Nikita Mikhaylov). - Настройки
kafka_compression_codecиkafka_compression_levelтеперь можно использовать для указания сжатия для продюсеров Kafka в обоих движках Kafka. #89073 (János Benjamin Antal). - Добавлен новый столбец
statisticsвsystem.columns, указывающий, какие типы статистики построены для этой таблицы. Если какой-либо тип статистики создаётся автоматически, в суффиксе он будет отображаться как (auto). #89086 (Han Fei). - Улучшено сообщение об error, если в табличную функцию
*Clusterвместо имени кластера передаётся обобщённая подстановка. #89093 (Konstantin Bogdanov). - YTsaurus: теперь можно использовать replicated_table в качестве источника данных. #89107 (MikhailBurdukov).
- Запросы, начинающиеся с пробелов, больше не сохраняются в истории CLI. #89116 (Konstantin Bogdanov).
- Поддержка типа Array(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). - Растягивание текстового поля запроса в веб-интерфейсе сделали на всю ширину, что немного удобнее. Кроме того, встроенный в браузер механизм изменения размера был недоступен в Safari на iPad, а после этого изменения можно хотя бы перетаскивать нижний край текстового поля — если знать, что это возможно. #89457 (Alexey Milovidov).
- Улучшено отслеживание памяти при формировании результата hash JOIN. Ранее временные выделения памяти при формировании результата JOIN отслеживались некорректно, что могло приводить к превышению лимитов памяти. #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). - Исправлен pushdown runtime-фильтра, когда под ним находится несколько шагов вычисления выражений. #89741 (Alexander Gololobov).
- Если системной памяти меньше 5 ГБ, по умолчанию не блокировать исполняемый файл в памяти с помощью
mlock. #89751 (Alexey Milovidov). - Подсказки типов в веб-интерфейсе больше не налезают на заголовок таблицы. Также исправлено отображение всплывающих подсказок — теперь они больше не оказываются за заголовком таблицы. #89753 (Alexey Milovidov).
- Отображать свойства таблицы в веб-интерфейсе. При нажатии на число строк или байтов открывается запрос к
system.tables. При нажатии на движок таблицы открываетсяSHOW TABLES. #89771 (Alexey Milovidov). - Добавлена поддержка
non_replicated_deduplication_windowдля таблиц с диском, не поддерживающим запись сappend. Исправляет проблему #87281. #89796 (Tuan Pham Anh). - Добавлена возможность указывать список таблиц для сброса в команде
SYSTEM FLUSH ASYNC INSERT QUEUE. #89915 (Sema Checherinda). - Сохранять идентификаторы блоков дедупликации в
system.part_log. #89928 (Sema Checherinda). - Значение по умолчанию для настройки файлового кэша
keep_free_space_remove_batchизменено с 10 на 100, так как это оптимальнее. #90030 (Kseniia Sumarokova). - Добавлен тип слияния TTL DROP, и после таких слияний расписание следующего TTL-слияния с удалением больше не обновляется. #90077 (Mikhail Artemenko).
- Снижен лимит узлов для запроса RemoveRecursive в Keeper при очистке S3Queue. #90201 (Antonio Andelic).
- Запрос
SYSTEM FLUSH LOGSтеперь ожидает создания таблицы, даже если журналы пусты. #89408 (János Benjamin Antal). - Исправлено некорректное значение
rows_before_limit_at_least, когда в распределённой агрегации со слиянием участвуют несколько удалённых сегментов или используются подзапросы в IN. Это исправляет #63280. #63511 (Amos Bird). - Исправлено появление
0 rows in setпосле запросаINSERT INTO ... SELECT. Закрывает #47800. #79462 (Engel Danila).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Исправлен
multiIfдля константных аргументов и укороченного вычисления. Закрывает #72714. #84546 (Yakov Olkhovskiy). - Исправлена логическая ошибка при выборке из таблицы с ограничением, включающим подзапрос. Исправлено в #84190. #85575 (Pervakov Grigorii).
- Исправлена ошибка в специальных запросах, использующих URI со знаками вопроса. #85663 (Yarik Briukhovetskyi).
- Исправлено иногда пропадавшее отображение столбцов в выводе
EXPLAIN indexes = 1. Устраняет проблему #86696. #87083 (Michael Kolupaev). - Исправлена возможная ошибка «Cannot add subcolumn with parallel replicas». Закрывает #84888. #87514 (Pavel Kruglov).
- В модуле записи Parquet строка
created_byтеперь выводится в правильном формате, напримерClickHouse version 25.10.1 (build 5b1dfb14925db8901a4e9202cd5d63c11ecfbb9f)вместоClickHouse v25.9.1.1-testing. Исправлена совместимость ридера Parquet с некорректными файлами, записанными старой версией parquet-mr. #87735 (Michael Kolupaev). - Исправлено вычисление phi-squared, из-за которого
cramersV,cramersVBiasCorrected,theilsUиcontingencyвозвращали некорректные результаты. #87831 (Nihal 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 запрещены явные определения столбцов, а сами столбцы автоматически загружаются из целевой таблицы. Это гарантирует, что псевдоним всегда соответствует схеме целевой таблицы. 2. Проксирование большего числа методов из IStorage. #88552 (Kai Zhu).
- После восстановления реплика базы данных Replicated могла надолго зависнуть и выводить сообщения вида
Failed to marked query-0004647339 as finished (finished=No node, synced=No node); это исправлено. #88671 (Alexander Tokmakov). - Исправлена возможная ошибка “Context has expired” в новом анализаторе при работе с подзапросами. #88694 (Azat Khuzhin).
- Исправлено падение с ошибкой сегментации в ридере Parquet, когда input_format_parquet_local_file_min_bytes_for_seek установлен в 0. Устраняет #78456. #88784 (Animesh).
- Исправлен некорректный результат min(PK)/max(PK), когда PK задан в обратном порядке. Это исправляет #83619. #88796 (Amos Bird).
- Исправлена передача ограничений на размер, задаваемых настройками max_table_size_to_drop и max_partition_size_to_drop, при DROP внутренних таблиц. #88812 (Nikolay Degterinsky).
- Исправлено:
top_kтеперь учитывает параметр threshold при вызове с одним аргументом. Закрывает #88757. #88867 (Manuel). - Источники ArrowFlight с конечными точками, для которых требовалось SSL-подключение (например, за AWS ALB), теперь могут корректно запрашивать конкретный набор данных. #88868 (alex-shchetkov).
- Исправлена обработка нематериализованного Nested(Tuple(…)) (добавленного через ALTER). Исправление #83133. #88879 (Azat Khuzhin).
- Исправлена ошибка в функции
reverseUTF8. В предыдущих версиях она ошибочно переставляла байты в кодовых точках UTF-8 длиной 4 байта. Это закрывает #88913. #88914 (Alexey Milovidov). - Исправлен протокол icebergS3Cluster. Добавлена поддержка эволюции схемы, позиционных удалений и удалений по равенству в кластерной функции iceberg. Исправляет #88287. #88919 (Yang Jiang).
- Отключена
parallel_replicas_support_projectionдля запросов с параллельными репликами к distributed таблицам. Закрывает #88899. #88922 (zoomxi). - Передача контекста во внутренних приведениях типов. Исправлено несколько проблем, из-за которых настройки приведения типов не передавались. Закрывает #88873. Закрывает #78025. #88929 (Manuel).
- Исправлено определение формата файла по глоб-шаблонам в функции 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).
- Исправлена ошибка LOGICAL_ERROR в Statistics countmin, возникавшая из-за отсутствия поддержки оценочного типа данных LowCardinality(Nullable(String)). #89343 (Han Fei).
- Возможен сбой/неопределённое поведение в функции IN, если типы столбцов первичного ключа отличаются от типов столбцов в правой части выражения IN. Пример: SELECT string_column, int_column FROM test_table WHERE (string_column, int_column) IN (SELECT ‘5’, ‘not a number’). Возникает, если выбрано много строк и среди них есть строки с несовместимыми типами. #89367 (Ilya Golshtein).
- Устранено усечение аргументов
countIf(*). Закрывает #89372. #89373 (Manuel). - Предотвращена потеря несжатых контрольных сумм в статистике мутаций. #89381 (Azat Khuzhin).
- Исправлена ошибка LOGICAL_ERROR в L2DistanceTransposed(vec1, vec2, p), при которой оптимизация частичного чтения QBit некорректно удаляла Nullable из возвращаемого типа, если p имел тип LowCardinality(Nullable(T)). Устраняет #88362. #89397 (Raufs Dunamalijevs).
- Исправлена загрузка таблиц с некорректной разреженной сериализацией самого Tuple, записанной более старыми версиями ClickHouse. #89405 (Azat Khuzhin).
- Исправлена некорректная обработка слияния частей, очищенных TTL, с непустыми проекциями при использовании
deduplicate_merge_projection_mode='ignore'. Устраняет #89430. #89458 (Amos Bird). - Исправлена логическая ошибка в JOIN full_sorting_merge при наличии дублирующихся столбцов. Устраняет #86957. #89495 (Vladimir Cherkasov).
- Исправлено чтение файлов changelog при запуске Keeper в случаях, когда файл changelog не был должным образом переименован при ротации. #89496 (Antonio Andelic).
- Исправлены некорректные результаты JOIN при использовании условий OR с уникальными ключами в правой таблице. Исправляет #89391. #89512 (Vladimir Cherkasov).
- Исправлена возможная ошибка “Context has expired” при использовании анализатора и PK IN (подзапроса) (v2). Исправление #89433. #89527 (Azat Khuzhin).
- Исправлена репликация MaterializedPostgreSQL для таблиц с именами столбцов, заданными в верхнем регистре. Устраняет проблему #72363. #89530 (Danylo Osipchuk).
- Исправлен сбой, возникавший, если состояние агрегатной функции содержит сериализованное значение столбца LowCardinality(String). #89550 (Pavel Kruglov).
- Исправлен сбой при использовании
ARRAY JOINв правой части оператора JOIN при включенной настройкеenable_lazy_columns_replication. #89551 (Pavel Kruglov). - Исправлена логическая ошибка в query_plan_convert_join_to_in. Исправление устраняет #89066. #89554 (Vladimir Cherkasov).
- Исправлено исключение в оценщике статистики при попытке оценить условия с несовместимыми типами столбца и константы, которые нельзя преобразовать. #89596 (Han Fei).
- Добавлять runtime filter только для поддерживаемых алгоритмов JOIN, то есть для hash JOIN. Фильтр можно построить, только если алгоритм JOIN сначала полностью считывает правую сторону, а затем — левую, но, например, FullSortingMergeJoin считывает обе стороны одновременно. Исправлено #89220. #89652 (Alexander Gololobov).
- Исправлены проблемы при параллельном выполнении функций
hasAnyTokens,hasAllTokensиtokensс токенизаторомsparseGrams. Устранена проблема #89605. #89665 (Elmi Ahmadov). - Исправлены логическая ошибка и сбой, связанные с runtime-фильтром JOIN в некоторых случаях. Исправляет #89062. #89666 (Alexander Gololobov).
- Исправлена возможная логическая ошибка при ARRAY JOIN по столбцу Map при включённом параметре
enable_lazy_columns_replication. Закрывает #89705. #89717 (Pavel Kruglov). - Предотвращён сбой, вызванный чтением с удалённого сервера после разрыва соединения в удалённых запросах во время отмены. Исправляет #89468. #89740 (Azat Khuzhin).
- Исправлено состояние гонки при чтении индекса проекции. Устраняет #89497. #89762 (Peng Jian).
- Исправлена ошибка при чтении индекса проекции, которая могла приводить к состоянию гонки. Устраняет #89497. #89775 (Amos Bird).
- Исправлена обработка табличной функции Paimon для таблиц без партиций. Устраняет проблему #89690. #89793 (JIaQi).
- Исправлена возможная логическая ошибка при чтении путей и их подстолбцов в усовершенствованной JSON-сериализации с общими данными. Закрывает #89805. #89819 (Pavel Kruglov).
- Исправлено возможное переполнение стека при бинарной десериализации типов данных. Закрывает #88710. #89822 (Pavel Kruglov).
- Исправлена логическая ошибка с пустым кортежем в функции
IN. Закрывает #88343. #89850 (Nihal Z. Miaji). - Инъективные функции удалены из
GROUP BYв старом анализаторе вне зависимости отoptimize_injective_functions_in_group_byдля обеспечения совместимости. Устраняет #89854. #89870 (Raufs Dunamalijevs). - Если слияние было прервано, например, из-за ограничения памяти, фоновый исполнитель merge mutate вызовет
cancelдля задачи слияния без блокировки, но в этом случае частично созданная результирующая часть не будет удалена (поскольку она не была завершена и на этом этапе ещё не была видна). После этого задача слияния будет уничтожена, что приведёт к уничтожению результирующей части. Это откатит дисковую транзакцию и приведёт к удалению данных из S3. В итоге эта очистка мусора выполнялась под блокировкой фонового исполнителя merge mutate. #89875 (Mikhail Artemenko). - Исправлена логическая ошибка с пустым кортежем в функциях
reverseиCAST. Закрывает #89137. #89908 (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). - Исправлено некорректное форматирование некоторых индексов пропуска данных в определении таблицы, из-за которого возникала ошибка
METADATA_MISMATCHи не удавалось создавать новые реплики в базе данных Replicated. #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 (Nihal Z. Miaji). - Бэкпортировано в #90625: исправлена возможная логическая ошибка в prewhere для несуществующего JSON-пути при index_granularity_bytes=0. Устраняет #86924. #90375 (Pavel Kruglov).
- Выполнен бэкпорт в #90484: исправлена ошибка в
L2DistanceTransposed, из-за которой происходили сбои, когда аргументprecisionвыходил за пределы допустимого диапазона. Закрывает #90401. #90405 (Raufs Dunamalijevs). - В #90577 выполнен бэкпорт: исправлены некорректные вычисления расстояния в
L2DistanceTransposedпри использовании эталонных векторов в виде массивов (для которых по умолчанию используетсяArray(Float64))) со столбцамиQBit, у которых тип элементов отличается отFloat64(Float32,BFloat16). Теперь функция автоматически приводит эталонный вектор к типу элементовQBit. Устраняет #89976. #90485 (Raufs Dunamalijevs). - Бэкпортировано в #90601: исправлена логическая ошибка, возникавшая в редком случае в функции
equals. Закрывает #88142. #90557 (Nihal Z. Miaji). - Исправлена работа
CoalescingMergeTreeс типамиTuple. #88828 (scanhex12).
Улучшение сборки/тестирования/упаковки
- Исправлена ошибка Connection refused при запуске ClickHouse в Docker с SQL-скриптами initdb и переопределённым TCP-портом. #88042 (Grigorii).
- В экспериментальном режиме добавлена поддержка e2k как новой платформы для ClickHouse. #90159 (Ramil Sattarov).
- Удалено оставшееся использование
FindPackageв CMake. Сборки не должны зависеть от системных пакетов. #89380 (Alexey Milovidov). - Кэш компилятора теперь используется в сборках при конфигурации CMake (например, для
protoc). #89613 (Konstantin Bogdanov). - Используется sysroot от FreeBSD 13.4. #89617 (Konstantin Bogdanov).
Релиз ClickHouse 25.10, 2025-10-31
Обратно несовместимое изменение
- Изменено значение настройки
schema_inference_make_columns_nullableпо умолчанию: теперь она учитывает информацию оNullableстолбцов из метаданных Parquet/ORC/Arrow, а не делает всёNullable. Для текстовых форматов изменений нет. #71499 (Michael Kolupaev). - Кэш результатов запросов будет игнорировать настройку
log_comment, поэтому изменение толькоlog_commentв запросе больше не будет приводить к промаху по кэшу. Есть небольшая вероятность, что пользователи намеренно сегментировали кэш, изменяяlog_comment. Это изменение меняет такое поведение и потому является обратно несовместимым. Для этой цели используйте настройкуquery_cache_tag. #79878 (filimonov). - В предыдущих версиях запросы с табличными функциями, названными так же, как и функции-реализации операторов, форматировались непоследовательно. Закрывает #81601. Закрывает #81977. Закрывает #82834. Закрывает #82835. Запросы EXPLAIN SYNTAX теперь не всегда будут форматировать операторы — новое поведение лучше соответствует цели объяснения синтаксиса.
clickhouse-format,formatQueryи аналогичные инструменты не будут форматировать функции как операторы, если в запросе они использовались в форме функции. #82825 (Alexey Milovidov). - Запрещено использование типа
Dynamicв ключахJOIN. Это может приводить к неожиданным результатам, когда значение типаDynamicсравнивается со значением типа, отличного отDynamic. Лучше привести столбецDynamicк нужному типу. #86358 (Pavel Kruglov). - Параметр server
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). - Новый синтаксис позволяет более гибко задавать параметр токенизатора для текстового индекса. #87997 (Elmi Ahmadov).
- Функции
searchAnyиsearchAllбыли переименованы вhasAnyTokensиhasAllTokensдля большей согласованности с существующей функциейhasToken. #88109 (Robert Schulze). - Удалён параметр
cache_hits_thresholdиз файлового кэша. Эта возможность была добавлена внешним участником до появления политики кэша SLRU, и теперь, когда она есть, поддержка обоих вариантов не имеет смысла. #88344 (Kseniia Sumarokova). - Два небольших изменения в работе настроек
min_free_disk_ratio_to_perform_insertиmin_free_disk_bytes_to_perform_insert: - использовать не зарезервированные, а не просто доступные байты, чтобы определять, нужно ли отклонять вставку. Вероятно, это не слишком важно, если резервы для фоновых слияний и мутаций малы по сравнению с заданными порогами, но так корректнее. - Не применять эти настройки к системным таблицам. Причина в том, что мы всё же хотим, чтобы такие таблицы, какquery_log, продолжали обновляться. Это очень помогает при отладке. Объём данных, записываемых в системные таблицы, обычно невелик по сравнению с основными данными, поэтому при разумном порогеmin_free_disk_ratio_to_perform_insertзапись в них может продолжаться гораздо дольше. #88468 (c-end). - Включён асинхронный режим для внутренней репликации Keeper. Keeper сохранит прежнее поведение, при этом возможны улучшения производительности. Если вы обновляетесь с версии ниже 23.9, вам нужно либо сначала обновиться до 23.9+, а затем до 25.10+. Вы также можете установить
keeper_server.coordination_settings.async_replicationв 0 перед обновлением и включить этот параметр после завершения обновления. #88515 (Antonio Andelic).
Новая возможность
- Добавлена поддержка отрицательных
LIMITиOFFSET. Закрывает #28913. #88411 (Nihal Z. Miaji). - Движок
Aliasсоздаёт прокси для другой таблицы. Все операции чтения и записи перенаправляются в целевую таблицу, при этом сам псевдоним не хранит данные и лишь поддерживает ссылку на целевую таблицу. #87965 (Kai Zhu). - Полная поддержка оператора
IS NOT DISTINCT FROM(<=>). #88155 (simonmichal). - Добавлена возможность автоматически создавать статистику для всех подходящих столбцов в таблицах
MergeTree. Добавлена настройка уровня таблицыauto_statistics_types, в которой хранятся разделённые запятыми типы создаваемой статистики (например,auto_statistics_types = 'minmax, uniq, countmin'). #87241 (Anton Popov). - Новый индекс на основе фильтра Блума для текста —
sparse_gram. #79985 (scanhex12). - Новая функция
convдля преобразования чисел между системами счисления; в настоящее время поддерживаются основания от2до36. #83058 (hp). - Добавлена поддержка синтаксиса
LIMIT BY ALL. ПодобноGROUP BY ALLиORDER BY ALL,LIMIT BY ALLавтоматически разворачивается в использование всех неагрегатных выражений из предложения SELECT в качестве ключей LIMIT BY. Например,SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALLэквивалентноSELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, name. Эта возможность упрощает запросы, когда нужно ограничить результаты по всем выбранным неагрегатным столбцам, не перечисляя их явно. Закрывает #59152. #84079 (Surya Kant Ranjan). - Добавлена поддержка запросов к Apache Paimon в ClickHouse. Эта интеграция позволит пользователям ClickHouse напрямую работать с хранилищем в озере данных Paimon. #84423 (JIaQi).
- Добавлена агрегатная функция
studentTTestOneSample. #85436 (Dylan). - Агрегатная функция
quantilePrometheusHistogram, которая принимает верхние границы и накопленные значения бакетов гистограммы в качестве аргументов и выполняет линейную интерполяцию между верхней и нижней границами бакета, в котором находится квантиль. Работает аналогично функции PromQLhistogram_quantileдля классических гистограмм. #86294 (Stephen Chi). - Новая системная таблица для файлов метаданных Delta Lake. #87263 (scanhex12).
- Добавлена команда
ALTER TABLE REWRITE PARTS— она переписывает части таблицы с нуля, используя все новые настройки (поскольку некоторые из них, напримерuse_const_adaptive_granularity, применяются только к новым частям). #87774 (Azat Khuzhin). - Добавлена команда
SYSTEM RECONNECT ZOOKEEPERдля принудительного отключения от ZooKeeper и повторного подключения (https://github.com/ClickHouse/ClickHouse/issues/87317). #87318 (Pradeep Chhetri). - Ограничено число именованных коллекций с помощью настроек
max_named_collection_num_to_warnиmax_named_collection_num_to_throw. Добавлены метрикаNamedCollectionи ошибкаTOO_MANY_NAMED_COLLECTIONS. #87343 (Pablo Marcos). - Добавлены оптимизированные версии функций
startsWithиendsWithс регистронезависимым сравнением:startsWithCaseInsensitive,endsWithCaseInsensitive,startsWithCaseInsensitiveUTF8иendsWithCaseInsensitiveUTF8. #87374 (Guang Zhao). - Позволяет задавать определения
WORKLOADиRESOURCEв SQL через раздел конфигурации сервера “resources_and_workloads”. #87430 (Sergei Trifonov). - Добавлена новая настройка таблицы
min_level_for_wide_part, позволяющая указать минимальный уровень, начиная с которого part будет создаваться как wide part. #88179 (Christoph Wurm). - В клиенте Keeper добавлены рекурсивные варианты команд
cp-cprиmv-mvr. #88570 (Mikhail Artemenko). - Добавлена настройка сеанса для исключения списка индексов пропуска данных из материализации при вставке (
exclude_materialize_skip_indexes_on_insert). Добавлена настройка таблицы MergeTree для исключения списка индексов пропуска данных из материализации во время слияния (exclude_materialize_skip_indexes_on_merge). #87252 (George Larionov).
Экспериментальные возможности
- Реализованы тип данных
QBit, хранящий векторы в bit-sliced формате, и функцияL2DistanceTransposed, которая позволяет выполнять приближённый векторный поиск, где компромисс между точностью и скоростью задаётся параметром. #87922 (Raufs Dunamalijevs). - Функции
searchAllиsearchAnyтеперь работают и со столбцами, среди которых нет текстовых. В таких случаях они используют токенизатор по умолчанию. #87722 (Jimmy Aguilar Mena).
Повышение производительности
- Реализована ленивая репликация столбцов в JOIN и ARRAY JOIN. Исключено преобразование специальных представлений столбцов, таких как Sparse и Replicated, в полные столбцы в некоторых выходных форматах. Это позволяет избежать лишнего копирования данных в памяти. #88752 (Pavel Kruglov).
- Добавлена необязательная сериализация подстолбца
.sizeдля String-столбцов верхнего уровня в таблицах MergeTree, чтобы улучшить сжатие и обеспечить эффективный доступ к подстолбцам. Добавлены новые настройки MergeTree для управления версией сериализации и оптимизации выражений для пустых строк. #82850 (Amos Bird). - Поддержка read in order для Iceberg. #88454 (scanhex12).
- Некоторые запросы с JOIN теперь выполняются быстрее: во время выполнения из правого поддерева строится фильтр Блума, который затем передаётся в сканирование левого поддерева. Это может быть полезно для таких запросов, как
SELECT avg(o_totalprice) FROM orders, customer, nation WHERE c_custkey = o_custkey AND c_nationkey=n_nationkey AND n_name = 'FRANCE'. #84772 (Alexander Gololobov). - Производительность запросов улучшена за счёт переработки порядка взаимодействия и интеграции кэша условий запроса (QCC) с анализом индексов. Фильтрация QCC теперь применяется до анализа первичного ключа и индекса пропуска данных, что сокращает объём лишних вычислений индексов. Анализ индексов был расширен для поддержки нескольких фильтров диапазона, а результаты фильтрации теперь также сохраняются обратно в QCC. Это значительно ускоряет запросы, в которых анализ индексов занимает основную часть времени выполнения, — особенно запросы, использующие индекс пропуска данных (например, векторные или инвертированные индексы). #82380 (Amos Bird).
- Ряд микрооптимизаций для ускорения небольших запросов. #83096 (Raúl Marín).
- Сжатие журналов и событий профилирования в собственном протоколе. В кластерах со 100+ репликами несжатые события профилирования занимают 1..10 МБ/с, а индикатор прогресса работает медленно при медленном интернет-соединении. Это исправление закрывает #82533. #83586 (Alexey Milovidov).
- Повышена производительность регистрозависимого поиска по строкам (например, при фильтрации, как в
WHERE URL LIKE '%google%') за счет использования библиотеки StringZilla, которая задействует SIMD-инструкции процессора, когда они доступны. #84161 (Raúl Marín). - Сокращены затраты памяти на выделение и копирование при
selectиз таблицы AggregatingMergeTree с FINAL, если в таблице есть столбцы типаSimpleAggregateFunction(anyLast). #84428 (Duc Canh Le). - Добавлена логика проталкивания вниз дизъюнктивных предикатов JOIN. Пример: в TPC-H Q7 для условия по 2 таблицам 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, чтобы уменьшить использование памяти в hash JOIN с большим числом совпадений по ключу. Она позволяет разбивать результат JOIN на фрагменты даже в пределах совпадений для одной строки левой таблицы, что особенно полезно, когда одной строке из левой таблицы соответствуют тысячи или миллионы строк из правой таблицы. Ранее все совпадения приходилось материализовать в памяти сразу. Это снижает пиковое потребление памяти, но может увеличить использование CPU. #87913 (Vladimir Cherkasov). - Улучшения в SharedMutex (улучшена производительность при большом количестве параллельных запросов). #87491 (Raúl Marín).
- Повышена производительность построения текстового индекса для документов, содержащих в основном редкие токены. #87546 (Anton Popov).
- Ускорен типичный сценарий работы деструктора Field (улучшена производительность при большом количестве небольших запросов). #87631 (Raúl Marín).
- Исключён перерасчёт статистики hash table во время выполнения при оптимизации 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 merging должны проходить только пересекающиеся диапазоны. #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” теперь выполняется до вычисления оценки диапазона слияния. Ранее селектор слияний выбирал слияние в формате wide, а затем отфильтровывал его суффикс. Исправления: #85374. #88736 (Mikhail Artemenko).
Улучшения
- Теперь функция
generateSerialIDподдерживает неконстантный аргумент с именем серии. Закрывает #83750. #88270 (Alexey Milovidov). - В функцию
generateSerialIDдобавлен необязательный параметрstart_value, позволяющий задавать пользовательские начальные значения для новых серий. #88085 (Manuel). - В
clickhouse-formatдобавлена опция--semicolons_inline, которая форматирует запросы так, что точки с запятой размещаются на последней строке, а не на новой. #88018 (Jan Rada). - Добавлена возможность настраивать троттлинг на уровне сервера, если конфигурация переопределяется в Keeper. Закрывает #73964. #74066 (JIaQi).
mannWhitneyUTestбольше не генерирует исключение, если обе выборки содержат только одинаковые значения. Теперь функция возвращает корректный результат, согласующийся с SciPy. Это закрывает: #79814. #80009 (DeanNeaht).- Транзакция Rewrite для диска объектного хранилища удаляет предыдущие blobs в удалённом хранилище, если транзакция метаданных успешно зафиксирована. #81787 (Sema Checherinda).
- Исправлен проход оптимизации для избыточного выражения с равенством, когда
LowCardinalityрезультирующего типа различается до и после оптимизации. #82651 (Yakov Olkhovskiy). - Когда HTTP-клиенты задают заголовок
X-ClickHouse-100-Continue: deferв дополнение кExpect: 100-continue, ClickHouse не отправляет клиенту ответ100 Continue, пока не пройдёт проверка квоты. Это позволяет избежать напрасного расхода пропускной способности сети на передачу тел запросов, которые всё равно будут отброшены. Это актуально для запросов INSERT, в которых сам запрос может передаваться в строке URL, а данные — в теле запроса. Если прервать запрос, не отправив тело целиком, повторно использовать соединение в HTTP/1.1 не получится, однако дополнительная задержка из-за открытия новых соединений обычно несущественна по сравнению с общей длительностью INSERT при больших объёмах данных. #84304 (c-end). - Маскирование учетных данных S3 в журналах при использовании DATABASE ENGINE = Backup с хранилищем S3. #85336 (Kenny Sun).
- Сделать оптимизации плана запроса видимыми во входном подплане коррелированного подзапроса, отложив его материализацию. Часть #79890. #85455 (Dmitry Novik).
- Изменение для SYSTEM DROP DATABASE REPLICA: - При удалении с указанием database или при удалении всей реплики также удаляется реплика для каждой таблицы в database - Если указан ‘WITH TABLES’, реплика удаляется для каждого хранилища - В противном случае логика не меняется: удаляется только реплика на уровне database - При удалении реплики database с указанием пути Keeper: - Если указан ‘WITH TABLES’: - Восстановить database как Atomic - Восстановить таблицы RMT из оператора в Keeper - Удалить database (восстановленные таблицы также будут удалены) - В противном случае удаляется только реплика по указанному пути Keeper. #85637 (Tuan Pham Anh).
- Исправлено непоследовательное форматирование TTL, когда он содержит функцию
materialize. Закрывает #82828. #85749 (Alexey Milovidov). - Состояние таблицы Iceberg больше не хранится в объекте хранилища. Это должно позволить использовать Iceberg в ClickHouse с параллельно выполняемыми запросами. #86062 (Daniil Ivanik).
- Блокировка бакета в упорядоченном режиме S3Queue сделана постоянной, аналогично узлам processing при
use_persistent_processing_nodes = 1. В тесты добавлена инъекция отказов Keeper. #86628 (Kseniia Sumarokova). - Показывать подсказки, если пользователь допустил опечатку в названии формата. Закрывает #86761. #87092 (flynn).
- Удалённые реплики не будут выполнять анализ индексов, если проекции отсутствуют. #87096 (zoomxi).
- Добавлена возможность отключать кодировку UTF-8 для таблицы YTsaurus. #87150 (MikhailBurdukov).
s3_slow_all_threads_after_retryable_errorпо умолчанию отключён. #87198 (Nikita Mikhaylov).- Переименовали табличную функцию
arrowflightвarrowFlight. #87249 (Vitaly Baranov). - Обновлён
clickhouse-benchmark: теперь его флаги CLI принимают-вместо_. #87251 (Ahmed Gouda). - Сделана синхронной запись в
system.crash_logпри обработке сигналов. #87253 (Miсhael Stetsyuk). - Добавлена настройка
inject_random_order_for_select_without_order_by, которая подставляетORDER BY rand()в запросыSELECTверхнего уровня безORDER BY. #87261 (Rui Zhang). - Улучшено сообщение об ошибке
joinGet, чтобы в нём корректно указывалось, что числоjoin_keysотличается от числаright_table_keys. #87279 (Isak Ellmer). - Добавлена возможность проверять состояние произвольного узла Keeper во время транзакции записи. Это может помочь выявлять проблему ABA. #87282 (Mikhail Artemenko).
- Тяжёлые запросы ytsaurus теперь перенаправляются на heavy-прокси. #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теперь возвращает 0 совпадений для пустого токена (тогда как ранее это вызывало исключение). #87564 (Jimmy Aguilar Mena). - Добавлена поддержка текстового индекса для значений
ArrayиMap(mapKeysиmapValues). Поддерживаемые функции:mapContainsKeyиhas. #87602 (Elmi Ahmadov). - Добавлена новая метрика
ZooKeeperSessionExpired, которая указывает на количество истёкших глобальных сеансов ZooKeeper. #87613 (Miсhael Stetsyuk). - Использовать клиент хранилища S3 с настройками, специфичными для резервного копирования (например, backup_slow_all_threads_after_retryable_s3_error), для выполняемого на стороне сервера (native) копирования в пункт назначения резервной копии. Пометить s3_slow_all_threads_after_retryable_error как устаревшую. #87660 (Julia Kartseva).
- Исправлена некорректная обработка настроек
max_joined_block_size_rowsиmax_joined_block_size_bytesпри сериализации плана запроса с экспериментальнымmake_distributed_plan. #87675 (Vladimir Cherkasov). - Параметр
enable_http_compressionтеперь включён по умолчанию. Это означает, что если клиент поддерживает HTTP-сжатие, сервер будет его использовать. Однако у этого изменения есть определённые недостатки. Клиент может запросить ресурсоёмкий метод сжатия, напримерbzip2, что нерационально и увеличит потребление ресурсов сервера (но это будет заметно только при передаче больших результатов). Клиент может запроситьgzip, что не так уж плохо, но уступаетzstdпо эффективности. Закрывает #71591. #87703 (Alexey Milovidov). - В
system.server_settingsдобавлена новая записьkeeper_hosts, которая показывает список хостов [Zoo]Keeper, к которым может подключаться ClickHouse. #87718 (Nikita Mikhaylov). - Добавлены значения
fromиtoв системные панели мониторинга для упрощения ретроспективных расследований. #87823 (Mikhail f. Shiryaev). - Добавлено больше информации для отслеживания производительности в SELECT-запросах Iceberg. #87903 (Daniil Ivanik).
- Улучшение файлового кэша: повторное использование итератора приоритета кэша несколькими потоками, одновременно резервирующими место в кэше. #87914 (Kseniia Sumarokova).
- Добавлена возможность ограничивать размер запросов в
Keeper(настройкаmax_request_size, аналогjute.maxbufferдляZooKeeper; по умолчанию OFF для обратной совместимости, будет включена в следующих выпусках). #87952 (Azat Khuzhin). - Теперь
clickhouse-benchmarkпо умолчанию не включает трассировки стека в сообщения об ошибках. #87954 (Ahmed Gouda). - Избегайте асинхронной загрузки меток через пул потоков (
load_marks_asynchronously=1), если метки уже находятся в кэше (поскольку пул может быть перегружен, из-за чего запросы будут выполняться медленнее, даже если метки уже есть в кэше). #87967 (Azat Khuzhin). - Ytsaurus: теперь можно создавать таблицы/табличные функции/словари с подмножеством столбцов. #87982 (MikhailBurdukov).
- Теперь
system.zookeeper_connection_logвключен по умолчанию, и его можно использовать для получения информации о сеансах Keeper. #88011 (János Benjamin Antal). - Теперь поведение TCP и HTTP согласовано при передаче дублирующихся внешних таблиц. HTTP позволяет передавать временную таблицу несколько раз. #88032 (Sema Checherinda).
- Удалены пользовательские MemoryPools для чтения Arrow/ORC/Parquet. Похоже, после #84082 этот компонент больше не нужен, поскольку теперь мы всё равно отслеживаем все выделения памяти. #88035 (Nikita Mikhaylov).
- Теперь можно создавать базу данных
Replicatedбез аргументов. #88044 (Pervakov Grigorii). clickhouse-keeper-client: Добавлена поддержка подключения к TLS-порту clickhouse-keeper; имена флагов оставлены такими же, как в clickhouse-client. #88065 (Pradeep Chhetri).- Добавлено новое событие профиля для отслеживания числа случаев, когда фоновое слияние отклонялось из-за превышения лимита памяти. #88084 (Grant Holly).
- Включает анализатор для проверки выражений значений по умолчанию столбцов в CREATE/ALTER TABLE. #88087 (Max Justus Spransy).
- Улучшение внутреннего планирования запросов: использование JoinStepLogical для
CROSS JOIN. #88151 (Vladimir Cherkasov). - Добавлены псевдонимы для функций
hasAnyTokens(hasAnyToken) иhasAllTokens(hasAllToken). #88162 (George Larionov). - Глобальный профайлер со сэмплированием (то есть в том числе для потоков сервера, не связанных с запросами) теперь включён по умолчанию: каждые 10 секунд процессорного и реального времени собираются трассировки стека всех потоков. #88209 (Alexander Tokmakov).
- Обновлён Azure SDK: добавлено исправление для ‘Content-Length’, которое проявлялось при копировании и создании контейнера. #88278 (Smita Kulkarni).
- Функция
lagсделана регистронезависимой для совместимости с MySQL. #88322 (Lonny Kapelushnik). - Разрешён запуск
clickhouse-localиз каталогаclickhouse-server. В предыдущих версиях при этом возникала ошибкаCannot parse UUID: .Теперь вы можете запускатьclickhouse-localи работать с базами данных сервера без запуска самого сервера. #88383 (Alexey Milovidov). - Добавлен параметр конфигурации
keeper_server.coordination_settings.check_node_acl_on_remove. Если он включен, перед каждым удалением узла будут проверяться ACL как самого узла, так и родительского узла. В противном случае будет проверяться только ACL родительского узла. #88513 (Antonio Andelic). - Столбцы
JSONтеперь выводятся в удобочитаемом виде при использовании форматаVertical. Закрывает #81794. #88524 (Frank Rosner). - Файлы
clickhouse-client(например, историю запросов) теперь хранятся в местах, описанных в спецификации XDG Base Directories, а не в корневом каталоге домашней директории.~/.clickhouse-client-historyпо-прежнему будет использоваться, если этот файл уже существует. #88538 (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).
- Исправлена некорректная обработка дат до эпохи с дробными секундами в различных функциях, связанных с датой и временем, таких как
parseDateTime64BestEffort,change{Year,Month,Day}иmakeDateTime64. Ранее дробная часть секунды вычиталась из значения секунд вместо того, чтобы прибавляться к нему. Например,parseDateTime64BestEffort('1969-01-01 00:00:00.468')возвращала1968-12-31 23:59:59.532вместо1969-01-01 00:00:00.468. #85396 (xiaohuanlin). - Исправлена ошибка, из-за которой команды ALTER COLUMN IF EXISTS завершались ошибкой, если состояние столбца менялось в пределах того же оператора ALTER. Команды вроде DROP COLUMN IF EXISTS, MODIFY COLUMN IF EXISTS, COMMENT COLUMN IF EXISTS и RENAME COLUMN IF EXISTS теперь корректно обрабатывают случаи, когда столбец удаляется предыдущей командой в том же операторе. #86046 (xiaohuanlin).
- Исправлено определение типа Date/DateTime/DateTime64 для дат вне поддерживаемого диапазона. #86184 (Pavel Kruglov).
- Исправлен сбой, из-за которого некоторые корректные данные, добавленные пользователем в столбец
AggregateFunction(quantileDD), могли вызывать бесконечную рекурсию при слияниях. #86560 (Raphaël Thériault). - Поддержка типов JSON/Dynamic в таблице, созданной с помощью табличной функции
cluster. #86821 (Pavel Kruglov). - Исправлен недетерминированный результат функции, вычисляемой в CTE, в запросе. #86967 (Yakov Olkhovskiy).
- Исправлена LOGICAL_ERROR в EXPLAIN при использовании pointInPolygon для столбцов первичного ключа. #86971 (Michael Kolupaev).
- Исправлена обработка таблиц озера данных, в имени которых есть последовательность с процентным кодированием. Закрывает #86626. #87020 (Anton Ivashkin).
- Исправлено некорректное поведение
IS NULLдля столбцов с типом 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для всех числовых типов. Исправляет проверку Date32 на выход за нижнюю границу диапазона при приведении из int16. #87176 (Pervakov Grigorii). - Исправлена логическая ошибка в работе параллельных реплик для запросов с несколькими JOIN, в частности когда после LEFT/INNER JOIN используется RIGHT 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из-за смешения const- и non-const-блоков. #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).
- Исправлено создание массива пустых Tuple. #87520 (Pavel Kruglov).
- Проверка недопустимых столбцов при создании временной таблицы. #87524 (Pavel Kruglov).
- Никогда не помещайте столбцы партиции Hive в заголовок формата. Исправлено #87515. #87528 (Arthur Passos).
- Исправлена подготовка к чтению из формата DeltaLake при использовании текстового формата. #87529 (Pavel Kruglov).
- Исправлена проверка прав доступа при SELECT и вставке в таблицы 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для словарей executable. #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-подстолбца map у Variants, которые не могут находиться внутри Nullable. #87798 (Pavel Kruglov).
- Исправлена обработка ошибки, возникавшей, если на вторичном узле кластера не удавалось полностью удалить базу данных. #87802 (Tuan Pham Anh).
- Исправлено несколько ошибок в skip-индексах. #87817 (Raúl Marín).
- В AzureBlobStorage обновили логику: теперь сначала выполняется попытка нативного копирования, а при ошибке ‘Unauthroized’ система переключается на чтение и запись (в AzureBlobStorage, если для источника и пункта назначения используются разные учетные записи хранения, возникает ошибка ‘Unauthorized’). Также исправлено применение “use_native_copy”, когда в конфигурации указана конечная точка. #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).
- Ограничено использование pushdown для фильтрации в PASTE JOIN, поскольку это может приводить к некорректным результатам. #88078 (Yarik Briukhovetskyi).
- Применяет нормализацию URI перед проверкой привилегий, добавленной в https://github.com/ClickHouse/ClickHouse/pull/84503. #88089 (pufit).
- Исправлена логическая ошибка, возникавшая, когда
ARRAY JOIN COLUMNS()не находит ни одного столбца в новом анализаторе. #88091 (xiaohuanlin). - Исправлено предупреждение “Высокое потребление памяти ClickHouse” (без учёта кэша страниц). #88092 (Azat Khuzhin).
- Исправлена возможная порча данных в таблицах
MergeTreeс заданнымTTLдля столбца. #88095 (Anton Popov). - Исправлено возможное неперехваченное исключение при чтении
system.tablesпри подключенных внешних базах данных (PostgreSQL/SQLite/…) с некорректными таблицами. #88105 (Azat Khuzhin). - Исправлен сбой в функциях
mortonEncodeиhilbertEncode, возникавший при вызове с пустым кортежем в качестве аргумента. #88110 (xiaohuanlin). - Теперь запросы с
ON CLUSTERбудут выполняться быстрее при наличии неактивных реплик в кластере. #88153 (alesapin). - Теперь DDL-воркер очищает набор реплик от устаревших хостов. Это уменьшит объем метаданных, хранимых в ZooKeeper. #88154 (alesapin).
- Исправлен запуск ClickHouse без cgroups (cgroups по ошибке стали обязательными для асинхронных метрик). #88164 (Azat Khuzhin).
- Корректно отменять операцию перемещения каталога в случае ошибки. Нужно перезаписать все объекты
prefix.path, изменённые в ходе выполнения, а не только корневой. #88198 (Mikhail Artemenko). - Исправлена передача флага
is_sharedвColumnLowCardinality. Это могло приводить к неверному результату при group-by, если в столбец вставлялось новое значение после того, как хеш-значения уже были предварительно вычислены и кэшированы вReverseIndex. #88213 (Nikita Taranov). - Исправлена настройка рабочей нагрузки
max_cpu_share. Теперь её можно использовать, даже если настройка рабочей нагрузкиmax_cpusне задана. #88217 (Neerav). - Исправлена ошибка, из-за которой очень ресурсоёмкие мутации с подзапросами могли зависать на этапе подготовки. Теперь такие мутации можно остановить с помощью
SYSTEM STOP MERGES. #88241 (alesapin). - Теперь коррелированные подзапросы будут работать с объектными хранилищами. #88290 (alesapin).
- Не пытайтесь инициализировать базы данных DataLake при обращении к
system.projectionsиsystem.data_skipping_indices. #88330 (Azat Khuzhin). - Теперь каталоги озёр данных будут отображаться в системных таблицах интроспекции только в том случае, если параметр
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 в базе данных Replicated, из-за которого нельзя было добавить в базу данных новые реплики. #88423 (Nikolay Degterinsky).
- Исправлена агрегация разреженных столбцов при значении
group_by_overflow_mode, равномany. #88440 (Eduard Karacharov). - Исправлена ошибка “столбец не найден” при использовании
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).
- Исправлено потенциальное падение, вызванное одновременной мутацией базовых const-столбцов 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). - Очередная попытка исправить ошибку “having zero bytes” в движке таблицы S3 при включенном кэше. #88740 (Kseniia Sumarokova).
- Исправлена проверка прав доступа при выполнении SELECT для табличной функции
loop. #88802 (pufit). - Перехватывать исключения при сбое асинхронного логирования, чтобы предотвратить аварийное завершение программы. #88814 (Raúl Marín).
- Бэкпортировано в #89060: исправлен
top_k— при вызове с одним аргументом теперь учитывается параметр threshold. Закрывает #88757. #88867 (Manuel). - Бэкпорт в #88944: исправлена ошибка в функции
reverseUTF8. В предыдущих версиях она ошибочно обращала порядок байтов в 4-байтных кодовых точках UTF-8. Это закрывает #88913. #88914 (Alexey Milovidov). - Бэкпортировано в #88980: не проверять права доступа для
SET DEFINER <current_user>:definerпри создании представления с SQL SECURITY DEFINER. #88968 (pufit). - Бэкпортировано в #89058: исправлена ошибка
LOGICAL_ERRORвL2DistanceTransposed(vec1, vec2, p), где оптимизация частичного чтенияQBitнекорректно убиралаNullableиз возвращаемого типа, еслиpимел типNullable. #88974 (Raufs Dunamalijevs). - Бэкпортировано в #89167: исправлен сбой при неизвестном типе каталога. Устраняет #88819. #88987 (scanhex12).
- Бэкпортировано в #89028: Исправлена деградация производительности при анализе индексов пропуска данных. #89004 (Anton Popov).
Улучшения сборки/тестирования/упаковки
- Обновлена версия библиотеки
postgresдо 18.0. #87647 (Konstantin Bogdanov). - Для FreeBSD включена поддержка ICU. #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 и больше не влияют на производительность. В этом случае queriesSYSTEM ENABLE/DISABLE FAILPOINTвозвращают errorSUPPORT_IS_DISABLED. #88184 (c-end).
Релиз ClickHouse 25.9, 2025-09-25
Обратно несовместимое изменение
- Отключены бессмысленные бинарные операции с IPv4/IPv6: сложение и вычитание IPv4/IPv6 со значениями нецелочисленных типов больше не поддерживаются. Ранее допускались операции с типами с плавающей точкой, а с некоторыми другими типами (например, DateTime) возникали логические ошибки. #86336 (Raúl Marín).
- Настройка
allow_dynamic_metadata_for_data_lakesобъявлена устаревшей. Теперь все таблицы Iceberg перед выполнением каждого запроса пытаются получить из хранилища актуальную схему таблицы. #86366 (Daniil Ivanik). - Изменено разрешение коалесцированного столбца в предложении
OUTER JOIN ... USING, чтобы поведение было более согласованным: ранее при выборе одновременно столбца USING и квалифицированных столбцов (a, t1.a, t2.a) вOUTER JOINстолбец USING ошибочно разрешался вt1.a, из-за чего для строк из правой таблицы без соответствия в левой отображались значения 0/NULL. Теперь идентификаторы из предложения USING всегда разрешаются в коалесцированный столбец, а квалифицированные идентификаторы — в некоалесцированные столбцы, независимо от того, какие ещё идентификаторы присутствуют в запросе. Например: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) — До: a=0, t1.a=0, t2.a=2 (некорректно —aразрешался в t1.a) — После: a=2, t1.a=0, t2.a=2 (корректно —aкоалесцируется). #80848 (Vladimir Cherkasov). - Окно дедупликации для Replicated увеличено до 10000. Это полностью совместимо, но можно представить сценарии, в которых это изменение приведёт к высокому потреблению ресурсов при большом количестве таблиц. #86820 (Sema Checherinda).
Новая возможность
- Теперь вы можете использовать NATS JetStream для чтения сообщений, задав новые настройки
nats_streamиnats_consumerдля движка NATS. #84799 (Dmitry Novikov). - Добавлена поддержка authentication и 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: принимают параметры начальной временной метки, конечной временной метки, шага и окна просмотра назад, а также два аргумента для временных меток и значений, но требуют как минимум 1 значение в окне вместо 2. Вычисляют PromQLchanges/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).
Экспериментальные возможности
- Инвертированный текстовый индекс был полностью переработан, чтобы масштабироваться для наборов данных, которые не помещаются в оперативную память. #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).
Повышение производительности
- Добавлена поддержка фильтрации частей данных с помощью индекса пропуска данных при чтении, чтобы сократить количество лишних чтений индекса. Управляется новой настройкой
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/RIGHTJOIN с большим количеством несовпавших строк. #86312 (Nikita Taranov). - Поразрядная сортировка: помогает компилятору использовать 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). - При создании materialized view можно использовать параметры запроса после
TO, например:CREATE MATERIALIZED VIEW mv TO {to_table:Identifier} AS SELECT * FROM src_table. #84899 (Diskein). - Добавлены более понятные инструкции для пользователей на случай, если для движка таблицы
Kafka2указаны неверные настройки. #83701 (János Benjamin Antal). - Больше нельзя указывать часовой пояс для типа
Time(в этом не было смысла). #84689 (Yarik Briukhovetskyi). - Упростили логику, связанную с парсингом Time/Time64 в режиме
best_effort(и тем самым избежали некоторых ошибок). #84730 (Yarik Briukhovetskyi). - Добавлены функция
deltaLakeAzureCluster(аналогичнаяdeltaLakeAzureдля кластерного режима) и функцияdeltaLakeS3Cluster(алиасdeltaLakeCluster). Устранена проблема #85358. #85547 (Smita Kulkarni). - Настройка
azure_max_single_part_copy_sizeтеперь применяется к обычным операциям копирования так же, как и при резервном копировании. #85767 (Ilya Golshtein). - Замедление потоков клиента S3 при ошибках, допускающих повторную попытку, в объектном хранилище S3. Действие предыдущей настройки
backup_slow_all_threads_after_retryable_s3_errorтеперь распространяется на S3-диски, а сама она переименована в более общуюs3_slow_all_threads_after_retryable_error. #85918 (Julia Kartseva). - Настройки allow_experimental_variant/dynamic/json и enable_variant/dynamic/json помечены как устаревшие. Теперь все три типа включены безусловно. #85934 (Pavel Kruglov).
- Добавлена поддержка фильтрации по полной строке URL (директива
full_url) вhttp_handlers(включая схему и host:port). #86155 (Azat Khuzhin). - Добавлена новая настройка
allow_experimental_delta_lake_writes. #86180 (Kseniia Sumarokova). - Исправлено распознавание systemd в скрипте init.d (исправляет проверку “Install packages”). #86187 (Azat Khuzhin).
- Добавлена новая метрика с размерностью
startup_scripts_failure_reason. Эта метрика нужна, чтобы различать разные типы ошибок, из-за которых завершается сбоем выполнение скриптов запуска. В частности, для оповещений нам нужно различать временные (например,MEMORY_LIMIT_EXCEEDEDилиKEEPER_EXCEPTION) и устойчивые ошибки. #86202 (Miсhael Stetsyuk). - Разрешено опускать функцию
identityв партиции таблицы Iceberg. #86314 (scanhex12). - Добавлена возможность включать журналирование в формате JSON только для определённого канала; для этого установите
logger.formatting.channelв одно из значений:syslog/console/errorlog/log. #86331 (Azat Khuzhin). - Разрешено использовать нативные числа в
WHERE. Они уже могут выступать аргументами логических функций. Это упрощает оптимизации filter-push-down и move-to-prewhere. #86390 (Nikolai Kochetov). - Исправлена ошибка при выполнении
SYSTEM DROP REPLICAнад каталогом с поврежденными метаданными. #86391 (Nikita Mikhaylov). - Добавлены дополнительные попытки при проверке доступа к диску (
skip_access_check = 0) в Azure, поскольку подготовка доступа там может занимать довольно много времени. #86419 (Alexander Tokmakov). - Сделать окно устаревания в функциях
timeSeries*()открытым слева и закрытым справа. #86588 (Vitaly Baranov). - Добавлены события профиля
FailedInternal*Query. #86627 (Shane Andrade). - Исправлена обработка пользователей, добавленных через файл конфигурации, если в их имени есть точка. #86633 (Mikhail Koviazin).
- Добавлены асинхронные метрики использования памяти в запросах (
QueriesMemoryUsageandQueriesPeakMemoryUsage). #86669 (Azat Khuzhin). - Вы можете использовать флаг
clickhouse-benchmark --preciseдля более точного отображения QPS и других метрик за интервал. Это помогает получать стабильный QPS в случаях, когда длительность запросов сопоставима с интервалом вывода--delay D. #86684 (Sergei Trifonov). - Добавлена возможность настраивать значения nice для потоков Linux, чтобы назначать некоторым потокам (merge/mutate, запросов, 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. #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) объём памяти (сортировка, асинхронные вставки, file log), теперь учитываются ограничения по памяти. #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-запросов теперь проверяются только на узле-инициаторе для баз данных Replicated и внутренне реплицируемых таблиц. Это устраняет ситуации, когда уже зафиксированный ALTER-запрос мог зависнуть на других узлах. #83849 (János Benjamin Antal).
- Ограничено число задач каждого типа в
BackgroundSchedulePool. Это позволяет избежать ситуаций, когда все слоты заняты задачами одного типа, а остальные задачи голодают. Также это позволяет избежать взаимных блокировок, когда задачи ждут друг друга. Это регулируется настройкой сервераbackground_schedule_pool_max_parallel_tasks_per_type_ratio. #84008 (Alexander Tokmakov). - Корректно завершайте работу таблиц при восстановлении реплики базы данных. Некорректное завершение работы могло приводить к LOGICAL_ERROR в некоторых движках таблиц при восстановлении реплики базы данных. #84744 (Antonio Andelic).
- Проверка прав доступа при генерации подсказок для исправления опечаток в имени базы данных. #85371 (Dmitry Novik).
-
- LowCardinality для столбцов Hive 2. Заполнять столбцы Hive перед виртуальными столбцами (требуется для https://github.com/ClickHouse/ClickHouse/pull/81040) 3. LOGICAL_ERROR при пустом формате для Hive #85528 4. Исправлена проверка случая, когда столбцы партиции Hive являются единственными столбцами 5. Проверять, что все столбцы Hive указаны в схеме 6. Частичное исправление для parallel_replicas_cluster с Hive 7. Использовать упорядоченный контейнер в extractkeyValuePairs для утилит Hive (требуется для 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 listener, если исходный IPv6 listener завершается с ошибкой. #85901 (jskong1124).
- Этот PR закрывает #77990. Для TableFunctionRemote в globalJoin добавлена поддержка параллельных реплик. #85929 (zoomxi).
- Исправлен null pointer в orcschemareader::initializeifneeded(). Этот PR устраняет следующую проблему: #85292 ### Запись в документации об изменениях, заметных пользователям. #85951 (yanglongwei).
- Добавлена проверка, разрешающая коррелированные подзапросы в секции FROM только в том случае, если они используют столбцы внешнего запроса. Исправлено #85469. Исправлено #85402. #85966 (Dmitry Novik).
- Исправлено обновление ALTER столбца с подстолбцом, используемым в материализованном выражении другого столбца. Ранее материализованный столбец с подстолбцом в выражении обновлялся некорректно. #85985 (Pavel Kruglov).
- Запретить изменять столбцы, чьи подстолбцы используются в PK или в выражении партиционирования. #86005 (Pavel Kruglov).
- Исправлено чтение подстолбцов в хранилище DeltaLake при режиме сопоставления столбцов, отличном от используемого по умолчанию. #86064 (Kseniia Sumarokova).
- Исправлено использование неверных значений по умолчанию для пути с подсказкой Enum в JSON. #86065 (Pavel Kruglov).
- Разбор URL каталога Hive в DataLake с очисткой входных данных. Закрывает #86018. #86092 (rajat mohan).
- Исправлена логическая ошибка при динамическом изменении размера файлового кэша. Исправление закрывает #86122. Исправление закрывает https://github.com/ClickHouse/clickhouse-core-incidents/issues/473. #86130 (Kseniia Sumarokova).
- Используйте
NonZeroUInt64дляlogs_to_keepв DatabaseReplicatedSettings. #86142 (Tuan Pham Anh). - В
FINAL-запросе с индексом пропуска данных возникало исключение, если таблица (например,ReplacingMergeTree) была создана с настройкойindex_granularity_bytes = 0. Теперь эта ошибка исправлена. #86147 (Shankar Iyer). - Устраняет UB и исправляет проблемы при разборе выражения партиции Iceberg. #86166 (Daniil Ivanik).
- Исправлен сбой при наличии const- и non-const-блоков в одном INSERT. #86230 (Azat Khuzhin).
- При создании дисков из SQL по умолчанию обрабатываются директивы include из
/etc/metrika.xml. #86232 (alekar). - Исправлена работа accurateCastOrNull/accurateCastOrDefault при преобразовании из String в JSON. #86240 (Pavel Kruglov).
- Добавлена поддержка каталогов без ’/’ в движке Iceberg. #86249 (scanhex12).
- Исправлен сбой при использовании replaceRegex со строкой haystack типа FixedString и пустым needle. #86270 (Raúl Marín).
- Исправлено аварийное завершение во время ALTER UPDATE Nullable(JSON). #86281 (Pavel Kruglov).
- Исправлено отсутствие столбца definer в system.tables. #86295 (Raúl Marín).
- Исправлено приведение типов из LowCardinality(Nullable(T)) в Dynamic. #86365 (Pavel Kruglov).
- Исправлена логическая ошибка при записи в DeltaLake. Закрывает #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при чтении пустых блобов из Azure Blob Storage для диска plain_rewritable. #86400 (Julia Kartseva). - Исправлена ошибка в GROUP BY Nullable(JSON). #86410 (Pavel Kruglov).
- Исправлена ошибка в Materialized Views: после создания, удаления и повторного создания MV с тем же именем оно могло не работать. #86413 (Alexander Tokmakov).
- Завершаться с ошибкой, если при чтении из функций *cluster недоступны все реплики. #86414 (Julian Maicher).
- Исправлена утечка
MergesMutationsMemoryTracking, вызванная таблицамиBuffer, а также исправленquery_views_logпри стриминге изKafka(и других источников). #86422 (Azat Khuzhin). - Исправлено отображение таблиц после удаления опорной table для хранилища 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 при выполнении запроса с part-файлами нулевого размера. #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 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 для персистентных узлов обработки. Исправление для https://github.com/ClickHouse/ClickHouse/pull/85995. Закрывает #86406. #86841 (Kseniia Sumarokova).
- Исправлена проблема, при которой таблица с движком TimeSeries нарушала создание новой реплики в базе данных Replicated. #86845 (Nikolay Degterinsky).
- Исправлена работа запросов к
system.distributed_ddl_queueв случаях, когда у задач отсутствуют определённые узлы Keeper. #86848 (Antonio Andelic). - Исправлена операция seek в конце распакованного блока. #86906 (Pavel Kruglov).
- Обработка исключения, возникающего при асинхронном выполнении итератора Iceberg. #86932 (Daniil Ivanik).
- Исправлено сохранение больших XML-конфигураций после предварительной обработки. #86934 (c-end).
- Исправлено заполнение поля date в таблице system.iceberg_metadata_log. #86961 (Daniil Ivanik).
- Исправлен бесконечный пересчёт
TTLпри использованииWHERE. #86965 (Anton Popov). - Исправлена возможная ошибка в результате функции
uniqExactпри использовании модификаторовROLLUPиCUBE. #87014 (Nikita Taranov). - Исправлено определение схемы таблицы для табличной функции
url(), когда настройкаparallel_replicas_for_cluster_functionsустановлена в 1. #87029 (Konstantin Bogdanov). - Исправлено приведение типа результата PREWHERE после разбиения на несколько этапов. #87040 (Antonio Andelic).
- Исправлена ошибка в легковесных обновлениях при использовании предложения
ON CLUSTER. #87043 (Anton Popov). - Исправлена совместимость состояний некоторых агрегатных функций с аргументом типа String. #87049 (Pavel Kruglov).
- Исправлена проблема, из-за которой не передавалось имя модели от OpenAI. #87100 (Kaushik Iska).
- EmbeddedRocksDB: путь должен находиться внутри user_files. #87109 (Raúl Marín).
- Исправлена ошибка в таблицах KeeperMap, созданных до 25.1: после запроса DROP данные оставались в ZooKeeper. #87112 (Nikolay Degterinsky).
- Исправлено чтение из Parquet идентификаторов полей для maps и arrays. #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 без поддержки инструкции
vmull_p64. #86521 (Pablo Marcos). - Используется
openldap2.6.10. #86623 (Konstantin Bogdanov). - Больше не выполняются попытки перехвата
memalignна darwin. #86769 (Konstantin Bogdanov). - Используется
krb51.22.1-final. #86836 (Konstantin Bogdanov). - Исправлена распаковка имён крейтов Rust в
list-licenses.sh. #87305 (Konstantin Bogdanov).
Релиз ClickHouse 25.8 LTS, 2025-08-28
Обратно несовместимое изменение
- Использовать
Array(Dynamic)вместо безымянногоTupleдля массивов значений разных типов в JSON. Чтобы сохранить прежнее поведение, отключите настройкуinput_format_json_infer_array_of_dynamic_from_array_of_different_types. #80859 (Pavel Kruglov). - Перенести Метрики задержки S3 в гистограммы для единообразия и упрощения. #82305 (Miсhael Stetsyuk).
- Требовать обратные кавычки вокруг идентификаторов с точками в выражениях по умолчанию, чтобы они не разбирались как составные идентификаторы. #83162 (Pervakov Grigorii).
- Ленивая материализация включена только при использовании analyzer (по умолчанию), чтобы не поддерживать режим без analyzer, который, по нашему опыту, имеет ряд проблем (например, при использовании
indexHint()в условиях). #83791 (Igor Nikonov). - По умолчанию записывать значения типа
EnumкакBYTE_ARRAYс логическим типомENUMв выходном формате Parquet. #84169 (Pavel Kruglov). - Включить по умолчанию настройку MergeTree
write_marks_for_substreams_in_compact_parts. Это значительно повышает производительность чтения подстолбцов из вновь созданных компактных частей. Серверы версии ниже 25.5 не смогут читать новые компактные части. #84171 (Pavel Kruglov). - Ранее значением по умолчанию для
concurrent_threads_schedulerбылоround_robin, но при большом количестве однопоточных запросов (например, INSERT) этот планировщик показал себя несправедливым. Теперь значением по умолчанию стал более безопасный планировщикfair_round_robin. #84747 (Sergei Trifonov). - ClickHouse поддерживает синтаксис heredoc в стиле PostgreSQL:
$tag$ string contents... $tag$, также известный как строковые литералы с долларовым quoting. В предыдущих версиях ограничения на теги были слабее: они могли содержать произвольные символы, включая знаки пунктуации и пробельные символы. Это создаёт неоднозначность при разборе идентификаторов, которые тоже могут начинаться со знака доллара. При этом PostgreSQL допускает в тегах только символы слова. Чтобы устранить проблему, теперь теги heredoc могут содержать только символы слова. Закрывает #84731. #84846 (Alexey Milovidov). - Функции
azureBlobStorage,deltaLakeAzureиicebergAzureбыли обновлены для корректной проверки разрешенийAZURE. Все функции варианта cluster (функции-Cluster) теперь проверяют разрешения по соответствующим некластерным аналогам. Кроме того, функцииicebergLocalиdeltaLakeLocalтеперь также проверяют разрешениеFILE. #84938 (Nikita Mikhaylov). - Включить по умолчанию настройку
allow_dynamic_metadata_for_data_lakes(на уровне движка таблицы). #85044 (Daniil Ivanik). - По умолчанию отключить заключение 64-битных целых чисел в кавычки в форматах JSON. #74079 (Pavel Kruglov)
Новая возможность
- Добавлена базовая поддержка диалекта PromQL. Чтобы воспользоваться ей, задайте
dialect='promql'в clickhouse-client, укажите таблицу TimeSeries с помощью настройкиpromql_table_name='X'и выполняйте запросы видаrate(ClickHouseProfileEvents_ReadCompressedBytes[1m])[5m:1m]. Кроме того, запрос PromQL можно обернуть в SQL:SELECT * FROM prometheusQuery('up', ...);. Пока поддерживаются только функцииrate,deltaиincrease. Унарные и бинарные операторы не поддерживаются. HTTP API пока нет. #75036 (Vitaly Baranov). - Генерация SQL с помощью ИИ теперь может использовать переменные окружения ANTHROPIC_API_KEY и OPENAI_API_KEY, если они доступны; это позволяет пользоваться этой возможностью без какой-либо настройки. #83787 (Kaushik Iska).
- Реализована поддержка протокола ArrowFlight RPC за счёт добавления: - новой табличной функции
arrowflight. #74184 (zakr600). - Теперь виртуальный столбец
_tableподдерживается всеми таблицами, а не только таблицами с движкомMerge, что особенно полезно для запросов с UNION ALL. #63665 (Xiaozhe Yu). - Добавлена возможность использовать любую политику хранения (то есть объектное хранилище, например S3) для внешней агрегации/сортировки. #84734 (Azat Khuzhin).
- Реализована аутентификация AWS S3 с явно указанной ролью IAM. Реализован OAuth для GCS. Ранее эти возможности были доступны только в ClickHouse Cloud, а теперь их исходный код открыт. Синхронизированы некоторые интерфейсы, например сериализация параметров подключения для Объектного хранилища. #84011 (Alexey Milovidov).
- Добавлена поддержка позиционных удалений в табличном движке Iceberg. #83094 (Daniil Ivanik).
- Добавлена поддержка Equality Deletes в Iceberg. #85843 (Han Fei).
- Поддержка записи в Iceberg при создании. Закрывает #83927. #83983 (Konstantin Vedernikov).
- Поддержка каталогов Glue для записи. #84136 (Konstantin Vedernikov).
- REST-каталоги Iceberg для записи данных. #84684 (Konstantin Vedernikov).
- Объединяет все файлы позиционного удаления Iceberg с файлами данных. Это позволит уменьшить количество и размер файлов Parquet в хранилище Iceberg. Синтаксис:
OPTIMIZE TABLE table_name. #85250 (Konstantin Vedernikov). - Поддержка
drop tableдля Iceberg (удаление из каталогов REST/Glue и удаление метаданных таблицы). #85395 (Konstantin Vedernikov). - Добавлена поддержка мутаций ALTER DELETE для Iceberg в формате merge-on-read. #85549 (Konstantin Vedernikov).
- Поддержка записи в DeltaLake. Закрывает #79603. #85564 (Kseniia Sumarokova).
- Добавлена настройка
delta_lake_snapshot_versionдля чтения конкретной версии снимка в движке таблицыDeltaLake. #85295 (Kseniia Sumarokova). - В метаданные Iceberg (записи manifest) записывается больше статистики (размеры столбцов, нижние и верхние границы) для min-max-отсечения. #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 (“очередь недоставленных сообщений”). #68873 (Ilya Golshtein).
- Новая команда SYSTEM RESTORE DATABASE REPLICA для баз данных Replicated, аналогичная уже существующей возможности восстановления в 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 для рабочих нагрузок и обеспечивает справедливое по max-min распределение процессорного времени между рабочими нагрузками. Добавлены новые настройки рабочих нагрузок для ограничения использования CPU:max_cpus,max_cpu_shareиmax_burst_cpu_seconds. Подробнее: https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling. #80879 (Sergei Trifonov). - Разрывать TCP-соединение после заданного числа запросов или по истечении заданного времени. Это обеспечивает более равномерное распределение соединений между узлами кластера за балансировщиком нагрузки. Исправляет #68000. #81472 (Kenny Sun).
- В параллельных репликах теперь поддерживается использование проекций в запросах. #82659. #82807 (zoomxi).
- Добавлена поддержка DESCRIBE SELECT наряду с DESCRIBE (SELECT …). #82947 (Yarik Briukhovetskyi).
- Обязательное использование защищённого подключения для mysql_port и postgresql_port. #82962 (tiandiwonder).
- Теперь можно выполнять поиск JSON-ключей без учета регистра с помощью
JSONExtractCaseInsensitive(и других вариантовJSONExtract). #83770 (Alistair Evans). - Добавлена таблица
system.completions. Закрывает #81889. #83833 (|2ustam). - Добавлена новая функция
nowInBlock64. Пример использования:SELECT nowInBlock64(6)возвращает2025-07-29 17:09:37.775725. #84178 (Halersson Paris). - В AzureBlobStorage добавлены extra_credentials для аутентификации с помощью 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для ресемплинга данных на временную сетку, заданную указанными начальной временной меткой, конечной временной меткой и шагом; вычисляют аналоги PromQLderivиpredict_linearсоответственно. #84328 (Stephen Chi). - Добавлены две новые функции TimeSeries: -
timeSeriesRange(start_timestamp, end_timestamp, step), -timeSeriesFromGrid(start_timestamp, end_timestamp, step, values),. #85435 (Vitaly Baranov). - Добавлен новый синтаксис
GRANT READ ON S3('s3://foo/.*') TO user. #84503 (pufit). - Добавлен
Hashкак новый формат вывода. Он вычисляет одно хеш-значение для всех столбцов и строк результата. Это полезно для вычисления “отпечатка” результата, например в сценариях, где передача данных является узким местом. Пример:SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hashвозвращаетe5f9e676db098fdb9530d2059d8c23ef. #84607 (Robert Schulze). - Добавлена возможность задавать произвольные наблюдения в запросах Keeper Multi. #84964 (Mikhail Artemenko).
- Добавлена опция
--max-concurrencyдля инструментаclickhouse-benchmark, которая включает режим с постепенным увеличением числа параллельных запросов. #85623 (Sergei Trifonov). - Добавлена поддержка частично агрегированных метрик. #85328 (Mikhail Artemenko).
Экспериментальные возможности
- Поддержка коррелированных подзапросов теперь включена по умолчанию и больше не является экспериментальной. #85107 (Dmitry Novik).
- Каталоги озёр данных Unity, Glue, Rest и Hive Metastore переведены из экспериментальных в статус бета. #85848 (Melvyn Peignon).
- Легковесные обновления и удаления переведены из экспериментальных в статус бета.
- Приближённый векторный поиск с индексами векторного сходства теперь имеет статус GA. #85888 (Robert Schulze).
- Добавлены движок таблицы и табличная функция Ytsaurus. #77606 (MikhailBurdukov).
- Ранее данные текстового индекса разделялись на несколько сегментов (по умолчанию размер каждого сегмента составлял 256 MiB). Это могло снизить потребление памяти при построении текстового индекса, однако увеличивало требования к дисковому пространству и время отклика запроса. #84590 (Elmi Ahmadov).
Повышение производительности
- Новая реализация ридера Parquet. В целом она быстрее и поддерживает pushdown фильтра на уровне страниц и PREWHERE. Пока что экспериментальная. Для включения используйте настройку
input_format_parquet_use_native_reader_v3. #82789 (Michael Kolupaev). - Заменили официальный HTTP-транспорт в библиотеке Azure на собственную реализацию HTTP-клиента для Azure Blob Storage. Добавили несколько настроек для этого клиента, аналогичных настройкам S3. Ввели жесткие тайм-ауты подключения как для Azure, так и для S3. Улучшили introspection для profile events и метрик Azure. Новый клиент включен по умолчанию и обеспечивает значительно меньшие задержки для холодных запросов поверх Azure Blob Storage. Старый клиент
Curlможно вернуть, установивazure_sdk_use_native_client=false. #83294 (alesapin). Предыдущая официальная реализация клиента Azure была непригодна для промышленной эксплуатации из-за сильных всплесков задержки — от пяти секунд до нескольких минут. Мы отказались от этой неудачной реализации и очень этим гордимся. - Обрабатывает индексы в порядке возрастания размера файла. В итоговом порядке индексов приоритет отдается индексам minmax и векторным индексам (соответственно из-за простоты и селективности), а затем — индексам небольшого размера. Среди индексов minmax/векторных индексов также предпочтение отдается индексам меньшего размера. #84094 (Maruth Goyal).
- Настройка MergeTree
write_marks_for_substreams_in_compact_partsтеперь включена по умолчанию. Это значительно повышает производительность чтения подстолбцов из вновь создаваемых частей Compact. Серверы с версией ниже 25.5 не смогут читать новые части Compact. #84171 (Pavel Kruglov). - Движок таблицы
azureBlobStorage: по возможности кэширует и повторно использует токены аутентификации для управляемой идентификации, чтобы избежать троттлинга. #79860 (Nick Blakely). ALLLEFT/INNERJOIN будут автоматически преобразованы вRightAny, если правая сторона функционально определяется столбцами ключа JOIN (то есть во всех строках значения ключа JOIN уникальны). #84010 (Nikita Taranov).- Добавлен
max_joined_block_size_bytesв дополнение кmax_joined_block_size_rowsдля ограничения использования памяти в JOIN с объёмными столбцами. #83869 (Nikolai Kochetov). - Добавлена новая логика (управляется настройкой
enable_producing_buckets_out_of_order_in_aggregation, включенной по умолчанию), которая позволяет отправлять некоторые бакеты не по порядку при агрегации с эффективным использованием памяти. Если слияние одних бакетов агрегации занимает существенно больше времени, чем других, это повышает производительность, поскольку инициатор может тем временем объединять бакеты с более высокими идентификаторами. Обратная сторона — потенциально более высокое использование памяти (оно не должно быть существенным). #80179 (Nikita Taranov). - Добавлена настройка
optimize_rewrite_regexp_functions(включена по умолчанию), которая позволяет оптимизатору преобразовывать некоторые вызовыreplaceRegexpAll,replaceRegexpOneиextractв более простые и эффективные формы при обнаружении определённых шаблонов регулярных выражений. (issue #81981). #81992 (Amos Bird). - Обработка
max_joined_block_rowsвынесена за пределы основного цикла hash JOIN. Производительность ALL JOIN немного улучшена. #83216 (Nikolai Kochetov). - Сначала обрабатываются min-max-индексы с более высокой гранулярностью. Закрывает #75381. #83798 (Maruth Goyal).
- Выполнение оконных агрегатных функций
DISTINCTускорено до линейного времени, а также исправлена ошибка вsumDistinct. Закрывает #79792. Закрывает #52253. #79859 (Nihal Z. Miaji). - Запросы векторного поиска с использованием индекса векторного сходства выполняются с меньшей задержкой благодаря меньшему числу чтений с диска и снижению нагрузки на CPU. #83803 (Shankar Iyer).
- Rendezvous-хеширование для улучшения локальности кэша при распределении рабочей нагрузки между параллельными репликами. #82511 (Anton Ivashkin).
- Реализована поддержка addManyDefaults для комбинаторов If, поэтому теперь агрегатные функции с комбинаторами If работают быстрее. #83870 (Raúl Marín).
- Вычисление сериализованного ключа по столбцам при группировке по нескольким строковым или числовым столбцам. #83884 (李扬).
- Устранены полные сканирования в случаях, когда анализ индексов приводит к пустым диапазонам при чтении с использованием параллельных реплик. #84971 (Eduard Karacharov).
- Попробуйте
-falign-functions=64, чтобы получить более стабильные результаты тестов производительности. #83920 (Azat Khuzhin). - Индекс bloom filter теперь используется для условий вида
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). - Более точечно отключаются индексы пропуска данных, зависящие от столбцов, обновляемых на лету или патч-частями. Теперь индексы пропуска данных не используются только в частях, затронутых мутациями на лету или патч-частями; ранее эти индексы отключались для всех частей. #84241 (Anton Popov).
- Для encrypted_buffer в зашифрованных именованных коллекциях теперь выделяется минимально необходимый объём памяти. #84432 (Pablo Marcos).
- Улучшена поддержка индексов bloom filter (обычных, n-грамм и токенов): теперь они могут использоваться, когда первый аргумент — константный массив (множество), а второй — индексируемый столбец (подмножество), что делает выполнение запросов эффективнее. #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 для БД Replicated, используется значение из этой настройки. #85127 (Tuan Pham Anh). - В веб-интерфейсе (play) столбцы таблицы теперь можно изменять по ширине. #84012 (Doron David).
- Добавлена поддержка сжатого файла
.metadata.jsonчерез настройкуiceberg_metadata_compression_method. Поддерживаются все методы сжатия ClickHouse. Это закрывает #84895. #85196 (Konstantin Vedernikov). - Показывать в выводе
EXPLAIN indexes = 1количество диапазонов, которые будут прочитаны. #79938 (Christoph Wurm). - Добавлены настройки для задания размера блока сжатия ORC, а значение по умолчанию изменено с 64KB на 256KB для согласованности со Spark и Hive. #80602 (李扬).
- В часть Wide добавлен файл
columns_substreams.txtдля отслеживания всех подпотоков, хранящихся в этой части. Это позволяет отслеживать динамические потоки в типах JSON и Dynamic и тем самым не читать выборку из этих столбцов, чтобы получить список динамических потоков (например, для расчёта размеров столбцов). Кроме того, теперь все динамические потоки отображаются вsystem.parts_columns. #81091 (Pavel Kruglov). - В clickhouse format добавлен CLI-флаг —show_secrets, чтобы по умолчанию скрывать конфиденциальные данные. #81524 (Nikolai Ryzhov).
- Запросы S3 на чтение и запись теперь ограничиваются по скорости на уровне HTTP-сокета (а не на уровне S3-запросов целиком), чтобы избежать проблем, связанных с ограничением скорости
max_remote_read_network_bandwidth_for_serverиmax_remote_write_network_bandwidth_for_server. #81837 (Sergei Trifonov). - Разрешено использовать разные collation для одного и того же столбца в разных окнах (в оконных функциях). #82877 (Yakov Olkhovskiy).
- Добавлен инструмент для симуляции, визуализации и сравнения селекторов слияния. #71496 (Sergei Trifonov).
- Добавлена поддержка табличных функций
remote*с параллельными репликами, если в аргументеaddress_expressionуказан кластер. Также исправлена проблема #73295. #82904 (Igor Nikonov). - Для всех сообщений лога при записи файлов резервных копий установлен уровень TRACE. #82907 (Hans Krutzer).
- Пользовательские функции с необычными именами и кодеками могут форматироваться SQL-форматтером непоследовательно. Это закрывает #83092. #83644 (Alexey Milovidov).
- Теперь в типе JSON можно использовать типы Time и Time64. #83784 (Yarik Briukhovetskyi).
- В запросах JOIN с параллельными репликами теперь используется логический шаг join. Если при выполнении запросов JOIN с параллельными репликами возникнут какие-либо проблемы, попробуйте
SET query_plan_use_new_logical_join_step=0и сообщите о проблеме. #83801 (Vladimir Cherkasov). - Исправлена совместимость cluster_function_process_archive_on_multiple_nodes. #83968 (Kseniia Sumarokova).
- Добавлена возможность изменять настройки вставки mv на уровне таблицы
S3Queue. Добавлены новые настройки уровняS3Queue:min_insert_block_size_rows_for_materialized_viewsиmin_insert_block_size_bytes_for_materialized_views. По умолчанию используются настройки уровня profile, а настройки уровня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). - Панель мониторинга: всплывающая подсказка больше не будет выходить за верхнюю границу контейнера. #84072 (Alexey Milovidov).
- Слегка улучшен внешний вид точек на панели мониторинга. #84074 (Alexey Milovidov).
- У панели мониторинга теперь немного более удачный фавикон. #84076 (Alexey Milovidov).
- Веб-интерфейс: браузеры теперь смогут предлагать сохранить пароль. Также будут запоминаться значения URL. #84087 (Alexey Milovidov).
- Добавлена поддержка применения дополнительных ACL для определённых узлов Keeper с использованием конфигурации
apply_to_children. #84137 (Antonio Andelic). - Исправлено использование сериализации дискриминаторов Variant в формате “compact” в MergeTree. Ранее в некоторых случаях она не применялась, хотя могла. #84141 (Pavel Kruglov).
- В настройки базы данных Replicated добавлена настройка сервера
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). - Графики в веб-интерфейсе стали чуть лучше. Не намного, но всё же лучше. #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).
- Разрешено приведение типов для значений Set при проталкивании фильтров
IN/GLOBAL INпо первичным ключам хранилищ KeyValue (например, EmbeddedRocksDB, KeeperMap). #84515 (Eduard Karacharov). - chdig обновлён до 25.7.1. #84521 (Azat Khuzhin).
- Теперь при возникновении низкоуровневых ошибок во время выполнения UDF возвращается код ошибки
UDF_EXECUTION_FAILED, тогда как ранее могли возвращаться разные коды ошибок. #84547 (Xu Jia). - В KeeperClient добавлена команда
get_acl. #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). - В Keeper добавлен 4LW
lgrqдля включения и отключения логирования полученных запросов. #84719 (Antonio Andelic). - Сопоставление external auth forward_headers без учета регистра. #84737 (ingodwerust).
- Инструмент
encrypt_decryptтеперь поддерживает зашифрованные соединения с ZooKeeper. #84764 (Roman Vasin). - В
system.errorsдобавлен столбец format string. Этот столбец нужен для группировки по одному и тому же типу ошибок в правилах оповещений. #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). - Пропущены создание и переименование старой временной таблицы для RMV DDL-запросов без append в БД Replicated. #84858 (Tuan Pham Anh).
- Размер кэша записей журнала Keeper теперь можно ограничивать по количеству записей с помощью
keeper_server.coordination_settings.latest_logs_cache_entry_count_thresholdиkeeper_server.coordination_settings.commit_logs_cache_entry_count_threshold. #84877 (Antonio Andelic). - Разрешено использовать
simdjsonна неподдерживаемых архитектурах (ранее это приводило к ошибкеCANNOT_ALLOCATE_MEMORY). #84966 (Azat Khuzhin). - Асинхронное логирование: сделать ограничения настраиваемыми и добавить средства диагностики. #85105 (Raúl Marín).
- Все удалённые объекты собираются для выполнения одной операции удаления в объектном хранилище. #85316 (Mikhail Artemenko).
- Текущая реализация Iceberg для файлов позиционного удаления хранит все данные в оперативной памяти. Это может быть довольно затратно, если файлы позиционного удаления большие, а это бывает часто. В моей реализации в оперативной памяти хранится только последняя группа строк из файлов удаления Parquet, что обходится значительно дешевле. #85329 (Konstantin Vedernikov).
- chdig: устранены артефакты на экране, исправлен сбой после редактирования запроса в редакторе, добавлен поиск
editorвpath, обновлён до 25.8.1. #85341 (Azat Khuzhin). - В конфигурацию Azure добавлен отсутствующий
partition_columns_in_data_file. #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). - ИИ в clickhouse-client станет немного лучше. #85447 (Alexey Milovidov).
- Для старых развертываний опция
trace_log.symbolizeтеперь включена по умолчанию. #85456 (Azat Khuzhin). - Расширена поддержка составных идентификаторов в большем числе случаев. В частности, это улучшает совместимость
ARRAY JOINсо старым анализатором. Добавлена новая настройкаanalyzer_compatibility_allow_compound_identifiers_in_unflatten_nested, чтобы сохранить прежнее поведение. #85492 (Nikolai Kochetov). - Игнорировать UNKNOWN_DATABASE при получении размеров столбцов таблиц в system.columns. #85632 (Azat Khuzhin).
- Добавлено ограничение (настройка таблицы
max_uncompressed_bytes_in_patches) на общий объём несжатых байтов в патч-частях. Оно предотвращает существенное замедление запросов SELECT после легковесных обновлений, а также возможное злоупотребление легковесными обновлениями. #85641 (Anton Popov). - Добавлен столбец
parameterвsystem.grants, чтобы определять тип источника дляGRANT READ/WRITEи движок таблицы дляGRANT TABLE ENGINE. #85643 (MikhailBurdukov). - Исправлен разбор завершающей запятой в списке столбцов запроса CREATE DICTIONARY после столбца с параметрами, например Decimal(8). Закрывает #85586. #85653 (Nikolay Degterinsky).
- Добавлена поддержка внутренних массивов в функции
nested. #85719 (Nikolai Kochetov). - Теперь все выделения памяти внешними библиотеками видны трекеру памяти ClickHouse и корректно учитываются. Из-за этого для некоторых запросов может наблюдаться «повышенное» использование памяти или возникать ошибки
MEMORY_LIMIT_EXCEEDED. #84082 (Nikita Mikhaylov).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Этот PR исправляет определение метаданных при выполнении запросов к таблицам Iceberg через REST-каталог. … #80562 (Saurabh Kumar Ojha).
- Исправлена ошибка в
markReplicasActiveвDDLWorkerиDatabaseReplicatedDDLWorker. #81395 (Tuan Pham Anh). - Исправлен откат изменений в столбце типа Dynamic при ошибке парсинга. #82169 (Pavel Kruglov).
- Если функция
trimвызывается только с константными аргументами, теперь она возвращает константную строку. (Ошибка #78796). #82900 (Robert Schulze). - Исправлена логическая ошибка с дублирующимися подзапросами при включенной
optimize_syntax_fuse_functions, закрыт #75511. #83300 (Vladimir Cherkasov). - Исправлен некорректный результат запросов с конструкцией
WHERE ... IN (<subquery>)при включенном кэше условий запроса (настройкаuse_query_condition_cache). #83445 (LB7666). - Исторически для использования функции
gcsне требовалось никаких прав доступа. Теперь при ее использовании будет проверяться наличие привилегииGRANT READ ON S3. Закрывает #70567. #83503 (pufit). - Пропуск недоступных узлов при INSERT SELECT из s3Cluster() в реплицируемую таблицу MergeTree. #83676 (Igor Nikonov).
- Исправлена запись в режиме append (в MergeTree, используемом для экспериментальных транзакций) с типами метаданных
plain_rewritable/plain: ранее они просто игнорировались. #83695 (Tuan Pham Anh). - Скрыты данные аутентификации для реестра схем Avro, чтобы они не отображались пользователю и не попадали в журналы. #83713 (János Benjamin Antal).
- Исправлена проблема, из-за которой, если таблица MergeTree создаётся с
add_minmax_index_for_numeric_columns=1илиadd_minmax_index_for_string_columns=1, а затем индекс материализуется в ходе операции ALTER, база данных Replicated не может корректно инициализироваться на новой реплике. #83751 (Nikolay Degterinsky). - Исправлена ошибка, из-за которой модуль записи Parquet выдавал некорректную статистику (min/max) для типов Decimal. #83754 (Michael Kolupaev).
- Исправлена сортировка значений NaN для типа
LowCardinality(Float32|Float64|BFloat16). #83786 (Pervakov Grigorii). - При восстановлении из резервной копии пользователь DEFINER может в неё не попасть, из-за чего вся резервная копия станет непригодной. Чтобы это исправить, мы откладываем проверку разрешений при создании целевой таблицы во время восстановления и выполняем её только во время выполнения. #83818 (pufit).
- Исправлен сбой в клиенте: после неудачного INSERT соединение оставалось в отключённом состоянии. #83842 (Azat Khuzhin).
- Теперь при включенном анализаторе в аргументе
view(...)табличной функцииremoteможно ссылаться на любую таблицу. Исправляет #78717. Исправляет #79377. #83844 (Dmitry Novik). - Вызов onprogress в jsoneachrowwithprogress синхронизирован с финализацией. #83879 (Sema Checherinda).
- Исправление закрывает #81303. #83892 (Konstantin Vedernikov).
- Исправлены
colorSRGBToOKLCH/colorOKLCHToSRGBдля сочетания константных и неконстантных аргументов. #83906 (Azat Khuzhin). - Исправлена запись JSON-путей со значениями NULL в формате RowBinary. #83923 (Pavel Kruglov).
- Исправлено переполнение при приведении больших значений (>2106-02-07) из Date в DateTime64. #83982 (Yarik Briukhovetskyi).
- Параметр
filesystem_prefetches_limitтеперь применяется всегда (а не только вMergeTreePrefetchedReadPool). #83999 (Azat Khuzhin). - Исправлена редкая ошибка, из-за которой запрос
MATERIALIZE COLUMNмог приводить к появлению неожиданных файлов вchecksums.txtи в конечном итоге к появлению отсоединённых частей данных. #84007 (alesapin). - Исправлена логическая ошибка
Expected single dictionary argument for functionпри выполнении JOIN по условию неравенства, когда один из столбцов имеет типLowCardinality, а другой — константа. Закрывает #81779. #84019 (Alexey Milovidov). - Исправлен сбой в клиенте ClickHouse при работе в интерактивном режиме с подсветкой синтаксиса. #84025 (Bharat Nallan).
- Исправлены ошибочные результаты при использовании кэша условий запроса в сочетании с рекурсивными CTE (issue #81506). #84026 (zhongyuankai).
- Корректная обработка исключений при периодическом обновлении частей. #84083 (Azat Khuzhin).
- Исправлено слияние фильтра в условие JOIN в случаях, когда операнды равенства имеют разные типы или ссылаются на константы. Исправлена проблема #83432. #84145 (Dmitry Novik).
- Исправлен редкий сбой ClickHouse, возникавший, если в таблице есть projection,
lightweight_mutation_projection_mode = 'rebuild', а пользователь выполняет lightweight delete, удаляющий ВСЕ строки из какого-либо блока таблицы. #84158 (alesapin). - Исправлена взаимная блокировка, вызванная фоновым потоком, проверяющим отмену. #84203 (Antonio Andelic).
- Исправлен бесконечный рекурсивный анализ некорректных определений
WINDOW. Исправление #83131. #84242 (Dmitry Novik). - Исправлена ошибка, из-за которой кодирование и декодирование в формате Bech32 выполнялись некорректно. Изначально ошибка не была обнаружена, поскольку онлайн-реализация алгоритма, использовавшаяся для тестирования, имела ту же проблему. #84257 (George Larionov).
- Исправлено некорректное создание пустых кортежей в функции
array(). Это устраняет #84202. #84297 (Amos Bird). - Исправлен
LOGICAL_ERRORв запросах с параллельными репликами и несколькими INNER JOIN, за которыми следует RIGHT JOIN. Не используйте параллельные реплики для таких запросов. #84299 (Vladimir Cherkasov). - Ранее индексы
setне учитывали столбцыNullableпри проверке того, проходят ли гранулы фильтр (issue #75485). #84305 (Elmi Ahmadov). - Теперь ClickHouse читает таблицы из Glue 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). - Исправлены записи в журнал изменений Keeper, выполнявшиеся не по порядку. Ранее запись в журнал изменений могла оставаться незавершённой, однако откат мог одновременно изменить целевой файл. Это приводило к несогласованности журналов и возможной потере данных. #84434 (Antonio Andelic).
- Теперь, если из таблицы удалены все TTL, MergeTree больше не будет выполнять никаких операций, связанных с TTL. #84441 (alesapin).
- Параллельный распределённый INSERT SELECT с LIMIT был разрешён, что некорректно: это приводит к дублированию данных в целевой таблице. #84477 (Igor Nikonov).
- Исправлено отсечение файлов по виртуальному столбцу в озерах данных. #84520 (Kseniia Sumarokova).
- Исправлены утечки памяти в Keeper при использовании хранилища rocksdb (итераторы не уничтожались). #84523 (Azat Khuzhin).
- Исправлена проблема, из-за которой ALTER MODIFY ORDER BY не проверял столбцы TTL в ключах сортировки. Теперь при операциях ALTER использование столбцов TTL в предложениях ORDER BY корректно отклоняется, что предотвращает возможное повреждение таблицы. #84536 (xiaohuanlin).
- Для совместимости значение
allow_experimental_delta_kernel_rsдо версии 25.5 изменено наfalse. #84587 (Kseniia Sumarokova). - Больше не получает схему из manifest files, а сохраняет соответствующие схемы для каждого снимка отдельно. Для каждого файла данных соответствующая схема теперь определяется по связанному с ним снимку. Прежнее поведение нарушало спецификацию Iceberg для записей в manifest files со статусом existing. #84588 (Daniil Ivanik).
- Исправлена проблема, из-за которой настройка Keeper
rotate_log_storage_interval = 0приводила к аварийному завершению работы ClickHouse. (проблема #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).
- Исправлена проблема, из-за которой выполнение запроса к удалённому источнику с высокой задержкой могло вызывать ошибку vector out of bounds. #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 не пытается кэшировать актуальную версию снимка между SELECT-запросами и всегда заново определяет снимок. Предыдущая попытка кэшировать снимок Iceberg приводила к проблемам при использовании таблицы Iceberg с time travel. #85038 (Daniil Ivanik).
- Исправлено двойное освобождение памяти в
AzureIteratorAsync. #85064 (Nikita Taranov). - Улучшено сообщение об ошибке при попытке создать пользователя с аутентификацией через JWT. #85072 (Konstantin Bogdanov).
- Исправлена очистка патч-частей в
ReplicatedMergeTree. Ранее результат легковесного обновления мог временно не отображаться на реплике, пока с другой реплики не будет загружена слитая или мутированная часть, материализующая патч-части. #85121 (Anton Popov). - Исправлена ошибка illegal_type_of_argument в mv, когда типы различаются. #85135 (Sema Checherinda).
- Исправлен сбой сегментации в реализации delta-kernel. #85160 (Kseniia Sumarokova).
- Исправлено восстановление баз данных Replicated в случаях, когда перемещение файла метаданных занимает много времени. #85177 (Tuan Pham Anh).
- Исправлена ошибка с
Not-ready SetдляIN (subquery)внутри выражения настройкиadditional_table_filters. #85210 (Nikolai Kochetov). - Убраны лишние вызовы
getStatus()во время выполнения запросов SYSTEM DROP REPLICA. Исправлена ситуация, когда таблица удаляется в фоновом режиме и генерируется исключениеShutdown for storage is called. #85220 (Nikolay Degterinsky). - Исправлено состояние гонки в реализации delta-kernel движка
DeltaLake. #85221 (Kseniia Sumarokova). - Исправлено чтение данных из партиционированных таблиц при отключённом delta-kernel в движке
DeltaLake. Ошибка появилась в версии 25.7 (https://github.com/ClickHouse/ClickHouse/pull/81136). #85223 (Kseniia Sumarokova). - Добавлены недостающие проверки длины имени таблицы в запросах CREATE OR REPLACE и RENAME. #85326 (Michael Kolupaev).
- Исправлена ошибка при создании RMV на новой реплике базы данных Replicated, если DEFINER удалён. #85327 (Nikolay Degterinsky).
- Исправлена запись сложных типов в Iceberg. #85330 (Konstantin Vedernikov).
- Для сложных типов запись нижней и верхней границ не поддерживается. #85332 (Konstantin Vedernikov).
- Исправлена логическая ошибка при чтении из функций объектного хранилища через таблицу Distributed или табличную функцию remote. Исправления: #84658, #85173, #52022. #85359 (alesapin).
- Исправлено резервное копирование частей с поврежденными проекциями. #85362 (Antonio Andelic).
- Использование столбца
_part_offsetв проекциях запрещено в релизах до его стабилизации. #85372 (Sema Checherinda). - Исправлены аварийное завершение и повреждение данных при ALTER UPDATE для JSON. #85383 (Pavel Kruglov).
- Запросы с параллельными репликами, использующие оптимизацию чтения в обратном порядке, могут возвращать некорректный результат. #85406 (Igor Nikonov).
- Исправлено возможное 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, а не оба сразу. #85505 (Julia Kartseva).
- Этот PR исправляет определение метаданных при запросах к таблицам Iceberg через REST-каталог. … #85531 (Saurabh Kumar Ojha).
- Исправлен редкий сбой при асинхронных вставках при изменении настроек
log_commentилиinsert_deduplication_token. #85540 (Anton Popov). - Параметры вроде date_time_input_format игнорировались при использовании HTTP с multipart/form-data. #85570 (Sema Checherinda).
- Исправлено маскирование секретов в табличных функциях icebergS3Cluster и icebergAzureCluster. #85658 (MikhailBurdukov).
- Исправлена потеря точности в
JSONExtractпри преобразовании чисел JSON в типы Decimal. Теперь числовые значения JSON сохраняют точное десятичное представление, что позволяет избежать ошибок округления чисел с плавающей запятой. #85665 (ssive7b). - Исправлен
LOGICAL_ERRORпри использованииCOMMENT COLUMN IF EXISTSв том же оператореALTERпослеDROP COLUMN. УсловиеIF EXISTSтеперь корректно пропускает операцию добавления комментария, если столбец был удалён в рамках того же оператора. #85688 (xiaohuanlin). - Исправлено чтение значения 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 (Konstantin 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).
- Больше не создаётся пустой delete-файл Iceberg. #86061 (Konstantin Vedernikov).
- Исправлена проблема, из-за которой большие значения настроек нарушали работу таблиц S3Queue и перезапуск реплики. #86074 (Nikolay Degterinsky).
Улучшения сборки/тестирования/упаковки
- Для тестов с S3 теперь по умолчанию используются зашифрованные диски. #59898 (Nikita Mikhaylov).
- В интеграционных тестах теперь используется бинарный файл
clickhouse, чтобы получать неудалённые отладочные символы. #83779 (Mikhail f. Shiryaev). - Встроенная версия libxml2 обновлена с 2.14.4 до 2.14.5. #84230 (Robert Schulze).
- Встроенная версия curl обновлена с 8.14.0 до 8.15.0. #84231 (Robert Schulze).
- Теперь в CI кэши используют меньше памяти, а тесты на вытеснение стали лучше. #84676 (alesapin).
Релиз ClickHouse 25.7, 2025-07-24
Обратно несовместимое изменение
- Изменения в функции
extractKeyValuePairs: добавлен новый аргументunexpected_quoting_character_strategy, который определяет, что происходит, еслиquoting_characterнеожиданно встречается при чтении ключа или значения без кавычек. Значение может быть одним из следующих:invalid,acceptилиpromote.invalidотбрасывает ключ и возвращает разбор в состояние ожидания ключа.acceptсчитает этот символ частью ключа.promoteотбрасывает предыдущий символ и начинает разбор как ключа в кавычках. Кроме того, после разбора значения в кавычках следующий ключ разбирается только при наличии разделителя пары. #80657 (Arthur Passos). - Добавлена поддержка совпадения нулевой длины в функции
countMatches. Пользователи, которые хотят сохранить прежнее поведение, могут включить настройкуcount_matches_stop_at_empty_match. #81676 (Elmi Ahmadov). - При создании резервных копий в дополнение к выделенным настройкам сервера (
max_backup_bandwidth_for_server,max_mutations_bandwidth_for_serverиmax_merges_bandwidth_for_server) теперь используются общие для всего сервера throttler’ы для локальных (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) операций. #81753 (Sergei Trifonov). - Запрещено создание таблицы без столбцов, в которые можно выполнять вставку. #81835 (Pervakov Grigorii).
- Кластерные функции теперь выполняются параллельно по файлам внутри архивов. В предыдущих версиях весь архив (например, zip, tar или 7z) был единицей работы. Добавлена новая настройка
cluster_function_process_archive_on_multiple_nodes, по умолчанию равнаяtrue. Если заданоtrue, это повышает производительность обработки архивов в кластерных функциях. Для совместимости и во избежание ошибок при обновлении до 25.7+ при использовании кластерных функций с архивами в более ранних версиях следует установитьfalse. #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). - В клиент ClickHouse добавлена генерация SQL с помощью ИИ. Теперь вы можете генерировать SQL-запросы по описаниям на естественном языке, добавив
??в начало запроса. Поддерживаются провайдеры OpenAI и Anthropic с автоматическим определением схемы. #83314 (Kaushik Iska). - Добавлена функция для записи гео-типов в формат WKB. #82935 (Konstantin Vedernikov).
- Добавлены два новых типа доступа для источников:
READиWRITE; все прежние типы доступа, связанные с источниками, объявлены устаревшими. Раньше:GRANT S3 ON *.* TO user, теперь:GRANT READ, WRITE ON S3 TO user. Это также позволяет разделить разрешенияREADиWRITEдля источников, например:GRANT READ ON * TO user,GRANT WRITE ON S3 TO user. Эта возможность управляется настройкойaccess_control_improvements.enable_read_write_grantsи по умолчанию отключена. #73659 (pufit). - NumericIndexedVector: новая структура данных с bit-sliced-сжатием и сжатием на основе Roaring-битмапов, а также более 20 функций для построения, анализа и поточечной арифметики. Позволяет сократить объем хранилища и ускорить JOIN, фильтрацию и агрегации на разреженных данных. Реализует #70582 и статью “Large-Scale Metric Computation in Online Controlled Experiment Platform” Т. Xiong и Y. Wang, представленную на VLDB 2024. #74193 (FriendLey).
- Теперь поддерживается параметр рабочей нагрузки
max_waiting_queries. Его можно использовать для ограничения размера очереди запросов. Если лимит достигнут, все последующие запросы будут завершаться с ошибкойSERVER_OVERLOADED. #81250 (Oleg Doronin). - Добавлены финансовые функции:
financialInternalRateOfReturnExtended(XIRR),financialInternalRateOfReturn(IRR),financialNetPresentValueExtended(XNPV),financialNetPresentValue(NPV). #81599 (Joanna Hulboj). - Добавлены геопространственные функции
polygonsIntersectCartesianиpolygonsIntersectSphericalдля проверки пересечения двух многоугольников. #81882 (Paul Lamb). - Добавлена поддержка виртуального столбца
_part_granule_offsetв таблицах семейства MergeTree. Этот столбец указывает отсчитываемый с нуля индекс гранулы/метки, к которой принадлежит каждая строка в пределах своей части данных. Это решает проблему #79572. #82341 (Amos Bird). #82341 (Amos Bird) - Добавлены SQL-функции
colorSRGBToOkLCHиcolorOkLCHToSRGBдля преобразования цветов между пространствами sRGB и OkLCH. #83679 (Fgrtue). - В запросах
CREATE USERтеперь можно использовать параметры для имён пользователей. #81387 (Diskein). - Таблица
system.formatsтеперь содержит расширенную информацию о форматах, такую как тип содержимого HTTP, возможности автоматического определения схемы и т. д. #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).- Добавлена оценка сложных CNF/DNF, например
(a < 1 and a > 0) or b = 3, по статистике. #82663 (Han Fei).
Повышение производительности
- Добавлено асинхронное логирование. При выводе журналов на медленное устройство запросы больше не задерживаются. #82516 (Raúl Marín). Ограничено максимальное количество элементов, хранящихся в очереди. #83214 (Raúl Marín).
- Параллельный распределённый INSERT SELECT по умолчанию включён в режиме, при котором INSERT SELECT выполняется независимо на каждом сегменте, см. настройку
parallel_distributed_insert_select. #83040 (Igor Nikonov). - Когда запрос с агрегацией содержит только одну функцию
count()для столбца, не являющегосяNullable, логика агрегации полностью инлайнируется при пробировании хеш-таблицы. Это позволяет избежать выделения и поддержания какого-либо состояния агрегации, что значительно снижает использование памяти и нагрузку на CPU. Это частично решает проблему #81982. #82104 (Amos Bird). - Производительность
HashJoinоптимизирована за счёт удаления дополнительного цикла по хеш-таблицам в типичном случае, когда используется только один ключевой столбец; также устранены проверкиnull_mapиjoin_mask, когда они всегда равныtrue/false. #82308 (Nikita Taranov). - Небольшая оптимизация комбинатора
-If. #78454 (李扬). - Запросы векторного поиска с использованием индекса векторного сходства выполняются с меньшей задержкой благодаря сокращению числа чтений из хранилища и снижению нагрузки на CPU. #79103 (Shankar Iyer).
- Учитывать
merge_tree_min_{rows,bytes}_for_seekвfilterPartsByQueryConditionCache, чтобы согласовать его с другими методами фильтрации по индексам. #80312 (李扬). - Конвейер после шага
TOTALSтеперь многопоточный. #80331 (UnamedRus). - Исправлена фильтрация по ключу для хранилищ
RedisиKeeperMap. #81833 (Pervakov Grigorii). - Добавлена новая настройка
min_joined_block_size_rows(аналогичнаяmin_joined_block_size_bytes; значение по умолчанию — 65409) для управления минимальным размером блока (в строках) для входных и выходных блоков при JOIN (если алгоритм JOIN это поддерживает). Небольшие блоки будут укрупняться. #81886 (Nikita Taranov). ATTACH PARTITIONбольше не приводит к очистке всех кэшей. #82377 (Alexey Milovidov).- Оптимизирован генерируемый план для коррелированных подзапросов за счёт удаления избыточных операций JOIN с использованием классов эквивалентности. Если для всех коррелированных столбцов есть эквивалентные выражения,
CROSS JOINне создаётся при включённой настройкеquery_plan_correlated_subqueries_use_substitution. #82435 (Dmitry Novik). - В коррелированном подзапросе считываются только необходимые столбцы, если он используется как аргумент функции
EXISTS. #82443 (Dmitry Novik). - Немного ускорено сравнение деревьев запросов на этапе анализа запроса. #82617 (Nikolai Kochetov).
- Добавлено выравнивание в Counter для ProfileEvents, чтобы уменьшить эффект ложного разделения кэш-линий. #82697 (Jiebin Sun).
- Оптимизации для
null_mapиJoinMaskиз #82308 были применены к случаю JOIN с несколькими дизъюнкциями. Также была оптимизирована структура данныхKnownRowsHolder. #83041 (Nikita Taranov). - Для флагов JOIN используется простой
std::vector<std::atomic_bool>, чтобы не вычислять hash при каждом обращении к флагам. #83043 (Nikita Taranov). - Не выполнять предварительное выделение памяти для столбцов результата, когда
HashJoinиспользует режим выводаlazy. Это неэффективно, особенно если число совпадений невелико. Кроме того, после завершения JOIN точно известно количество совпадений, поэтому память можно выделить более точно. #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и в режиме echo вclickhouse-client, а теперь также работает и в строке ввода команд. #82871 (Alexey Milovidov). - Подсветка в
clickhouse-formatи при echo в клиенте будет работать так же, как и в приглашении командной строки. #82874 (Alexey Milovidov). - Теперь диски
plain_rewritableможно использовать для хранения метаданных базы данных. Вplain_rewritableреализованы методыmoveFileиreplaceFile, чтобы поддержать его использование в качестве диска базы данных. #79424 (Tuan Pham Anh). - Разрешено создавать резервные копии баз данных
PostgreSQL,MySQLиDataLake. Резервная копия такой базы данных сохраняет только её определение, но не содержащиеся в ней данные. #79982 (Nikolay Degterinsky). - Параметр
allow_experimental_join_conditionобъявлен устаревшим, поскольку теперь он всегда разрешён. #80566 (Vladimir Cherkasov). - Добавлены метрики давления в набор асинхронных метрик ClickHouse. #80779 (Xander Garbett).
- Добавлены Метрики
MarkCacheEvictedBytes,MarkCacheEvictedMarks,MarkCacheEvictedFilesдля отслеживания вытеснений из кэша меток. (issue #60989). #80799 (Shivji Kumar Jha). - Добавлена поддержка записи Parquet enum в виде массива байтов, как предписывает спецификация. #81090 (Arthur Passos).
- Улучшение для движка таблицы
DeltaLake: в delta-kernel-rs есть APIExpressionVisitor, который реализован в этом PR и применяется для преобразования выражений столбцов партиции (он заменит старый устаревший подход в delta-kernel-rs, который ранее использовался в нашем коде). В будущем этотExpressionVisitorтакже позволит реализовать pruning на основе статистики и некоторые проприетарные возможности Delta Lake. Кроме того, цель этого изменения — добавить поддержку partition pruning в движок таблицыDeltaLakeCluster(результат разбора выражения — ActionsDAG — будет сериализован и отправлен инициатором вместе с путём к данным, поскольку такая информация, необходимая для pruning, доступна только в виде метаинформации при перечислении файлов данных, а это выполняет только инициатор, но при этом она должна применяться к данным на каждом сервере чтения). #81136 (Kseniia Sumarokova). - Сохранять имена элементов при определении супертипов для именованных кортежей. #81345 (lgbo).
- Подсчитывать количество потреблённых сообщений вручную, чтобы не зависеть от ранее зафиксированного смещения в StorageKafka2. #81662 (János Benjamin Antal).
- Добавлен
clickhouse-keeper-utils— новый инструмент командной строки для управления и анализа данных ClickHouse Keeper. Инструмент поддерживает создание дампа состояния из снимков и журналов изменений, анализ файлов журналов изменений и извлечение указанных диапазонов записей журнала. #81677 (Antonio Andelic). - Общие и пользовательские сетевые ограничители никогда не сбрасываются, что гарантирует, что лимиты
max_network_bandwidth_for_all_usersиmax_network_bandwidth_for_all_usersникогда не будут превышены. #81729 (Sergei Trifonov). - Добавлена поддержка записи в формате GeoParquet. #81784 (Konstantin Vedernikov).
- Запретить запуск ALTER-мутации
RENAME COLUMN, если она переименовывает столбец, который в данный момент затронут незавершённой мутацией данных. #81823 (Mikhail Artemenko). - Заголовок Connection отправляется в конце списка заголовков, когда уже известно, нужно ли сохранять соединение. #81951 (Sema Checherinda).
- Настроена очередь TCP-серверов (64 по умолчанию) в соответствии с listen_backlog (4096 по умолчанию). #82045 (Azat Khuzhin).
- Добавлена возможность перезагружать
max_local_read_bandwidth_for_serverиmax_local_write_bandwidth_for_serverбез перезапуска сервера. #82083 (Kai Zhu). - Добавлена возможность очищать все предупреждения из таблицы
system.warningsс помощьюTRUNCATE TABLE system.warnings. #82087 (Vladimir Cherkasov). - Исправлено отсечение партиций в кластерных функциях для озёр данных. #82131 (Kseniia Sumarokova).
- Исправлено чтение данных с партициями в табличной функции DeltaLakeCluster. В этом PR увеличена версия протокола cluster functions, что позволяет передавать дополнительную информацию от инициатора к репликам. Эта дополнительная информация содержит выражение преобразования delta-kernel, необходимое для разбора столбцов партиции (а в будущем — и некоторых других вещей, например вычисляемых столбцов и т. д.). #82132 (Kseniia Sumarokova).
- Функция
reinterpretтеперь поддерживает преобразование вArray(T), гдеT— это тип данных фиксированного размера (issue #82621). #83399 (Shankar Iyer). - Теперь база данных Datalake генерирует более понятное исключение. Исправлено в #81211. #82304 (alesapin).
- Улучшена работа CROSS JOIN:
HashJoin::needUsedFlagsForPerRightTableRowтеперь возвращает false. #82379 (lgbo). - Разрешены запись и чтение столбцов map как Array из Tuple. #82408 (MikhailBurdukov).
- Добавлен список лицензий крейтов Rust в
system.licenses. #82440 (Raúl Marín). - Макросы, такие как
{uuid}, теперь можно использовать в параметреkeeper_pathдвижка таблицы S3Queue. #82463 (Nikolay Degterinsky). - Улучшение Keeper: перемещение файлов журнала изменений между дисками в фоновом потоке. Ранее перенос журнала изменений на другой диск глобально блокировал работу Keeper до завершения операции. Это приводило к снижению производительности, если перенос занимал много времени (например, при переносе на диск S3). #82485 (Antonio Andelic).
- Улучшение Keeper: добавлен новый параметр конфигурации
keeper_server.cleanup_old_and_ignore_new_acl. Если он включен, ACL будут очищены у всех узлов, а ACL для новых запросов будут игнорироваться. Если цель — полностью удалить ACL у узлов, важно оставить этот параметр включенным до создания нового снимка. #82496 (Antonio Andelic). - Добавлена новая настройка сервера
s3queue_disable_streaming, отключающая стриминг в таблицах с движком таблицы S3Queue. Эту настройку можно изменять без перезапуска сервера. #82515 (Kseniia Sumarokova). - Переработана возможность динамического изменения размера файлового кэша. Добавлено больше журналов для внутренней диагностики. #82556 (Kseniia Sumarokova).
clickhouse-serverбез файла конфигурации также будет прослушивать порт PostgreSQL 9005, как и при конфигурации по умолчанию. #82633 (Alexey Milovidov).- В
ReplicatedMergeTree::executeMetadataAlterмы получаем StorageID и, не захватывая DDLGuard, пытаемся вызватьIDatabase::alterTable. В промежутке между этими действиями рассматриваемую таблицу технически можно было бы поменять местами с другой, поэтому при получении определения мы получили бы неверное. Чтобы этого избежать, мы добавляем отдельную проверку на совпадение UUID при попытке вызватьIDatabase::alterTable. #82666 (Nikolay Degterinsky). - При присоединении базы данных с удалённым диском, доступным только для чтения, необходимо вручную добавлять UUID таблиц в DatabaseCatalog. #82670 (Tuan Pham Anh).
- Запрещено использовать
nanиinfсNumericIndexedVector. Исправляет #82239 и не только. #82681 (Raufs Dunamalijevs). - Не пропускайте нулевые значения в форматах заголовков
X-ClickHouse-ProgressиX-ClickHouse-Summary. #82727 (Nikita Mikhaylov). - Улучшение Keeper: поддержка отдельных разрешений для ACL world:anyone. #82755 (Antonio Andelic).
- Запретить
RENAME COLUMNиDROP COLUMNдля явно перечисленных суммируемых столбцов в SummingMergeTree. Закрывает #81836. #82821 (Alexey Milovidov). - Повышена точность преобразования из
DecimalвFloat32. Реализовано преобразование изDecimalвBFloat16. Закрывает #82660. #82823 (Alexey Milovidov). - Полосы прокрутки в веб-интерфейсе будут выглядеть немного лучше. #82869 (Alexey Milovidov).
clickhouse-serverсо встроенной конфигурацией позволит использовать веб-интерфейс, возвращая HTTP-ответ на OPTIONS-запросы. #82870 (Alexey Milovidov).- Добавлена поддержка указания дополнительных ACL Keeper для путей в конфигурации. Если вы хотите добавить дополнительные ACL для определённого пути, задайте их в конфигурации в разделе
zookeeper.path_acls. #82898 (Antonio Andelic). - Теперь снимок мутаций будет формироваться на основе снимка видимых частей. Также счётчики мутаций в снимке будут пересчитаны на основе включённых мутаций. #82945 (Mikhail Artemenko).
- Добавлен ProfileEvent, когда Keeper отклоняет запись из-за мягкого лимита памяти. #82963 (Xander Garbett).
- В
system.s3queue_logдобавлены столбцыcommit_time,commit_id. #83016 (Kseniia Sumarokova). - В некоторых случаях метрикам требуется несколько измерений. Например, чтобы считать неудачные слияния или мутации по кодам ошибок, а не ограничиваться одним счётчиком. Добавлена
system.dimensional_metrics, которая как раз решает эту задачу и вводит первую метрику с измерениями —failed_merges. #83030 (Miсhael Stetsyuk). - Предупреждения о неизвестных настройках в клиенте ClickHouse теперь объединяются и записываются в журнал в виде сводки. #83042 (Bharat Nallan).
- Клиент ClickHouse теперь показывает локальный порт при ошибке подключения. #83050 (Jianfei Hu).
- Немного улучшена обработка ошибок в
AsynchronousMetrics. Если каталог/sys/blockсуществует, но доступа к нему нет, сервер запустится без мониторинга блочных устройств. Закрывает #79229. #83115 (Alexey Milovidov). - Завершение работы SystemLogs после обычных таблиц (и перед системными таблицами, а не перед обычными). #83134 (Kseniia Sumarokova).
- Добавлены записи в журнале для процесса завершения работы
S3Queue. #83163 (Kseniia Sumarokova). - Возможность разбирать
TimeиTime64в форматахMM:SS,M:SS,SSилиS. #83299 (Yarik Briukhovetskyi). - Когда
distributed_ddl_output_mode='*_only_active', не ждать новые или восстановленные реплики, у которых задержка репликации превышаетmax_replication_lag_to_enqueue. Это должно помочь избежатьDDL task is not finished on some hosts, когда новая реплика становится активной после завершения инициализации или восстановления, но за время инициализации успевает накопить огромный журнал репликации. Также реализован запросSYSTEM SYNC DATABASE REPLICA STRICT, который ждёт, пока журнал репликации не станет меньшеmax_replication_lag_to_enqueue. #83302 (Alexander Tokmakov). - Не выводить в сообщениях об исключениях слишком длинные описания действий над выражениями. Закрывает #83164. #83350 (Alexey Milovidov).
- Добавлена возможность разбирать префикс и суффикс части, а также проверять покрытие для неконстантных столбцов. #83377 (Mikhail Artemenko).
- Унифицировали названия параметров в ODBC и JDBC при использовании именованных коллекций. #83410 (Andrey Zvonov).
- Когда хранилище завершает работу,
getStatusгенерирует исключениеErrorCodes::ABORTED. Раньше из-за этого запрос SELECT завершался с ошибкой. Теперь мы перехватываем исключенияErrorCodes::ABORTEDи намеренно игнорируем их. #83435 (Miсhael Stetsyuk). - В profile events
part_logдля записейMergePartsдобавлены метрики ресурсов процесса (такие какUserTimeMicroseconds,SystemTimeMicroseconds,RealTimeMicroseconds). #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).
- Исправлена логическая ошибка в файловом кэше: “Ноль байт, но диапазон не завершён”. #81868 (Kseniia Sumarokova).
- Пересчитывать индекс min-max, когда TTL уменьшает число строк, чтобы обеспечить корректность алгоритмов, использующих его, таких как
minmax_count_projection. Это исправляет #77091. #77166 (Amos Bird). - Для запросов с сочетанием
ORDER BY ... LIMIT BY ... LIMIT N, когда ORDER BY выполняется как PartialSorting, счётчикrows_before_limit_at_leastтеперь отражает количество строк, обработанных оператором LIMIT, а не преобразованием сортировки. #78999 (Eduard Karacharov). - Исправлен чрезмерный пропуск гранул при фильтрации по token/ngram-индексам с регулярным выражением, содержащим альтернацию, если его первая альтернатива не является литеральной. #79373 (Eduard Karacharov).
- Исправлена логическая ошибка, связанная с оператором
<=>и хранилищем Join: теперь запрос возвращает корректный код ошибки. #80165 (Vladimir Cherkasov). - Исправлено аварийное завершение работы функции
loopпри использовании с семейством функцийremote. Обеспечено соблюдение ограничения LIMIT вloop(remote(...)). #80299 (Julia Kartseva). - Исправлено некорректное поведение функций
to_utc_timestampиfrom_utc_timestampпри обработке дат до начала эпохи Unix (1970-01-01) и после максимальной даты (2106-02-07 06:28:15). Теперь эти функции корректно приводят значения к началу эпохи и к максимальной дате соответственно. #80498 (Surya Kant Ranjan). - Для некоторых запросов, выполняемых с использованием параллельных реплик, оптимизации чтения по порядку могли применяться на инициаторе, тогда как на удалённых узлах они были неприменимы. Это приводило к тому, что координатор параллельных реплик (на инициаторе) и удалённые узлы использовали разные режимы чтения, что является логической ошибкой. #80652 (Igor Nikonov).
- Исправлена логическая ошибка при материализации проекции, если тип столбца был изменён на Nullable. #80741 (Pavel Kruglov).
- Исправлен неверный пересчёт TTL в TTL GROUP BY при обновлении TTL. #81222 (Evgeniy Ulasik).
- Исправлено некорректное применение 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пять аргументов и используется имя database из аргументов. Примечание: это исправление не применяется к вновь создаваемым таблицам и запросам с table functionmongo, а также к dictionary source и named collections. #81942 (Vladimir Cherkasov). - Исправлено возможное аварийное завершение
Aggregatorпри исключении во время merge. #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. Если у первого элемента (или элементов)hostsid == DROPPED_MARKи для того же сегмента нет других элементов, то в первом элементеshardsокажется пустой вектор, что приведёт кstd::out_of_range. #82093 (Miсhael Stetsyuk). - Исправлена ошибка копирования-вставки в arraySimilarity: теперь использование весов UInt32 и Int32 запрещено. Обновлены тесты и документация. #82103 (Mikhail f. Shiryaev).
- Исправлена ошибка
Not found columnв запросах сarrayJoinв условииWHEREи сIndexSet. #82113 (Nikolai Kochetov). - Исправлена ошибка интеграции с каталогом Glue. Теперь ClickHouse может читать таблицы с вложенными типами данных, в которых некоторые подстолбцы содержат десятичные числа, например:
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 view пропускали INSERT-запросы. #82222 (Nikolay Degterinsky).
- Исправлена возможная гонка данных между потоком подсказок и основным потоком клиента. #82233 (Azat Khuzhin).
- Теперь ClickHouse может читать таблицы Iceberg из каталога Glue после изменения схемы. Исправлено в #81272. #82301 (alesapin).
- Исправлена валидация настроек асинхронных метрик
asynchronous_metrics_update_period_sиasynchronous_heavy_metrics_update_period_s. #82310 (Bharat Nallan). - Исправлена логическая ошибка при разрешении сопоставителя в запросе с несколькими JOIN; закрыт #81969. #82421 (Vladimir Cherkasov).
- Добавлен срок действия токена AWS ECS, чтобы его можно было перезагружать. #82422 (Konstantin Bogdanov).
- Исправлена ошибка при использовании аргументов
NULLв функцииCASE. #82436 (Yarik Briukhovetskyi). - Исправлены гонки данных в клиенте (за счёт отказа от использования глобального контекста) и переопределение
session_timezone(ранее, еслиsession_timezoneзадавался, например, вusers.xml/параметрах клиента как непустой, а в контексте запроса — как пустой, использовалось значение изusers.xml, хотя это неверно; теперь контекст запроса всегда имеет приоритет над глобальным контекстом). #82444 (Azat Khuzhin). - Исправлено отключение выравнивания по границам для кэшированного буфера в движках внешних таблиц. Это было сломано в https://github.com/ClickHouse/ClickHouse/pull/81868. #82493 (Kseniia Sumarokova).
- Исправлено аварийное завершение при объединении хранилища ключ-значение с ключом, приведённым к другому типу. #82497 (Pervakov Grigorii).
- Исправлено скрытие значений именованной коллекции в logs/query_log. Закрывает #82405. #82510 (Kseniia Sumarokova).
- Исправлен возможный сбой при логировании во время завершения сеанса, поскольку user_id иногда может быть пустым. #82513 (Bharat Nallan).
- Исправляет случаи, когда парсинг Time мог вызывать проблемы с msan. Исправлено: #82477. #82514 (Yarik Briukhovetskyi).
- Запретить устанавливать
threadpool_writer_pool_sizeв значение 0, чтобы операции сервера не зависали. #82532 (Bharat Nallan). - Исправлен
LOGICAL_ERRORпри анализе выражения политики построчного доступа для коррелированных столбцов. #82618 (Dmitry Novik). - Исправлено некорректное использование родительских метаданных в табличной функции
mergeTreeProjectionприenable_shared_storage_snapshot_in_query = 1. Это связано с #82634. #82638 (Amos Bird). - Функции
trim{Left,Right,Both}теперь поддерживают входные строки типа “FixedString(N)”. Например, теперь работаетSELECT trimBoth(toFixedString('abc', 3), 'ac'). #82691 (Robert Schulze). - В AzureBlobStorage при нативном копировании сравниваются методы аутентификации; если при этом возникает исключение, код теперь переключается на чтение и копирование (то есть на ненативное копирование). #82693 (Smita Kulkarni).
- Исправлена десериализация
groupArraySample/groupArrayLastв случае пустых элементов (десериализация могла пропускать часть бинарных данных, если вход был пустым; это может приводить к повреждению данных при чтении и ошибке UNKNOWN_PACKET_FROM_SERVER в протоколе TCP). Это не затрагивает числовые типы и типы дата-время. #82763 (Pedro Ferreira). - Исправлена ошибка при резервном копировании пустой таблицы
Memory, из-за которой восстановление из резервной копии завершалось ошибкойBACKUP_ENTRY_NOT_FOUND. #82791 (Julia Kartseva). - Исправлена безопасность при обработке исключений при переписывании union/intersect/except_default_mode. Закрывает #82664. #82820 (Alexey Milovidov).
- Учитывайте количество асинхронных задач по загрузке таблиц. Если выполняются какие-либо задачи, не обновляйте
tail_ptrвTransactionLog::removeOldEntries. #82824 (Tuan Pham Anh). - Исправлены состояния гонки в Iceberg. #82841 (Azat Khuzhin).
- Оптимизация настройки
use_skip_indexes_if_final_exact_mode(добавленная в 25.6) в некоторых случаях могла не выбрать подходящий диапазон-кандидат в зависимости от настроек движкаMergeTree/ распределения данных. Теперь это исправлено. #82879 (Shankar Iyer). - Устанавливается salt для данных аутентификации при разборе из 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).
- Не выполнять проверку циклических зависимостей для CREATE TABLE без зависимостей. Это устраняет снижение производительности в сценариях с созданием тысяч таблиц, возникшее после изменений в https://github.com/ClickHouse/ClickHouse/pull/65405. #83077 (Pavel Kruglov).
- Исправляет проблему при неявном чтении отрицательных значений Time в таблицу и устраняет неоднозначности в документации. #83091 (Yarik Briukhovetskyi).
- Не используйте не относящиеся к делу части общего словаря в функции
lowCardinalityKeys. #83118 (Alexey Milovidov). - Исправлена регрессия при использовании подстолбцов в Materialized Views. Исправлено: #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’ под нагрузкой при включенном планировании CPU. #83387 (Fan Ziqi).
- Исправлено исключение
TOO_DEEP_SUBQUERIES, возникавшее, когда определение CTE ссылалось на другое табличное выражение с тем же именем. #83413 (Dmitry Novik). - Исправлено некорректное поведение, из-за которого при выполнении
REVOKE S3 ON system.*отзывались разрешения S3 для*.*. Это исправляет #83417. #83420 (pufit). - Не разделяйте async_read_counters между запросами. #83423 (Azat Khuzhin).
- Отключены параллельные реплики, если подзапрос содержит FINAL. #83455 (zoomxi).
- Исправлено небольшое целочисленное переполнение в конфигурации параметра
role_cache_expiration_time_seconds(issue #83374). #83461 (wushap). - Исправлена ошибка, внесённая в https://github.com/ClickHouse/ClickHouse/pull/79963. При вставке в MV с definer проверка прав должна использовать привилегии пользователя, указанного как definer. Это исправляет #79951. #83502 (pufit).
- Отключено отсечение файлов по границам для элементов массива Iceberg и значений map Iceberg, включая все их вложенные поля. #83520 (Daniil Ivanik).
- Исправлены возможные ошибки «file cache not initialized», возникающие при использовании кэша файлов в качестве временного хранилища данных. #83539 (Bharat Nallan).
- Исправление в Keeper: общее количество наблюдений теперь корректно обновляется при удалении эфемерных узлов при закрытии сеанса. #83583 (Antonio Andelic).
- Исправлен некорректный учёт памяти, связанный с max_untracked_memory. #83607 (Azat Khuzhin).
- INSERT SELECT с UNION ALL в редких случаях мог приводить к разыменованию нулевого указателя. Это закрывает #83618. #83643 (Alexey Milovidov).
- Запрещено использовать нулевое значение для max_insert_block_size, так как это могло приводить к логической ошибке. #83688 (Bharat Nallan).
- Исправлен бесконечный цикл в estimateCompressionRatio() при block_size_bytes=0. #83704 (Azat Khuzhin).
- Исправлены метрики
IndexUncompressedCacheBytes/IndexUncompressedCacheCells/IndexMarkCacheBytes/IndexMarkCacheFiles(ранее они включались в метрику без префиксаCache). #83730 (Azat Khuzhin). - Исправлено возможное аварийное завершение (из-за ожидания завершения потоков из задачи) и, возможно, зависания (в модульных тестах) при остановке
BackgroundSchedulePool. #83769 (Azat Khuzhin). - Добавлена настройка обратной совместимости, которая позволяет новому анализатору ссылаться на внешний алиас в конструкции WITH при коллизии имен. Исправляет #82700. #83797 (Dmitry Novik).
- Исправлена взаимная блокировка при завершении работы из-за рекурсивной блокировки контекста при очистке library bridge. #83824 (Azat Khuzhin).
Улучшения сборки/тестирования/упаковки
- Собрана минимальная библиотека на C (10 КБ) для лексера ClickHouse. Это необходимо для #80977. #81347 (Alexey Milovidov). Добавлен тест для автономного лексера, а также тег теста
fasttest-only. #82472 (Yakov Olkhovskiy). - Добавлена проверка входов подмодуля Nix. #81691 (Konstantin Bogdanov).
- Исправлен ряд проблем, которые могут возникнуть при попытке запустить integration tests на 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). - В образы
clickhouse/clickhouse-serverи официальные образыclickhouseдобавлены бинарный файлbusyboxи инструменты установки. #83735 (Mikhail f. Shiryaev). - Добавлена поддержка переменной окружения
CLICKHOUSE_HOSTдля указания хоста ClickHouse server, в соответствии с уже существующими переменными окружения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:SS[.fractional]), а также некоторые базовые функции CAST и функции для работы с другими типами данных. Добавлены настройки для совместимости с существующей функциейtoTime. Настройкаuse_legacy_to_timeпока включена, чтобы сохранить прежнее поведение. #81217 (Yarik Briukhovetskyi). Добавлена поддержка сравнения Time/Time64. #80327 (Yarik Briukhovetskyi). - Новый CLI-инструмент
chdig— TUI-интерфейс для ClickHouse (по типу top) в составе ClickHouse. #79666 (Azat Khuzhin). - Добавлена поддержка настройки
diskдля движков баз данныхAtomicиOrdinary, позволяющей указать диск для хранения файлов метаданных таблиц. #80546 (Tuan Pham Anh). Это позволяет присоединять базы данных из внешних источников. - Новый тип MergeTree,
CoalescingMergeTree— при фоновых слияниях движок выбирает первое значение, отличное от Null. Это закрывает #78869. #79344 (scanhex12). - Добавлена поддержка функций для чтения WKB (“Well-Known Binary” — формат двоичного кодирования различных геометрических типов, используемый в GIS-приложениях). См. #43941. #80139 (scanhex12).
- Добавлено планирование слотов запросов для рабочих нагрузок; подробности см. в разделе планирование рабочих нагрузок. #78415 (Sergei Trifonov).
- Вспомогательные функции
timeSeries*, ускоряющие некоторые сценарии работы с временными рядами: - ресемплирование данных по временной сетке с указанными начальной временной меткой, конечной временной меткой и шагом - вычислениеdelta,rate,ideltaиirateв стиле PromQL. #80590 (Alexander Gololobov). - Добавлены функции
mapContainsValuesLike/mapContainsValues/mapExtractValuesLikeдля фильтрации по значениям Map и их поддержка в индексах на основе bloom filter. #78171 (UnamedRus). - Теперь ограничения настроек могут задавать набор запрещённых значений. #78499 (Bharat Nallan).
- Добавлен параметр
enable_shared_storage_snapshot_in_query, который позволяет использовать один и тот же снимок хранилища во всех подзапросах в рамках одного запроса. Это обеспечивает согласованное чтение из одной и той же таблицы, даже если к ней обращаются в запросе несколько раз. #79471 (Amos Bird). - Добавлена поддержка записи столбцов
JSONвParquetи прямого чтения столбцовJSONизParquet. #79649 (Nihal Z. Miaji). - Добавлена поддержка
MultiPolygonвpointInPolygon. #79773 (Nihal Z. Miaji). - Добавлена поддержка запросов к Delta-таблицам, смонтированным в локальной файловой системе, через табличную функцию
deltaLakeLocal. #79781 (roykim98). - Добавлена новая настройка
cast_string_to_date_time_mode, которая позволяет выбирать режим разбора DateTime при приведении из String. #80210 (Pavel Kruglov). Например, её можно установить в режимbest effort. - Добавлены функции
bech32Encodeиbech32Decodeдля работы с алгоритмом Bech, используемым в Bitcoin (issue #40381). #80239 (George Larionov). - Добавлены SQL-функции для анализа имён частей MergeTree. #80573 (Mikhail Artemenko).
- Добавлен новый виртуальный столбец
_disk_name, позволяющий фильтровать части, выбранные для запроса, по диску, на котором они находятся. #80650 (tanner-bruce). - Добавлена стартовая страница со списком встроенных веб-инструментов. Она будет открываться при запросе от user agent, имитирующего браузер. #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).
Экспериментальные возможности
- Для
Kafka2с использованием ClickHouse Keeper реализована логика, аналогичная перебалансировке Kafka. Для каждой реплики поддерживаются два типа блокировок партиций: постоянные и временные. Реплика старается удерживать постоянные блокировки как можно дольше; в любой момент времени на реплике может быть не более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).
Повышение производительности
- Добавлена поддержка фильтрации с использованием нескольких projection, что позволяет использовать для фильтрации на уровне частей более одной projection. Это решает проблему #55525. Это второй шаг в реализации projection index после #78429. #80343 (Amos Bird).
- По умолчанию в файловом кэше используется политика кэширования
SLRU. #75072 (Kseniia Sumarokova). - Устранена конкуренция за ресурсы на шаге Resize в конвейере выполнения запроса. #77562 (Zhiguo Zhou).
- Добавлена возможность выполнять (де)сжатие и (де)сериализацию блоков в потоках конвейера, а не в одном потоке, связанном с сетевым соединением. Управляется настройкой
enable_parallel_blocks_marshalling. Это должно ускорить распределённые запросы, передающие значительные объёмы данных между инициатором и удалёнными узлами. #78694 (Nikita Taranov). - Повышена производительность всех типов bloom filter. Видео с конференции OpenHouse #79800 (Delyan Kratunov).
- Добавлен быстрый путь выполнения в
UniqExactSet::mergeна случай, когда одно из множеств пусто. Также теперь, если множество LHS двухуровневое, а RHS — одноуровневое, мы не будем преобразовывать RHS в двухуровневое. #79971 (Nikita Taranov). - Повышена эффективность повторного использования памяти и снижено количество страничных ошибок при использовании двухуровневых хеш-таблиц. Это должно ускорить GROUP BY. #80245 (Jiebin Sun).
- Предотвращено ненужное обновление и снижена конкуренция за блокировки в кэше условий запроса. #80247 (Jiebin Sun).
- Небольшая оптимизация для
concatenateBlocks. Вероятно, полезна для параллельного hash JOIN. #80328 (李扬). - При выборе диапазонов mark по диапазону первичного ключа двоичный поиск нельзя использовать, если к первичному ключу применены функции. Этот PR снимает это ограничение: двоичный поиск по-прежнему можно применять, когда к первичному ключу применена цепочка всегда монотонных функций или когда RPN содержит элемент, который всегда истинен. Закрывает #45536. #80597 (zoomxi).
- Ускорено завершение работы движка
Kafka(убрана лишняя задержка в 3 секунды при наличии нескольких таблицKafka). #80796 (Azat Khuzhin). - Асинхронные вставки: снижают использование памяти и повышают производительность запросов на вставку. #80972 (Raúl Marín).
- Не профилируйте процессоры, если таблица логов отключена. #81256 (Raúl Marín). Это ускоряет выполнение очень коротких запросов.
- Ускорена
toFixedString, если исходное значение в точности соответствует запрошенному. #81257 (Raúl Marín). - Не обрабатывать значения квот, если для пользователя не заданы ограничения. #81549 (Raúl Marín). Это ускоряет выполнение очень коротких запросов.
- Исправлена регрессия производительности при отслеживании памяти. #81694 (Michael Kolupaev).
- Улучшена оптимизация ключа сегментирования для распределённых запросов. #78452 (fhw12345).
- Параллельные реплики: не нужно ждать медленные неиспользуемые реплики, если все задачи чтения уже распределены по другим репликам. #80199 (Igor Nikonov).
- Для параллельных реплик используется отдельный тайм-аут подключения, см. настройку
parallel_replicas_connect_timeout_ms. Ранее для запросов с параллельными репликами в качестве тайм-аута подключения использовались настройкиconnect_timeout_with_failover_ms/connect_timeout_with_failover_secure_ms(по умолчанию — 1 секунда). #80421 (Igor Nikonov). - В журналируемой файловой системе вызов
mkdirзаписывается в журнал файловой системы, который сохраняется на диске. Если диск медленный, это может занять много времени. Вынесено за пределы области действия блокировки reserve lock. #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 и общие данные для 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). - Исправлено описание в плане EXPLAIN для предварительного шага DISTINCT. #80330 (UnamedRus).
- Добавлена возможность использовать именованные коллекции в ODBC/JDBC. #80334 (Andrey Zvonov).
- Метрики количества дисков в режиме только чтения и поврежденных дисков. Индикатор пишет в журнал при запуске DiskLocalCheckThread. #80391 (VicoWu).
- Добавлена поддержка хранилища
s3_plain_rewritableс проекциями. В предыдущих версиях объекты метаданных в S3, ссылающиеся на проекции, не обновлялись при перемещении. Закрывает #70258. #80393 (Sav). - Команда
SYSTEM UNFREEZEне будет пытаться искать части на дисках только для чтения и однократной записи. Это закрывает #80430. #80432 (Alexey Milovidov). - Снижен уровень логирования для сообщений о слитых частях. #80476 (Hans Krutzer).
- Изменено поведение отсечения партиций по умолчанию для таблиц 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. Показывается либо “двоичный поиск”, либо “универсальный алгоритм поиска с исключением”. #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разрешён режим только для чтения, поэтому для её использования не требуется grantCREATE TEMPORARY TABLE. #80981 (Miсhael Stetsyuk). - Улучшена диагностика кэшей в памяти (информация о кэшах теперь доступна в
system.metricsвместо неполногоsystem.asynchronouse_metrics). Вdashboard.htmlдобавлен размер кэшей в памяти (в байтах).VectorSimilarityIndexCacheSize/IcebergMetadataFilesCacheSizeпереименованы вVectorSimilarityIndexCacheBytes/IcebergMetadataFilesCacheBytes. #81023 (Azat Khuzhin). - Игнорировать базы данных с движками, которые не поддерживают таблицы
RocksDB, при чтении изsystem.rocksdb. #81083 (Pervakov Grigorii). - В конфигурационном файле
clickhouse-localразрешеныfilesystem_cachesиnamed_collections. #81105 (Alexey Milovidov). - Исправлена подсветка
PARTITION BYв запросахINSERT. В предыдущих версияхPARTITION BYне подсвечивалось как ключевое слово. #81106 (Alexey Milovidov). - Два небольших улучшения в веб-интерфейсе: - корректно обрабатываются запросы без вывода, такие как
CREATE,INSERT(до недавнего времени для таких запросов бесконечно отображался индикатор загрузки); - при двойном щелчке по таблице выполняется прокрутка к началу страницы. #81131 (Alexey Milovidov). - Метрика
MemoryResidentWithoutPageCacheпоказывает объём физической памяти в байтах, используемой процессом сервера, без учёта кэша страниц в пространстве пользователя. Это даёт более точное представление о фактическом использовании памяти при использовании кэша страниц в пространстве пользователя. Если кэш страниц в пространстве пользователя отключён, это значение равноMemoryResident. #81233 (Jayme Bird). - Пометить вручную записанные в лог исключения в клиенте, локальном сервере, клиенте Keeper и приложении disks как уже записанные, чтобы не записывать их дважды. #81271 (Miсhael Stetsyuk).
- Параметры
use_skip_indexes_if_finalиuse_skip_indexes_if_final_exact_modeтеперь по умолчанию имеют значениеTrue. Запросы с модификаторомFINALтеперь будут использовать индексы пропуска данных (если это применимо) для отбора гранул, а также считывать дополнительные гранулы, соответствующие совпадающим диапазонам первичного ключа. Пользователи, которым нужно прежнее поведение с приблизительными/неточными результатами, могут установитьuse_skip_indexes_if_final_exact_modeв FALSE после тщательной оценки. #81331 (Shankar Iyer). - Если в веб-интерфейсе открыто несколько запросов, будет выполнен тот, над которым находится курсор. Продолжение #80977. #81354 (Alexey Milovidov).
- Этот PR исправляет проблемы в реализации
is_strictпри проверке монотонности функций преобразования. Сейчас некоторые функции преобразования, такие какtoFloat64(UInt32)иtoDate(UInt8), ошибочно возвращаютis_strictкак false, хотя должны возвращать true. #81359 (zoomxi). - При проверке того, соответствует ли
KeyConditionнепрерывному диапазону, если ключ обёрнут в цепочку нестрогих функций,Constraint::POINTможет потребоваться преобразовать вConstraint::RANGE. Например,toDate(event_time) = '2025-06-03'означает диапазон дляevent_time: [‘2025-06-03 00:00:00’, ‘2025-06-04 00:00:00’). Этот PR исправляет такое поведение. #81400 (zoomxi). - Псевдонимы
clickhouse/chбудут запускатьclickhouse-clientвместоclickhouse-local, если указаны параметры--hostили--port. Продолжение #79422. Закрывает #65252. #81509 (Alexey Milovidov). - Теперь, когда у нас есть данные о распределении времени отклика Keeper, мы можем настроить бакеты гистограммы для метрик. #81516 (Miсhael Stetsyuk).
- Добавлено событие профиля
PageCacheReadBytes. #81742 (Kseniia Sumarokova). - Исправлена логическая ошибка в файловом кэше: “0 байт, но диапазон не завершён”. #81868 (Kseniia Sumarokova).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Исправлена ошибка в параметризованном представлении с запросом SELECT EXCEPT. Закрывает #49447. #57380 (Nikolay Degterinsky).
- Анализатор: исправлено имя проекции столбца после повышения типа столбца при 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 и анализатором. #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).
- Индекс пропуска данных с лямбда-выражениями не применялся. Исправлен случай, когда высокоуровневые функции в определении индекса в точности совпадают с функцией в запросе. #80025 (Nikolai Kochetov).
- Исправлена версия метаданных при присоединении части на реплике, которая выполняет команду ATTACH_PART из журнала репликации. #80038 (Aleksei Filatov).
- Имена исполняемых пользовательских функций (eUDF), в отличие от других функций, не добавляются в столбец
used_functionsтаблицыsystem.query_log. В этом PR реализовано добавление имени eUDF, если 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, вызванная оптимизацией проталкивания фильтра в логическом JOIN sep в случае, если выражение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). - Исправлена обработка
enum-глоб-шаблонов с одним элементом в табличных функциях для объектного хранилища. #80716 (Konstantin Bogdanov). - Исправлен неверный тип результата функций сравнения для Tuple(Dynamic) и String, приводивший к логической ошибке. #80728 (Pavel Kruglov).
- Добавлена недостающая поддержка типа данных
timestamp_ntzдля Unity Catalog. Исправляет #79535, исправляет #79875. #80740 (alesapin). - Исправлена ошибка
THERE_IS_NO_COLUMNв распределённых запросах сIN cte. Исправление #75032. #80757 (Nikolai Kochetov). - Исправлена проблема с чрезмерным количеством файлов при внешнем ORDER BY (что приводило к избыточному использованию памяти). #80777 (Azat Khuzhin).
- Этот PR может закрыть #80742. #80783 (zoomxi).
- Исправлен сбой в Kafka из-за того, что get_member_id() создавал std::string из NULL (вероятно, проблема возникала только в случае, если не удавалось установить соединение с брокером). #80793 (Azat Khuzhin).
- Корректное ожидание завершения консьюмеров перед остановкой движка Kafka (активные консьюмеры после остановки могут вызывать различные отладочные проверки, а также читать данные с брокеров в фоновом режиме после удаления/отсоединения таблицы). #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).
- Исправлено атомарное переименование при TRUNCATE для файлов, у которых сжатие определяется по расширению файла. #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, если таблицу удалили после начала запроса, но до отправки столбцов. #81053 (Azat Khuzhin).
- Исправлено использование неинициализированного значения в функции quantileDeterministic. #81062 (Azat Khuzhin).
- Исправлено управление числом жёстких ссылок для дисковых транзакций metadatastoragefromdisk. Добавлены тесты. #81066 (Sema Checherinda).
- Имена пользовательских функций (UDF) не добавляются в таблицу
system.query_log, в отличие от других функций. В этом PR реализовано добавление имени UDF в один из двух столбцов —used_executable_user_defined_functionsилиused_sql_user_defined_functions, если UDF использовалась в запросе. #81101 (Kyamran). - Исправлены ошибки
Too large size ... passed to allocatorи возможные аварийные завершения при вставках через HTTP-протокол с текстовыми форматами (JSON,Values, …) и пропущенными полямиEnum. #81145 (Anton Popov). - Исправлен LOGICAL_ERROR в случае разреженного столбца при отправке блока 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 при выводе константных значений Tuple или Map в формате Parquet. #81249 (Michael Kolupaev).
- Проверка смещений массивов, полученных по сети. #81269 (Azat Khuzhin).
- Исправлен редкий случай в запросе, который выполняет JOIN пустых таблиц и использует оконные функции. Ошибка приводила к взрывному росту числа параллельных потоков, что вызывало OOM. #81299 (Alexander Gololobov).
- Исправления для функций Cluster для озёр данных (
deltaLakeCluster,icebergClusterи т. д.): (1) исправлен потенциальный сегфолт вDataLakeConfigurationпри использовании функцииClusterсо старым анализатором; (2) устранено дублирование обновлений метаданных озера данных (лишние запросы к объектному хранилищу); (3) исправлен лишний листинг в объектном хранилище, когда format явно не указан (это уже было сделано для некластерных движков озера данных). #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). - Не хранить в памяти содержимое нескольких файлов manifest. #81470 (Daniil Ivanik).
- Исправлен возможный сбой во время остановки фоновых пулов (
background_.*pool_size). #81473 (Azat Khuzhin). - Исправлено чтение за пределами буфера в формате
Npy, возникавшее при записи в таблицу с движкомURL. Это исправление закрывает #81356. #81502 (Alexey Milovidov). - Есть вероятность, что веб-интерфейс будет отображать
NaN%(типичная проблема JavaScript). #81507 (Alexey Milovidov). - Исправлена ошибка в
DatabaseReplicatedприdatabase_replicated_enforce_synchronous_settings=1. #81564 (Azat Khuzhin). - Исправлен порядок сортировки для типов LowCardinality(Nullable(…)). #81583 (Pervakov Grigorii).
- Сервер не должен оставлять HTTP-соединение открытым, если запрос не был полностью прочитан из сокета. #81595 (Sema Checherinda).
- Теперь скалярные коррелированные подзапросы возвращают результат выражения проекции типа Nullable. Исправлен случай, когда коррелированный подзапрос возвращает пустой результирующий набор. #81632 (Dmitry Novik).
- Исправлена ошибка
Unexpected relative path for a deduplicated partприATTACHкReplicatedMergeTree. #81647 (Azat Khuzhin). - Настройка запроса
use_iceberg_partition_pruningне будет применяться для хранилища Iceberg, поскольку используется глобальный контекст, а не контекст запроса. Это не критично, поскольку значение по умолчанию — true. Это может исправить данный PR. #81673 (Han Fei). - Бэкпорт в #82128: исправлена ошибка “Context has expired” при слияниях, когда в выражении TTL используется dict. #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: блокируется фиксация новых записей журнала, если в журнале есть некорректная запись. Ранее, если leader некорректно применял некоторые записи журнала, он продолжал фиксировать новые записи, хотя follower обнаруживал несовпадение дайджеста и прерывал работу. #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).
Улучшения сборки/тестирования/упаковки
- Используется
postgres16.9. #81437 (Konstantin Bogdanov). - Используется
openssl3.2.4. #81438 (Konstantin Bogdanov). - Использован
abseil-cpp2025-01-27. #81440 (Konstantin Bogdanov). - Используется
mongo-c-driver1.30.4. #81449 (Konstantin Bogdanov). - Используйте
krb51.21.3-final. #81453 (Konstantin Bogdanov). - Используется
orc2.1.2. #81455 (Konstantin Bogdanov). - Используется
grpc1.73.0. #81629 (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). - Избегайте копирования вендоризированных исходников Rust в
CARGO_HOME. #79560 (Konstantin Bogdanov). - Убрали зависимость от библиотеки Sentry, заменив её собственной конечной точкой. #80236 (Alexey Milovidov).
- Обновлены зависимости Python в образах CI для устранения предупреждений Dependabot. #80658 (Raúl Marín).
- Добавлена повторная попытка чтения из Keeper при запуске флага остановки реплицируемого DDL, чтобы тесты были более устойчивыми при включенной для Keeper инъекции сбоев. #80964 (Alexander Gololobov).
- Использовать https для URL-адреса архива Ubuntu. #81016 (Raúl Marín).
- Обновлены зависимости Python в тестовых образах. #81042 (dependabot[bot]).
- Добавлен
flake.nixдля Nix-сборок. #81463 (Konstantin Bogdanov). - Исправлена проблема, из-за которой
delta-kernel-rsтребовал доступа к сети во время сборки. Закрывает #80609. #81602 (Konstantin Bogdanov). Прочитайте статью A Year of Rust in ClickHouse.
Релиз ClickHouse 25.5, 2025-05-22
Обратно несовместимое изменение
- Функция
geoToH3теперь принимает входные данные в порядке (lat, lon, res) (что обычно для других геометрических функций). Пользователи, которые хотят сохранить прежний порядок аргументов (lon, lat, res), могут установить настройкуgeotoh3_argument_order = 'lon_lat'. #78852 (Pratima Patel). - Добавлена настройка файлового кэша
allow_dynamic_cache_resize, по умолчаниюfalse, чтобы разрешить динамическое изменение размера файлового кэша. Почему: в некоторых средах (ClickHouse Cloud) все события масштабирования происходят через перезапуск процесса, и мы хотим, чтобы эта возможность была явно отключена для большего контроля над поведением, а также в качестве меры предосторожности. Этот PR помечен как обратно несовместимый, потому что в старых версиях динамическое изменение размера кэша работало по умолчанию без специальной настройки. #79148 (Kseniia Sumarokova). - Удалена поддержка устаревших типов индексов
annoyиusearch. Оба уже долгое время были заглушками, то есть любая попытка использовать эти устаревшие индексы всё равно приводила к ошибке. Если у вас всё ещё есть индексыannoyиusearch, пожалуйста, удалите их. #79802 (Robert Schulze). - Удалена настройка сервера
format_alter_commands_with_parentheses. Эта настройка была введена и по умолчанию отключена в 24.2. По умолчанию она была включена в 25.2. Поскольку больше нет LTS-версий, не поддерживающих новый формат, мы можем удалить эту настройку. #79970 (János Benjamin Antal). - Реализация
delta-kernel-rsдля хранилищаDeltaLakeтеперь включена по умолчанию. #79541 (Kseniia Sumarokova). - Если чтение из
URLвключает несколько перенаправлений, настройкаenable_url_encodingкорректно применяется ко всем перенаправлениям в цепочке. #79563 (Shankar Iyer). Значение по умолчанию для настройкиenble_url_encodingтеперь установлено вfalse. #80088 (Shankar Iyer).
Новая возможность
- Добавлена поддержка скалярных коррелированных подзапросов в предложении WHERE. Закрывает #6697. #79600 (Dmitry Novik). Добавлена поддержка коррелированных подзапросов в списке проекций в простых случаях. #79925 (Dmitry Novik). #76078 (Dmitry Novik). Теперь покрытие тестового набора TPC-H составляет 100%.
- Векторный поиск с использованием индекса векторного сходства теперь перешёл в статус бета (ранее был экспериментальным). #80164 (Robert Schulze).
- Добавлена поддержка гео-типов в формате
Parquet. Это закрывает #75317. #79777 (scanhex12). - Новые функции
sparseGrams,sparseGramsHashes,sparseGramsHashesUTF8,sparseGramsUTF8для вычисления “разреженных n-грамм” — устойчивого алгоритма выделения подстрок для индексации и поиска. #79517 (scanhex12). clickhouse-local(и его сокращённый алиасch) теперь использует неявныйFROM tableпри наличии входных данных для обработки. Это закрывает #65023. Также в clickhouse-local включено автоматическое определение формата, если--input-formatне указан и обрабатывается обычный файл. #79085 (Alexey Milovidov).- Добавлены функции
stringBytesUniqиstringBytesEntropyдля поиска данных, которые могут быть случайными или зашифрованными. #79350 (Sachin Kumar Singh). - Добавлены функции кодирования и декодирования Base32. #79809 (Joanna Hulboj).
- Добавлены функции
getServerSettingиgetMergeTreeSetting. Закрывает #78318. #78439 (NamNguyenHoai). - Добавлена новая настройка
iceberg_enable_version_hint, использующая файлversion-hint.text. #78594 (Arnaud Briche). - Добавлена возможность выполнять TRUNCATE для определённых таблиц в базе данных, отобранных с помощью ключевого слова
LIKE. #78597 (Yarik Briukhovetskyi). - Добавлена поддержка виртуального столбца
_part_starting_offsetв таблицах семействаMergeTree. Этот столбец представляет собой накопительное количество строк во всех предшествующих частях, которое вычисляется во время выполнения запроса на основе текущего списка частей. Накопительные значения сохраняются на протяжении всего выполнения запроса и остаются корректными даже после отсечения частей. Связанная внутренняя логика была переработана для поддержки этого поведения. #79417 (Amos Bird). - Добавлены функции
divideOrNull,moduloOrNull,intDivOrNull,positiveModuloOrNull, которые возвращают NULL, если правый аргумент равен нулю. #78276 (kevinyhzou). - Векторный поиск ClickHouse теперь поддерживает как префильтрацию, так и постфильтрацию, а также предоставляет соответствующие настройки для более точной тонкой настройки. (issue #78161). #79854 (Shankar Iyer).
- Добавлены функции
icebergHashиicebergBucket. Добавлена поддержка отсечения файлов данных в таблицахIceberg, разбитых на партиции с помощьюbucket transfom. #79262 (Daniil Ivanik).
Экспериментальные возможности
- Новые типы данных
Time/Time64:Time(HHH:MM:SS) иTime64(HHH:MM:SS.<fractional>), а также некоторые базовые функции CAST и функции для работы с другими типами данных. Кроме того, существующая функция была переименована с toTime в toTimeWithFixedDate, поскольку функция toTime требуется для CAST. #75735 (Yarik Briukhovetskyi). 72459). - Каталог Hive metastore для озера данных Iceberg. #77677 (scanhex12).
- Индексы типа
full_textбыли переименованы вgin. Это соответствует более привычной терминологии PostgreSQL и других баз данных. Существующие индексы типаfull_textпо-прежнему можно загружать, но при попытке использовать их в поиске будет сгенерировано исключение (с рекомендацией использовать индексыgin). #79024 (Robert Schulze).
Повышение производительности
- Изменён формат Compact part: теперь для каждого подпотока сохраняются marks, что позволяет читать отдельные подстолбцы. Старый формат Compact по-прежнему поддерживается для чтения и может быть включён для записи с помощью настройки MergeTree
write_marks_for_substreams_in_compact_parts. По умолчанию он отключён для более безопасного обновления, так как меняет формат хранения компактных частей. В одном из следующих релизов он будет включён по умолчанию. #77940 (Pavel Kruglov). - Разрешён перенос условий с подстолбцами в PREWHERE. #79489 (Pavel Kruglov).
- Ускорена работа вторичных индексов за счёт вычисления их выражений сразу для нескольких гранул. #64109 (Alexey Milovidov).
- Настройка
compile_expressions(JIT-компилятор для фрагментов обычных выражений) теперь включена по умолчанию. Это исправляет #51264, #56386 и #66486. #79907 (Alexey Milovidov). - Введена новая настройка:
use_skip_indexes_in_final_exact_mode. Если запрос к таблицеReplacingMergeTreeсодержит предложение FINAL, чтение только диапазонов таблицы на основе индекса пропуска данных может приводить к некорректным результатам. Эта настройка обеспечивает корректность результатов за счет сканирования более новых частей, пересекающихся с диапазонами первичного ключа, возвращаемыми индексом пропуска данных. Установите 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). - Ускорено выполнение запросов за счёт оптимизации trivial count. #79945 (Raúl Marín).
- Улучшен инлайнинг некоторых операций с
Decimal. #79999 (Konstantin Bogdanov). - Для
input_format_parquet_bloom_filter_push_downзначение true теперь установлено по умолчанию. Также исправлена ошибка в истории изменений настроек. #80058 (Alexey Milovidov). - Оптимизированы мутации
ALTER ... DELETEдля частей, в которых нужно удалить все строки. Теперь в таких случаях вместо исходной части создается пустая — без выполнения мутации. #79307 (Anton Popov). - По возможности избегать лишнего копирования блока при вставке в Compact part. #79536 (Pavel Kruglov).
- Добавлена настройка
input_format_max_block_size_bytes, чтобы ограничить размер блоков, создаваемых во входных форматах, в байтах. Это помогает избежать чрезмерного использования памяти при импорте данных, когда строки содержат большие значения. #79495 (Pavel Kruglov). - Убраны защитные страницы для потоков и async_socket_for_remote/use_hedge_requests. Метод выделения памяти в
FiberStackизменён сmmapнаaligned_alloc, поскольку это приводит к разделению VMA и при высокой нагрузке можно упереться в лимит vm.max_map_count. #79147 (Sema Checherinda). - Ленивая материализация с параллельными репликами. #79401 (Igor Nikonov).
Улучшения
- Добавлена возможность применять легковесные удаления на лету (при настройках
lightweight_deletes_sync = 0,apply_mutations_on_fly = 1. #79281 (Anton Popov). - Если данные в формате Pretty выводятся в терминале и у следующего блока такая же ширина столбцов, его можно продолжить от предыдущего блока, «приклеив» к нему перемещением курсора вверх. Это закрывает #79333. Эта возможность управляется новой настройкой
output_format_pretty_glue_chunks. #79339 (Alexey Milovidov). - Функция
isIPAddressInRangeтеперь поддерживает типы данныхString,IPv4,IPv6,Nullable(String),Nullable(IPv4)иNullable(IPv6). #78364 (YjyJeff). - Добавлена возможность динамически изменять настройки пула соединений движка
PostgreSQL. #78414 (Samay Sharma). - Добавлена возможность указывать
_part_offsetв обычной проекции. Это первый шаг к созданию индекса проекции. Эту возможность можно использовать вместе с #58224, и она может помочь улучшить #63207. #78429 (Amos Bird). - Добавлены новые столбцы (
create_queryиsource) вsystem.named_collections. Закрывает #78179. #78582 (MikhailBurdukov). - В системную таблицу
system.query_condition_cacheдобавлено новое полеcondition. В нём хранится условие в открытом виде, хеш которого используется в качестве ключа в кэше условий запроса. #78671 (Robert Schulze). - Теперь индексы векторного сходства можно создавать для столбцов
BFloat16. #78850 (Robert Schulze). - Поддержка Unix-меток времени с дробной частью при разборе
DateTime64в режиме best effort. #78908 (Pavel Kruglov). - В реализации delta-kernel для хранилища
DeltaLakeисправлена поддержка режима сопоставления столбцов, добавлены тесты для эволюции схемы. #78921 (Kseniia Sumarokova). - Улучшена вставка в столбец
Variantв формате Values за счёт более корректного преобразования значений. #78923 (Pavel Kruglov). - Функция
tokensбыла расширена и теперь принимает дополнительный аргумент “tokenizer”, а также другие аргументы, зависящие от конкретного токенизатора. #79001 (Elmi Ahmadov). - Оператор
SHOW CLUSTERтеперь разворачивает макросы (если они есть) в аргументе. #79006 (arf42). - Хеш-функции теперь поддерживают
NULLвнутри массивов, кортежей и Map. (проблемы #48365 и #48623). #79008 (Michael Kolupaev). - cctz обновлён до 2025a. #79043 (Raúl Marín).
- Изменена обработка stderr по умолчанию для UDF: теперь используется “log_last”. Это удобнее в использовании. #79066 (Alexey Milovidov).
- Добавлена возможность отмены закрытия вкладок в веб-интерфейсе. Это закрывает #71284. #79084 (Alexey Milovidov).
- Удалены настройки при
recoverLostReplica, как это было сделано здесь: https://github.com/ClickHouse/ClickHouse/pull/78637. #79113 (Nikita Mikhaylov). - Добавлены события profile events:
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). - Параметры page cache теперь можно настраивать на уровне отдельных запросов. Это нужно для более быстрых экспериментов и более точной настройки запросов с высокой пропускной способностью и малой задержкой. #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-объектов из blob-хранилищ Azure/S3. #79425 (Alexander Gololobov).
- Добавлена настройка файлового кэша
max_size_ratio_to_total_space. #79460 (Kseniia Sumarokova). - Для
clickhouse-benchmarkизменена опцияreconnect: теперь она принимает значения 0, 1 или N для соответствующего количества переподключений. #79465 (Sachin Kumar Singh). - Разрешено
ALTER TABLE ... MOVE|REPLACE PARTITIONдля таблиц, находящихся на разных дискахplain_rewritable. #79566 (Julia Kartseva). - Индекс векторного сходства теперь также используется, если опорный вектор имеет тип
Array(BFloat16). #79745 (Shankar Iyer). - В таблицу system.error_log добавлены last_error_message, last_error_trace и query_id. Связанный тикет #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 в базе данных Replicated не работало на вновь добавленных репликах. #77774 (Michael Kolupaev).
- Исправлена ошибка, из-за которой refreshable materialized view нарушали работу резервных копий. #77893 (Michael Kolupaev).
- Исправлена давняя логическая ошибка срабатывания в
transform. #78247 (Yarik Briukhovetskyi). - Исправлены некоторые случаи, когда вторичный индекс не применялся при использовании анализатора. Исправляет #65607, исправляет #69373. #78485 (Nikolai Kochetov).
- Исправлена выгрузка событий профиля (
NetworkSendElapsedMicroseconds/NetworkSendBytes) для HTTP-протокола при включенном сжатии (ошибка не должна превышать размер буфера, обычно около 1MiB). #78516 (Azat Khuzhin). - Исправлена ошибка анализатора: когда в JOIN … USING участвует столбец ALIAS, вместо корректной ошибки выдавался LOGICAL_ERROR. #78618 (Yakov Olkhovskiy).
- Исправлен анализатор: CREATE VIEW … ON CLUSTER вызывает ошибку, если SELECT содержит позиционные аргументы. #78663 (Yakov Olkhovskiy).
- Исправлена ошибка
Block structure mismatchприINSERT SELECTв табличную функцию с автоматическим определением схемы, еслиSELECTсодержит скалярные подзапросы. #78677 (Pervakov Grigorii). - Исправлен analyzer: при prefer_global_in_and_join=1 для distributed таблицы в SELECT-запросе функция
inдолжна заменяться наglobalIn. #78749 (Yakov Olkhovskiy). - Исправлено несколько типов запросов
SELECT, которые читают из таблиц с движкомMongoDBили через табличную функциюmongodb: запросы с неявным преобразованием константного значения в условииWHERE(например,WHERE datetime = '2025-03-10 00:00:00'); запросы сLIMITиGROUP BY. Ранее они могли возвращать неверный результат. #78777 (Anton Popov). - Исправлено преобразование между различными типами JSON. Теперь оно выполняется простым приведением типа через преобразование в/из String. Это менее эффективно, но на 100% корректно. #78807 (Pavel Kruglov).
- Исправлена логическая ошибка при преобразовании типа Dynamic в тип Interval. #78813 (Pavel Kruglov).
- Исправлен откат столбца при ошибке разбора JSON. #78836 (Pavel Kruglov).
- Исправлена ошибка ‘bad cast’ при использовании JOIN с константным столбцом-псевдонимом. #78848 (Vladimir Cherkasov).
- Запрещено использовать
prewhereв materialized view для столбцов с разными типами в представлении и целевой таблице. #78889 (Pavel Kruglov). - Исправлена логическая ошибка при разборе некорректных бинарных данных в столбце Variant. #78982 (Pavel Kruglov).
- Теперь при размере батча Parquet, равном 0, генерируется исключение. Ранее при output_format_parquet_batch_size = 0 ClickHouse зависал. Теперь это исправлено. #78991 (daryawessely).
- Исправлена десериализация дискриминаторов типа Variant в базовом формате в компактных частях. Это изменение было добавлено в https://github.com/ClickHouse/ClickHouse/pull/55518. #79000 (Pavel Kruglov).
- Словари типа
complex_key_ssd_cacheтеперь не принимают нулевые или отрицательные значения параметровblock_sizeиwrite_buffer_size(issue #78314). #79028 (Elmi Ahmadov). - Избегайте использования Field для неагрегированных столбцов в SummingMergeTree. Это может привести к неожиданным ошибкам при использовании типов Dynamic/Variant в SummingMergeTree. #79051 (Pavel Kruglov).
- Исправлено чтение из materialized view с целевой таблицей Distributed при другом заголовке в анализаторе. #79059 (Pavel Kruglov).
- Исправлена ошибка, из-за которой
arrayUnion()возвращала лишние (некорректные) значения в таблицах с батч-вставками. Исправление #75057. #79079 (Peter Nguyen). - Исправлен сбой сегментации в
OpenSSLInitializer. Закрывает #79092. #79097 (Konstantin Bogdanov). - Всегда указывайте префикс для S3 ListObject. #79114 (Azat Khuzhin).
- Исправляет ошибку, из-за которой
arrayUnion()возвращала лишние (некорректные) значения в таблицах с батч-вставками. Исправляет #79157. #79158 (Peter Nguyen). - Исправлена логическая ошибка после применения pushdown к фильтру. #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).
- Исправлен сбой при динамическом обнаружении подстолбцов в частях Wide в MergeTree. #79466 (Pavel Kruglov).
- Проверять длину имени таблицы только для исходных запросов CREATE. Не выполнять эту проверку для вторичных CREATE, чтобы избежать проблем с обратной совместимостью. #79488 (Miсhael Stetsyuk).
- Исправлена ошибка
Block structure mismatch, возникавшая в ряде случаев в таблицах с разреженными столбцами. #79491 (Anton Popov). - Исправлены два случая ошибки “Logical Error: Can’t set alias of * of Asterisk on alias”. #79505 (Raúl Marín).
- Исправлено использование неверных путей при переименовании базы данных Atomic. #79569 (Tuan Pham Anh).
- Исправлена работа ORDER BY для JSON-столбца вместе с другими столбцами. #79591 (Pavel Kruglov).
- Исправлено дублирование результатов при чтении с удалённого сервера, когда
use_hedged_requestsиallow_experimental_parallel_reading_from_replicasотключены. #79599 (Eduard Karacharov). - Устранён сбой в реализации delta-kernel при использовании Unity Catalog. #79677 (Kseniia Sumarokova).
- Исправлено разрешение макросов для кластеров с автообнаружением. #79696 (Anton Ivashkin).
- Корректно обрабатывать неверно настроенные page_cache_limits. #79805 (Bharat Nallan).
- Исправляет результат SQL-функции
formatDateTime, если за форматтером переменной длины (например,%W, то есть названием дня неделиMonday,Tuesdayи т. д.) следует составной форматтер (форматтер, который выводит сразу несколько компонентов, например%D, то есть дату в американском формате05/04/25). #79835 (Robert Schulze). - IcebergS3 поддерживает оптимизацию count, а IcebergS3Cluster — нет. В результате значение count(), возвращаемое в режиме cluster, может быть кратно числу реплик. #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).- Запрос к system database может зависать, если метаданные system database хранятся в 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).- Добавлена информация для размотки стека в ассемблерных файлах
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). - Time travel в
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. Эта возможность заменяет кэш skipping index из более ранних выпусков. #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).
- В движок таблицы
Kafkaдобавлены настройки таблицы для конфигурацииSASLи учетных данных. Это позволяет настраивать аутентификацию на основе 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 аргумента (valueиunit) и преобразует значение в определённый тип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 и UTF8. Автор: 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). - Реализована простая оптимизация
countдляIceberg. Теперь запросы сcount()и без каких-либо фильтров должны выполняться быстрее. Закрывает #77639. #78090 (alesapin). - Добавлена возможность настраивать количество столбцов, которые могут параллельно записываться при слиянии, с помощью
max_merge_delayed_streams_for_parallel_write(это должно сократить использование памяти при вертикальных слияниях в S3 примерно в 25 раз). #77922 (Azat Khuzhin). - Отключите
filesystem_cache_prefer_bigger_buffer_size, если кеш используется пассивно, например при слияниях. Это снижает потребление памяти во время слияний. #77898 (Kseniia Sumarokova). - Теперь для определения размера задачи при чтении с включенными параллельными репликами используется количество реплик. Это обеспечивает более равномерное распределение работы между репликами, когда объем читаемых данных не слишком велик. #78695 (Nikita Taranov).
- Добавлена поддержка асинхронной предзагрузки ввода-вывода для формата
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 раз больше оперативной памяти, чем нужно. В этом исправлении переработана стратегия выделения памяти, что снижает её потребление и повышает эффективность кэша индекса векторного сходства. (проблема #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— просто alias для обратной совместимости. #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 views теперь появляются в
system.query_log. #71333 (Michael Kolupaev). - Пользовательские функции (UDF) теперь можно помечать как детерминированные с помощью новой настройки в их конфигурации. Кроме того, кэш запросов теперь проверяет, являются ли UDF, вызываемые в запросе, детерминированными. Если да, результат запроса кэшируется. (Задача #59988). #77769 (Jimmy Aguilar Mena).
- Для всех типов реплицируемых задач включена логика задержки повторных попыток. Это позволит снизить нагрузку на 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). - В
system.errorsдобавленquery_id. Закрывает #75815. #76581 (Vladimir Baikov). - Добавлена поддержка преобразования
UInt128вIPv6. Это позволяет выполнять операциюbitAndи арифметические операции сIPv6с последующим обратным преобразованием вIPv6. Закрывает #76752. Кроме того, теперь результат операцииbitAndдляIPv6тоже можно преобразовать обратно вIPv6. См. также #57707. #76928 (Muzammil Abdul Rehman). - По умолчанию специальные значения
Boolв текстовых форматах внутри типаVariantне разбираются. Это можно включить с помощью настройкиallow_special_bool_values_inside_variant. #76974 (Pavel Kruglov). - Добавлена возможность настраивать время ожидания низкоприоритетного запроса
priorityдля каждой задачи на уровне сеанса и сервера. #77013 (VicoWu). - Реализовано сравнение значений типа JSON. Теперь объекты JSON можно сравнивать так же, как значения типа Map. #77397 (Pavel Kruglov).
- Улучшена поддержка прав доступа в
system.kafka_consumers. Теперь передаются внутренние ошибкиlibrdkafka(стоит отметить, что эта библиотека — дрянь). #77700 (Ilya Golshtein). - Добавлена проверка настроек движка таблицы Buffer. #77840 (Pervakov Grigorii).
- Добавлена настройка
enable_hdfs_pread, позволяющая включать или отключатьpreadвHDFS. #77885 (kevinyhzou). - Добавлены profile events для числа запросов
multiна чтение и запись в zookeeper. #77888 (JackyWoo). - Разрешено создавать временные таблицы и вставлять в них данные, когда включён
disable_insertion_and_mutation. #77901 (Xu Jia). - Снижено значение
max_insert_delayed_streams_for_parallel_write(до 100). #77919 (Azat Khuzhin). - Исправлен разбор года в синтаксисе Joda (если вам любопытно, это из мира Java), например
yyy. #77973 (李扬). - Подключение частей таблиц
MergeTreeбудет выполняться в порядке блоков, из которых они состоят, что важно для специальных алгоритмов слияния, таких какReplacingMergeTree. Это закрывает #71009. #77976 (Alexey Milovidov). - Правила маскирования запросов теперь могут сгенерировать
LOGICAL_ERROR, если произошло совпадение. Это поможет проверить, не утекает ли где-либо в журналы заранее заданный пароль. #78094 (Nikita Mikhaylov). - Добавлен столбец
index_length_columnвinformation_schema.tablesдля повышения совместимости с MySQL. #78119 (Paweł Zakrzewski). - Добавлены две новые метрики:
TotalMergeFailuresиNonAbortedMergeFailures. Эти метрики нужны для выявления случаев, когда за короткий промежуток времени происходит слишком много неудачных слияний. #78150 (Miсhael Stetsyuk). - Исправлен некорректный разбор URL S3, когда ключ не указан при path-style адресации. #78185 (Arthur Passos).
- Исправлены некорректные значения асинхронных метрик
BlockActiveTime,BlockDiscardTime,BlockWriteTime,BlockQueueTimeиBlockReadTime(до этого изменения 1 секунда ошибочно указывалась как 0,001). #78211 (filimonov). - Теперь для ошибок при отправке в materialized view для StorageS3(Azure)Queue учитывается ограничение
loading_retries. Ранее такие ошибки повторялись неограниченно. #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). - В системную таблицу
system.query_condition_cacheдобавлено полеcondition. В нём хранится условие в открытом виде, хеш которого используется как ключ в кэше условий запроса. #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 view. #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 в базе данных Replicated не работало на недавно добавленных репликах. #77774 (Michael Kolupaev).
- Исправлен возможный сбой, возникавший при ошибке
NOT_FOUND_COLUMN_IN_BLOCK. #77854 (Vladimir Cherkasov). - Исправлен сбой в S3/AzureQueue, возникавший при заполнении данными. #77878 (Bharat Nallan).
- Отключён нечёткий поиск по истории на SSH-сервере (так как для него требуется библиотека skim). #78002 (Azat Khuzhin).
- Исправляет ошибку, из-за которой запрос векторного поиска по неиндексированному столбцу возвращал некорректные результаты, если в таблице был другой векторный столбец с заданным индексом векторного сходства. (Проблема #77978). #78069 (Shankar Iyer).
- Исправлена незначительная ошибка в промпте “Запрошенный формат вывода является двоичным… Всё равно вывести? [y/N]”. #78095 (Azat Khuzhin).
- Исправлена ошибка при использовании
toStartOfIntervalс нулевым аргументом origin. #78096 (Yarik Briukhovetskyi). - Запрещено указывать пустой параметр запроса
session_idдля HTTP-интерфейса. #78098 (Alexey Katsman). - Исправлено переопределение метаданных в базе данных
Replicated, которое могло произойти из-за запросаRENAME, выполненного сразу после запросаALTER. #78107 (Nikolay Degterinsky). - Исправлен сбой в движке
NATS. #78108 (Dmitry Novikov). - Не пытаться создавать history_file во встроенном SSH-клиенте (в предыдущих версиях попытка всегда завершалась неудачей, но всё равно выполнялась). #78112 (Azat Khuzhin).
- Исправлено отображение неверной информации в
system.detached_tablesпосле выполнения запросовRENAME DATABASEилиDROP TABLE. #78126 (Nikolay Degterinsky). - Исправлены проверки на слишком большое количество таблиц в базе данных
Replicatedпосле #77274. Кроме того, теперь проверка выполняется до создания хранилища, чтобы избежать создания неучтённых узлов в Keeper в случаеReplicatedMergeTreeилиKeeperMap. #78127 (Nikolay Degterinsky). - Исправлено возможное аварийное завершение при параллельной инициализации метаданных
S3Queue. #78131 (Azat Khuzhin). - Функции
groupArray*теперь выдают ошибкуBAD_ARGUMENTS, если аргументmax_sizeимеет значение 0 и тип Int, как это уже сделано для UInt, вместо того чтобы пытаться выполнить операцию с таким значением. #78140 (Eduard Karacharov). - Предотвращён сбой при восстановлении потерянной реплики, если локальная таблица удалена до её перевода в состояние detached. #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 view, если у реплики
disable_insertion_and_mutationравно true. Такая задача выполняет вставку и завершится ошибкой, еслиdisable_insertion_and_mutationравно true. #78277 (Xu Jia). - Проверка доступа к таблицам, лежащим в основе движка
Merge. #78339 (Pervakov Grigorii). - Модификатор
FINALможно игнорировать при выполнении запроса к таблицеDistributed. #78428 (Yakov Olkhovskiy). bitmapMinвозвращает uint32_max, если битмап пуст (и uint64_max, если входной тип имеет больший размер), что соответствует поведению минимального значения у пустого roaring_bitmap. #78444 (wxybear).- Отключена параллелизация обработки запроса сразу после чтения секции FROM, если включен
distributed_aggregation_memory_efficient, поскольку это может приводить к логической ошибке. Закрывает #76934. #78500 (flynn). - Устанавливает как минимум один поток чтения, если после применения настройки
max_streams_to_max_threads_ratioне планируется ни одного потока. #78505 (Eduard Karacharov). - В
S3Queueисправлена логическая ошибка “Не удается отменить регистрацию: UUID таблицы не зарегистрирован”. Закрывает #78285. #78541 (Kseniia Sumarokova). - ClickHouse теперь может определять свою cgroup v2 в системах, где одновременно включены cgroups v1 и v2. #78566 (Grigory Korolev).
- Табличные функции
-Clusterпереставали работать при использовании с настройками на уровне таблицы. #78587 (Daniil Ivanik). - Улучшены проверки для случаев, когда ReplicatedMergeTree не поддерживает транзакции при INSERT. #78633 (Azat Khuzhin).
- Очистка настроек запроса при attach. #78637 (Raúl Marín).
- Исправлен сбой, возникавший при указании некорректного пути в
iceberg_metadata_file_path. #78688 (alesapin). - В движке таблицы
DeltaLakeс реализацией delta-kernel-s исправлен случай, когда схема чтения отличалась от схемы таблицы и при этом одновременно присутствовали столбцы партиции, что приводило к ошибке “столбец не найден”. #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: наблюдения больше не срабатывают при неуспешных multi-запросах. #79247 (Antonio Andelic).
- Исправлена ошибка чтения таблицы Iceberg, возникавшая, когда значение min-max явно указано, но равно
NULL. Было отмечено, что библиотека Go Iceberg создавала такие ужасные файлы. Закрывает #78740. #78764 (flynn).
Улучшения сборки/тестирования/упаковки
- Учтены целевые возможности CPU в Rust, а также включена LTO во всех крейтах. #78590 (Raúl Marín).
Релиз ClickHouse 25.3 LTS, 2025-03-20
Обратно несовместимое изменение
- Запрещено выполнять TRUNCATE для баз данных Replicated. #76651 (Bharat Nallan).
- Изменения в кэше skipping index отменены. #77447 (Nikita Mikhaylov).
Новая возможность
- Тип данных
JSONготов к промышленной эксплуатации. См. https://jsonbench.com/. Типы данныхDynamicиVariantготовы к промышленной эксплуатации. #77785 (Alexey Milovidov). - В clickhouse-server добавлен протокол SSH. Теперь к ClickHouse можно подключаться с помощью любого SSH-клиента. Закрывает: #74340. #74989 (George Gamezardashvili).
- Табличные функции заменяются их вариантами -Cluster, если включены параллельные реплики. Исправление #65024. #70659 (Konstantin Bogdanov).
- Новая реализация кэша страниц в пространстве пользователя, которая позволяет кэшировать данные в памяти процесса вместо того, чтобы полагаться на кэш страниц ОС; это полезно, когда данные хранятся в удалённой виртуальной файловой системе без локального файлового кэша. #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). - События profile events
FilterTransformPassedRowsиFilterTransformPassedBytesбудут отображать количество строк и байт, отфильтрованных при выполнении запроса. #76662 (Onkar Deshpande). - Поддержка метрик типа histogram. Интерфейс во многом повторяет клиент Prometheus: достаточно вызвать
observe(value), чтобы увеличить счётчик в бакете, соответствующем значению. Метрики гистограмм доступны черезsystem.histogram_metrics. #75736 (Miсhael Stetsyuk). - Поддержка неконстантного CASE при выборе по явным значениям. #77399 (Yarik Briukhovetskyi).
Экспериментальные возможности
- Добавлена поддержка Unity Catalog для таблиц DeltaLake в AWS S3 и локальной файловой системе. #76988 (alesapin).
- Добавлена экспериментальная интеграция с каталогом сервисов AWS Glue для таблиц Iceberg. #77257 (alesapin).
- Добавлена поддержка динамического автообнаружения кластеров. Это расширяет существующую возможность автообнаружения узлов. Теперь ClickHouse может автоматически обнаруживать и регистрировать новые кластеры по общему пути ZooKeeper с помощью
<multicluster_root_path>. #76001 (Anton Ivashkin). - Добавлена возможность автоматически выполнять очистительные слияния для целых партиций по истечении настраиваемого тайм-аута с помощью новой настройки
enable_replacing_merge_with_cleanup_for_min_age_to_force_merge. #76440 (Christoph Wurm).
Повышение производительности
- Реализован кэш условий запроса, повышающий производительность запросов с повторяющимися условиями. Диапазон участка данных, не удовлетворяющего условию, запоминается в памяти как временный индекс. Последующие запросы используют этот индекс. Закрывает #67768 #69236 (zhongyuankai).
- Данные теперь активно вытесняются из кэша при удалении частей. Кэш больше не разрастается до максимального размера, если объём данных меньше. #76641 (Alexey Milovidov).
- Int256 и UInt256 в арифметических вычислениях заменены на встроенный тип clang
i256, что повышает производительность #70502. #73658 (李扬). - В некоторых случаях (например, если столбец типа Array пуст) части данных могут содержать пустые файлы. Теперь можно пропускать запись пустых 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в качестве значений настроек типа float. Впрочем, и раньше в этом не было никакого смысла. #77546 (Yarik Briukhovetskyi). - По умолчанию параллельные реплики отключаются, если анализатор отключён, независимо от настройки
compatibility. Это поведение по-прежнему можно изменить, явно установивparallel_replicas_only_with_analyzerв значениеfalse. #77115 (Igor Nikonov). - Добавлена возможность задавать список заголовков, которые передаются из заголовков клиентского запроса внешнему HTTP-аутентификатору. #77054 (inv2004).
- Добавлена поддержка регистронезависимого сопоставления столбцов для полей в кортежных столбцах. Закрывает https://github.com/apache/incubator-gluten/issues/8324. #73780 (李扬).
- Параметры кодека Gorilla теперь всегда будут сохраняться в .sql-файле метаданных таблицы. Это закрывает: #70072. #74814 (Nikita Mikhaylov).
- Реализованы улучшения разбора для некоторых озёр данных (разбор Sequence ID: добавлена возможность разбирать идентификаторы последовательности в файлах manifest, а также разбор метаданных Avro: парсер метаданных Avro переработан так, чтобы его можно было легко расширять в будущем). #75010 (Daniil Ivanik).
- Удалён
trace_idиз стандартного ORDER BY дляsystem.opentelemetry_span_log. #75907 (Azat Khuzhin). - Шифрование (атрибут
encrypted_by) теперь можно применять к любому конфигурационному файлу (config.xml, users.xml, вложенным конфигурационным файлам). Ранее оно работало только для файла config.xml верхнего уровня. #75911 (Mikhail Gorshkov). - Улучшена таблица
system.warningsи добавлены динамические предупреждения, которые можно добавлять, обновлять и удалять. #76029 (Bharat Nallan). - Этот PR делает невозможным выполнение запроса
ALTER USER user1 ADD PROFILES a, DROP ALL PROFILES, поскольку все операцииDROPв этом порядке должны идти первыми. #76242 (pufit). - Различные улучшения в SYNC REPLICA (более понятные сообщения об ошибках, доработанные тесты, проверки корректности). #76307 (Azat Khuzhin).
- Используется корректный fallback, если многокомпонентное копирование в S3 при резервном копировании завершается ошибкой Access Denied. Ошибка Access Denied при многокомпонентном копировании может возникать, если резервное копирование выполняется между бакетами с разными учетными данными. #76515 (Antonio Andelic).
- Обновили librdkafka (которая представляет собой ту еще кучу хлама) до версии 2.8.0 (лучше эта куча не стала) и улучшили последовательность завершения работы для таблиц Kafka, сократив задержки при удалении таблиц и перезапуске сервера.
engine=Kafkaбольше не выполняет явный выход из группы потребителей при удалении таблицы. Вместо этого consumer остается в группе, пока не будет автоматически удален послеsession_timeout_ms(по умолчанию: 45 секунд) бездействия. #76621 (filimonov). - Исправлена проверка параметров запросов к S3. #76658 (Vitaly Baranov).
- В системных таблицах, таких как
server_settingsиsettings, есть удобный столбецdefaultсо значением по умолчанию. Добавьте такой же вmerge_tree_settingsиreplicated_merge_tree_settings. #76942 (Diego Nieto). - Добавлен
ProfileEvents::QueryPreempted, логика которого аналогичнаCurrentMetrics::QueryPreempted. #77015 (VicoWu). - Ранее база данных Replicated могла выводить в журналы учетные данные, указанные в запросе. Эта проблема устранена. Закрывает: #77123. #77133 (Nikita Mikhaylov).
- Разрешена команда ALTER TABLE DROP PARTITION для диска
plain_rewritable disk. #77138 (Julia Kartseva). - Настройка резервного копирования/восстановления
allow_s3_native_copyтеперь поддерживает три возможных значения: -False— нативное копирование S3 не используется; -True(старое значение по умолчанию) — ClickHouse сначала попытается выполнить нативное копирование S3, а если это не удастся, переключится на подход с чтением и записью; -'auto'(новое значение по умолчанию) — ClickHouse сначала сравнит учетные данные источника и пункта назначения. Если они совпадают, ClickHouse попытается выполнить нативное копирование S3 и при необходимости может переключиться на подход с чтением и записью. Если они различаются, ClickHouse сразу перейдет к подходу с чтением и записью. #77401 (Vitaly Baranov). - Добавлена поддержка токена сеанса AWS и учетных данных из окружения в 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’ в
system.data_skipping_indicesпереименовано в ‘marks_bytes’. #76374 (Robert Schulze). - Исправлена обработка неожиданных ошибок при вытеснении во время динамического изменения размера файлового кэша. #76466 (Kseniia Sumarokova).
- Исправлена инициализация
used_flagв параллельном хеше. Это могло привести к сбою сервера. #76580 (Nikita Taranov). - Исправлена логическая ошибка при вызове функции
defaultProfilesв проекции. #76627 (pufit). - Убрано запрашивание интерактивной Basic Auth-аутентификации в браузере для веб-интерфейса. Закрывает #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 shortcircuit, а также исправлены ошибки. #76708 (李扬). - Перед финализацией буферов записи выходных данных теперь выполняется их сброс. Исправлен
LOGICAL_ERROR, возникавший при финализации некоторых выходных форматов, напримерJSONEachRowWithProgressRowOutputFormat. #76726 (Antonio Andelic). - Добавлена поддержка binary UUID в MongoDB (#74452) - Исправлен WHERE pushdown в MongoDB при использовании table function (#72210) - Изменено сопоставление типов MongoDB - ClickHouse таким образом, что binary UUID в MongoDB теперь может быть разобран только в UUID ClickHouse. Это должно помочь избежать неоднозначностей и неожиданностей в будущем. - Исправлено сопоставление OID с сохранением обратной совместимости. #76762 (Kirill Nikiforov).
- Исправлена обработка исключений при параллельной десериализации префиксов в подстолбцах JSON. #76809 (Pavel Kruglov).
- Исправлено поведение функции lgamma для отрицательных целых чисел. #76840 (Ilya Kataev).
- Исправлен анализ обратного ключа для явно заданных первичных ключей. Как в #76654. #76846 (Amos Bird).
- Исправлен форматированный вывод значений Bool в формате JSON. #76905 (Pavel Kruglov).
- Исправлено возможное аварийное завершение из-за некорректного отката изменений в JSON-столбце при ошибке во время асинхронных вставок. #76908 (Pavel Kruglov).
- Ранее
multiIfмог возвращать столбцы разных типов на этапе планирования и при основном выполнении. Из-за этого код с точки зрения C++ приводил к неопределённому поведению. #76914 (Nikita Taranov). - Исправлена некорректная сериализация константных Nullable-ключей в MergeTree. Это устраняет проблему #76939. #76985 (Amos Bird).
- Исправлена сортировка значений типа
BFloat16. Это закрывает #75487. Это закрывает #75669. #77000 (Alexey Milovidov). - Исправлена ошибка в JSON с подстолбцом Variant: добавлена проверка, пропускающая эфемерные подстолбцы при проверке согласованности части. #72187. #77034 (Smita Kulkarni).
- Исправлено падение при разборе шаблона в формате Values в случае несовпадения типов. #77071 (Pavel Kruglov).
- Запретить создание таблицы EmbeddedRocksDB с подстолбцом в первичном ключе. Ранее такую таблицу можно было создать, но SELECT-запросы завершались с ошибкой. #77074 (Pavel Kruglov).
- Исправлено недопустимое сравнение в распределённых запросах, возникавшее из-за того, что перенос предикатов на удалённые узлы не учитывает типы литералов. #77093 (Duc Canh Le).
- Исправлен сбой при создании таблицы Kafka в случае возникновения исключения. #77121 (Pavel Kruglov).
- Добавлена поддержка JSON и подстолбцов в движках Kafka и RabbitMQ. #77122 (Pavel Kruglov).
- Исправлено разворачивание стека при исключениях на MacOS. #77126 (Eduard Karacharov).
- Исправлено чтение подстолбца ‘null’ в функции getSubcolumn. #77163 (Pavel Kruglov).
- Исправлена работа индекса 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). - Веб-интерфейс теперь поддерживает интерактивную навигацию по базе данных. #75777 (Alexey Milovidov).
- Разрешено сочетать диски только для чтения и с возможностью чтения и записи в политике хранения (в виде нескольких томов или нескольких дисков). Это позволяет читать данные со всего тома, при этом операции вставки будут использовать диск с возможностью записи в приоритетном порядке (то есть политику хранения Copy-on-Write). #75862 (Azat Khuzhin).
- Добавлен новый движок базы данных
DatabaseBackup,, который позволяет мгновенно подключать таблицу или базу данных из резервной копии. #75725 (Maksim Kita). - Поддержка подготовленных операторов в wire protocol Postgres. #75035 (scanhex12).
- Добавлена возможность ATTACH таблиц без уровня базы данных, что полезно для таблиц MergeTree, расположенных на Web, S3 и в аналогичных внешних виртуальных файловых системах. #75788 (Azat Khuzhin).
- Добавлена новая функция сравнения строк
compareSubstringsдля сравнения частей двух строк. Example:SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS resultозначает «лексикографически сравнить 6 байт строк ‘Saxon’ и ‘Anglo-Saxon’, начиная со смещения 0 в первой строке и смещения 5 во второй строке». #74070 (lgbo). - Добавлена новая функция
initialQueryStartTime. Она возвращает время начала текущего запроса. Значение одинаково на всех сегментах при распределенном запросе. #75087 (Roman Lomonosov). - Добавлена поддержка SSL-аутентификации с использованием именованных коллекций для MySQL. Закрывает #59111. #59452 (Nikolay Degterinsky).
Экспериментальные возможности
- Добавлена новая настройка
enable_adaptive_memory_spill_scheduler, которая позволяет нескольким Grace JOIN в одном запросе отслеживать их совокупное потребление памяти и адаптивно выгружать промежуточные данные во внешнее хранилище, чтобы предотвратить MEMORY_LIMIT_EXCEEDED. #72728 (lgbo). - Новый экспериментальный движок таблицы
Kafkaтеперь полностью учитывает feature flags Keeper. #76004 (János Benjamin Antal). - Восстановлен кодек QPL (Intel), который был удалён в v24.10 из-за проблем с лицензированием. #76021 (Konstantin Bogdanov).
- Для интеграции с HDFS добавлена поддержка параметра конфигурации
dfs.client.use.datanode.hostname. #74635 (Mikhail Tiukavkin).
Повышение производительности
- Улучшена производительность чтения всего JSON-столбца из S3 в Wide-частях. Это достигается за счет добавления операций предварительного чтения для десериализации префиксов подстолбцов, кэша десериализованных префиксов и параллельной десериализации префиксов подстолбцов. В результате чтение 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: для повышения производительности отключен расчет дайджеста при коммите в хранилище в памяти. Его можно включить с помощью настройки
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. Это полезно, чтобы принудительно применять планирование рабочей нагрузки ко всем запросам. #75999 (Sergei Trifonov). - Не переписывать подстолбцы в
getSubcolumnвARRAY JOINбез необходимости. #76018 (Pavel Kruglov). - Повторные попытки при ошибках координации во время загрузки таблиц. #76020 (Alexander Tokmakov).
- Реализована поддержка сброса отдельных журналов командой
SYSTEM FLUSH LOGS. #76132 (Raúl Marín). - Улучшена страница сервера
/binary. Вместо кривой Мортона теперь используется кривая Гильберта. В квадрате отображаются адреса объёмом 512 МБ, благодаря чему он заполняется лучше (в предыдущих версиях адреса заполняли только половину квадрата). Цвет адресов теперь определяется по близости к имени библиотеки, а не функции. Добавлена возможность прокручивать немного дальше за пределы области. #76192 (Alexey Milovidov). - Повтор запросов с предложением ON CLUSTER при TOO_MANY_SIMULTANEOUS_QUERIES. #76352 (Patrick Galbraith).
- Добавлена асинхронная метрика
CPUOverload, которая вычисляет относительный дефицит CPU у сервера. #76404 (Alexey Milovidov). - Изменено значение по умолчанию для
output_format_pretty_max_rowsс 10000 на 1000. Думаю, так удобнее в использовании. #76407 (Alexey Milovidov).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Исправлено форматирование исключений с использованием пользовательского формата, если они возникают при интерпретации запроса. В предыдущих версиях исключения форматировались в формате по умолчанию, а не в формате, указанном в запросе. Это исправляет #55422. #74994 (Alexey Milovidov).
- Исправлено сопоставление типов для SQLite (целочисленные типы — в
int64, а числа с плавающей точкой — вfloat64). #73853 (Joanna Hulboj). - Исправлено разрешение идентификаторов из внешних областей видимости. Разрешено использовать псевдонимы выражений в конструкции WITH. Исправлено #58994. Исправлено #62946. Исправлено #63239. Исправлено #65233. Исправлено #71659. Исправлено #71828. Исправлено #68749. #66143 (Dmitry Novik).
- Исправлена проблема с монотонностью функции negate. В предыдущих версиях запрос
select * from a where -x = -42;, гдеx— первичный ключ, может возвращать неверный результат. #71440 (Michael Kolupaev). - Исправлена некорректная обработка пустого кортежа в arrayIntersect. Исправлена ошибка #72578. #72581 (Amos Bird).
- Исправлено чтение подстолбцов вложенного объекта JSON с некорректным префиксом. #73182 (Pavel Kruglov).
- Корректно передавать настройки формата Native при взаимодействии клиента с сервером. #73924 (Pavel Kruglov).
- Проверка неподдерживаемых типов для некоторых хранилищ. #74218 (Pavel Kruglov).
- Исправлен сбой при выполнении запроса
INSERT INTO SELECTчерез интерфейс PostgreSQL в macOS (issue #72938). #74231 (Artem Yurov). - Исправлена неинициализированная переменная max_log_ptr в базе данных Replicated. #74336 (Konstantin Morozov).
- Исправлен сбой при вставке интервала (проблема #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). - Обновление krb-билета для HDFS при ошибке SASL во время выполнения запроса
selectк HDFS. #74930 (inv2004). - Исправлены запросы к базе данных Replicated в startup_scripts. #74942 (Azat Khuzhin).
- Исправлены проблемы с выражениями, для типа которых используется псевдоним, в условии JOIN ON при использовании null-safe-сравнения. #74970 (Vladimir Cherkasov).
- Состояние части возвращается из deleting обратно в устаревший, если операция удаления завершилась с ошибкой. #74985 (Sema Checherinda).
- В предыдущих версиях, когда в запросе был скалярный подзапрос, мы начинали записывать Прогресс (накопленный при обработке подзапроса) при инициализации формата данных, то есть до записи HTTP-заголовков. Это приводило к потере HTTP-заголовков, таких как X-ClickHouse-QueryId и X-ClickHouse-Format, а также Content-Type. #74991 (Alexey Milovidov).
- Исправлена работа запросов
CREATE TABLE AS...приdatabase_replicated_allow_replicated_engine_arguments=0. #75000 (Bharat Nallan). - Исправлено некорректное состояние соединения в клиенте после исключений при INSERT. #75030 (Azat Khuzhin).
- Исправлен сбой из-за неперехваченного исключения при репликации PSQL. #75062 (Azat Khuzhin).
- SASL может приводить к сбою любого RPC-вызова; это исправление позволяет повторить вызов, если истёк билет krb5. #75063 (inv2004).
- Исправлена работа индексов (первичных и вторичных) для столбцов
Array,MapиNullable(..)при включенной настройкеoptimize_function_to_subcolumns. Ранее индексы для этих столбцов могли игнорироваться. #75081 (Anton Popov). - Отключена настройка
flatten_nestedпри создании materialized view с внутренними таблицами, так как такие сглаженные столбцы нельзя использовать. #75085 (Christoph Wurm). - Исправлена ошибка, из-за которой некоторые адреса IPv6 (например, ::ffff:1.1.1.1) в поле forwarded_for интерпретировались неверно, что приводило к отключению клиента с исключением. #75133 (Yakov Olkhovskiy).
- Исправлена обработка null-safe JOIN для типа данных LowCardinality с Nullable. Ранее
JOIN ONс null-safe-сравнением, таким какIS NOT DISTINCT FROM,<=>,a IS NULL AND b IS NULL OR a == b, работал некорректно со столбцами LowCardinality. #75143 (Vladimir Cherkasov). - Проверяется, что при подсчете total_number_of_rows для NumRowsCache не указывается key_condition. #75164 (Daniil Ivanik).
- Исправлена обработка запросов с неиспользуемой интерполяцией в новом анализаторе. #75173 (János Benjamin Antal).
- Исправлена ошибка CTE, приводившая к сбою при вставке. #75188 (Shichao Jin).
- Исправление Keeper: предотвращена запись в повреждённые changelog-файлы при откате логов. #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 мог ошибочно выполнять 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 её столбца PK. Ранее это могло приводить к ошибкам
CANNOT_READ_ALL_DATAпри выполнении SELECT после ALTER MODIFY столбца, используемого в PK проекции. #75720 (Pavel Kruglov). - Исправлен некорректный результат
ARRAY JOINдля скалярных подзапросов (с анализатором). #75732 (Nikolai Kochetov). - Исправлено обращение по нулевому указателю в
DistinctSortedStreamTransform. #75734 (Nikita Taranov). - Исправлено некорректное поведение
allow_suspicious_ttl_expressions. #75771 (Aleksei Filatov). - Исправлено обращение к неинициализированной памяти при чтении в функции
translate. Это закрывает #75592. #75794 (Alexey Milovidov). - Настройки format теперь распространяются и на строковое форматирование JSON в Native format. #75832 (Pavel Kruglov).
- В истории изменений настроек зафиксировано включение
parallel hashпо умолчанию в качестве алгоритма JOIN в v24.12. Это означает, что ClickHouse продолжит выполнять JOIN с использованием непараллельногоhash, если настроен уровень совместимости ниже v24.12. #75870 (Robert Schulze). - Исправлена ошибка, из-за которой таблицы с автоматически добавленными min-max-индексами нельзя было скопировать в новую таблицу (issue #75677). #75877 (Smita Kulkarni).
clickhouse-library-bridgeпозволяет открывать произвольные библиотеки из файловой системы, поэтому его безопасно запускать только в изолированной среде. Чтобы устранить уязвимость при запуске рядом с clickhouse-server, мы ограничим пути к библиотекам расположением, указанным в конфигурации. Эта уязвимость была обнаружена Arseniy Dugin в рамках ClickHouse Bug Bounty Program. #75954 (Alexey Milovidov).- Так получилось, что для части метаданных мы использовали сериализацию JSON, и это было ошибкой, поскольку JSON не поддерживает двоичные данные внутри строковых литералов, включая нулевые байты. SQL-запросы могут содержать двоичные данные и некорректный UTF-8, поэтому это нужно поддерживать и в наших файлах метаданных. В то же время
JSONEachRowв ClickHouse и похожие форматы обходят это ограничение, отступая от стандарта JSON ради полностью корректного roundtrip для двоичных данных. Подробнее о мотивации здесь: https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790. Решение состоит в том, чтобы привести библиотекуPoco::JSONв соответствие с сериализацией JSON в ClickHouse. Это закрывает #73668. #75963 (Alexey Milovidov). - Исправлена проверка лимитов коммита в хранилище
S3Queue. #76104 (Kseniia Sumarokova). - Исправлено подключение таблиц MergeTree с автоматическими индексами (
add_minmax_index_for_numeric_columns/add_minmax_index_for_string_columns). #76139 (Azat Khuzhin). - Исправлена проблема, из-за которой не выводились трассировки стека родительских потоков задачи (настройка
enable_job_stack_trace). Исправлена проблема, из-за которой настройкаenable_job_stack_traceнекорректно распространялась на потоки, в результате чего содержимое трассировки стека не всегда соответствовало этой настройке. #76191 (Yakov Olkhovskiy). - Исправлена некорректная проверка прав доступа, из-за которой
ALTER RENAMEтребовал grantCREATE 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).
- Исправлена поддержка reverse key в 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-образе отключён сетевой доступ для пользователя default. #75259 (Mikhail f. Shiryaev). Все действия, связанные с clickhouse-server, вынесены в функцию и выполняются только при запуске бинарного файла по умолчанию из
entrypoint.sh. Это давно ожидавшееся улучшение было предложено в #50724. Вclickhouse-extract-from-configдобавлен ключ--usersдля получения значений изusers.xml. #75643 (Mikhail f. Shiryaev). - Из бинарного файла удалено около 20 МБ неиспользуемого кода. #76226 (Alexey Milovidov).
Релиз ClickHouse 25.1, 2025-01-28
Обратно несовместимое изменение
JSONEachRowWithProgressтеперь записывает прогресс при каждом его обновлении. В предыдущих версиях прогресс отображался только после каждого блока результата, из-за чего был бесполезен. Также изменён способ отображения прогресса: нулевые значения больше не показываются. Это закрывает #70800. #73834 (Alexey Milovidov).- Таблицы
Mergeтеперь унифицируют структуру базовых таблиц, используя объединение их столбцов и выводя общие типы. Это закрывает #64864. В некоторых случаях это изменение может быть обратно несовместимым. Например, когда у таблиц нет общего типа, но при этом всё ещё возможно преобразование к типу первой таблицы — как в случае с UInt64 и Int64 или любым числовым типом и String. Если вы хотите вернуться к прежнему поведению, установитеmerge_table_max_tables_to_look_for_schema_inferenceв1или задайтеcompatibilityравным24.12или более ранней версии. #73956 (Alexey Milovidov). - Формат вывода Parquet преобразует столбцы Date и DateTime в типы даты/времени, поддерживаемые Parquet, вместо записи их как необработанных чисел.
DateTimeстановитсяDateTime64(3)(было:UInt32); настройкаoutput_format_parquet_datetime_as_uint32возвращает прежнее поведение.DateстановитсяDate32(было:UInt16). #70950 (Michael Kolupaev). - По умолчанию в
ORDER BYи функциях сравненияless/greater/equal/etcбольше не допускаются несравнимые типы (например,JSON/Object/AggregateFunction). #73276 (Pavel Kruglov). - Устаревший движок базы данных
MaterializedMySQLудалён и больше недоступен. #73879 (Alexey Milovidov). - Источник словаря
mysqlбольше не выполняет запросSHOW TABLE STATUS, поскольку он не даёт никакой пользы для таблиц InnoDB, как и в любых современных версиях MySQL. Это закрывает #72636. Это изменение обратно совместимо, но помещено в эту категорию, чтобы вы его не пропустили. #73914 (Alexey Milovidov). - Для запросов
CHECK TABLEтеперь требуется отдельный grantCHECK. В предыдущих версиях для выполнения этих запросов было достаточно grantSHOW TABLES. Однако запросCHECK TABLEможет быть ресурсоёмким, и обычные ограничения сложности запросов для запросовSELECTк нему не применяются. Это создавало потенциальную возможность для DoS. #74471 (Alexey Milovidov). - Функция
h3ToGeo()теперь возвращает результаты в порядке(lat, lon)(это стандартный порядок для геометрических функций). Пользователи, которые хотят сохранить прежний порядок результатов(lon, lat), могут установить настройкуh3togeo_lon_lat_result_order = true. #74719 (Manish Gill). - Новый драйвер MongoDB теперь используется по умолчанию. Пользователи, которые хотят продолжить использовать устаревший драйвер, могут установить настройку сервера
use_legacy_mongodb_integrationв true. #73359 (Robert Schulze).
Новая возможность
- Добавлена возможность применять незавершенные (еще не материализованные фоновым процессом) мутации при выполнении запросов
SELECTсразу после их отправки. Это можно включить с помощью настройкиapply_mutations_on_fly. #74877 (Anton Popov). - Реализовано отсечение партиций в таблицах
Icebergдля операций преобразования партиций, связанных со временем. #72044 (Daniil Ivanik). - Добавлена поддержка подстолбцов в ключе сортировки MergeTree и индексах пропуска данных. #72644 (Pavel Kruglov).
- Добавлена поддержка чтения значений
HALF_FLOATизApache Arrow/Parquet/ORC(они преобразуются вFloat32при чтении). Это закрывает #72960. Имейте в виду, что 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). - Разбиение блоков левой table по hash было удалено из этапа probe алгоритма
parallel_hashJOIN. #73089 (Nikita Taranov). - Оптимизирован входной формат RowBinary. Закрывает #63805. #65059 (Pavel Kruglov).
- Части записываются с уровнем 1, если
optimize_on_insertвключен. Это позволяет использовать несколько оптимизаций запросов сFINALдля только что записанных частей. #73132 (Anton Popov). - Ускорена десериализация строк благодаря низкоуровневым оптимизациям. #65948 (Nikita Taranov).
- При сравнении записей на равенство, например во время слияний, строки теперь начинают сравнивать сначала по столбцам, в которых различия наиболее вероятны. #63780 (UnamedRus).
- Улучшена производительность grace hash JOIN за счет повторной сортировки правой таблицы JOIN по ключам. #72237 (kevinyhzou).
- Добавлена возможность для
arrayROCAUCиarrayAUCPRвычислять частичную площадь под всей кривой, чтобы распараллеливать вычисления на огромных наборах данных. #72904 (Emmanuel). - Избегайте создания слишком большого количества бездействующих потоков. #72920 (Guo Wangyang).
- Не перечислять ключи blob storage, если в table function используется только раскрытие фигурных скобок. Закрывает #73333. #73518 (Konstantin Bogdanov).
- Оптимизация вычислений с коротким замыканием для функций, выполняемых над аргументами Nullable. #73820 (李扬).
- Исключено применение
maskedExecuteк столбцам, не являющимся функциями; улучшена производительность выполнения с коротким замыканием. #73965 (lgbo). - Отключено автоматическое определение заголовков во входных форматах для
Kafka/NATS/RabbitMQ/FileLogс целью повышения производительности. #74006 (Azat Khuzhin). - Выполнение конвейера с более высокой степенью параллелизма после агрегации с наборами группировки. #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, которая отключает создание индексов пропуска данных при слиянии. Это позволяет явно управлять тем, когда создаются индексы пропуска данных (черезALTER TABLE [..] MATERIALIZE INDEX [...]). Это может быть полезно, если построение индексов пропуска данных требует больших затрат (например, для индексов векторного сходства). #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(многофункциональный MySQL CLI от 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). - В таблицу журналов спанов OpenTelemetry добавлены HTTP-заголовки для повышения трассируемости. #70516 (jonymohajanGmail).
- Добавлена поддержка записи файла
orcс пользовательским часовым поясом вместо обязательного часового поясаGMT. #70615 (kevinyhzou). - Учитывать настройки планирования операций ввода-вывода при записи резервных копий между облаками. #71093 (János Benjamin Antal).
- Добавлен псевдоним
nameдля столбцаmetricвsystem.asynchronous_metrics. #71164 (megao). - Исторически по какой-то причине запрос
ALTER TABLE MOVE PARTITION TO TABLEпроверял праваSELECTиALTER DELETEвместо специальногоALTER_MOVE_PARTITION. В этом PR начал использоваться этот тип доступа. Для совместимости это разрешение также будет неявно предоставляться при наличииSELECTиALTER DELETE, однако в будущих выпусках это поведение будет убрано. Закрывает #16403. #71632 (pufit). - Сгенерировать исключение при попытке материализовать столбец в ключе сортировки вместо того, чтобы допустить нарушение порядка сортировки. #71891 (Peter Nguyen).
- Скрытие секретных данных в
EXPLAIN QUERY TREE. #72025 (Yakov Olkhovskiy). - Добавлена поддержка логических целочисленных типов Parquet в ридере “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. Этот столбец нужен, чтобы добавить новую метрику для зависших мутаций и использовать её для построения графиков ошибок, возникающих в облаке, а также, при необходимости, добавить новое, менее шумное оповещение. #72398 (Miсhael Stetsyuk). - Сокращено количество выделений памяти в запросе
ATTACH PARTITION. #72583 (Konstantin Morozov). - Теперь ограничение
max_bytes_before_external_sortзависит от общего потребления памяти запросом (раньше это было количество байтов в блоке сортировки для одного потока сортировки, теперь этот параметр имеет тот же смысл, что иmax_bytes_before_external_group_by, — это общий лимит памяти для всего запроса по всем потокам). Также добавлена ещё одна настройка для управления размером блока на диске —min_external_sort_block_bytes. #72598 (Azat Khuzhin). - Игнорирование ограничений памяти коллектором трассировок. #72606 (Azat Khuzhin).
- В
system.server_settingsдобавлены настройки сервераdictionaries_lazy_loadиwait_dictionaries_load_at_startup. #72664 (Christoph Wurm). - Добавляет настройку
max_backup_bandwidthв список настроек, которые можно указывать в составе запросовBACKUP/RESTORE. #72665 (Christoph Wurm). - Снижен уровень логирования для сообщений о появлении реплицируемых частей в движке ReplicatedMergeTree, чтобы сократить объём журналов, генерируемых в кластере с репликацией. #72876 (mor-akamai).
- Улучшено выделение общего выражения в дизъюнкциях. Теперь можно упрощать итоговое выражение фильтра, даже если общее подвыражение есть не у всех дизъюнктов. Продолжение #71537. #73271 (Dmitry Novik).
- В
S3Queue/AzureQueueтеперь можно добавлять настройки, если таблица была создана без них. #73283 (Kseniia Sumarokova). - Добавлена настройка
least_greatest_legacy_null_behavior(по умолчанию:false), которая определяет, будут ли функцииleastиgreatestбезусловно возвращатьNULLпри аргументахNULL(еслиtrue) или игнорировать их (еслиfalse). #73344 (Robert Schulze). - Использовать мультизапросы Keeper в потоке очистки ObjectStorageQueueMetadata. #73357 (Antonio Andelic).
- Когда ClickHouse работает в cgroup, мы по-прежнему будем собирать общесистемные асинхронные метрики, связанные с нагрузкой на систему, планированием процессов, памятью и т. д. Они могут быть полезным сигналом, когда ClickHouse — единственный процесс на хосте с высоким потреблением ресурсов. #73369 (Nikita Taranov).
- В хранилище
S3Queueпоявилась возможность переносить старые упорядоченные таблицы, созданные до версии 24.6, в новую структуру с бакетами. #73467 (Kseniia Sumarokova). - Добавлена
system.azure_queue, аналогично существующейsystem.s3queue. #73477 (Kseniia Sumarokova). - Функция
parseDateTime64(и её варианты) теперь возвращает корректные результаты для входных дат до 1970 года и после 2106 года. Пример:SELECT parseDateTime64InJodaSyntax('2200-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS'). #73594 (zhanglistar). - Устранены некоторые проблемы с удобством использования
clickhouse-disks, на которые указали пользователи. Закрывает #67136. #73616 (Daniil Ivanik). - Добавлена возможность изменять настройки commit в хранилище S3(Azure)Queue. (Настройки commit:
max_processed_files_before_commit,max_processed_rows_before_commit,max_processed_bytes_before_commit,max_processing_time_sec_before_commit). #73635 (Kseniia Sumarokova). - В хранилище S3(Azure)Queue прогресс агрегируется по источникам, чтобы сравнивать его с настройками лимита коммита. #73641 (Kseniia Sumarokova).
- Поддержка основных настроек в запросах
BACKUP/RESTORE. #73650 (Vitaly Baranov). - Учитывайте
output_format_compression_levelпри выводе данных в формате Parquet. #73651 (Arthur Passos). - Добавлена поддержка чтения
fixed_size_listиз Apache Arrow какArray, а не как неподдерживаемого типа. #73654 (Julian Meyers). - Добавлены два движка резервного копирования:
Memory(хранит резервные копии в рамках текущего сеанса пользователя) иNull(вообще не хранит резервные копии), предназначенный для тестирования. #73690 (Vitaly Baranov). concurrent_threads_soft_limit_numиconcurrent_threads_soft_limit_num_ratio_to_coresтеперь можно изменять без перезапуска сервера. #73713 (Sergei Trifonov).- Добавлена поддержка расширенных числовых типов (
Decimal, целые числа большой разрядности) в функцияхformatReadable. #73765 (Raúl Marín). - Поддержка TLS для совместимости с wire-протоколом Postgres. #73812 (scanhex12).
- Функция
isIPv4Stringвозвращала true, если после корректного IPv4-адреса следовал нулевой байт, хотя в этом случае должна возвращать false. Продолжение #65387. #73946 (Alexey Milovidov). - Код ошибки в протоколе MySQL приведён в соответствие с MySQL. Продолжение #56831. Закрывает #50957. #73948 (Alexey Milovidov).
- Добавлена настройка
validate_enum_literals_in_opearatorsдля проверки литералов enum в операторах, таких какINиNOT IN, на соответствие типу enum и для генерации исключения, если литерал не является допустимым значением enum. #73985 (Vladimir Cherkasov). - В хранилище
S3(Azure)Queueфиксация всех файлов (в одном пакете, определяемом настройками commit) теперь выполняется в рамках одной транзакции Keeper. #73991 (Kseniia Sumarokova). - Отключено определение заголовков для исполняемых UDF и словарей (это могло приводить к ошибке Function ‘X’: неверный результат, ожидалось Y строк(и), фактически 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).
- Теперь в
clickhouse-clientесть три простых способа задать пользовательский промпт: 1. через параметр командной строки--prompt, 2. в файле конфигурации — через настройку<prompt>[...]</prompt>, и 3. также в файле конфигурации — через настройки для отдельных соединений<connections_credentials><prompt>[...]</prompt></connection_credentials>. #74168 (Christoph Wurm). - Автоматическое определение защищённого соединения при подключении к порту 9440 в клиенте ClickHouse. #74212 (Christoph Wurm).
- Для http_handlers добавлена аутентификация пользователей только по имени пользователя (раньше пользователю также нужно было указывать пароль). #74221 (Azat Khuzhin).
- Поддержка альтернативных языков запросов PRQL и KQL отмечена как экспериментальная. Чтобы использовать их, укажите настройки
allow_experimental_prql_dialect = 1иallow_experimental_kusto_dialect = 1. #74224 (Robert Schulze). - Расширена поддержка возврата типа Enum по умолчанию в большем количестве агрегатных функций. #74272 (Raúl Marín).
- В
OPTIMIZE TABLEтеперь можно использовать ключевое словоFORCEв качестве альтернативы существующему ключевому словуFINAL. #74342 (Robert Schulze). - Добавлена метрика
IsServerShuttingDown, необходимая для срабатывания оповещения, если завершение работы сервера занимает слишком много времени. #74429 (Miсhael Stetsyuk). - В EXPLAIN добавлены названия таблиц Iceberg. #74485 (alekseev-maksim).
- Улучшено сообщение об ошибке при использовании RECURSIVE CTE со старым анализатором. #74523 (Raúl Marín).
- Показываются расширенные сообщения об ошибках в
system.errors. #74574 (Vitaly Baranov). - Разрешено использовать пароль для взаимодействия клиента с clickhouse-keeper. Эта возможность не слишком полезна, если для сервера и клиента указана корректная SSL-конфигурация, но в некоторых случаях всё же может пригодиться. Длина пароля не может превышать 16 символов. Это не связано с моделью аутентификации Keeper. #74673 (alesapin).
- Добавлен код ошибки для модуля перезагрузки конфигурации. #74746 (Garrett Thomas).
- Добавлена поддержка IPv6-адресов в табличных функциях и движках для MySQL и PostgreSQL. #74796 (Mikhail Koviazin).
- Реализована оптимизация с коротким замыканием для
divideDecimal. Исправлено #74280. #74843 (Kevin Mingtarja). - Теперь пользователей можно задавать в скриптах запуска. #74894 (pufit).
- Добавлена поддержка токенов SAS для Azure. #72959 (Azat Khuzhin).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Задавайте уровень сжатия для Parquet только в том случае, если кодек сжатия это поддерживает. #74659 (Arthur Passos).
- Исправлена регрессия, из-за которой использование локалей collation с модификаторами приводило к ошибке. Например,
SELECT arrayJoin(['kk 50', 'KK 01', ' KK 2', ' KK 3', 'kk 1', 'x9y99', 'x9y100']) item ORDER BY item ASC COLLATE 'tr-u-kn-true-ka-shiftedтеперь выполняется корректно. #73544 (Robert Schulze). - Исправлена ошибка, из-за которой не удавалось создать последовательный узел с помощью keeper-client. #64177 (Duc Canh Le).
- Исправлен неправильный подсчёт символов в функциях position. #71003 (思维).
- Для операций
RESTOREс сущностями доступа требовалось больше прав, чем нужно, из-за необработанных частичных отзывов привилегий. Этот PR исправляет проблему. Закрывает #71853. #71958 (pufit). - Предотвращена пауза после
ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE. Исправлено получение корректных настроек для планирования фоновых задач. #72024 (Aleksei Filatov). - Исправлена обработка пустых кортежей в некоторых форматах ввода и вывода (например, Parquet и Arrow). #72616 (Michael Kolupaev).
- Операторы GRANT SELECT/INSERT на уровне столбцов для баз данных/таблиц, заданных с помощью подстановочных знаков, теперь вызывают ошибку. #72646 (Johann Gan).
- Исправлена ситуация, при которой пользователь не может выполнить
REVOKE ALL ON *.*из-за неявных привилегий в целевом объекте управления доступом. #72872 (pufit). - Исправлено форматирование положительного смещения часового пояса в скалярной функции formatDateTime. #73091 (ollidraese).
- Исправлено корректное определение исходного порта, когда соединение установлено через PROXYv1 и задан
auth_use_forwarded_address— ранее по ошибке использовался порт прокси. Добавлена функцияcurrentQueryID(). #73095 (Yakov Olkhovskiy). - Настройки формата теперь передаются в NativeWriter в TCPHandler, поэтому такие параметры, как
output_format_native_write_json_as_string, применяются корректно. #73179 (Pavel Kruglov). - Исправлен сбой в StorageObjectStorageQueue. #73274 (Kseniia Sumarokova).
- Исправлен редкий сбой в 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). - Исправлена подготовка к squashin для столбцов Dynamic и JSON. Ранее в некоторых случаях новые типы могли вставляться в shared variant/общие данные, даже если лимит по типам/путям ещё не был достигнут. #73388 (Pavel Kruglov).
- Проверка повреждённых размеров при декодировании типов из бинарного формата, чтобы избежать чрезмерно больших выделений памяти. #73390 (Pavel Kruglov).
- Исправлена логическая ошибка при чтении в кластере с одной репликой при включенных параллельных репликах. #73403 (Michael Kolupaev).
- Исправлена работа ObjectStorageQueue с ZooKeeper и более старыми версиями Keeper. #73420 (Antonio Andelic).
- Внесено исправление, необходимое для включения hive-партиционирования по умолчанию. #73479 (Yarik Briukhovetskyi).
- Исправлено состояние гонки при создании индекса векторного сходства. #73517 (Antonio Andelic).
- Исправлен segfault, возникающий, когда источник словаря содержит функцию с некорректными данными. #73535 (Yarik Briukhovetskyi).
- Исправлена обработка повторных попыток при неудачной вставке в хранилище S3(Azure)Queue. Закрывает #70951. #73546 (Kseniia Sumarokova).
- Исправлена ошибка в функции
tupleElement, которая в некоторых случаях могла возникать для кортежей с элементамиLowCardinalityи включённой настройкойoptimize_functions_to_subcolumns. #73548 (Anton Popov). - Исправлен парсинг glob-шаблона
enum, за которым следует диапазон. Исправление #73473. #73569 (Konstantin Bogdanov). - Исправлена ошибка, из-за которой параметр
parallel_replicas_for_non_replicated_merge_treeигнорировался в подзапросах для нереплицируемых таблиц. #73584 (Igor Nikonov). - Исправлено сгенерированное исключение
std::logical_error, возникавшее, когда задачу не удавалось запланировать. Обнаружено в стресс-тестах. #73629 (Alexander Gololobov). - Запросы в
EXPLAIN SYNTAXбольше не интерпретируются, чтобы избежать логических ошибок из-за некорректной стадии обработки распределенных запросов. Исправляет #65205. #73634 (Dmitry Novik). - Устранена возможная несогласованность данных в столбце типа Dynamic. Исправлена возможная логическая ошибка
Nested columns sizes are inconsistent with local_discriminators column size. #73644 (Pavel Kruglov). - Исправлена ошибка
NOT_FOUND_COLUMN_IN_BLOCKв запросах сFINALиSAMPLE. Исправлен некорректный результат вSELECT-запросах сFINALизCollapsingMergeTree, а также включены оптимизацииFINAL. #73682 (Anton Popov). - Исправлен сбой при выполнении LIMIT BY COLUMNS. #73686 (Raúl Marín).
- Исправлена ошибка, возникавшая при принудительном использовании обычной проекции: если запрос в точности совпадал с определённой проекцией, она не выбиралась, и в результате выдавалась ошибка. #73700 (Shichao Jin).
- Исправлена десериализация структуры Dynamic/Object. Это могло вызывать исключения CANNOT_READ_ALL_DATA. #73767 (Pavel Kruglov).
- Файл
metadata_version.txtтеперь пропускается при восстановлении частей из резервной копии. #73768 (Vitaly Baranov). - Исправлено падение при приведении к Enum с
LIKE, приводившее к segmentation fault. #73775 (zhanglistar). - Исправлена проблема, из-за которой бакет S3 Express не работал как диск. #73777 (Sameer Tamsekar).
- Разрешено слияние строк с некорректными значениями в столбце sign в таблицах CollapsingMergeTree. #73864 (Christoph Wurm).
- Исправлена ошибка при выполнении DDL-запроса с недоступной репликой. #73876 (Tuan Pham Anh).
- Исправлен периодически возникающий сбой при сравнении типов
map(), связанный с возможностью создатьMapбез явного указания имён (‘keys’,‘values’) для его вложенного кортежа. #73878 (Yakov Olkhovskiy). - Оконные функции игнорируются при обработке предложения GROUP BY ALL. Исправление #73501. #73916 (Dmitry Novik).
- Исправлены неявные привилегии (раньше они работали как универсальная маска). #73932 (Azat Khuzhin).
- Исправлено чрезмерное использование памяти при создании вложенных Map. #73982 (Pavel Kruglov).
- Исправлен разбор вложенного JSON с пустыми ключами. #73993 (Pavel Kruglov).
- Исправление: псевдоним мог не добавляться в проекцию, если на него ссылался другой псевдоним, а выборка выполнялась в обратном порядке. #74033 (Yakov Olkhovskiy).
- Игнорировать ошибки object not found в Azure при инициализации диска plain_rewritable. #74059 (Julia Kartseva).
- Исправлено поведение
anyиanyLastпри работе с типами Enum и пустой таблицей. #74061 (Joanna Hulboj). - Исправлена ситуация, когда пользователь указывает именованные аргументы в движке таблицы Kafka. #74064 (Yarik Briukhovetskyi).
- Исправлено изменение настроек
S3Queueс префиксом “s3queue_” на настройки без него и наоборот. #74075 (Kseniia Sumarokova). - Добавлена настройка
allow_push_predicate_ast_for_distributed_subqueries. Она добавляет проталкивание предикатов на основе AST для распределённых запросов с analyzer. Это временное решение, которое мы используем до тех пор, пока не будет поддерживаться выполнение распределённых запросов с сериализацией плана запроса. Закрывает #66878 #69472 #65638 #68030 #73718. #74085 (Nikolai Kochetov). - Исправлена проблема, из-за которой после #73095 в поле forwarded_for мог присутствовать порт, из-за чего не удавалось разрешить имя хоста, если порт был включён в него. #74116 (Yakov Olkhovskiy).
- Исправлено неправильное форматирование
ALTER TABLE (DROP STATISTICS ...) (DROP STATISTICS ...). #74126 (Han Fei). - Исправление проблемы #66112. #74128 (Anton Ivashkin).
- Больше нельзя использовать
Loopв качестве движка таблицы вCREATE TABLE. Ранее это сочетание приводило к сбоям сегментации. #74137 (Yarik Briukhovetskyi). - Исправлена уязвимость, предотвращающая SQL-инъекции в табличных функциях
postgresqlиsqlite. #74144 (Pablo Marcos). - Исправлен сбой при чтении подстолбца из сжатой таблицы с движком Memory. Исправление #74009. #74161 (Nikita Taranov).
- Исправлен бесконечный цикл, возникавший при выполнении запросов к system.detached_tables. #74190 (Konstantin Morozov).
- Исправлена логическая ошибка в s3queue при пометке файла как завершившегося с ошибкой. #74216 (Kseniia Sumarokova).
- Исправлены настройки нативного копирования (
allow_s3_native_copy/allow_azure_native_copy) приRESTOREиз базовой резервной копии. #74286 (Azat Khuzhin). - Исправлена проблема, возникавшая, если количество отсоединённых таблиц в базе данных кратно
max_block_size. #74289 (Konstantin Morozov). - Исправлено копирование через ObjectStorage (то есть S3) в случаях, когда учетные данные источника и пункта назначения не совпадают. #74331 (Azat Khuzhin).
- Исправлено распознавание “use the Rewrite method in the JSON API” для нативного копирования в GCS. #74338 (Azat Khuzhin).
- Исправлен некорректный расчёт
BackgroundMergesAndMutationsPoolSize(он был вдвое больше фактического значения). #74509 (alesapin). - Исправлена ошибка, приводившая к утечке наблюдений Keeper при включении Cluster Discovery. #74521 (RinChanNOW).
- Исправлена проблема с выравниванием памяти, выявленная UBSan #74512. #74534 (Arthur Passos).
- Исправлена параллельная очистка KeeperMap при создании таблицы. #74568 (Antonio Andelic).
- Не удалять неиспользуемые столбцы проекции в подзапросах при наличии
EXCEPTилиINTERSECT, чтобы сохранить корректный результат запроса. Исправляет #73930. Исправляет #66465. #74577 (Dmitry Novik). - Исправлены запросы
INSERT SELECTмежду таблицами со столбцами типаTupleи включенной разреженной сериализацией. #74698 (Anton Popov). - Функция
rightработает некорректно с константным отрицательным смещением. #74701 (Daniil Ivanik). - Исправлена ошибка: вставка данных, сжатых gzip, иногда завершалась сбоем из-за некорректной распаковки на стороне клиента. #74707 (siyuan).
- Частичный отзыв привилегий с подстановочными знаками мог отзывать больше привилегий, чем ожидалось. Закрывает #74263. #74751 (pufit).
- Исправление в Keeper: исправлено чтение записей журнала с диска. #74785 (Antonio Andelic).
- Исправлена проверка привилегий для SYSTEM REFRESH/START/STOP VIEW: теперь, чтобы выполнить запрос для конкретного представления, не требуется иметь эту привилегию на
*.*— достаточно привилегий для этого представления. #74789 (Alexander Tokmakov). - Функция
hasColumnInTableне учитывает столбцы-псевдонимы. Исправлено: теперь она работает и со столбцами-псевдонимами. #74841 (Bharat Nallan). - Исправлена ошибка FILE_DOESNT_EXIST, возникавшая во время слияния частей данных для таблицы с пустым столбцом в Azure Blob Storage. #74892 (Julia Kartseva).
- Исправлено имя столбца в проекции при выполнении JOIN временных таблиц, закрывает #68872. #74897 (Vladimir Cherkasov).
Улучшения сборки/тестирования/упаковки
- Универсальный скрипт установки будет предлагать установку даже на macOS. #74339 (Alexey Milovidov).