Изменено значение настройки 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 сохранит прежнее поведение с возможными улучшениями производительности. Если вы обновляетесь с версии ниже 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).
Теперь пользователи могут использовать 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).
Добавлена поддержка выполнения запросов к 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).
Добавлена поддержка синтаксиса 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).
Доступ к экземплярам 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).
Ограничено количество именованных коллекций с помощью настроек max_named_collection_num_to_warn и max_named_collection_num_to_throw. Добавлена новая метрика NamedCollection и ошибка TOO_MANY_NAMED_COLLECTIONS. #87343 (Pablo Marcos).
Функции 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. Пример: в 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).
Добавлена опциональная сериализация подстолбца .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).
RadixSort: помогает компилятору эффективнее использовать SIMD и улучшает предварительную выборку данных (prefetching) на уровне CPU. Применяет динамический диспетчинг вызовов, чтобы использовать программный prefetching только на процессорах Intel. Продолжает работу @taiyang-li из https://github.com/ClickHouse/ClickHouse/pull/77029. #86378 (Raúl Marí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).
Автодополнение на стороне клиента становится быстрее и более единообразным при использовании 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).
Теперь можно не указывать функцию identity() для партиции в таблице Iceberg. #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», возникающая, когда исходное исключение теряется в процессе многокомпонентной загрузки из-за гонки состояний. #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).
Улучшена производительность операции RemoveRecursive в Keeper. #86789 (Antonio Andelic).
Удалены лишние пробельные символы в PrettyJSONEachRow при выводе типа JSON. #86819 (Pavel Kruglov).
Теперь мы записываем размеры 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) оценка для функции 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, чтобы он принимал - вместо _ в своих CLI-флагах. #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) для серверного (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).
Добавлена новая настройка 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).
Поведение TCP и HTTP унифицировано при передаче дублирующихся внешних таблиц. HTTP позволяет передавать временную таблицу несколько раз. #88032 (Sema Checherinda).
Добавлена возможность создавать базу данных 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 (Konstantин Богданов).
Добавлена перегрузка hasAny/hasAllTokens для принятия строкового аргумента. #88679 (George Larionov).
После внесения этого патча эвристика to_remove_small_parts_at_right будет выполняться перед вычислением оценки диапазона слияния. Ранее селектор слияния выбирал широкое слияние, а затем отфильтровывал его суффикс. Исправления: #85374. #88736 (Mikhail Artemenko).
Добавлен шаг в postinstall-скрипт для clickhouse-keeper, обеспечивающий запуск при загрузке системы. #88746 (YenchangChan).
Проверка учетных данных в Web UI теперь выполняется только при вставке, а не при каждом нажатии клавиши. Это позволяет избежать проблем с неправильно настроенными 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).
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).
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).
Используйте 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).
Исправлена ошибка 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).
Исправлена ошибка в 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).
Корректная обработка идентификатора хоста 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).
Исправлен LogicalError, возникающий, когда параллельные запросы пытаются захватить одну и ту же блокировку. #86751 (Pervakov Grigorii).
Исправлена запись значения NULL в общие данные JSON во входном формате RowBinary и добавлены дополнительные проверки в ColumnObject. #86812 (Pavel Kruglov).
Добавлена поддержка типов JSON/Dynamic в таблице, создаваемой табличной функцией cluster. #86821 (Pavel Kruglov).
Исправлена проблема с перестановкой пустого Tuple при использовании LIMIT. #86828 (Pavel Kruglov).
Исправлена проблема, из-за которой таблица с движком 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).
Исправлена проблема, из-за которой результат функции, вычисляемой в 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).
Исправлены логические ошибки в виртуальном столбце _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).
Предотвращено создание привилегии для несуществующего движка. #87419 (Jitendra).
Игнорировать только ошибки «not found» для s3_plain_rewritable (игнорирование других ошибок может привести ко всевозможным проблемам). #87426 (Azat Khuzhin).
Исправлены словари, использующие источник YTSaurus и макеты *range_hashed. #87490 (MikhailBurdukov).
Исправлена ошибка при создании массива пустых кортежей. #87520 (Pavel Kruglov).
Проверка наличия недопустимых столбцов при создании временной таблицы. #87524 (Pavel Kruglov).
Исправлена подготовка чтения из 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).
Исправлена запись булевых значений в интерфейсе 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).
Исправлена возможная порча данных в таблицах 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).
Сделать команды 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).
Исправлено чтение из текстового индекса и включено кэширование условий запроса (с включёнными настройками 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).