Изменения, нарушающие обратную совместимость
Изменения форматов данных и схем
- Изменено значение по умолчанию настройки
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). - Инвертированный текстовый индекс был полностью переработан для масштабируемой работы с наборами данных, не помещающимися в оперативную память. #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). - Новый синтаксис позволяет сделать параметр токенизатора более гибким. #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для классификации текста с помощью Naive Bayes на основе 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: принимают параметры начальной временной метки, конечной временной метки, шага и окна ретроспективного просмотра, а также два аргумента для временных меток и значений, но требуют как минимум 1 значение в окне вместо 2. Вычисляют PromQLchanges/resets, подсчитывая, сколько раз значение меняется или уменьшается в указанном окне для каждой временной метки во временной сетке, заданной параметрами. Возвращаемый тип — Array(Nullable(Float64)). #86010 (Stephen Chi). - Добавлена агрегатная функция
quantilePrometheusHistogram, которая принимает в качестве аргументов верхние границы и накопленные значения бакетов гистограммы и выполняет линейную интерполяцию между верхней и нижней границами бакета, в котором находится позиция квантиля. Ведет себя аналогично функции PromQLhistogram_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). - В таблицу
system.warningsдобавлены предупреждения о CPU и памяти. #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, которая позволяет указать минимальный уровень part, начиная с которого она будет создаваться как wide part. #88179 (Christoph Wurm).
Iceberg и озера данных
- Добавлена поддержка выполнения запросов к Apache Paimon в ClickHouse. Эта интеграция позволит пользователям ClickHouse напрямую работать с хранилищем озера данных Paimon. #84423 (JIaQi).
ALTER UPDATEдля движка таблицы Iceberg. #86059 (scanhex12).
Индексы и статистика
- Новый разреженный индекс bloom filter
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). - Одиночное имя настройки в SETTINGS запроса теперь трактуется как значение
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
- В клиент Keeper добавлены рекурсивные варианты команд
cp-cprиmv-mvr. #88570 (Mikhail Artemenko).
Экспериментальные возможности
- Функции
searchAllиsearchAnyтеперь работают и со столбцами без текстовых данных. В таких случаях они используют токенизатор по умолчанию. #87722 (Jimmy Aguilar Mena). - Реализованы тип данных
QBit, который хранит векторы в формате bit-sliced, и функцияL2DistanceTransposed, которая позволяет выполнять приближённый векторный поиск, где компромисс между точностью и скоростью задаётся параметром. #87922 (Raufs Dunamalijevs).
Повышение производительности
Выполнение запросов и оптимизация
- Повышена производительность запросов за счёт переработки порядка работы и интеграции кэша условий запроса (QCC) с анализом индексов. Теперь фильтрация в QCC применяется до анализа первичного ключа и индекса пропуска данных, что сокращает объём лишних вычислений индексов. Анализ индексов был расширен для поддержки нескольких фильтров диапазона, а результаты фильтрации теперь сохраняются обратно в QCC. Это значительно ускоряет запросы, в которых анализ индексов занимает основную часть времени выполнения, особенно если они опираются на индексы пропуска данных (например, векторные или инвертированные индексы). #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/ANTIJOIN, если условие фильтра всегда ложно для совпавших или несовпавших строк. Эта оптимизация управляется новой настройкойquery_plan_convert_any_join_to_semi_or_anti_join. 2. ПреобразованиеFULL ALL JOINвLEFT ALLилиRIGHT ALLJOIN, если условие фильтра всегда ложно для несовпавших строк с одной из сторон. #86028 (Dmitry Novik). - Производительность
HashJoinнемного улучшена в случаеLEFT/RIGHTJOIN с большим количеством несовпавших строк. #86312 (Nikita Taranov). - Переупорядочивание JOIN теперь использует статистику. Эту возможность можно включить, установив
allow_statistics_optimize = 1иquery_plan_optimize_join_order_limit = 10. #86822 (Han Fei). - Во время оптимизации JOIN теперь пропускается повторный расчёт статистики hash table во время выполнения. Добавлены новые profile events
JoinOptimizeMicrosecondsиQueryPlanOptimizeMicroseconds. #87683 (Vladimir Cherkasov). - В некоторых случаях
AddedColumns::appendFromBlockвстраивается, что немного повышает производительность JOIN. #88455 (Nikita Taranov).
Оптимизации String и функций
- Повышена производительность поиска по строкам с учетом регистра (например, при фильтрации
WHERE URL LIKE '%google%') за счет использования библиотеки StringZilla, которая задействует SIMD-инструкции CPU, когда они доступны. #84161 (Raúl Marín). - Повышена производительность
LIKEс prefix или suffix благодаря новой настройке по умолчаниюoptimize_rewrite_like_perfect_affix. #85920 (Guang Zhao). - Повышена производительность функций
tokens,hasAllTokens,hasAnyTokens. #88416 (Anton Popov).
Оптимизации MergeTree и хранилища
- Добавлена необязательная сериализация подстолбца
.sizeдля строковых столбцов верхнего уровня в таблицах MergeTree, чтобы улучшить сжатие и обеспечить эффективный доступ к подстолбцам. Также введены новые настройки MergeTree для управления версией сериализации и оптимизации выражений для пустых строк. #82850 (Amos Bird). - Снижены затраты на выделение и копирование памяти при выполнении SELECT из таблицы AggregatingMergeTree с FINAL, если таблица содержит столбцы типа
SimpleAggregateFunction(anyLast). #84428 (Duc Canh Le). - Улучшена производительность Вертикального слияния после выполнения легковесного удаления. #86169 (Anton Popov).
- Повышена производительность быстрых запросов с большим количеством частей в таблице (за счёт оптимизации
MarkRanges: используетсяdevectorвместоdeque). #86933 (Azat Khuzhin). - Улучшена производительность применения патч-частей в режиме JOIN. #87094 (Anton Popov).
- Включено сохранение marks в cache, а для чтения MergeTreeLazy исключён прямой IO. #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, а CPU — эффективнее выполнять предварительную выборку. Использует динамическую диспетчеризацию, чтобы задействовать программную предварительную выборку только на CPU Intel. Продолжает работу @taiyang-li в https://github.com/ClickHouse/ClickHouse/pull/77029. #86378 (Raúl Marín).
Оптимизации индексов и текстового поиска
- Повышена производительность построения текстового индекса для документов, содержащих в основном редкие токены. #87546 (Anton Popov).
Оптимизации для озер данных
Внутренние оптимизации
- Улучшения DB::SharedMutex. #87491 (Raúl Marín).
- Ускорен наиболее частый случай вызова деструктора Field. #87631 (Raúl Marín).
- Снижено влияние отсутствия fail points. #88196 (Raúl Marín).
Улучшения
Оптимизация и выполнение запросов
mannWhitneyUTestбольше не генерирует исключение, когда обе выборки содержат только одинаковые значения. Теперь функция возвращает корректный результат, согласующийся с SciPy. Закрывает: #79814. #80009 (DeanNeaht).- Добавлена экспериментальная оптимизация порядка JOIN, которая может автоматически переупорядочивать JOIN для повышения производительности (управляется настройкой
query_plan_optimize_join_order_limit). Обратите внимание, что оптимизация порядка JOIN в настоящее время имеет ограниченную поддержку статистики и в основном опирается на оценки числа строк от движков хранения — более продвинутый сбор статистики и оценка мощности будут добавлены в будущих релизах. Если после обновления у вас возникли проблемы с запросами JOIN, вы можете временно отключить новую реализацию, установивSET query_plan_use_new_logical_join_step = 0, и сообщить о проблеме для дальнейшего расследования. Примечание о разрешении идентификаторов из клаузы USING: Изменено разрешение коалесцированного столбца из клаузыOUTER JOIN ... USING, чтобы сделать его более согласованным: ранее при выборе и столбца USING, и квалифицированных столбцов (a, t1.a, t2.a) в OUTER JOIN столбец USING ошибочно разрешался какt1.a, показывая 0/NULL для строк из правой таблицы без соответствия в левой. Теперь идентификаторы из клаузы USING всегда разрешаются в коалесцированный столбец, тогда как квалифицированные идентификаторы разрешаются в некоалесцированные столбцы независимо от того, какие ещё идентификаторы присутствуют в запросе. Например: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) — До: a=0, t1.a=0, t2.a=2 (некорректно — ‘a’ разрешался как t1.a) — После: a=2, t1.a=0, t2.a=2 (корректно — ‘a’ коалесцируется). #80848 (Vladimir Cherkasov). - Добавлена поддержка фильтрации частей данных с помощью индексов пропуска данных при чтении, чтобы сократить количество ненужных обращений к индексам. Это поведение управляется новой настройкой
use_skip_indexes_on_data_read(по умолчанию отключена). Это устраняет проблему #75774. Сюда также входит часть общей подготовительной работы для #81021. #81526 (Amos Bird). - Транзакция перезаписи в Объектном хранилище диска удаляет предыдущие удалённые блобы, если транзакция метаданных зафиксирована. #81787 (Sema Checherinda).
- Стратегия повторных попыток для S3 стала настраиваемой, а настройки S3-диска теперь можно применять без перезапуска при изменении XML-файла config. #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, а данные — в теле запроса. Прерывание запроса без отправки полного тела не позволяет повторно использовать connection в HTTP/1.1, однако дополнительная latency из-за открытия новых connections обычно незначительна по сравнению с общей длительностью INSERT при больших объёмах данных. #84304 (c-end). - Больше нельзя задавать часовые пояса для типа Time. #84689 (Yarik Briukhovetskyi).
- Автодополнение на стороне клиента теперь работает быстрее и стабильнее благодаря использованию
system.completionsвместо выполнения нескольких запросов к системным таблицам. #84694 (|2ustam). - Упростили логику, связанную с разбором Time[64] в формате
best_effort, и устранили некоторые ошибки. #84730 (Yarik Briukhovetskyi). - Ускорено выполнение некоторых запросов с JOIN за счёт построения bloom filter по правому поддереву во время выполнения и передачи этого фильтра в сканирование левого поддерева. Это может быть полезно для таких запросов, как
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 для cluster) и функция deltaLakeS3Cluster (alias для deltaLakeCluster). Решает проблему #85358. #85547 (Smita Kulkarni).
- Переименовать InterpreterSystemQuery::dropReplicaImpl в InterpreterSystemQuery::dropStorageReplica - В InterpreterSystemQuery::dropDatabaseReplica: - При удалении с database или при удалении реплики целиком также удаляется реплика для каждой таблицы базы данных - Если указан ‘WITH TABLES’, удаляется реплика для каждого хранилища - В противном случае логика не меняется: для баз данных только вызывается DatabaseReplicated::dropReplica - При удалении реплики базы данных с path в Keeper: - Если указан ‘WITH TABLES’: - Восстановить базу данных как Atomic - Восстановить таблицы RMT из оператора в Keeper - Удалить базу данных (восстановленные таблицы также удаляются) - В противном случае только вызывается DatabaseReplicated::dropReplica для указанного path в 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). - Добавлена экспериментальная настройка
allow_experimental_delta_lake_writesдля возможности записи в delta lake; по умолчанию она отключена. #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). - Добавлено ограничение на число строк/байтов в data files при вставке в delta lake. Управляется настройками
delta_lake_insert_max_rows_in_data_fileиdelta_lake_insert_max_bytes_in_data_file. #86357 (Kseniia Sumarokova). - Разрешено использовать native-числа в
WHERE. Они уже могут выступать аргументами логических функций. Это упрощает оптимизации filter-push-down и move-to-prewhere. #86390 (Nikolai Kochetov). - Исправлена ошибка при выполнении
SYSTEM DROP REPLICAнад каталогом с повреждёнными метаданными. #86391 (Nikita Mikhaylov). - В Azure добавлены дополнительные попытки проверки доступа к диску (
skip_access_check=0), поскольку предоставление доступа может занимать довольно много времени. #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 постоянной, аналогично узлам
processingпри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).
- Исправлена вводящая в заблуждение ошибка «указанная загрузка не существует», возникающая, когда при multipart-загрузке из-за состояния гонки теряется исходное исключение. #86725 (Julia Kartseva).
- Ограничено описание плана запроса в запросе
EXPLAIN. Описание больше не вычисляется для запросов, отличных отEXPLAIN. Добавлена настройкаquery_plan_max_step_description_length. #86741 (Nikolai Kochetov). - Добавлена возможность настраивать количество ожидающих сигналов в попытке избежать
CANNOT_CREATE_TIMER(для профилировщиков запросов:query_profiler_real_time_period_ns/query_profiler_cpu_time_period_ns). Также для интроспекции теперь собираетсяSigQиз/proc/self/status(еслиProcessSignalQueueSizeблизок кProcessSignalQueueLimit, то, скорее всего, будут возникать ошибкиCANNOT_CREATE_TIMER). #86760 (Azat Khuzhin). - Распределённые операции вставки/select для озёр данных. #86783 (scanhex12).
- Повышена производительность запроса RemoveRecursive в 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) (сортировка, async inserts, file log). #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, который позволяет указать поддерживаемый AWS класс интеллектуального многоуровневого хранения. Поддерживается как в формате ключ-значение, так и в позиционном (устаревшем) формате. #87122 (alesapin). - Добавлена возможность отключать кодировку UTF8 для таблицы YTsaurus. #87150 (MikhailBurdukov).
- Добавлена поддержка Azure для дисков озер данных. #87173 (scanhex12).
- Добавлен новый параметр текстового индекса
dictionary_block_frontcoding_compressionдля управления сжатием словаря. По умолчанию он включен, и используется сжатиеfront-coding. #87175 (Elmi Ahmadov). - Для функции 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). - Переименована table function
arrowflightвarrowFlight. #87249 (Vitaly Baranov). clickhouse-benchmarkобновлён: теперь в его флагах CLI вместо_можно использовать-. #87251 (Ahmed Gouda).- Добавлена сеансовая настройка для исключения списка индексов пропуска данных из материализации при вставках (
exclude_materialize_skip_indexes_on_insert). Добавлена настройка таблицы MergeTree для исключения списка индексов пропуска данных из материализации во время слияния (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 views в соответствии с настройками
min_insert_block_size_rows_for_materialized_viewsиmin_insert_block_size_bytes_for_materialized_views. Ранее, еслиparallel_view_processingбыл включен, каждый поток, выполнявший вставку в конкретный materialized view, объединял данные независимо, что могло приводить к созданию большего числа частей. #87280 (Antonio Andelic). - Этот патч добавляет возможность проверять stat произвольного узла Keeper во время записи tx. Это может помочь выявлять проблему ABA. #87282 (Mikhail Artemenko).
- Тяжёлые запросы к YTsaurus теперь перенаправляются на тяжёлые прокси. #87342 (MikhailBurdukov).
- Этот патч исправляет откаты операций unlink/rename/removeRecursive/removeDirectory/etc, а также счётчики жёстких ссылок во всех возможных рабочих нагрузках для метаданных из дисковых транзакций, и упрощает интерфейсы, делая их более универсальными, чтобы их можно было повторно использовать в других метахранилищах. #87358 (Mikhail Artemenko).
- Добавлен параметр конфигурации
keeper_server.tcp_nodelay, который позволяет отключитьTCP_NODELAYдля Keeper. #87363 (Copilot). - Добавлена поддержка
--connectionвclickhouse-benchmarks. Этот параметр поддерживается так же, как вclickhouse-client: вы можете указать предопределённые подключения в клиентскомconfig.xml/config.yamlпо путиconnections_credentials, чтобы не передавать имя пользователя и пароль явно через аргументы командной строки. Вclickhouse-benchmarkтакже добавлена поддержка--accept-invalid-certificate. #87370 (Azat Khuzhin). - Теперь настройка
max_insert_threadsбудет действовать и для таблиц Iceberg. #87407 (alesapin). - В
PrometheusMetricsWriterдобавлены гистограммы и размерные метрики. Благодаря этому обработчикPrometheusRequestHandlerбудет иметь все необходимые метрики и сможет использоваться для надежного сбора метрик в облаке с низкими накладными расходами. #87521 (Miсhael Stetsyuk). - Функция
hasTokenтеперь возвращает 0 совпадений для пустого токена (тогда как раньше это вызывало исключение). #87564 (Jimmy Aguilar Mena). - Добавлена поддержка текстовых индексов для значений
ArrayиMap(mapKeysиmapValues). Поддерживаются функцииmapContainsKeyиhas. #87602 (Elmi Ahmadov). - Добавлена новая метрика
ZooKeeperSessionExpired, которая указывает на количество истёкших глобальных сеансов ZooKeeper. #87613 (Miсhael Stetsyuk). - Используйте клиент хранилища S3 со специальными настройками для резервного копирования (например, backup_slow_all_threads_after_retryable_s3_error) для серверного (native) копирования в пункт назначения резервной копии. Пометьте s3_slow_all_threads_after_retryable_error как устаревшую. #87660 (Julia Kartseva).
- Исправлена некорректная обработка настроек
max_joined_block_size_rowsиmax_joined_block_size_bytesпри сериализации плана выполнения запроса с экспериментальнымmake_distributed_plan. #87675 (Vladimir Cherkasov). - Параметр
enable_http_compressionтеперь включен по умолчанию. Это означает, что если клиент принимает HTTP-сжатие, сервер будет его использовать. Однако у этого изменения есть и определенные недостатки. Клиент может запросить ресурсоемкий метод сжатия, напримерbzip2, что не имеет особого смысла и увеличит потребление ресурсов сервера (но это будет заметно только при передаче больших результатов). Клиент также может запроситьgzip, что не так уж плохо, но все же менее оптимально, чемzstd. Закрывает #71591. #87703 (Alexey Milovidov). - Добавлена новая настройка
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). - Добавлена дополнительная информация для отслеживания производительности в Iceberg SELECT-запросах. #87903 (Daniil Ivanik).
- Добавлена новая настройка
joined_block_split_single_row, снижающая использование памяти в hash JOIN при большом числе совпадений на один ключ. Она позволяет разбивать результаты hash JOIN на фрагменты даже для совпадений, относящихся к одной строке левой таблицы, что особенно полезно, когда одной строке левой таблицы соответствуют тысячи или миллионы строк правой таблицы. Ранее все совпадения приходилось материализовать в памяти сразу. Это снижает пиковое потребление памяти, но может увеличить нагрузку на 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).
- Удалены пользовательские 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).
- В функцию
generateSerialIDдобавлен необязательный параметрstart_value, позволяющий задавать пользовательские начальные значения для новых серий. #88085 (Manuel). - Включает анализатор для проверки выражений значений по умолчанию столбцов в CREATE/ALTER TABLE. #88087 (Max Justus Spransy).
- Улучшено внутреннее планирование запросов: для
CROSS JOINтеперь используется JoinStepLogical. #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). - База данных каталогов Datalakes для задач распределённой обработки. #88273 (scanhex12).
- Обновлён Azure SDK: добавлено исправление для ‘Content-Length’, связанной с функциями копирования и создания контейнера. #88278 (Smita Kulkarni).
- Имя функции lag теперь регистронезависимо для совместимости с MySQL. #88322 (Lonny Kapelushnik).
- Добавлен параметр config
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будет выполняться до вычисления оценки диапазона слияния. До этого selector merge выбирал wide-слияние, а затем отфильтровывал его суффикс. Исправление: #85374. #88736 (Mikhail Artemenko). - В скрипт postinstall для
clickhouse-keeperдобавлен шаг, который включает запуск при загрузке системы. #88746 (YenchangChan). - Проверка учетных данных в веб-интерфейсе теперь выполняется только при вставке, а не при каждом нажатии клавиши. Это позволяет избежать проблемы с неправильно настроенными LDAP-серверами. Исправляет #85777. #88769 (Alexey Milovidov).
- Ограничена длина сообщения об Исключении при нарушении ограничения. В предыдущих версиях при вставке очень длинной строки можно было получить очень длинное сообщение об Исключении, которое в итоге записывалось в query_log. Закрывает #87032. #88801 (Alexey Milovidov).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Результаты alter-запросов теперь проверяются только на узле-инициаторе для баз данных Replicated и внутренне реплицируемых таблиц. Это устраняет ситуации, когда уже зафиксированный 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).
- Исправлена некорректная обработка дат до
epochс дробными секундами в различных функциях, связанных с дата-время, таких как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, которая в некоторых случаях приводила к ошибке при использовании маппинга массива. #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. Добавлена поддержка параллельных реплик в globalJoin для TableFunctionRemote. #85929 (zoomxi).
- Исправлено обращение к нулевому указателю в OrcSchemaReader::initializeIfNeeded(). Этот PR устраняет следующую проблему: #85292. #85951 (yanglongwei).
- Добавлена проверка, которая разрешает коррелированные подзапросы в секции FROM только в том случае, если они используют столбцы внешнего запроса. Исправляет #85469. Исправляет #85402. #85966 (Dmitry Novik).
- Исправлена работа
ALTER UPDATEпри обновлении столбца, подстолбец которого используется в материализованном выражении другого столбца. Ранее материализованный столбец, в выражении которого использовался подстолбец, обновлялся некорректно. #85985 (Pavel Kruglov). - Запретить изменение столбцов, чьи подстолбцы используются в PK или в выражении партиционирования. #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).
- Исправлено применение неверных значений по умолчанию для пути с подсказкой Enum внутри JSON. #86065 (Pavel Kruglov).
- Разбор URL каталога Hive в DataLake с санитизацией входных данных. Закрывает #86018. #86092 (rajat mohan).
- Исправлена логическая ошибка при динамическом изменении размера файлового кэша. Исправление закрывает #86122. Исправление закрывает https://github.com/ClickHouse/clickhouse-core-incidents/issues/473. #86130 (Kseniia Sumarokova).
- Используйте
NonZeroUInt64в качестве значения дляlogs_to_keepв DatabaseReplicatedSettings. #86142 (Tuan Pham Anh). - При выполнении запроса
FINALс индексом пропуска данных возникало исключение, если таблица (например,ReplacingMergeTree) была создана с настройкойindex_granularity_bytes = 0. Теперь это исправлено. #86147 (Shankar Iyer). - Устраняет UB и исправляет ошибки при разборе выражения партиционирования Iceberg. #86166 (Daniil Ivanik).
- Исправлено определение типов 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 с haystack типа FixedString и пустым needle. #86270 (Raúl Marín).
- Исправлен сбой при ALTER UPDATE Nullable(JSON). #86281 (Pavel Kruglov).
- Исправлено отсутствие столбца definer в system.tables. #86295 (Raúl Marín).
- Исправлено приведение из LowCardinality(Nullable(T)) в Dynamic. #86365 (Pavel Kruglov).
- Исправлена логическая ошибка при записи в DeltaLake. Закрыт #86175. #86367 (Kseniia Sumarokova).
- Исправлена ошибка
416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resourceпри чтении пустых blob-объектов из Azure Blob Storage на дискеplain_rewritable. #86400 (Julia Kartseva). - Исправлена работа
GROUP BY Nullable(JSON). #86410 (Pavel Kruglov). - Исправлена ошибка в materialized views: MV мог не работать, если его создавали, удаляли, а затем снова создавали с тем же именем. #86413 (Alexander Tokmakov).
- Возвращать ошибку, если при чтении из функций *cluster недоступны все реплики. #86414 (Julian Maicher).
- Устранена утечка
MergesMutationsMemoryTracking, вызванная таблицамиBuffer, а также исправленquery_views_logпри стриминге изKafka(и других источников). #86422 (Azat Khuzhin). - Исправлена работа SHOW TABLES после удаления ссылочной таблицы alias-хранилища. #86433 (RinChanNOW).
- Исправлена проблема с отсутствующим заголовком фрагмента, когда включен send_chunk_header и UDF вызывается через HTTP-протокол. #86469 (Vladimir Cherkasov).
- Исправлена возможная взаимная блокировка при включенных операциях сброса профиля jemalloc. #86473 (Azat Khuzhin).
- Исправлено чтение подстолбцов в таблицах с движком DeltaLake. Закрывает #86204. #86477 (Kseniia Sumarokova).
- Правильная обработка ID 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, возникавшее при запросе с файлами part нулевого размера. #86563 (Max Justus Spransy).
- Исправлено отсутствие заголовка фрагмента при включенном send_chunk_header и вызове UDF через HTTP-протокол. #86606 (Vladimir Cherkasov).
- Исправлена логическая ошибка S3Queue “Expected current processor to be equal to ”, возникавшая из-за истечения срока действия сеанса Keeper. #86615 (Kseniia Sumarokova).
- Ошибки, связанные с Nullable, при вставке и pruning. Это закрывает #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 для узлов постоянной обработки. Исправление для https://github.com/ClickHouse/ClickHouse/pull/85995. Закрывает #86406. #86841 (Kseniia Sumarokova).
- Исправлена ошибка, из-за которой таблица с движком TimeSeries препятствовала созданию новой реплики в базе данных Replicated. #86845 (Nikolay Degterinsky).
- Исправлены запросы к
system.distributed_ddl_queueв случаях, когда у задач отсутствуют некоторые узлы Keeper. #86848 (Antonio Andelic). - Исправлено смещение указателя чтения в конце распакованного блока. #86906 (Pavel Kruglov).
- Обработка исключения, возникающего во время асинхронного выполнения Iceberg Iterator. #86932 (Daniil Ivanik).
- Исправлено сохранение крупных предварительно обработанных XML-конфигураций. #86934 (c-end).
- Исправлено заполнение поля date в таблице 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). - Исправлена работа с таблицами озера данных, в имени которых есть percent-encoded последовательность. Закрывает #86626. #87020 (Anton Ivashkin).
- Исправлена ошибка разрешения схемы таблицы в табличной функции
url(), когда значение параметраparallel_replicas_for_cluster_functionsравно 1. #87029 (Konstantin Bogdanov). - Корректное приведение типов результата 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).
- Исправлено чтение идентификаторов полей в типах Map и Array из 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для всех числовых типов. Исправляет проверку выхода за нижнюю границу диапазона у 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 сопоставляет только пути, находящиеся под prefix. #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. Исправляет обращение кnullptr. #87250 (Daniil Ivanik). - Исправлена работа легковесных обновлений с подзапросами, читающими из других таблиц
MergeTree. #87285 (Anton Popov). - Исправлена оптимизация move-to-prewhere, которая не работала при наличии политики доступа на уровне строк. Продолжение #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).
- Исправлено создание массива пустых Tuple. #87520 (Pavel Kruglov).
- Добавлена проверка недопустимых столбцов при создании временной таблицы. #87524 (Pavel Kruglov).
- Никогда не добавляйте столбцы партиций Hive в заголовок формата. Исправлено #87515. #87528 (Arthur Passos).
- Исправлена подготовка к чтению из формата в DeltaLake при использовании текстового формата. #87529 (Pavel Kruglov).
- Исправлена проверка прав доступа при select и вставке в таблицы Buffer. #87545 (pufit).
- Запрещено создавать индекс пропуска данных для таблицы S3. #87554 (Bharat Nallan).
- Предотвращена утечка учитываемой памяти при асинхронном логировании (может приводить к значительному расхождению, за 10 часов — около 100 GiB) и в text_log (возможна почти такая же величина расхождения). #87584 (Azat Khuzhin).
- Исправлена ошибка, которая могла приводить к переопределению глобальных настроек сервера настройками SELECT из View или Materialized View, если такое представление удалялось асинхронно, а сервер перезапускался до завершения фоновой очистки. #87603 (Alexander Tokmakov).
- При расчете предупреждения о перегрузке памяти теперь исключаются байты кэша страниц в пространстве пользователя (если это возможно). #87610 (Bharat Nallan).
- Исправлена ошибка, из-за которой неправильный порядок типов при десериализации CSV приводил к
LOGICAL_ERROR. #87622 (Yarik Briukhovetskyi). - Исправлена некорректная обработка
command_read_timeoutдля словарей executable. #87627 (Azat Khuzhin). - Исправлено некорректное поведение SELECT * REPLACE в предложении WHERE при использовании нового анализатора и фильтрации по заменённым столбцам. #87630 (xiaohuanlin).
- Исправлена работа двухуровневой агрегации при использовании
MergeповерхDistributed. #87687 (c-end). - Исправлено формирование выходного блока в алгоритме HashJoin, когда список строк правой таблицы не используется. Исправляет #87401. #87699 (Dmitry Novik).
- Режим чтения с параллельными репликами мог выбираться некорректно, если после анализа индексов не оставалось данных для чтения. Закрывает #87653. #87700 (zoomxi).
- Исправлена обработка столбцов
timestamp/timestamptzв Glue. #87733 (Andrey Zvonov). - Исправляет #86587. #87761 (scanhex12).
- Исправлена запись логических значений в интерфейсе PostgreSQL. #87762 (Artem Yurov).
- Исправлена ошибка «неизвестная таблица» в запросе INSERT SELECT с CTE, #85368. #87789 (Guang Zhao).
- Исправлено чтение null-подстолбца Map из Variant, который не может находиться внутри Nullable. #87798 (Pavel Kruglov).
- Исправлена обработка ошибки при сбое полного удаления базы данных в кластере на вторичном узле. #87802 (Tuan Pham Anh).
- Исправлено несколько ошибок в skip-индексах. #87817 (Raúl Marín).
- В AzureBlobStorage обновили логику: теперь сначала выполняется попытка native copy, а при ошибке ‘Unauthroized’ происходит переход к read & write (в AzureBlobStorage, если для source и пункта назначения используются разные storage account, возникает ошибка ‘Unauthorized’). Также исправили применение “use_native_copy”, когда в configuration определена конечная точка. #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).
- Ограничено применение pushdown фильтра для PASTE JOIN, так как это может приводить к некорректным результатам. #88078 (Yarik Briukhovetskyi).
- Применяет нормализацию URI перед выполнением проверки привилегий, добавленной в https://github.com/ClickHouse/ClickHouse/pull/84503. #88089 (pufit).
- Исправлена логическая ошибка, возникавшая, когда ARRAY JOIN COLUMNS() не находил ни одного столбца в новом анализаторе. #88091 (xiaohuanlin).
- Исправлено предупреждение “Высокое использование памяти ClickHouse” (без учёта page cache). #88092 (Azat Khuzhin).
- Исправлена возможная порча данных в таблицах
MergeTreeс настроеннымTTLдля столбца. #88095 (Anton Popov). - Исправлено падение в функциях
mortonEncodeиhilbertEncodeпри вызове с пустым кортежем в качестве аргумента. #88110 (xiaohuanlin). - Теперь запросы
ON CLUSTERбудут выполняться быстрее, если в кластере есть неактивные реплики. #88153 (alesapin). - Теперь DDL-воркер очищает набор реплик от устаревших хостов. Это позволит сократить объём метаданных, хранимых в 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 view в базе данных Replicated, из-за которой нельзя было добавлять в базу данных новые реплики. #88423 (Nikolay Degterinsky).
- Исправлена агрегация разреженных столбцов, если
group_by_overflow_modeустановлен вany. #88440 (Eduard Karacharov). - Исправлена ошибка “столбец не найден” при использовании
query_plan_use_logical_join_step=0в нескольких секциях FULL JOIN USING. Закрывает #88103. #88473 (Vladimir Cherkasov). - В больших кластерах с числом узлов > 10 восстановление с высокой вероятностью завершается ошибкой
[941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 <Trace>: RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try again. Узелnum_hostsодновременно перезаписывается множеством хостов. Это исправление делает параметр, управляющий числом попыток, динамическим. Закрывает #87721. #88484 (Mikhail f. Shiryaev). - Этот PR нужен только для обеспечения совместимости с 23.8 и более ранними версиями. Проблема совместимости была внесена этим PR: https://github.com/ClickHouse/ClickHouse/pull/54240 Этот SQL будет завершаться ошибкой при
enable_analyzer=0(до 23.8 всё работало корректно):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). - Исправлена работа coalescing merge tree для типов Tuple. Это закрывает #88469. #88526 (scanhex12).
- Запретили удаления для
iceberg_format_version=1. Это закрывает #88444. #88532 (scanhex12). - Этот патч исправляет операцию перемещения на дисках
plain-rewritableдля каталогов произвольной глубины. #88586 (Mikhail Artemenko). - Исправлено поведение SQL SECURITY DEFINER для функций *cluster. #88588 (Julian Maicher).
- Исправлено возможное аварийное завершение, вызванное параллельной мутацией базовых const-столбцов PREWHERE. #88605 (Azat Khuzhin).
- Исправлено чтение из текстового индекса и включён кэш условий запроса (если включены настройки
use_skip_indexes_on_data_readиuse_query_condition_cache). #88660 (Anton Popov). - Исключение
Poco::TimeoutException, сгенерированное вPoco::Net::HTTPChunkedStreamBuf::readFromDevice, приводит к аварийному завершению процесса с сигналом SIGABRT. #88668 (Miсhael Stetsyuk). - Исправлено добавление записей в
system.zookeeper_connection_logв случае, если ClickHouse впервые подключается после перезагрузки конфигурации. #88728 (Antonio Andelic). - Исправлена ошибка, из-за которой преобразование DateTime64 в Date при
date_time_overflow_behavior = 'saturate'могло приводить к неверным результатам для значений вне допустимого диапазона при работе с часовыми поясами. #88737 (Manuel). - N-я попытка исправить ошибку “having zero bytes error” в движке таблицы S3 при включенном кэше. #88740 (Kseniia Sumarokova).
- Исправлена проверка прав доступа при выполнении SELECT для табличной функции
loop. #88802 (pufit). - Перехватывать исключения в случае сбоя асинхронного логирования, чтобы предотвратить аварийное завершение программы. #88814 (Raúl Marín).