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

Журнал изменений v25.10 для Cloud

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

Формат данных и изменения схемы

  • Изменено значение настройки 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).
  • Отключены бессмысленные бинарные операции с IPv4/IPv6: сложение/вычитание IPv4/IPv6 с типом, отличным от целочисленного, запрещено. Ранее это позволялось для типов с плавающей точкой и вызывало логические ошибки с некоторыми другими типами (такими, как DateTime). #86336 (Raúl Marín).
  • Функции searchAny и searchAll переименованы в hasAnyTokens и hasAllTokens для лучшей согласованности с существующей функцией hasToken. #88109 (Robert Schulze).

Изменения типов данных

  • Запрещено использовать тип Dynamic в ключах JOIN. Это может приводить к непредсказуемым результатам при сравнении типа Dynamic с типом, отличным от Dynamic. Лучше явно привести столбец типа Dynamic к требуемому типу. #86358 (Pavel Kruglov).

Изменения в хранилище и индексах

  • Настройка allow_dynamic_metadata_for_data_lakes объявлена устаревшей. Теперь все таблицы Iceberg перед выполнением каждого запроса пытаются получить актуальную схему таблицы из хранилища. #86366 (Daniil Ivanik).
  • Инвертированный текстовый индекс был переработан с нуля, чтобы масштабироваться для наборов данных, которые не помещаются в RAM. #86485 (Anton Popov).
  • Серверная настройка storage_metadata_write_full_object_key теперь включена по умолчанию и больше не может быть отключена. #87335 (Sema Checherinda).
  • Параметр cache_hits_threshold удалён из файлового кеша. cache_hits_threshold был добавлен до появления политики кеша SLRU, и нет необходимости поддерживать и то, и другое. #88344 (Kseniia Sumarokova).

Настройки и изменения конфигурации

  • Уменьшите replicated_deduplication_window_seconds с 1 недели до одного часа, чтобы хранить меньше znode в ZooKeeper при низкой интенсивности вставок. #87414 (Sema Checherinda).
  • Переименуйте настройку query_plan_use_new_logical_join_step в query_plan_use_logical_join_step. #87679 (Vladimir Cherkasov).
  • Новый синтаксис позволяет параметр tokenizer сделать более выразительным. #87997 (Elmi Ahmadov).
  • Два небольших изменения в том, как работают настройки 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. Keeper сохранит прежнее поведение с возможными улучшениями производительности. Если вы обновляетесь с версии ниже 23.9, необходимо сначала обновиться до 23.9+ и затем до 25.10+. Вы также можете установить keeper_server.coordination_settings.async_replication равным 0 перед обновлением и включить его после завершения обновления. #88515 (Antonio Andelic).

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

Функции

  • Добавлена функция naiveBayesClassifier для классификации текста с использованием наивного байесовского классификатора на основе n-грамм. #78700 (Nihal Z. Miaji).
  • Добавлена функция arrayExcept, которая вычитает один массив как множество из другого. #82368 (Joanna Hulboj).
  • Новая функция conv для преобразования чисел между системами счисления, в настоящее время поддерживаются основания от 2 до 36. #83058 (hp).
  • Добавлена агрегатная функция studentTTestOneSample. #85436 (Dylan).
  • Добавлена функция isValidASCII для проверки, содержит ли строка только символы ASCII. Закрывает #85377. #85786 (rajat mohan).
  • Агрегатные функции timeSeriesChangesToGrid и timeSeriesResetsToGrid. Ведут себя аналогично timeSeriesRateToGrid, принимая параметры начальной метки времени, конечной метки времени, шага и окна просмотра назад, а также два аргумента для меток времени и значений, но требуя как минимум одной выборки на окно вместо двух. Вычисляют PromQL changes/resets, подсчитывая, сколько раз значение выборки изменяется или уменьшается в заданном окне для каждой метки времени в сетке времени, определённой параметрами. Тип возвращаемого значения — Array(Nullable(Float64)). #86010 (Stephen Chi).
  • Агрегатная функция quantilePrometheusHistogram, которая принимает в качестве аргументов верхние границы и накопленные значения корзин гистограммы и выполняет линейную интерполяцию между верхней и нижней границами корзины, в которой находится позиция квантиля. Ведёт себя аналогично функции PromQL histogram_quantile() для классических гистограмм. #86294 (Stephen Chi).
  • Добавлены оптимизированные регистронезависимые варианты функций startsWith и endsWith: startsWithCaseInsensitive, endsWithCaseInsensitive, startsWithCaseInsensitiveUTF8 и endsWithCaseInsensitiveUTF8. #87374 (Guang Zhao).

Системные таблицы

  • Добавлена новая системная таблица database_replicas с информацией о репликах баз данных. #83408 (Konstantin Morozov).
  • Добавлена новая таблица system.aggregated_zookeeper_log. Таблица содержит статистику (например, количество операций, среднюю задержку, ошибки) по операциям ZooKeeper, сгруппированную по идентификатору сессии, родительскому пути и типу операции, и периодически сбрасывается на диск. #85102 (Miсhael Stetsyuk).
  • Добавлена системная таблица iceberg_metadata_log для получения файлов метаданных Iceberg во время выполнения запросов SELECT. #86152 (scanhex12).
  • Добавлены предупреждения по CPU и памяти в таблицу system.warnings. #86838 (Bharat Nallan).
  • Добавлена системная таблица для файлов метаданных Delta Lake. #87263 (scanhex12).

Движки таблиц и хранилище

  • Поддержка движка таблиц Alias. #76569 (RinChanNOW).
  • Теперь пользователи могут использовать NATS JetStream для потребления сообщений, указывая новые настройки nats_stream и nats_consumer для движка NATS. #84799 (Dmitry Novikov).
  • Поддержка таблиц Iceberg и Delta Lake с конфигурацией диска. Это позволяет задавать пользовательские таблицы, использующие уже существующий диск. Добавлена настройка allowed_disks_for_table_engines, которая позволяет использовать для Iceberg только определённые диски. Пример: CREATE TABLE test ENGINE = Iceberg('path/inside/disk') SETTING datalake_disk_name = '<some_user_disk>'; ### Раздел документации для изменений, видимых пользователю. #86778 (scanhex12).
  • Добавлена новая настройка таблицы min_level_for_wide_part, которая позволяет задать минимальный уровень части, начиная с которого она будет создаваться в широком формате. #88179 (Christoph Wurm).

Iceberg и озера данных

  • Добавлена поддержка выполнения запросов к Apache Paimon из ClickHouse. Эта интеграция позволяет пользователям ClickHouse напрямую взаимодействовать с хранилищем озера данных Paimon. #84423 (JIaQi).
  • ALTER UPDATE для движка таблицы Iceberg. #86059 (scanhex12).

Индексы и статистика

  • Новый разреженный bloom-фильтр-индекс sparse_gram, полезный для поиска длинных подстрок. #79985 (scanhex12).
  • Добавлена возможность автоматически создавать статистику для всех подходящих столбцов в таблицах MergeTree. Добавлена настройка на уровне таблицы auto_statistics_types, в которой перечисляются через запятую типы создаваемой статистики (например, auto_statistics_types = 'minmax, uniq, countmin'). #87241 (Anton Popov).

Возможности SQL и запросов

  • Добавлена поддержка синтаксиса 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).
  • «Голое» имя настройки в настройках запроса трактуется как равное 1 (например, SELECT ... SETTINGS use_query_cache эквивалентно use_query_cache = 1). #85800 (thraeka).
  • Теперь пользователи могут создавать временные представления с использованием того же синтаксиса, что и для временных таблиц. #86432 (Aly Kafoury).
  • Добавлена поддержка отрицательных значений для LIMIT и OFFSET. Закрывает #28913. #88411 (Nihal Z. Miaji).

Возможности клиента и CLI

  • Доступ к экземплярам ClickHouse Cloud с использованием учётных данных Cloud через --login. #82753 (Krishna Mannem).
  • Добавлена опция --semicolons_inline для форматирования запросов так, чтобы точки с запятой ставились в последней строке, а не выносились на новую строку. #88018 (Jan Rada).

Конфигурация сервера и управление нагрузкой

  • Новые параметры конфигурации: logger.startupLevel и logger.shutdownLevel позволяют переопределять уровень логирования во время запуска и завершения работы ClickHouse соответственно. #85967 (Lennard Eijsackers).
  • Добавлена возможность задавать определения WORKLOAD и RESOURCE в SQL с использованием секции конфигурации сервера "resources_and_workloads". #87430 (Sergei Trifonov).

Системные команды

  • Добавлена команда 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).

Keeper

  • Добавлены рекурсивные варианты команд cp-cpr и mv-mvr в клиенте Keeper. #88570 (Mikhail Artemenko).

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

  • Функции searchAll и searchAny теперь могут работать со столбцами, не содержащими текстовых данных. В таких случаях они используют токенизатор по умолчанию. #87722 (Jimmy Aguilar Mena).
  • Реализован тип данных QBit, который хранит векторы в битово-нарезанном формате, и функция L2DistanceTransposed, которая позволяет выполнять приближённый векторный поиск, где компромисс между точностью и скоростью настраивается параметром. #87922 (Raufs Dunamalijevs).

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

Выполнение запросов и оптимизация

  • Улучшена производительность запросов за счёт рефакторинга порядка и интеграции Query Condition Cache (QCC) с анализом индексов. Фильтрация с помощью QCC теперь применяется до анализа по первичному ключу и skip-индексам, что уменьшает объём лишних вычислений по индексам. Анализ индексов расширен для поддержки нескольких диапазонных фильтров, а его результаты фильтрации теперь сохраняются обратно в QCC. Это существенно ускоряет запросы, в которых анализ индексов доминирует по времени выполнения, — особенно те, которые опираются на skip-индексы (например, векторные или инвертированные индексы). #82380 (Amos Bird).
  • Выполнен ряд микрооптимизаций для ускорения небольших запросов. #83096 (Raúl Marín).
  • Сжатие логов и profile events в нативном протоколе. В кластерах со 100+ репликами несжатые profile events занимают 1–10 МБ/с, а индикатор выполнения работает медленно при медленном интернет-соединении. Это закрывает #82533. #83586 (Alexey Milovidov).
  • Улучшена оптимизация PREWHERE для условий вида func(primary_column) = 'xx' и column in (xxx). #85529 (李扬).
  • Избегается полный скан system.tables при фильтрации по uuid (может быть полезно, если у вас есть только UUID из логов или zookeeper-пути). #88379 (Azat Khuzhin).

Оптимизации JOIN

  • Реализована логика проталкивания дизъюнктивных предикатов JOIN. Пример: в TPC-H Q7 для условия на двух таблицах n1 и n2 вида (n1.n_name = 'FRANCE' AND n2.n_name = 'GERMANY') OR (n1.n_name = 'GERMANY' AND n2.n_name = 'FRANCE') мы извлекаем отдельные частичные фильтры для каждой таблицы: n1.n_name = 'FRANCE' OR n1.n_name = 'GERMANY' для n1 и n2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE' для n2. #84735 (Yarik Briukhovetskyi).
  • Реализовано переписывание JOIN: 1. Преобразование LEFT ANY JOIN и RIGHT ANY JOIN в SEMI/ANTI JOIN, если условие фильтра всегда ложно для совпавших или несовпавших строк. Эта оптимизация управляется новым параметром query_plan_convert_any_join_to_semi_or_anti_join. 2. Преобразование FULL ALL JOIN в LEFT ALL или RIGHT ALL JOIN, если условие фильтра всегда ложно для несовпавших строк с одной стороны. #86028 (Dmitry Novik).
  • Производительность HashJoin немного оптимизирована в случае LEFT/RIGHT JOIN с большим количеством несовпавших строк. #86312 (Nikita Taranov).
  • Переупорядочивание JOIN теперь использует статистику. Функциональность можно включить установкой allow_statistics_optimize = 1 и query_plan_optimize_join_order_limit = 10. #86822 (Han Fei).
  • Пропускается пересчёт статистики хеш-таблицы во время оптимизации JOIN на этапе выполнения. Добавлены новые события профилирования JoinOptimizeMicroseconds и QueryPlanOptimizeMicroseconds. #87683 (Vladimir Cherkasov).
  • Выполнен inline AddedColumns::appendFromBlock, что немного повышает производительность JOIN в некоторых случаях. #88455 (Nikita Taranov).

Оптимизации строк и функций

  • Повышена производительность поиска строк с учётом регистра (операции вроде фильтрации, например WHERE URL LIKE '%google%') за счёт использования библиотеки StringZilla, применяющей SIMD-инструкции CPU, когда они доступны. #84161 (Raúl Marín).
  • Повышена производительность LIKE с префиксом или суффиксом за счёт использования нового значения по умолчанию для настройки optimize_rewrite_like_perfect_affix. #85920 (Guang Zhao).
  • Улучшена производительность функций tokens, hasAllTokens, hasAnyTokens. #88416 (Anton Popov).

MergeTree и оптимизации хранения

  • Добавлена опциональная сериализация подстолбца .size для строковых столбцов верхнего уровня в таблицах MergeTree для улучшения сжатия и обеспечения эффективного доступа к подстолбцам. Введены новые настройки MergeTree для контроля версии сериализации и оптимизации выражений для пустых строк. #82850 (Amos Bird).
  • Уменьшены выделение и копирование памяти при выполнении запроса SELECT с FINAL из таблицы типа AggregatingMergeTree, если таблица содержит столбцы типа SimpleAggregateFunction(anyLast). #84428 (Duc Canh Le).
  • Повышена производительность вертикальных слияний после выполнения легковесного удаления. #86169 (Anton Popov).
  • Улучшена производительность быстрых запросов к таблице с большим количеством частей (за счёт оптимизации MarkRanges с использованием devector вместо deque). #86933 (Azat Khuzhin).
  • Улучшена производительность применения patch-частей в режиме join. #87094 (Anton Popov).
  • Включено сохранение меток в кэше и исключён прямой ввод-вывод (IO) для ридера MergeTreeLazy. #87989 (Nikita Taranov).
  • Запрос SELECT с оператором FINAL для таблицы ReplacingMergeTree со столбцом is_deleted теперь выполняется быстрее благодаря улучшенному распараллеливанию за счёт двух существующих оптимизаций: 1) оптимизации do_not_merge_across_partitions_select_final для партиций таблицы, которые содержат только одну part; 2) разбиения других выбранных диапазонов таблицы на intersecting / non-intersecting, и только пересекающиеся диапазоны должны проходить через операцию FINAL-слияния. #88090 (Shankar Iyer).

Оптимизации агрегации и GROUP BY

  • Исправлено ухудшение производительности, вызванное большим сериализованным ключом при группировке по нескольким строковым/числовым столбцам. Устраняет проблему, описанную в https://github.com/ClickHouse/ClickHouse/pull/83884#issuecomment-3187972297 cc @mkmkme. Это продолжение работы из https://github.com/ClickHouse/ClickHouse/pull/83884. #85924 (李扬).
  • RadixSort: помогает компилятору эффективнее использовать SIMD и улучшает предварительную выборку данных (prefetching) на уровне CPU. Применяет динамический диспетчинг вызовов, чтобы использовать программный prefetching только на процессорах Intel. Продолжает работу @taiyang-li из https://github.com/ClickHouse/ClickHouse/pull/77029. #86378 (Raúl Marín).

Оптимизации индекса и текстового поиска

  • Повышена производительность построения текстового индекса для документов, которые содержат преимущественно редкие токены. #87546 (Anton Popov).

Оптимизации для озёр данных

  • Упорядоченное чтение для Iceberg. #88454 (scanhex12).

Внутренние оптимизации

  • Улучшения в DB::SharedMutex. #87491 (Raúl Marín).
  • Ускорен распространённый случай работы деструктора Field. #87631 (Raúl Marín).
  • Снижено влияние неиспользования fail points. #88196 (Raúl Марín).

Улучшения

Оптимизация выполнения запросов

  • mannWhitneyUTest больше не выбрасывает исключение, когда обе выборки содержат только одинаковые значения. Теперь возвращает корректный результат, соответствующий SciPy. Закрывает: #79814. #80009 (DeanNeaht).
  • Добавлена экспериментальная оптимизация порядка соединений, которая может автоматически переупорядочивать JOIN для повышения производительности (управляется настройкой query_plan_optimize_join_order_limit). Обратите внимание, что оптимизация порядка соединений в настоящее время имеет ограниченную поддержку статистики и в основном полагается на оценки количества строк от движков хранения — более сложный сбор статистики и оценка кардинальности будут добавлены в будущих релизах. Если вы столкнётесь с проблемами в запросах с 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).
  • Поддержка фильтрации частей данных с использованием пропускающих индексов при чтении для уменьшения лишних чтений индексов. Управляется новым SETTING use_skip_indexes_on_data_read (по умолчанию отключено). Это решает #75774. Включает некоторую общую подготовительную работу, пересекающуюся с #81021. #81526 (Amos Bird).
  • Транзакция перезаписи дискового объектного хранилища удаляет предыдущие блобы в удалённом хранилище, если транзакция метаданных была зафиксирована. #81787 (Sema Checherinda).
  • Сделана настраиваемой стратегия повторных попыток S3 и добавлена возможность горячей перезагрузки настроек диска S3 при изменении XML‑файла конфигурации. #82642 (RinChanNOW).
  • Исправлен проход оптимизации для избыточного сравнения на равенство, когда LowCardinality результирующего типа отличается до и после оптимизации. #82651 (Yakov Olkhovskiy).
  • Специальный столбец можно использовать для указания наличия компонента oneof. #82885 (Ilya Golshtein).
  • Добавлены более понятные инструкции для пользователей на случай указания некорректных настроек для нового движка таблицы Kafka. #83701 (János Benjamin Antal).
  • Когда HTTP‑клиенты устанавливают заголовок X-ClickHouse-100-Continue: defer в дополнение к Expect: 100-continue, ClickHouse не отправляет клиенту ответ 100 Continue до завершения проверки квоты, что позволяет избежать бессмысленной траты сетевой пропускной способности на передачу тел запросов, которые в любом случае будут отброшены. Это актуально для запросов INSERT, когда сам запрос может быть передан в строке запроса URL, а данные — в теле запроса. Прерывание запроса без отправки полного тела предотвращает повторное использование соединения с HTTP/1.1, но дополнительная задержка, возникающая из‑за открытия новых соединений, обычно незначительна по сравнению с общей длительностью выполнения запроса INSERT при больших объёмах данных. #84304 (c-end).
  • Теперь нельзя указывать часовые пояса для типа данных Time. #84689 (Yarik Briukhovetskyi).
  • Клиентское автодополнение стало быстрее и более предсказуемым при использовании system.completions вместо выполнения нескольких запросов к системным таблицам. #84694 (|2ustam).
  • Упростили логику разбора Time[64] в формате best_effort и тем самым избежали ряда ошибок. #84730 (Yarik Briukhovetskyi).
  • Ускорена обработка некоторых запросов с JOIN за счёт построения bloom-фильтра по правому поддереву во время выполнения и передачи этого фильтра в операцию сканирования левого поддерева. Это может быть полезно для запросов вида SELECT avg(o_totalprice) FROM orders, customer, nation WHERE c_custkey = o_custkey AND c_nationkey=n_nationkey AND n_name = 'FRANCE'. #84772 (Alexander Gololobov).
  • Вы можете использовать параметры запроса после TO при создании materialized view, например: CREATE MATERIALIZED VIEW mv TO {to_table:Identifier} AS SELECT * FROM src_table. #84899 (Diskein).
  • Маскировать учётные данные доступа к S3 в логах при использовании DATABASE ENGINE = Backup с хранилищем S3. #85336 (Kenny Sun).
  • Обновлён jemalloc до более новой версии. Улучшено профилирование выделения памяти на основе внутренних инструментов 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. #85438 (Antonio Andelic).
  • Добавлены функции deltaLakeAzureCluster (аналог функции deltaLakeAzure для кластера) и deltaLakeS3Cluster (псевдоним функции deltaLakeCluster). Устраняет #85358. #85547 (Smita Kulkarni).
  • Переименована функция InterpreterSystemQuery::dropReplicaImpl в InterpreterSystemQuery::dropStorageReplica - В InterpreterSystemQuery::dropDatabaseReplica: - При удалении вместе с базой данных или при удалении всей реплики также удаляется реплика для каждой таблицы базы данных - Если указан 'WITH TABLES', удаляется реплика для каждого хранилища - В остальном логика не изменилась, выполняется только вызов DatabaseReplicated::dropReplica для баз данных - При удалении реплики базы данных с путём в Keeper: - Если указан 'WITH TABLES': - Восстановить базу данных как Atomic - Восстановить RMT-таблицы из выражения в Keeper - Удалить базу данных (восстановленные таблицы также удаляются) - В противном случае просто вызвать DatabaseReplicated::dropReplica по указанному пути в Keeper. #85637 (Tuan Pham Anh).
  • Исправлено неконсистентное форматирование TTL, если он содержит функцию materialize. Закрывает #82828. #85749 (Alexey Milovidov).
  • Применять настройку 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).
  • Улучшен движок таблицы S3(Azure)Queue, чтобы он переживал потерю подключения к ZooKeeper без появления потенциальных дубликатов. Для этого необходимо включить настройку S3Queue use_persistent_processing_nodes (можно изменить с помощью ALTER TABLE MODIFY SETTING). #85995 (Kseniia Sumarokova).
  • Состояние таблицы Iceberg больше не хранится в объекте хранилища. Это должно сделать Iceberg в ClickHouse пригодным для выполнения конкурентных запросов. #86062 (Daniil Ivanik).
  • Добавлена настройка query_condition_cache_selectivity_threshold (значение по умолчанию: 1.0), которая исключает из записи в кэш условий запроса результаты сканирования предикатов с низкой селективностью. Это позволяет уменьшить потребление памяти кэшем условий запроса ценой более низкого коэффициента попаданий в кэш. #86076 (zhongyuankai).
  • Добавлена поддержка фильтрации по полной строке URL (директива full_url) в http_handlers (включая схему и host:port). #86155 (Azat Khuzhin).
  • Добавлена экспериментальная настройка для функции записи в Delta Lake 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).
  • Несколько файлов данных при записи в Iceberg. #86275 (scanhex12).
  • Расширена поддержка типов партиций при операциях записи в Iceberg. Это закрывает #86206. #86298 (scanhex12).
  • Теперь при партиционировании таблиц Iceberg можно не указывать функцию identity(). #86314 (scanhex12).
  • Добавлена возможность включать JSON-логирование только для определённого канала: для этого установите для параметра logger.formatting.channel одно из значений syslog/console/errorlog/log. #86331 (Azat Khuzhin).
  • Добавлено ограничение на количество строк и объём данных в байтах для файлов данных, записываемых в Delta Lake. Управляется настройками delta_lake_insert_max_rows_in_data_file и delta_lake_insert_max_bytes_in_data_file. #86357 (Kseniia Sumarokova).
  • Теперь разрешено использование нативных чисел в WHERE-условии. Они уже допускаются в качестве аргументов логических функций. Это упрощает оптимизации filter push-down и move-to-prewhere. #86390 (Nikolai Kochetov).
  • Исправлена ошибка при выполнении SYSTEM DROP REPLICA для базы данных Catalog с повреждёнными метаданными. #86391 (Nikita Mikhaylov).
  • Добавлены дополнительные попытки проверки доступа к диску (skip_access_check=0) в Azure, поскольку предоставление доступа может занимать достаточно продолжительное время. #86419 (Alexander Tokmakov).
  • Переименована настройка evaluation_time в promql_evaluation_time. #86459 (Vitaly Baranov).
  • Настройка для удаления файлов при выполнении операции DROP таблиц Iceberg. Это закрывает #86211. #86501 (scanhex12).
  • Снижено потребление памяти при записи в Iceberg. #86544 (scanhex12).
  • Сделать функцию today() нечувствительной к регистру, чтобы привести её в соответствие с другими функциями работы с датой и временем, такими как NOW(). #86561 (Kaviraj Kanagaraj).
  • Окно устаревания в функциях timeSeries*() теперь левооткрытое и правозамкнутое. #86588 (Vitaly Baranov).
  • Добавлены события профилирования FailedInternal*Query. #86627 (Shane Andrade).
  • Сделать режим блокировки бакета в упорядоченном режиме S3Queue постоянным, аналогичным режиму для узлов обработки при use_persistent_processing_nodes = 1. Добавить инъекцию сбоев Keeper в тестах. #86628 (Kseniia Sumarokova).
  • Исправлена обработка пользователей, в имени которых есть точка, при добавлении через конфигурационный файл. #86633 (Mikhail Koviazin).
  • Добавлены асинхронные метрики использования памяти запросами (QueriesMemoryUsage и QueriesPeakMemoryUsage). #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) загрузке из‑за гонки (race condition). #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).
  • Распределённые INSERT/SELECT для озёр данных. #86783 (scanhex12).
  • Improve performance of RemoveRecursive request in Keeper. #86789 (Antonio Andelic).
  • Удалены лишние пробельные символы в PrettyJSONEachRow при выводе типа JSON. #86819 (Pavel Kruglov).
  • Увеличено окно реплицируемой дедупликации до 10000. #86820 (Sema Checherinda).
  • Теперь мы записываем размеры blob-объектов по prefix.path при удалении каталога на простом перезаписываемом диске. #86908 (alesapin).
  • Функция yesterday() сделана нечувствительной к регистру и приведена в соответствие с функцией today(). #86914 (Kaviraj Kanagaraj).
  • Добавлена поддержка тестирования производительности с помощью .xml‑файлов для удалённых экземпляров ClickHouse, включая ClickHouse Cloud. Пример использования: tests/performance/scripts/perf.py tests/performance/math.xml --runs 10 --user <username> --password <password> --host <hostname> --port <port> --secure. #86995 (Raufs Dunamalijevs).
  • Теперь в ряде мест, где известно, что выделяется значительный (>16MiB) объём памяти (сортировка, асинхронные вставки, файловый лог), соблюдаются ограничения по памяти. #87035 (Azat Khuzhin).
  • Предотвращена ситуация, при которой небулевые настройки в запросах оставались без значения. Улучшение #85800. #87084 (thraeka).
  • Поддержка подсказок для имён форматов. Закрывает #86761. #87092 (flynn).
  • Удалённые реплики пропускают анализ индексов, когда проекции отсутствуют. #87096 (zoomxi).
  • Выбрасывать исключение, если в настройке network_compression_method указано неподдерживаемое значение универсального кодека. #87097 (Robert Schulze).
  • Системная таблица system.query_cache теперь возвращает все элементы кэша результатов запросов, тогда как ранее она возвращала только общие элементы или не общие элементы того же пользователя и роли. Это приемлемо, поскольку не общие элементы не должны раскрывать результаты запросов, тогда как system.query_cache возвращает строки запросов. Это делает поведение системной таблицы более похожим на system.query_log. #87104 (Robert Schulze).
  • Добавлена поддержка аутентификации и SSL в табличной функции arrowFlight(). #87120 (Vitaly Baranov).
  • Добавлен новый параметр storage_class_name для табличного движка S3 и табличной функции s3, который позволяет указывать режим Intelligent-Tiering, поддерживаемый AWS. Параметр поддерживается как в формате ключ–значение, так и в позиционном формате (устаревшем). #87122 (alesapin).
  • Добавлена возможность отключать кодировку UTF-8 для таблиц YTsaurus. #87150 (MikhailBurdukov).
  • Добавлена поддержка дисков озёр данных в Azure. #87173 (scanhex12).
  • Добавлен новый параметр текстового индекса dictionary_block_frontcoding_compression для управления сжатием словаря. По умолчанию он включён и используется сжатие front-coding. #87175 (Elmi Ahmadov).
  • Включено укороченное вычисление (short-circuit evaluation) для функции parseDateTime. #87184 (Pavel Kruglov).
  • Добавлена поддержка alter table ... materialize statistics all, которая материализует всю статистику таблицы. #87197 (Han Fei).
  • По умолчанию отключена настройка s3_slow_all_threads_after_retryable_error. #87198 (Nikita Mikhaylov).
  • Добавлена новая таблица system.aggregated_zookeeper_log. Таблица содержит статистику (например, количество операций, среднюю задержку, ошибки) по операциям ZooKeeper, сгруппированным по идентификатору сессии, родительскому пути и типу операции, и её данные периодически сбрасываются на диск. #87208 (Miсhael Stetsyuk).
  • Переименована табличная функция arrowflight в arrowFlight. #87249 (Vitaly Baranov).
  • Обновлён clickhouse-benchmark, чтобы он принимал - вместо _ во флагах командной строки. #87251 (Ahmed Gouda).
  • Добавлена сессионная настройка, позволяющая исключать список skip-индексов из материализации при вставках (exclude_materialize_skip_indexes_on_insert). Добавлена настройка таблицы MergeTree, позволяющая исключать список skip-индексов из материализации во время слияний (exclude_materialize_skip_indexes_on_merge). #87252 (George Larionov).
  • Сделать синхронной операцию сброса в system.crash_log при обработке сигналов. #87253 (Miсhael Stetsyuk).
  • Добавлен новый столбец statistics в system.parts_columns. #87259 (Han Fei).
  • Добавлена настройка inject_random_order_for_select_without_order_by, которая вставляет ORDER BY rand() в запросы SELECT верхнего уровня без предложения ORDER BY. #87261 (Rui Zhang).
  • Добавлена поддержка дополнительных форматов (ORC, Avro) при записи в Iceberg. Это закрывает #86179. #87277 (scanhex12).
  • Улучшено сообщение об ошибке функции joinGet, чтобы оно корректно указывало, что число join_keys не совпадает с числом right_table_keys. #87279 (Isak Ellmer).
  • Теперь данные со всех потоков объединяются перед вставкой в materialized view в зависимости от настроек min_insert_block_size_rows_for_materialized_views и min_insert_block_size_bytes_for_materialized_views. Ранее, если parallel_view_processing был включён, каждый поток, выполнявший вставку в конкретный materialized view, объединял данные для вставки независимо, что могло приводить к увеличению числа создаваемых частей. #87280 (Antonio Andelic).
  • Этот патч добавляет возможность проверять stat произвольного узла Keeper во время транзакции записи (write tx). Это может помочь с обнаружением проблемы ABA. #87282 (Mikhail Artemenko).
  • Тяжёлые запросы YTsaurus перенаправляются на heavy‑прокси‑серверы. #87342 (MikhailBurdukov).
  • Этот патч исправляет откаты операций unlink/rename/removeRecursive/removeDirectory и т. д., а также счётчики количества жёстких ссылок во всех возможных сценариях нагрузки для метаданных из дисковых транзакций и упрощает интерфейсы, делая их более универсальными, что позволяет переиспользовать их в других хранилищах метаданных. #87358 (Mikhail Artemenko).
  • Добавлен параметр конфигурации keeper_server.tcp_nodelay, который позволяет отключить TCP_NODELAY для Keeper. #87363 (Copilot).
  • Добавлена поддержка параметра --connection в clickhouse-benchmarks. Он работает так же, как в clickhouse-client: вы можете задать предопределённые подключения в клиентских файлах конфигурации config.xml/config.yaml в разделе connections_credentials, чтобы не указывать имя пользователя и пароль явно в аргументах командной строки. Добавлена поддержка параметра --accept-invalid-certificate в clickhouse-benchmark. #87370 (Azat Khuzhin).
  • Теперь настройка max_insert_threads будет применяться и к таблицам Iceberg. #87407 (alesapin).
  • Добавлены гистограммные и размерные метрики в PrometheusMetricsWriter. Таким образом, обработчик PrometheusRequestHandler будет содержать все необходимые метрики и может использоваться для надёжного сбора метрик с низкими накладными расходами в облаке. #87521 (Miсhael Stetsyuk).
  • Функция hasToken теперь возвращает ноль совпадений для пустого токена (раньше в этом случае выбрасывалось исключение). #87564 (Jimmy Aguilar Mena).
  • Добавлена поддержка текстового индекса для значений типов Array и Map (mapKeys и mapValues). Поддерживаются функции mapContainsKey и has. #87602 (Elmi Ahmadov).
  • Добавлена новая метрика ZooKeeperSessionExpired, которая показывает количество истекших глобальных сессий ZooKeeper. #87613 (Miсhael Stetsyuk).
  • Используйте клиент хранилища S3 со специальными настройками для резервного копирования (например, backup_slow_all_threads_after_retryable_s3_error) для серверного (нативного) копирования в целевое хранилище резервных копий. Настройка s3_slow_all_threads_after_retryable_error объявлена устаревшей. #87660 (Julia Kartseva).
  • Исправлена некорректная обработка настроек max_joined_block_size_rows и max_joined_block_size_bytes при сериализации плана запроса при использовании экспериментальной функции make_distributed_plan. #87675 (Vladimir Cherkasov).
  • Настройка enable_http_compression теперь включена по умолчанию. Это означает, что если клиент принимает HTTP-сжатие, сервер будет его использовать. Однако это изменение имеет определённые недостатки. Клиент может запросить «тяжёлый» метод сжатия, такой как bzip2, что не оправдано и увеличит потребление ресурсов сервера (но это будет заметно только при передаче больших объёмов результатов). Клиент может запросить gzip, что не так уж плохо, но менее эффективно по сравнению с zstd. Закрывает #71591. #87703 (Alexey Milovidov).
  • Добавлена новая настройка keeper_hosts, которая предоставляет список хостов [Zoo]Keeper, с которыми может устанавливать соединение ClickHouse. #87718 (Nikita Mikhaylov).
  • Добавлена команда ALTER TABLE REWRITE PARTS — переписывает части таблицы с нуля с учётом всех новых настроек (поскольку некоторые настройки, такие как use_const_adaptive_granularity, применяются только к новым частям). #87774 (Azat Khuzhin).
  • Добавлены параметры from и to в системные панели мониторинга для упрощения анализа исторических данных. #87823 (Mikhail f. Shiryaev).
  • Добавлена дополнительная информация для отслеживания производительности в запросах SELECT по таблицам Iceberg. #87903 (Daniil Ivanik).
  • Добавлена новая настройка joined_block_split_single_row для снижения потребления памяти при хеш‑соединениях с большим количеством совпадений для одного ключа. Она позволяет разбивать результаты хеш‑соединений на фрагменты даже внутри совпадений для одной строки левой таблицы, что особенно полезно, когда одна строка из левой таблицы соответствует тысячам или миллионам строк из правой таблицы. Ранее все совпадения должны были материализовываться в памяти одновременно. Это снижает пиковое потребление памяти, но может увеличить нагрузку на CPU. #87913 (Vladimir Cherkasov).
  • Улучшение файлового кеша: повторное использование итератора приоритетов кеша между потоками, которые одновременно резервируют место в кеше. #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).
  • Make TCP and HTTP behavior consistent when there duplicated external tables are passed. HTTP allows a temporary table to be passed several times. #88032 (Sema Checherinda).
  • Удалены пользовательские пулы памяти (MemoryPools) для чтения Arrow/ORC/Parquet. Этот компонент, по-видимому, больше не нужен после https://github.com/ClickHouse/ClickHouse/pull/84082, так как теперь мы в любом случае отслеживаем все выделения памяти. #88035 (Nikita Mikhaylov).
  • Добавлена возможность создавать базу данных Replicated без аргументов. #88044 (Pervakov Grigorii).
  • Добавлена поддержка подключения к TLS-порту clickhouse-keeper; сохранены те же имена флагов, что и в clickhouse-client. #88065 (Pradeep Chhetri).
  • Добавлено новое событие профилирования для отслеживания количества отклонённых фоновых слияний из-за превышения лимитов памяти. #88084 (Grant Holly).
  • Добавлен необязательный параметр start_value в функцию generateSerialID для указания пользовательских начальных значений для новых последовательностей. #88085 (Manuel).
  • Включает анализатор для проверки выражений значений по умолчанию для столбцов в операторах CREATE/ALTER TABLE. #88087 (Max Justus Spransy).
  • Внутреннее улучшение планирования запросов: использование JoinStepLogical для CROSS JOIN. #88151 (Vladimir Cherkasov).
  • Полная поддержка оператора IS NOT DISTINCT FROM (<=>). #88155 (simonmichal).
  • По умолчанию включён глобальный профилировщик сэмплирования: он собирает стек-трейсы всех потоков каждые 10 секунд по процессорному и реальному времени. #88209 (Alexander Tokmakov).
  • Исправлена поддержка операций EXCHANGE TABLES для таблиц с движком Alias. Движок теперь сохраняет целевую таблицу в виде имени базы данных и имени таблицы вместо константного идентификатора хранилища, что позволяет корректно определять целевую таблицу после обмена. #88233 (Kai Zhu).
  • Добавлена настройка temporary_files_buffer_size для управления размером буфера для записи во временные файлы. * Оптимизировано потребление памяти операцией scatter (используется, например, в соединении grace hash join) для столбцов типа LowCardinality. #88237 (Vladimir Cherkasov).
  • Добавлена поддержка прямого чтения из текстовых индексов при использовании параллельных реплик. Улучшена производительность чтения текстовых индексов из объектного хранилища. #88262 (Anton Popov).
  • Теперь функция generateSerialID поддерживает неконстантный аргумент с именем серии. Закрывает #83750. #88270 (Alexey Milovidov).
  • База данных каталогов озёр данных, предназначенная для распределённой обработки. #88273 (scanhex12).
  • Обновлён Azure SDK, чтобы включить исправление проблемы с заголовком 'Content-Length', проявляющейся при операциях копирования и создания контейнеров. #88278 (Smita Kulkarni).
  • Функция lag теперь нечувствительна к регистру для совместимости с MySQL. #88322 (Lonny Kapelushnik).
  • Добавлена настройка 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 (pranav mehta).
  • Добавлена перегрузка hasAny/hasAllTokens, принимающая строковый аргумент. #88679 (George Larionov).
  • После внесения этого патча эвристика to_remove_small_parts_at_right будет выполняться перед вычислением оценки диапазона слияния. Ранее селектор слияния выбирал широкое слияние, а затем отфильтровывал его суффикс. Исправления: #85374. #88736 (Mikhail Artemenko).
  • Добавлен шаг в postinstall-скрипт для clickhouse-keeper, обеспечивающий запуск при загрузке системы. #88746 (YenchangChan).
  • Проверка учётных данных в веб‑интерфейсе теперь выполняется только при вставке, а не при каждом нажатии клавиши. Это позволяет избежать проблем с неправильно настроенными LDAP‑серверами. Исправляет #85777. #88769 (Alexey Milovidov).
  • Ограничена длина сообщения об исключении при нарушении ограничения. В предыдущих версиях при вставке очень длинной строки можно было получить столь же длинное сообщение об исключении, которое в итоге записывалось в query_log. Закрывает #87032. #88801 (Alexey Milovidov).

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

  • Результаты alter-запросов теперь проверяются только на узле-инициаторе для реплицируемых баз данных и таблиц с внутренней репликацией. Это устраняет ситуации, когда уже зафиксированный alter-запрос мог зависнуть на других узлах. #83849 (János Benjamin Antal).
  • Введено ограничение на число задач каждого типа в BackgroundSchedulePool. Это позволяет избежать ситуаций, когда все слоты заняты задачами одного типа, а другие задачи простаивают, а также предотвращает взаимоблокировки, когда задачи ожидают друг друга. Поведение контролируется серверной настройкой background_schedule_pool_max_parallel_tasks_per_type_ratio. #84008 (Alexander Tokmakov).
  • Исправлена ошибка в GeoParquet, приводившая к ошибкам клиентского протокола. #84020 (Michael Kolupaev).
  • Исправлено вычисление зависящих от хоста функций, таких как shardNum(), в подзапросах на инициирующем узле. #84409 (Eduard Karacharov).
  • Корректно останавливайте таблицы при восстановлении реплики базы данных. Некорректная остановка приведёт к LOGICAL_ERROR для некоторых движков таблиц во время восстановления реплики базы данных. #84744 (Antonio Andelic).
  • Проверять права доступа при генерации подсказок для исправления опечаток в имени базы данных. #85371 (Dmitry Novik).
  • Исправлена некорректная обработка дат до эпохи с дробными секундами в различных функциях, связанных с датой и временем, таких как 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).
    1. LowCardinality для столбцов Hive 2. Заполнять столбцы Hive перед виртуальными столбцами (требуется для https://github.com/ClickHouse/ClickHouse/pull/81040) 3. LOGICAL_ERROR при пустом формате для Hive #85528 4. Исправлена проверка, что столбцы партиции Hive являются единственными столбцами 5. Проверять, что все столбцы Hive указаны в схеме 6. Частичное исправление parallel_replicas_cluster с Hive 7. Использовать упорядоченный контейнер в extractKeyValuePairs для утилит Hive (требуется для https://github.com/ClickHouse/ClickHouse/pull/81040). #85538 (Arthur Passos).
  • Предотвращена ненужная оптимизация первого аргумента функций IN, иногда приводившая к ошибке при использовании механизма array mapping. #85546 (Yakov Olkhovskiy).
  • Соответствие между идентификаторами источников Iceberg и именами файлов Parquet не было согласовано со схемой на момент записи файла Parquet. Этот PR обрабатывает схему, соответствующую каждому файлу данных Iceberg, а не текущую. #85829 (Daniil Ivanik).
  • Исправлено чтение размера файла отдельно от его открытия. Связано с https://github.com/ClickHouse/ClickHouse/pull/33372, который был добавлен в ответ на ошибку в ядрах Linux до релиза 5.10. #85837 (Konstantin Bogdanov).
  • ClickHouse Keeper больше не завершается с ошибкой при запуске на системах, в которых IPv6 отключён на уровне ядра (например, RHEL с ipv6.disable=1). Теперь он пытается перейти на IPv4-слушатель, если запуск исходного IPv6-слушателя завершается неудачей. #85901 (jskong1124).
  • Этот PR закрывает #77990. Добавлена поддержка табличной функции TableFunctionRemote для параллельных реплик в globalJoin. #85929 (zoomxi).
  • Исправлена ошибка обращения по нулевому указателю в OrcSchemaReader::initializeIfNeeded(). Этот PR исправляет следующую проблему: #85292. #85951 (yanglongwei).
  • Добавлена проверка, разрешающая коррелированные подзапросы в предложении FROM только в том случае, если они обращаются к столбцам внешнего запроса. Исправляет #85469. Исправляет #85402. #85966 (Dmitry Novik).
  • Исправлена ошибка при изменении столбца с помощью ALTER UPDATE, когда его подстолбец используется в материализованном выражении другого столбца. Ранее материализованный столбец с подстолбцом в своём выражении обновлялся некорректно. #85985 (Pavel Kruglov).
  • Запрещено изменять столбцы, подстолбцы которых используются в PRIMARY KEY или выражении партиционирования. #86005 (Pavel Kruglov).
  • Исправлена проблема, из-за которой команды ALTER COLUMN IF EXISTS завершались с ошибкой, когда состояние столбца изменялось в рамках одного и того же оператора ALTER. Теперь команды вроде DROP COLUMN IF EXISTS, MODIFY COLUMN IF EXISTS, COMMENT COLUMN IF EXISTS и RENAME COLUMN IF EXISTS корректно обрабатывают случаи, когда столбец удаляется предыдущей командой в том же операторе. #86046 (xiaohuanlin).
  • Исправлено чтение подстолбцов с режимом сопоставления столбцов, отличным от режима по умолчанию, в хранилище DeltaLake. #86064 (Kseniia Sumarokova).
  • Исправлена ошибка использования неверных значений по умолчанию для path с подсказкой Enum внутри JSON. #86065 (Pavel Kruglov).
  • Разбор URL каталога Hive в DataLake с проверкой и очисткой входных данных. Закрывает #86018. #86092 (rajat mohan).
  • Исправлена логическая ошибка при динамическом изменении размера кэша файловой системы. Закрывает #86122. Закрывает https://github.com/ClickHouse/clickhouse-core-incidents/issues/473. #86130 (Kseniia Sumarokova).
  • Используйте NonZeroUInt64 для параметра logs_to_keep в DatabaseReplicatedSettings. #86142 (Tuan Pham Anh).
  • Исключение возникало при выполнении FINAL-запроса со skip index, если таблица (например, ReplacingMergeTree) была создана с параметром index_granularity_bytes = 0. Теперь это исключение устранено. #86147 (Shankar Iyer).
  • Устраняет неопределённое поведение (UB) и исправляет проблемы с разбором выражения партиционирования в Iceberg. #86166 (Daniil Ivanik).
  • Исправлено определение типов Date/DateTime/DateTime64 для дат, выходящих за пределы поддерживаемого диапазона. #86184 (Pavel Kruglov).
  • Исправлено падение в случае одновременного использования константных и неконстантных блоков в одном операторе INSERT. #86230 (Azat Khuzhin).
  • При создании дисков через SQL теперь по умолчанию обрабатываются директивы <include> из файла /etc/metrika.xml. #86232 (alekar).
  • Исправлена работа accurateCastOrNull/accurateCastOrDefault при преобразовании из String в JSON. #86240 (Pavel Kruglov).
  • Поддержка каталогов без '/' в движке Iceberg. #86249 (scanhex12).
  • Исправлена ошибка, приводившая к падению при вызове replaceRegex с FixedString в качестве исходной строки (haystack) и пустой подстрокой (needle). #86270 (Raúl Marín).
  • Исправлен сбой при выполнении ALTER UPDATE Nullable(JSON). #86281 (Pavel Kruglov).
  • Исправлено отсутствие определителя столбца в system.tables. #86295 (Raúl Marín).
  • Исправлено приведение типа из LowCardinality(Nullable(T)) к Dynamic. #86365 (Pavel Kruglov).
  • Исправлена логическая ошибка при записи в Delta Lake. Закрывает #86175. #86367 (Kseniia Sumarokova).
  • Исправлена ошибка 416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resource при чтении пустых blob-объектов из Azure Blob Storage для диска plain_rewritable. #86400 (Julia Kartseva).
  • Исправлена работа GROUP BY с Nullable(JSON). #86410 (Pavel Kruglov).
  • Исправлена ошибка в Materialized Views: materialized view могла не работать, если её создавали, удаляли, а затем снова создавали с тем же именем. #86413 (Alexander Tokmakov).
  • Возвращать ошибку, если все реплики недоступны при чтении через функции *cluster. #86414 (Julian Maicher).
  • Исправлена утечка MergesMutationsMemoryTracking при использовании таблиц Buffer и исправлен query_views_log для потоковой передачи данных из Kafka (и других источников). #86422 (Azat Khuzhin).
  • Исправлено поведение SHOW TABLES после удаления базовой таблицы хранилища alias. #86433 (RinChanNOW).
  • Исправлено отсутствие заголовка фрагмента при включённом параметре send_chunk_header и вызове UDF через HTTP. #86469 (Vladimir Cherkasov).
  • Исправлена потенциальная взаимоблокировка при включённом сбросе профиля jemalloc. #86473 (Azat Khuzhin).
  • Исправлено чтение подстолбцов в табличном движке DeltaLake. Закрывает #86204. #86477 (Kseniia Sumarokova).
  • Корректная обработка идентификатора хоста loopback для предотвращения коллизий при выполнении DDL-задач: #86479 (Tuan Pham Anh).
  • Исправлены операции DETACH/ATTACH для таблиц движка PostgreSQL с числовыми столбцами типов 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).
  • Исправлена ошибка, из-за которой некоторые корректные пользовательские данные, отправленные в столбец AggregateFunction(quantileDD), могли приводить к бесконечной рекурсии при слияниях. #86560 (Raphaël Thériault).
  • Исправлено исключение, возникавшее в движке базы данных Backup при выполнении запроса при наличии частей с файлами нулевого размера. #86563 (Max Justus Spransy).
  • Исправлена проблема отсутствия заголовка фрагмента при включённой настройке send_chunk_header и вызове UDF по протоколу HTTP. #86606 (Vladimir Cherkasov).
  • Исправлена логическая ошибка S3Queue "Expected current processor to be equal to ", возникавшая из-за истечения сессии Keeper. #86615 (Kseniia Sumarokova).
  • Ошибки обработки Nullable при вставке и отсечении данных. Исправляет #86407. #86630 (scanhex12).
  • Не отключайте кэш файловой системы, если кэш метаданных Iceberg отключен. #86635 (Daniil Ivanik).
  • Исправлена ошибка 'Deadlock in Parquet::ReadManager (single-threaded)' в ридере Parquet 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).
  • Добавлена поддержка типов JSON/Dynamic в таблице, создаваемой табличной функцией cluster. #86821 (Pavel Kruglov).
  • Исправлена проблема с перестановкой пустого Tuple при использовании LIMIT. #86828 (Pavel Kruglov).
  • Не используйте отдельный узел Keeper для persistent processing nodes. Исправление для https://github.com/ClickHouse/ClickHouse/pull/85995. Закрывает #86406. #86841 (Kseniia Sumarokova).
  • Исправлена проблема, из-за которой таблица с движком TimeSeries препятствовала созданию новой реплики в реплицируемой базе данных. #86845 (Nikolay Degterinsky).
  • Исправлены запросы к system.distributed_ddl_queue в случаях, когда в задачах отсутствуют некоторые узлы Keeper. #86848 (Antonio Andelic).
  • Исправлено позиционирование в конце декомпрессированного блока. #86906 (Pavel Kruglov).
  • Обработать исключение, возникающее во время асинхронного выполнения итератора Iceberg. #86932 (Daniil Ivanik).
  • Исправлено сохранение больших предварительно обработанных XML-конфигураций. #86934 (c-end).
  • Исправлено заполнение поля даты в таблице system.iceberg_metadata_log. #86961 (Daniil Ivanik).
  • Исправлен бесконечный пересчёт TTL с WHERE. #86965 (Anton Popov).
  • Исправлена проблема, из-за которой результат функции, вычисляемой в CTE, мог быть недетерминированным в запросе. #86967 (Yakov Olkhovskiy).
  • Исправлена ошибка LOGICAL_ERROR в EXPLAIN при использовании функции pointInPolygon над столбцами первичного ключа. #86971 (Michael Kolupaev).
  • Исправлен потенциально некорректный результат работы функции uniqExact при использовании модификаторов ROLLUP и CUBE. #87014 (Nikita Taranov).
  • Исправлены таблицы озера данных, в имени которых содержалась процент-закодированная последовательность. Closes #86626. #87020 (Anton Ivashkin).
  • Исправлено определение схемы таблицы при использовании табличной функции url() при значении настройки parallel_replicas_for_cluster_functions, равном 1. #87029 (Konstantin Bogdanов).
  • Теперь результат PREWHERE корректно приводится к типу после разбиения на несколько шагов. #87040 (Antonio Andelic).
  • Исправлены легковесные обновления с клаузой ON CLUSTER. #87043 (Anton Popov).
  • Исправлена совместимость некоторых состояний агрегатных функций с аргументом типа String. #87049 (Pavel Kruglov).
  • Исправлено некорректное поведение IS NULL для столбцов типа Nullable в OUTER JOIN при использовании optimize_functions_to_subcolumns, закрыта задача #78625. #87058 (Vladimir Cherkasov).
  • Исправлена проблема, из-за которой имя модели из OpenAI не передавалось. #87100 (Kaushik Iska).
  • EmbeddedRocksDB: Путь должен находиться внутри user_files. #87109 (Raúl Marín).
  • Исправлена проблема с таблицами KeeperMap, созданными до 25.1, из-за которой после выполнения запроса DROP данные оставались в ZooKeeper. #87112 (Nikolay Degterinsky).
  • Исправлена обработка идентификаторов полей maps и arrays при чтении Parquet. #87136 (scanhex12).
  • Исправлено чтение массивов с подстолбцом размеров при ленивой материализации. #87139 (Pavel Kruglov).
  • Исправлен некорректный учет освобождений временных данных при отслеживании лимита max_temporary_data_on_disk_size, закрыта задача #87118. #87140 (JIaQi).
  • Функция checkHeaders теперь корректно валидирует переданные заголовки и отклоняет недопустимые заголовки. Первоначальный автор: Michael Anastasakis (@michael-anastasakis). #87172 (Raúl Marín).
  • Делает поведение toDate и toDate32 одинаковым для всех числовых типов. Исправляет проверку на выход за нижнюю границу (underflow) для Date32 при приведении из int16. #87176 (Pervakov Grigorii).
  • Исправлена работа функции CASE с аргументами типа Dynamic. #87177 (Pavel Kruglov).
  • Исправлена логическая ошибка при использовании параллельных реплик в запросах с несколькими операциями JOIN, в частности с RIGHT JOIN после LEFT/INNER JOIN. #87178 (Igor Nikonov).
  • Учитывать настройку input_format_try_infer_variants в кэше определения схемы. #87180 (Pavel Kruglov).
  • Изменить поведение pathStartsWith так, чтобы он сопоставлял только пути, начинающиеся с указанного префикса. #87181 (Raúl Marín).
  • Исправлена ошибка чтения пустого массива из пустой строки в CSV. #87182 (Pavel Kruglov).
  • Исправлен возможный неверный результат для некоррелированного EXISTS. Ошибка появилась с введением execute_exists_as_scalar_subquery=1, который был добавлен в https://github.com/ClickHouse/ClickHouse/pull/85481 и затрагивает 25.8. Исправляет #86415. #87207 (Nikolai Kochetov).
  • Исправлены логические ошибки в виртуальном столбце _row_number и позиционных удалениях Iceberg. #87220 (Michael Kolupaev).
  • Исправлен LOGICAL_ERROR «Too large size passed to allocator» в JOIN, возникавший при смешении константных и неконстантных блоков. #87231 (Azat Khuzhin).
  • Выдает ошибку, если iceberg_metadata_log не настроен, а пользователь запрашивает отладочную информацию о метаданных Iceberg. Исправлен доступ по нулевому указателю. #87250 (Daniil Ivanik).
  • Исправлены легковесные обновления с подзапросами, которые читают из других таблиц MergeTree. #87285 (Anton Popov).
  • Исправлена оптимизация move-to-prewhere, которая не работала при наличии ROW POLICY. Продолжение #85118. Закрывает #69777. Закрывает #83748. #87303 (Nikolai Kochetov).
  • Исправлено применение патчей к столбцам с выражением по умолчанию, отсутствующим в частях данных. #87347 (Anton Popov).
  • Исправлено обновление для EmbeddedRocksDB. #87392 (Raúl Marín).
  • Исправлено прямое чтение текстового индекса из объектного хранилища. #87399 (Anton Popov).
  • Предотвращено создание привилегии для несуществующего движка. #87419 (Jitendra).
  • Игнорировать только ошибки «not found» для s3_plain_rewritable (игнорирование других ошибок может привести ко всевозможным проблемам). #87426 (Azat Khuzhin).
  • Исправлены словари, использующие источник YTSaurus и макеты *range_hashed. #87490 (MikhailBurdukov).
  • Исправлена ошибка при создании массива пустых кортежей. #87520 (Pavel Kruglov).
  • Проверка наличия недопустимых столбцов при создании временной таблицы. #87524 (Pavel Kruglov).
  • Не помещайте столбцы партиций Hive в заголовок формата. Исправляет #87515. #87528 (Arthur Passos).
  • Исправлена подготовка чтения из DeltaLake при использовании текстового формата. #87529 (Pavel Kruglov).
  • Исправлена проверка доступа при выполнении запросов SELECT и INSERT для таблиц Buffer. #87545 (pufit).
  • Запрещено создание индекса пропуска данных для таблиц S3. #87554 (Bharat Nallan).
  • Исправлена утечка отслеживаемой памяти для асинхронного логирования (мог происходить значительный дрейф, за 10 часов ~100GiB) и text_log (мог наблюдаться почти такой же дрейф). #87584 (Azat Khuzhin).
  • Исправлена ошибка, из-за которой глобальные серверные настройки могли перезаписываться SELECT-настройками представления View или Materialized View, если соответствующее представление было удалено асинхронно, а сервер перезапущен до завершения фоновой очистки. #87603 (Alexander Tokmakov).
  • Исключать байты кэша страниц в пространстве пользователя (по возможности) при вычислении предупреждения о перегрузке памяти. #87610 (Bharat Nallan).
  • Исправлена ошибка, из-за которой неверный порядок типов во время десериализации CSV приводил к LOGICAL_ERROR. #87622 (Yarik Briukhovetskyi).
  • Исправлена некорректная обработка command_read_timeout для исполняемых словарей. #87627 (Azat Khuzhin).
  • Исправлено некорректное поведение SELECT * REPLACE в предложении WHERE при использовании нового анализатора при фильтрации по заменённым столбцам. #87630 (xiaohuanlin).
  • Исправлена двухуровневая агрегация при использовании Merge над Distributed. #87687 (c-end).
  • Исправлена генерация выходного блока в алгоритме HashJoin, когда не используется список правых строк. Исправление для #87401. #87699 (Dmitry Novik).
  • Режим чтения параллельных реплик мог быть выбран некорректно, если после анализа индекса не оставалось данных для чтения. Закрывает #87653. #87700 (zoomxi).
  • Исправлена обработка столбцов типов timestamp / timestamptz в Glue. #87733 (Andrey Zvonov).
  • Закрывает #86587. #87761 (scanhex12).
  • Исправлена запись булевых значений в интерфейсе PostgreSQL. #87762 (Artem Yurov).
  • Исправлена ошибка unknown table в запросе INSERT SELECT с CTE, #85368. #87789 (Guang Zhao).
  • Исправлено чтение подстолбца карты null из типа Variant, который не может находиться внутри Nullable. #87798 (Pavel Kruglov).
  • Исправлена обработка ошибки при невозможности полного удаления базы данных в кластере на вторичном узле. #87802 (Tuan Pham Anh).
  • Исправлены несколько ошибок в skip-индексах. #87817 (Raúl Marín).
  • В AzureBlobStorage обновлено поведение: сначала выполняется попытка нативного копирования, а при ошибке «Unauthorized» выполняется копирование через чтение и запись (в AzureBlobStorage при использовании разных учетных записей хранилища для источника и назначения возникает ошибка «Unauthorized»). Также исправлено применение параметра use_native_copy, когда endpoint задан в конфигурации. #87826 (Smita Kulkarni).
  • ClickHouse аварийно завершает работу, если файл ArrowStream содержит неуникальный словарь. #87863 (Ilya Golshtein).
  • Исправлено слияние с проекциями, когда последний блок пуст. #87928 (Raúl Marín).
  • Не удаляйте инъективные функции из GROUP BY, если типы их аргументов не поддерживаются в GROUP BY. #87958 (Pavel Kruglov).
  • Исправлено некорректное отсечение гранул/партиций для ключей на основе datetime при использовании настройки session_timezone в запросах. #87987 (Eduard Karacharov).
  • Возвращает количество затронутых строк после выполнения запроса в интерфейсе PostgreSQL. #87990 (Artem Yurov).
  • Ограничивает использование проталкивания фильтра для PASTE JOIN, поскольку это может привести к некорректным результатам. #88078 (Yarik Briukhovetskyi).
  • Применяет нормализацию URI до выполнения проверки прав доступа, добавленной в https://github.com/ClickHouse/ClickHouse/pull/84503. #88089 (pufit).
  • Исправлена логическая ошибка, когда ARRAY JOIN COLUMNS() не находит ни одного столбца в новом анализаторе. #88091 (xiaohuanlin).
  • Исправлено предупреждение «High ClickHouse memory usage» (без учета page cache). #88092 (Azat Khuzhin).
  • Исправлена возможная порча данных в таблицах MergeTree, где для столбца типа Set задан TTL. #88095 (Anton Popov).
  • Исправлено падение функций mortonEncode и hilbertEncode при вызове с пустым кортежем в качестве аргумента. #88110 (xiaohuanlin).
  • Теперь запросы с ON CLUSTER будут выполняться быстрее при наличии неактивных реплик в кластере. #88153 (alesapin).
  • Теперь DDL worker удаляет устаревшие хосты из набора реплик. Это уменьшит объём хранимых метаданных в ZooKeeper. #88154 (alesapin).
  • Выполнять корректный откат операции перемещения директории в случае ошибки. Необходимо перезаписывать все объекты 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 в базе данных с движком Database Replicated, из-за которой нельзя было добавлять новые реплики в базу данных. #88423 (Nikolay Degterinsky).
  • Исправлена агрегация разреженных столбцов, когда group_by_overflow_mode установлен в значение any. #88440 (Eduard Karacharov).
  • Исправлена ошибка «column not found» при использовании query_plan_use_logical_join_step=0 с несколькими операторами FULL JOIN USING. Закрывает #88103. #88473 (Vladimir Cherkasov).
  • Большие кластеры с количеством узлов > 10 имеют высокую вероятность неудачного восстановления с ошибкой [941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 <Trace>: RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try again. Узел num_hosts перезаписывается многими хостами одновременно. Это исправление делает параметр, контролирующий количество попыток, динамическим. Закрывает #87721. #88484 (Mikhail f. Shiryaev).
  • Этот PR нужен только для обеспечения совместимости с 23.8 и более ранними версиями. Проблема совместимости была внесена этим PR: https://github.com/ClickHouse/ClickHouse/pull/54240 Этот SQL‑запрос завершится с ошибкой при enable_analyzer=0 (до 23.8 он выполнялся нормально): select * from t1 s final join ( select * from t2 final ) r final on s.key = r.key join ( select * from t3 final ) c final on s.key = c.key Поскольку JoinToSubqueryTransformVisitor перепишет этот SQL в SELECT `_--s.key` AS `s.key`, `_--s.value` AS `s.value`, `_--r.key` AS `r.key`, `_--r.value` AS `r.value`, `_--c.key` AS `c.key`, `_--c.value` AS `c.value` FROM ( SELECT value AS `_--s.value`, key AS `_--s.key`, r.value AS `_--r.value`, r.key AS `_--r.key` FROM t1 AS s FINAL ALL INNER JOIN ( SELECT key, value FROM t2 FINAL ) AS r FINAL ON `_--s.key` = `_--r.key` ) AS `--.s` ALL INNER JOIN ( SELECT value AS `_--c.value`, key AS `_--c.key` FROM ( SELECT key, value FROM t3 FINAL ) AS c FINAL ) AS `--.t` ON `_--s.key` = `_--c.key` Мы хотим переписать этот SQL так (просто перенести последний FINAL): SELECT `_--s.key` AS `s.key`, `_--s.value` AS `s.value`, `_--r.key` AS `r.key`, `_--r.value` AS `r.value`, `_--c.key` AS `c.key`, `_--c.value` AS `c.value` FROM ( SELECT value AS `_--s.value`, key AS `_--s.key`, r.value AS `_--r.value`, r.key AS `_--r.key` FROM t1 AS s FINAL ALL INNER JOIN ( SELECT key, value FROM t2 FINAL ) AS r FINAL ON `_--s.key` = `_--r.key` ) AS `--.s` ALL INNER JOIN ( SELECT value AS `_--c.value`, key AS `_--c.key` FROM ( SELECT key, value FROM t3 FINAL ) AS c ) AS `--.t` FINAL ON `_--s.key` = `_--c.key`. #88491 (JIaQi).
  • Исправлено переполнение целочисленного значения, обнаруженное UBSAN, в сообщении об ошибке accurateCast при преобразовании больших значений в DateTime. #88520 (xiaohuanlin).
  • Исправлена поддержка CoalescingMergeTree для типов tuple. Это закрывает #88469. #88526 (scanhex12).
  • Запретить удаление для iceberg_format_version=1. Это закрывает #88444. #88532 (scanhex12).
  • Этот патч исправляет операцию перемещения для дисков plain-rewritable в папках произвольной глубины. #88586 (Mikhail Artemenko).
  • Исправлена работа SQL SECURITY DEFINER с функциями *cluster. #88588 (Julian Maicher).
  • Исправлено возможное аварийное завершение работы, вызванное одновременным изменением подлежащих константных столбцов PREWHERE. #88605 (Azat Khuzhin).
  • Исправлено чтение из текстового индекса и включено кэширование условий запроса (с включёнными настройками use_skip_indexes_on_data_read и use_query_condition_cache). #88660 (Anton Popov).
  • Исключение Poco::TimeoutException, выбрасываемое из Poco::Net::HTTPChunkedStreamBuf::readFromDevice, приводит к аварийному завершению процесса сигналом SIGABRT. #88668 (Miсhael Stetsyuk).
  • Исправлено добавление записей в system.zookeeper_connection_log при первом подключении ClickHouse после перезагрузки конфигурации. #88728 (Antonio Andelic).
  • Исправлена ошибка, при которой преобразование DateTime64 в Date с date_time_overflow_behavior = 'saturate' могло приводить к некорректным результатам для значений, выходящих за допустимый диапазон, при использовании часовых поясов. #88737 (Manuel).
  • N-я попытка исправить ошибку «having zero bytes» в движке таблиц S3 с включённым кэшем. #88740 (Kseniia Sumarokova).
  • Исправлена проверка доступа при выполнении SELECT к табличной функции loop. #88802 (pufit).
  • Перехватывать исключения при сбоях асинхронного логирования, чтобы предотвратить аварийное завершение программы. #88814 (Raúl Marín).