Релиз ClickHouse 26.4, 2026-04-30. Презентация, Видео
Обратно несовместимое изменение
- Оператор
INтеперь использует семантику точного соответствия значений для типаBool: значениямBoolсоответствуют только0и1в наборе. Ранее числовые значения больше255в набореINпри сравнении сBoolошибочно приводились к true, поэтомуSELECT CAST(1, 'Bool') IN (256)возвращал 1. Теперь он корректно возвращает0. Закрывает #92980. #93115 (Ashrith Bandla). - Библиотека H3 обновлена до v4, что повышает точность вычисления длины, площади и других метрик. Это обратно несовместимое изменение, поскольку новые результаты отличаются от прежних. #100348 (Alexey Milovidov).
- Теперь запрещено использовать
SELECTкак некавыченный идентификатор в элементе списка выраженийWITH. #101059 (Aruj Bansal). - Этот патч меняет то, как таблица Merge обрабатывает виртуальные столбцы. Если базовая таблица содержит
_tableили_database, эти столбцы будут считываться из хранилища; в противном случае они будут заполняться после этапа чтения на шаге expression. #101742 (Mikhail Artemenko). - Оператор
INтеперь также отклоняет преобразованияDecimalс потерей точности внутри составных типов (Tuple,Array,Map), что делает его поведение согласованным со скалярными сравнениями верхнего уровня. Ранее проверки точности применялись только к скалярным значениям верхнего уровня: например,CAST('33.3', 'Decimal64(1)') IN (33.33)корректно возвращал0, ноCAST(['33.3'], 'Array(Decimal64(1))') IN ([33.33])ошибочно возвращал1, поскольку преобразование с потерей точности происходило внутриArray. Теперь в обоих случаях корректно возвращается0. #101812 (Nihal Z. Miaji). - Значения по умолчанию для
http_max_fieldsуменьшены с 1,000,000 до 1,000, а дляhttp_max_field_name_size— со 128 KB до 4 KB, чтобы ограничить использование памяти HTTP-соединениями до аутентификации. Добавлены настройкиhttp_max_request_header_sizeиhttp_headers_read_timeout. Пользователи, которым нужны прежние более высокие лимиты, могут восстановить их через настройки. #103285 (Sema Checherinda).
Новая возможность
- Добавлен автоматический сброс на диск для
hashJOIN и параллельногоhashJOIN: при достижении лимита памяти они преобразуются вgrace hashJOIN. Это поведение управляется параметромmax_bytes_before_external_join. #97813 (János Benjamin Antal). - Добавлена поддержка Arrow Flight SQL. #91170 (Yakov Olkhovskiy).
- Добавлена поддержка инкрементального чтения для движков таблиц
Paimonс отслеживанием прогресса снимков в Keeper, включая выборочное чтение дельты снимка черезpaimon_target_snapshot_id, а также расширено покрытие тестами для сопоставления типов, отсечения партиций и сценариев инкрементального чтения. #93655 (XiaoBinMu). - Функция
stemтеперь больше не экспериментальная (раньше нужно было включить настройкуallow_experimental_nlp_functions). #102399 (Jimmy Aguilar Mena). Теперь с помощью функцииstemможно легко выполнять стемминг всех слов/токенов в столбцах типовString,FixedString,Array([Fixed]String),Nullable,LowCardinalityиConst. #99137 (Jimmy Aguilar Mena). - Реализовано новое поведение
max_insert_block_size_rows,max_insert_block_size_bytes,min_insert_block_size_rows,min_insert_block_size_bytesв процессе squashing в рамках настройки совместимостиuse_strict_insert_block_limits. #94207 (Kirill Kopnev). - Добавлена функция
arrayAutocorrelation(arr [, max_lag]), вычисляющая нормализованную автокорреляцию числового массива для каждого лага. Поддерживаются массивы целочисленных типов, типов с плавающей точкой и Decimal. #94776 (Wenyu Chen). - SQL-функция
obfuscateQuery. Закрывает #98010. #98305 (Xuewei Wang). - Добавлена поддержка типов Map и JSON/Object в атрибутах словаря. Теперь словари могут хранить и возвращать сложные типы, включая Map(String, String), Map(String, Array(String)), JSON и Nullable(JSON), в структурах FLAT и HASHED. #98627 (yanglongwei).
- Добавлены две новые настройки MergeTree —
replicated_fetches_min_part_levelиreplicated_fetches_min_part_level_timeout_seconds, которые позволяют репликам пропускать загрузку недавно вставленных (не слитых) частей с других реплик, снижая накладные расходы на репликацию при интенсивной ингестии. #98625 (tanner-bruce). - Добавлена поддержка индекса пропуска данных MergeTree для JSON-столбцов с использованием JSONAllPaths и типов индексов bloom_filter, tokenbf_v1, ngrambf_v1 и text (inverted), что позволяет пропускать гранулы на основе набора JSON-путей, присутствующих в каждой грануле. #98886 (Pavel Kruglov).
- Функция
printfтеперь поддерживает неконстантные строки формата, что позволяет задавать разные шаблоны формата для каждой строки в зависимости от значений столбцов. #98991 (Yash ). - Добавлен новый индекс-проекция
commit_order, переупорядочивающий данные в порядке вставки. #99004 (Mikhail Artemenko). - Добавлена функция
highlight, которая оборачивает вхождения искомых терминов в текстовой строке в HTML-теги (по умолчанию<em>/</em>). Поддерживает ASCII-сопоставление без учёта регистра, автоматическое слияние перекрывающихся совпадений и пользовательские открывающие/закрывающие теги. #99131 (Peng). - Реализованы квоты по хешу нормализованного запроса для защиты публичных сервисов ClickHouse от злоупотреблений. 1. Добавлена поддержка
NORMALIZED_QUERY_HASHв качестве типа ключа квоты — для каждого уникального нормализованного запроса создается отдельный бакет квоты, поэтомуCREATE QUOTA q KEYED BY normalized_query_hashотслеживает каждый уникальный запрос независимо. 2. Добавлена поддержкаQUERIES_PER_NORMALIZED_HASHв качестве типа ресурса квоты — ограничивает максимальное число выполнений любого отдельного нормализованного запроса в пределах интервала, поэтомуMAX queries_per_normalized_hash = 100не позволяет одному шаблону запроса выполняться более 100 раз. #99586 (Alexey Milovidov). - Теперь пользователи могут писать JOIN-запросы с использованием синтаксиса
NATURAL JOIN, который автоматически выполняет сопоставление по всем столбцам с одинаковыми именами и устраняет дубликаты этих столбцов в результате. #99840 (Peter Nguyen). - Добавлена поддержка
SET TIME ZONE 'tz'в качестве псевдонима дляSET session_timezone. #99883 (phulv94). - Добавлена поддержка параметризованных запросов в веб-интерфейсе (
play.html): параметры запроса вида{name:Type}распознаются, и для ввода их значений отображаются соответствующие поля. #100041 (Alexey Milovidov). - Поддержка стандартного предложения SQL
VALUESкак табличного выражения вFROM, например:SELECT * FROM (VALUES (1, 'a'), (2, 'b')) AS t(id, val). #100143 (Desel72). - В оператор
EXTRACTдобавлены единицы, совместимые с PostgreSQL:EPOCH,DOW,DOY,ISODOW,ISOYEAR,WEEK,CENTURY,DECADE,MILLENNIUM. Также исправленEXTRACT(WEEK FROM date), который ранее выдавал ошибку. #100274 (Alexey Milovidov). - Добавлена поддержка составных литералов Interval по стандарту SQL с квалификаторами диапазона
TO, напримерINTERVAL '1:30' HOUR TO MINUTE. Внутри они раскладываются в суммы интервалов. #100453 (Desel72). - Добавлены асинхронные метрики памяти в буферах приёма и передачи TCP ядра (
sk_rmem_alloc,sk_wmem_alloc) для сокетов пула HTTP-соединений, представляемые в виде процентилей p50/p75/p90/p95 и суммарных значений по каждой группе соединений. #100575 (Sema Checherinda). - Добавлен веб-интерфейс jemalloc для просмотра данных профилирования ClickHouse Keeper, доступный по адресу
/jemallocна порту управления по HTTP. #100606 (murphy-4o). - Добавлена команда
SYSTEM FLUSH OBJECT STORAGE QUEUE db.table PATH 'x'для режимовorderedиunordered. #100709 (Bharat Nallan). - Добавлена функция
JSONAllValues, которая возвращает все значения из столбцаJSONкакArray(String); значения сериализуются в текстовое представление и упорядочиваются по именам путей. Добавлена поддержка текстового индекса для выраженияJSONAllValuesв столбцахJSON. Когда текстовый индекс создаётся дляJSONAllValues(json_column), он автоматически используется для фильтрации запросов по подстолбцамJSON(например,json_column.key1 = 'value'). #100730 (Anton Popov). - Добавляет новую настройку
input_format_column_name_matching_mode, которая позволяет задавать разную чувствительность к регистру для форматов ввода. #99346 (manerone). - Добавлена команда
watchвclickhouse-keeper-client, а в командахget,existsиls— поддержка наблюдения. #100834 (Den Kalantaevskii). - В ClickHouse Keeper добавлены запрос
getChildrenRecursive(ListRecursive) и командаlsrвclickhouse-keeper-client. Это закрывает #99916. #100998 (Konstantin Vedernikov). - Добавлена новая функция
arrayTranspose, которая принимает двумерный массив (матрицу) и транспонирует его:SELECT arrayTranspose([[1, 2, 3], [4, 5, 6]]). #101214 (Vitaly Baranov). - У настройки
auto_statistics_types mergetreeзначение по умолчанию —'minmax, uniq'— статистики minmax и uniq теперь автоматически создаются для всех подходящих столбцов в новых таблицах - уmaterialize_statistics_on_insertзначение по умолчанию — false — статистика теперь строится во время слияний, а не при вставке, что снижает накладные расходы на вставку. ИспользуйтеSET materialize_statistics_on_insert = 1, чтобы восстановить прежнее поведение. #101275 (Han Fei). - Добавлена настройка
prefer_dependency_replicaдля обновления цепочек зависимостей materialized view, чтобы сократить потери данных из-за задержки репликации между репликами. #101591 (Seva Potapov). - Добавлена функция
hasPhrase(псевдонимmatchPhrase) для поиска по фразам (непрерывным последовательностям токенов). Поиск выполняется методом полного перебора, то есть текстовый индекс его пока не поддерживает. #101997 (Elmi Ahmadov). - Добавлены метрики-гистограммы
s3_read_request_duration_microsecondsиs3_read_request_bytes, чтобы отслеживать время жизни соединений для запросов S3 GET и объём потребляемых байтов; они доступны вsystem.histogram_metricsи в конечной точке Prometheus. #102058 (Sema Checherinda). - Значения
DateиDate32теперь можно складывать со значениямиTimeиTime64с помощью оператора+, получая результат типаDateTimeилиDateTime64. Например,SELECT toDate('2024-01-15') + toTime('14:30:25')возвращает2024-01-15 14:30:25. Результат вычисляется с учетом часового пояса сеанса, а результаты, выходящие за допустимый диапазон, обрабатываются в соответствии с настройкойdate_time_overflow_behavior. Закрывает #95914. #102421 (Nihal Z. Miaji). - Текстовый индекс теперь имеет статус GA и остается включенным независимо от настройки
compatibility, что предотвращает его неожиданное отключение при восстановлении из резервных копий или работе в режиме совместимости. #101518 (Nikita Fomichev).
Экспериментальные возможности
- Добавлена команда
ALTER TABLE ... EXECUTE remove_orphan_filesдля таблиц Iceberg, позволяющая выявлять и удалять файлы без ссылок из Объектного хранилища. #99127 (murphy-4o). - Добавлена настройка
query_plan_optimize_join_order_randomize, которая случайным образом изменяет статистику, используемую для переупорядочивания JOIN, что полезно для тестирования. #100643 (Vladimir Cherkasov). - В ClickHouse добавлена поддержка функции ИИ, позволяющая пользователям вызывать конечные точки OpenAI и Anthropic с помощью SQL.
aiGenerateстала первой такой функцией. #100831 (George Larionov). - Добавлены функции ИИ:
aiClassify,aiExtractиaiTranslateдля использования API LLM в ClickHouse. #100832 (George Larionov). - Добавлена
system.histogram_metric_log— новая системная таблица, которая периодически создает снимки всех гистограммных метрик (например, задержек S3/Azure и длительности этапов обработки запросов Keeper). Кроме того, столбецvalueтаблицыsystem.histogram_metricsизменен наFloat64, так как этот тип более гибок и лучше совместим с моделью данных Prometheus. #103046 (Miсhael Stetsyuk). Структура таблицы, вероятно, изменится в будущих релизах.
Повышение производительности
- ClickHouse теперь может исключать целые части данных в SELECT-запросах на основе статистики min/max. #94140 (zoomxi).
- Снижена конкуренция за блокировки при операциях только для чтения в таблицах ReplicatedMergeTree с завершёнными мутациями. #95771 (Eduard Karacharov).
- Параметр
optimize_read_in_orderтеперь учитывается при чтении проекций. Закрывает #89453. #95885 (Andrey Zvonov). - Небольшие улучшения в Hash JOIN и параллельном хеш-соединении. #96663 (Yarik Briukhovetskyi).
- Оптимизировано преобразование
DISTINCTза счёт отключения оптимизации для столбцовLowCardinality, если входные данные почти полностью состоят из уникальных значений. #97113 (Nihal Z. Miaji). - Оптимизация производительности запросов
LIKEиз #97723. Теперь эти запросы могут использовать текстовые индексы. #98149 (Elmi Ahmadov). - Векторизованные математические функции (
exp,log,sigmoid,tanh) теперь работают быстрее на AArch64 (с использованием NEON/SVE), а также на FreeBSD/Darwin, где раньше использовалась более медленная скалярная реализация. #98230 (Raúl Marín). - В запросах, фильтрующих по столбцам первичного ключа
MergeTreeс помощью regexp-альтернаций из строковых литералов, таких как^(abc-1|abc-2), теперь можно использовать отсечение по первичному ключу, если альтернативы имеют общий префикс. #98988 (Yash ). - Динамическая фильтрация top-k для
ORDER BY ... LIMITобобщена и теперь поддерживает типыNullable,StringиCOLLATE. #99033 (murphy-4o). - Ускорен hash JOIN по ключам
Int32иInt64с небольшим диапазоном благодаря использованию хеш-таблицы с прямой индексацией. #99275 (Hechem Selmi). - Более быстрые несмежные запросы к столбцам
LowCardinalityс одним словарём. #99285 (Ivan Babrou). - Ускорены функции
var*Stableиstddev*Stableдля столбцовFloat64благодаря девиртуализации внутреннего цикла. Примечание: это позволяет задействовать оптимизации компилятора (FMA/регистры), которые изменяют результаты вычислений с плавающей запятой на уровне ULP. #99460 (Riyane El Qoqui). - Используется оптимизированное кодирование Firedancer base58 для входных данных размером 32/64 байта (автоматически для
base58Encode). Также можно использовать оптимизированное декодирование base58, если результат декодирования имеет размер 32/64 байта (явно черезbase58Decode('...', 32)или аналогичным образом). #99461 (Joanna Hulboj). - Включены оптимизации на основе секций компоновщика (
-ffunction-sections,-fdata-sections,--icf=all) для уменьшения размера бинарного файла и более эффективного использования кэша инструкций. #99474 (Alexey Milovidov). - Исправлено ухудшение масштабируемости для коротких запросов с агрегацией на машинах с большим числом ядер. Когда запрос читает мало marks, конвейер после агрегации больше не разрастается до
max_threads, что позволяет избежать накладных расходов из-за почти пустых потоков. #99493 (Alexey Milovidov). - Повышена производительность запросов с параллельными репликами за счёт правильного выбора размера задачи чтения. #99801 (Nikita Taranov).
- Разрешена предзагрузка при чтении удалённого файла через кэш страниц в пространстве пользователя. #99919 (Alexey Milovidov).
- Устранено лишнее вычисление подстолбца String
.sizeпри перечислении подстолбцов. #99941 (Pavel Kruglov). - Сделали индикатор прогресса в clickhouse-client более плавным при работе из отеля с кластерами с очень большим количеством реплик. #100145 (Alexey Milovidov).
- Запускается
MemoryWorkerвclickhouse-local, когда включен кэш страниц, чтобы кэш страниц в пространстве пользователя действительно мог использоваться. #100306 (Alexey Milovidov). - Оптимизировано выполнение запросов за счёт переноса условия
LIMITвнутрьUNION ALL. #100364 (Alexey Milovidov). - Добавлена поддержка JIT-компиляции для сравнений столбцов
StringиFixedStringвORDER BY, что повышает производительность сортировки на фазе merge на 6–17% для ключей сортировки, в которых преобладают строковые столбцы. В соавторстве с @lgbo-ustc. #100577 (Raúl Marín). - Когда
read_in_order_use_virtual_rowвключен вместе с новой настройкойread_in_order_use_virtual_row_per_block, информация о границах виртуальных строк теперь выдается после чтения каждого блока изMergeTree, что позволяет механизму слияния на лету перераспределять приоритеты источников для частей, данные которых полностью отфильтровываются условиямиWHERE/PREWHERE/JOIN. Закрывает #99945. #100603 (Vladimir Cherkasov). - Ускорено преобразование Float в String для больших целочисленных значений за счёт расширения быстрого пути
itoaс помощью совместимого с dragonbox округления. #100649 (Raúl Marín). - Заменили
dragonboxнаzmij, что ускорило преобразование Float-to-String в 1,5–3 раза. #100650 (Raúl Marín). - Ускорено преобразование
Int128/UInt128в строку за счёт замены программного деления на редукцию Барретта и разворачивания цикла преобразования. #100671 (Raúl Marín). - Предотвращено создание лишних потоков при параллельном
mergeвuniqExact. #100686 (Jiebin Sun). - Для
uniqExactдобавлено параллельное слияние батчей. #100687 (Jiebin Sun). - Улучшена распараллелизация запросов с простыми представлениями на базе таблицы
MergeTree, выполняемых в режиме параллельных реплик. #100815 (Igor Nikonov). - Добавлена поддержка параллельных реплик для простых представлений (включая подходящие представления
UNION ALLнад таблицамиMergeTree) приparallel_replicas_allow_view_over_mergetree=1. Это позволяет распараллеливать внешний запрос представления вместо внутреннего, что повышает степень распараллеливания запросов между узлами. #100958 (Igor Nikonov). - Оптимизировано чтение в порядке первичного ключа для
full_sorting_mergeпри наличии в плане запроса фильтров сIN. #101261 (Nikita Taranov). - Оптимизация операций выделения/освобождения памяти за счёт кэширования настроек сэмплирования вместо обхода всей иерархии трекера памяти. #101267 (Azat Khuzhin).
- Исправлена значительная регрессия производительности INSERT при
deduplicate_insert = 'enable'(по умолчанию с версии 26.2): вычисление хеша данных перенесено с этапа squashing в sink, а для хеширования столбцов батча используетсяupdateHashWithValueRange, что сокращает накладные расходы примерно с 2,5 с до 0,5 с для 5 млн строк и 22 столбцов. #101494 (Sema Checherinda). - Снизили накладные расходы на профилирование блокировок, используя
try_lock, чтобы не замерять время захватов без конкуренции, и убрали измерение времени удержания. #101502 (Antonio Andelic). - Реализована замена написанных вручную AVX-512 intrinsic-функций в
arrayDotProductна платформонезависимые автоматически векторизуемые циклы, с добавлением поддержки AVX2 и ARM NEON. #101571 (Peng). - Повышена производительность
INSERT VALUESдля столбцовMap,ArrayиTuple, когда значения передаются как экранированные строки (например,'{\'key\':1}'), что позволяет избежать ненужного переключения на парсер SQL-выражений. #102119 (Joanna Hulboj). - Исправлено чрезмерное использование CPU движком таблицы
RabbitMQ. #102711 (Jaap Elst). - Оптимизатор порядка JOIN теперь выводит транзитивные предикаты экви-соединения из существующих условий JOIN. Например, для
A.x = B.x AND B.x = C.xраспознаётся эквивалентностьA.x = C.x, что позволяет оптимизатору рассматривать Direct JOIN между таблицами, связанными транзитивно. Это может улучшить качество плана выполнения для схем «звезда» и «снежинка», где таблицы измерений соединяются через общую таблицу фактов. Эта возможность управляется новой настройкойenable_join_transitive_predicates(по умолчанию отключена). #98479 (Alexander Gololobov). - Оптимизирован
TRUNCATE DATABASE TABLES LIKEблагодаря предварительной параллельной отмене слияний. #98597 (Shaohua Wang). - Добавлена поддержка монотонности для функции multiply, что позволяет выполнять отсечение данных по первичному ключу для выражений
key * constant. #98983 (Amos Bird). - Словари cache больше не используют эксклюзивную блокировку в
hasKeys; это уменьшает конкуренцию за блокировки, так как для чтения из cache теперь используется разделяемая блокировка. #100796 (liuguangliang). - Подзапрос VIEW встроен в дерево запроса, что позволяет применять к VIEW больше оптимизаций. #100830 (Dmitry Novik).
- Ускорена загрузка кэша при запуске сервера. #101500 (Kseniia Sumarokova).
- Реализована отложенная материализация столбцов для ReplacingMergeTree с FINAL при достаточно селективном предикате. #101647 (Nikolai Kochetov).
- Снова включена оптимизация
optimize_rewrite_array_exists_to_has(по умолчанию отключена с версии 23.10). Она преобразуетarrayExists(x -> x = elem, arr)в гораздо более быстрыйhas(arr, elem)и теперь корректно пропускает такое преобразование, если тип элемента массива иelemнесовместимы дляhas(например,DateиString), поэтому запросы, которые раньше ломались, продолжают работать. Закрывает #71431. #100944 (Alexey Milovidov).
Улучшения
- Улучшен вывод EXPLAIN PLAN pretty=1: теперь выводятся выходные столбцы запроса верхнего уровня, показываются метки/обозначения отношений JOIN с оценкой числа результирующих строк и локальности, а также выходные столбцы для каждого шага JOIN/источника. Изменения охватывают часть Information Deficit из #98117. #99462 (Kirill Kopnev).
- Добавлена настройка таблицы семейства MergeTree
share_nested_offsets(по умолчаниюtrue). Если задатьfalse, столбцы типа Array с именами через точку (например,n.a,n.b) будут рассматриваться как независимые столбцы, а не совместно использовать файлы смещений и проверять равенство размеров массивов в рамках устаревшей семантикиNested. #98416 (Amos Bird). - Теперь в конфигурации users.xml/yaml можно указывать несколько методов аутентификации (в SQL это всегда было возможно). #91998 (Flip-Liquid).
- Автоматическая перезагрузка межузловых соединений Raft, использующих TLS. #93455 (Evgeny).
- Расширена поддержка
cast_keep_nullableдля типов Dynamic/JSON. Если параметр включён, приведение NULL из типов, которые могут быть Nullable, вернёт NULL; в противном случае будет сгенерирована ошибкаCANNOT_INSERT_NULL_IN_ORDINARY_COLUMN. #96504 (Seva Potapov). - Снижен объем памяти, занимаемой внутренними структурами данных (объектами
ISerialization), за счет введения пула объектов. #96563 (Nikita Mikhaylov). - Добавлена поддержка полей
passwordиidentityв XML-конфигурации клиента Keeper. #96800 (Grigorii Sokolik). - Улучшена запись в
Icebergдля Unity Catalog. #98162 (Konstantin Vedernikov). - Добавлена настройка
finalize_projection_parts_synchronously, которая позволяет синхронно финализировать части проекций при INSERT, снижая пиковое потребление памяти у таблиц с большим числом проекций и сохраняя при этом существующее асинхронное поведение по умолчанию. #98228 (Amos Bird). - Добавлен столбец
projections_duration_msвsystem.part_log, который фиксирует длительность слияния/перестроения для каждой проекции в миллисекундах. #98292 (Amos Bird). - Улучшена отмена запросов, использующих ExpressionTransform и NumbersRangedSource, с помощью KILL QUERY и отмены запроса (Ctrl+C) в clickhouse-client. #98908 (Roman Vasin).
- Жестко заданный список
source_table_enginesзаменен на lookup во время выполнения черезStorageFactory::getAllStorages(). Это добавляет проверки доступа для некоторых ранее отсутствовавших движков таблиц и закрывает #71544. #98984 (pufit). - Добавлена настройка для управления поведением при несовпадении типов для Variant и Dynamic (
throwили возврат NULL). #99085 (Bharat Nallan). - Улучшена совместимость
Icebergи Spark: исправлена непоследовательная обработка путей, вызванная смешением путей хранилища и путей метаданных; обеспечено, чтобы таблицыIcebergзаписывали расположение таблицы либо как URL, либо как абсолютный путь; добавлен резервный механизм для подсчета размеров файлов вAzure, поскольку некоторые средства чтения ClickHouse не поддерживают подсчет байтов после обхода; обработкаversion-hint.txtприведена в соответствие со Spark; введены абстракции на уровне типов, чтобы в будущем было сложнее перепутать типы путей; добавлены тесты дляAzureиLocal, проверяющие междвижковую совместимость без промежуточной выгрузки и загрузки; исправлено использование position deletes, которое ранее опиралось на эвристики определения путей там, где такой подход неприменим. #99163 (Daniil Ivanik). #100420 (Daniil Ivanik). - Исправлена возможная ситуация гонки в
IPartitionStrategy::cached_result, появившаяся в https://github.com/ClickHouse/ClickHouse/pull/92844. #99400 (Arthur Passos). - Теперь типы данных ClickHouse Interval можно записывать в формате Arrow. #99519 (Peter Nguyen).
- Добавлена встроенная поддержка импорта и экспорта типов данных
UUIDв форматахArrowиParquet. Теперь пользователи могут напрямую выполнять запросы к UUID-данным и передавать их между ClickHouse и другими инструментами работы с данными без ручного преобразования в строки и других обходных решений. Автоматическое логическое определение для UUID верхнего уровня, а также поддержка явного указания схемы для вложенных UUID. #99521 (Ivan). - Поддержка архивов
7zв объектном хранилище. Закрывает #70968. #99600 (Alexey Milovidov). - Добавлены события ProfileEvents
ObjectStorageListedObjects,ObjectStorageGlobFilteredObjects,ObjectStoragePredicateFilteredObjectsиObjectStorageReadObjectsдля интроспекции конвейера перечисления и чтения файлов в объектном хранилище (S3,Azureи т. д.). #99778 (Sema Checherinda). - Исправлен сбой табличной функции
mergeс ошибкойUNKNOWN_IDENTIFIERпри запросе столбцов, присутствующих не во всех базовых распределённых/удалённых таблицах. #99833 (Alexey Milovidov). - Теперь время коммита включается в общую метрику времени выполнения мутации для ReplicatedMergeTree. Оно перестало учитываться после #96376. #99936 (alesapin).
- Добавлен журнал предзаписи для blob-объектов, ожидающих удаления в
MetadataStorageFromDisk, что повышает надёжность и согласованность метаданных с удалённым объектным хранилищем при удалении объектов. #100019 (Maksim Kita). - Отключена функция генерации SQL с помощью ИИ (
??) во встроенном клиенте (протоколы SSH и WebSocket), чтобы предотвратить доступ к переменным окружения сервера. #100290 (Alexey Milovidov). - Изменён интерфейс вставки в Iceberg через каталог. Настройки
storage_catalog_type,storage_aws_access_key_idи т. д. объявлены устаревшими. #100334 (Konstantin Vedernikov). - При вставке в
clickhouse-clientзаменять табуляцию на 4 пробела. Закрывает #100405. #100416 (Raúl Marín). - Сканирование всего удалённого каталога озера данных в поисках подсказок к таблицам «Возможно, вы имели в виду …» больше не выполняется, если
show_data_lake_catalogs_in_system_tablesотключён. #100452 (Alsu Giliazova). - Применение
distributed_index_analysis_min_indexes_bytes_to_activateпосле отсечения партиций. #100477 (Azat Khuzhin). - Исправлена ошибка assert при проталкивании bloom filter для Parquet при использовании пустых секций IN/NOT IN. #100543 (zoomxi).
- Статистика MinMax для столбцов теперь хранит минимальные и максимальные значения как типизированные Field, а не как Float64. Сериализованный формат включает имя типа столбца наряду со значениями. Версия файла статистики повышена до V2; файлы, записанные старыми версиями, требуют повторной материализации (ALTER TABLE … MATERIALIZE STATISTICS ALL). исправлено #53140. #100605 (Han Fei).
- Обновлён
cppkafka: добавлено исправление взаимной блокировки при закрытии Consumer. #100612 (Azat Khuzhin). - Информация об объекте, используемая для разбора data files в Iceberg, теперь включает количество строк в файле и размер файла в байтах, извлечённые из manifest file. #100645 (Daniil Ivanik).
- Добавлен параметр конфигурации
use_separate_cache_arena, позволяющий управлять использованием отдельной арены памяти для кэша. #100664 (Seva Potapov). - Добавлена нативная поддержка импорта типов данных Apache Arrow
StringViewиBinaryViewв столбцыStringв ClickHouse, что повышает совместимость при ингестии на базе Arrow. #100762 (Ivan). - Некоторые настройки Keeper server теперь перезагружаются без перезапуска при изменении файла конфигурации во время выполнения: max_requests_batch_size, max_requests_batch_bytes_size, max_request_size, quorum_reads. #100773 (Michael Kolupaev).
- Увеличены счётчики profile events
MemoryAllocatedWithoutCheck/MemoryAllocatedWithoutCheckBytesв релизной сборке. #100899 (Pavel Kruglov). - Отслеживание памяти в Cgroupv2 теперь исключает
slab_reclaimableиз памяти ядра, обеспечивая более точную оценку использования памяти, не подлежащей освобождению. #100901 (Antonio Andelic). use_partition_pruning = 0теперь также отключает отсечение по индексуMinMaxи оптимизацию дляcountна столбцах ключа партиционирования, помимо отключения отсечения по ключам партиционирования. #100904 (Nihal Z. Miaji).pretty=1вEXPLAIN [PLAN]теперь выводит выражения в человекочитаемом формате. #100927 (Kirill Kopnev).accurateCastOrNullиaccurateCastOrDefaultтеперь поддерживают целевые типыTuple, включая вложенныеTupleс элементамиNullable. Ранее эти функции не принималиTupleв качестве целевого типа, посколькуTupleне мог находиться внутриNullable. Закрывает #100820. #100942 (Nihal Z. Miaji).- Исправлено дублирование диаграмм в интерфейсе Play при переключении между светлой и тёмной темами. #101058 (Alexey Milovidov).
- Обновлён chdig до v26.3.1 (интерфейс Perfetto, спарклайны в сводке по CPU/памяти/слияниям/запросам, system.warnings, поиск по регулярным выражениям в журналах). #101092 (Azat Khuzhin). Обновлён chdig до v26.4.3 (улучшения в Perfetto, исправления, связанные с общим доступом через pastila.nl, сравнение флеймграфов, изменение настроек в реальном времени). #103145 (Azat Khuzhin).
- Теперь перед запросом
SELECTв секцииWITHдопускается завершающая запятая. #101093 (Aruj Bansal). - Добавлена настройка MergeTree
compress_per_column_in_compact_parts, управляющая тем, как сжатые блоки организованы внутри компактных частей. Когдаtrue(по умолчанию, с сохранением текущего поведения), каждый столбец начинает новый сжатый блок, что позволяет выполнять выборочную распаковку. Когдаfalse, все столбцы в пределах гранулы упаковываются в один сжатый блок, что улучшает коэффициент сжатия и производительность чтения для рабочих нагрузок, в которых всегда читаются все столбцы. #101114 (Amos Bird). - Показывать всплывающую подсказку с информацией о таблице в интерфейсе Play только при наведении курсора на название таблицы, а не на всю строку. #101118 (Alexey Milovidov).
- Добавлены значки для конкретных движков и улучшено взаимодействие со списком таблиц на боковой панели интерфейса Play. #101134 (Alexey Milovidov).
- Добавлена поддержка
Nullable(Tuple)в форматахArrow,ArrowStream,ORCи устаревшем форматеParquet. #101272 (Nihal Z. Miaji). - Строка TOTALS теперь отображается в нижнем колонтитуле таблицы в веб-интерфейсе (play.html). #101286 (Alexey Milovidov).
- Поддержка режима работы с несколькими запросами в веб-интерфейсе (
play.html): одновременный запуск нескольких запросов с параллельным выполнением запросов типаSELECTи отдельным отображением результатов для каждого запроса. #101290 (Alexey Milovidov). - Исправлено изменение ширины столбца в веб-интерфейсе play.html после того, как таблицу результатов переработали в веб-компонент. #101295 (Alexey Milovidov).
- Добавлена возможность ограничивать количество сбросов профиля jemalloc при MEMORY_LIMIT_EXCEEDED в течение заданного интервала времени. #101396 (Azat Khuzhin).
- Добавлены настройки Keeper:
nuraft_streaming_mode(по умолчаниюfalse),nuraft_max_log_gap_in_stream,nuraft_max_bytes_in_flight_in_stream. Закрывает issue #90743. #101427 (Kseniia Sumarokova). - Добавлена асинхронная метрика
CGroupMemoryUsedWithoutPageCache, которая показывает использование памяти cgroup без учёта как кэша страниц ОС в ядре, так и кэша страниц в пространстве пользователя ClickHouse, по аналогии сMemoryResidentWithoutPageCache. Также уточнено описание метрикиCGroupMemoryUsed. #101513 (Francesco Ciocchetti). - Добавлен синтаксический сахар на уровне parser для синтаксиса стандартной SQL-функции
OVERLAY. Функцияoverlayуже существует; добавлена поддержка формы с ключевыми словамиPLACING,FROMиFORв качестве разделителей. #101681 (Desel72). - В системную таблицу
information_schema.tablesдобавлен псевдоним столбцаINDEX_LENGTH, аналогичный существующим в этой таблице псевдонимам в верхнем регистре. #101705 (Robert Schulze). - Системная таблица
information_schema.tablesтеперь не учитывает неактивные части таблицы. Благодаря этому отображаемые значения размера таблиц стали более реалистичными. #101706 (Robert Schulze). - Функция
ngramsтеперь отклоняет недопустимые значения длины n-грамм. Пример:SELECT ngrams('abc', 0)теперь возвращает ошибку. #101922 (Robert Schulze). - В продолжение #91820 и #90837: исключать неподдерживаемые алгоритмы из сообщений об ошибках; запускать тесты для FIPS в FIPS-сборках. #102067 (Mikhail f. Shiryaev).
- Высота ячеек в веб-интерфейсе (
play.html) ограничена тремя строками, с возможностью раскрытия по щелчку. #102154 (Alexey Milovidov). - Добавлена новая опция для принудительного использования стиля (virtual/path) для конечных точек S3. Решает #82019; #76007 Продолжение https://github.com/ClickHouse/ClickHouse/pull/83168. #102378 (Konstantin Vedernikov).
- Параметр
restore_replace_external_engines_to_nullтеперь также не восстанавливает базы данных с внешними движками (например,DataLakeCatalog,MySQL,PostgreSQL,S3) вместо того, чтобы завершаться ошибкой или устанавливать внешние подключения. #102400 (Nikita Fomichev). - Добавлена поддержка анализа текстового индекса для функции
hasPhraseв режимеHINT. #102438 (Elmi Ahmadov). - Считать STATISTICS доступными только для чтения в ColumnDependency, чтобы исправить LOGICAL_ERROR при MATERIALIZE STATISTICS ALL. #102627 (Konstantin Bogdanov).
- В режиме keeper-as-server теперь создаётся и заполняется
system.asynchronous_metric_log. #102664 (Miсhael Stetsyuk). - Добавлена опция config
default_system_log_flush_policy.skip_alias_columns, позволяющая исключать столбцы ALIAS из системных таблиц логов; это исправляет системные логи, использующие S3 в качестве хранилища и не принимающие столбцы ALIAS. #102669 (Miсhael Stetsyuk). - Не включайте автоматическую статистику для системных таблиц. Она им редко нужна. #102862 (Han Fei).
- Добавлена поддержка токенизатора
arrayдля оптимизации LIKE. #102880 (Elmi Ahmadov). - Отправлять MemoryAllocatedWithoutCheck даже в релизных сборках. #103064 (Azat Khuzhin).
- Появилась возможность просматривать untracked_memory для каждого потока в system.stack_trace. #103065 (Azat Khuzhin).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Исправлена ошибка
Block structure mismatch in stream, вызванная возвратом лишних столбцов при отложенной материализации. Исправляет #95191. #96682 (Nikolai Kochetov). - Исправлена логическая ошибка в запросе политики маскирования данных с
ON CLUSTER. #97594 (Bharat Nallan). - Исправлена ошибка при использовании Unity Catalog с GCS. #98456 (Melvyn Peignon).
DataLakeCatalogтеперь учитывает настройку сервераhttp_forbid_headersпри проверке параметраauth_header. #98827 (Michael Anastasakis).- Исправлены вызовы
HeadObjectпо схеме N+1 для S3 глоб-шаблонов с раскрытием фигурных скобок. #99219 (Konstantin Bogdanov). - Проверка изменений настроек в запросах CREATE, если сам движок тоже поддерживает настройки. #99279 (János Benjamin Antal).
- Исправлена ошибка, из-за которой
ALTER TABLE UPDATE/DELETEзавершался с ошибкойMissing columns, когда в таблице есть материализованный столбец, выражение которого зависит от эфемерного столбца. #99281 (Yash ). - Учетные данные в строках подключения JDBC, ODBC и NATS теперь маскируются в журнале запросов и выводе
SHOW CREATE, что предотвращает случайное раскрытие конфиденциальной информации. В строках подключения в формате URI (например,{scheme}://{user}:{password}@{host}) маскируется только пароль, а остальная часть остается видимой для удобства отладки. Настройкаnats_tokenтеперь тоже маскируется. #99344 (János Benjamin Antal). - Исправлена ошибка в
parseDateTimeBestEffort: функция неверно разбирала слова, начинающиеся с префиксов месяцев, в формате DD-month-YYYY. Закрывает #99345. #99350 (Pavel Kruglov). - Исправлено игнорирование TABLE_UUID_MISMATCH в режиме без analyzer. #99380 (Azat Khuzhin).
- Исправлена ошибка, из-за которой явные настройки, переданные вместе с
compatibilityв одном запросе, могли незаметно игнорироваться, если их значение совпадало со значением сервера по умолчанию. #99402 (Raufs Dunamalijevs). - Исправлена проблема, из-за которой числа с ведущими нулями в пути партиционирования Hive вызывали ошибки. Исправление #98801. #99458 (Yarik Briukhovetskyi).
- Исправлена ошибка heap-use-after-free, возникавшая при одновременном удалении таблицы и выполнении запроса на чтение (19 случаев в CI за последние 90 дней). #99483 (Alexey Milovidov).
- Исправлена ошибка в Keeper: запрос на чтение мог зависнуть (что приводило к тайм-ауту сеанса), если в тот же сервер в крайне неудачный момент закрывался другой, не связанный с ним сеанс. #99484 (Michael Kolupaev).
- Проверка структуры столбца перед применением патчей. #99531 (Seva Potapov).
- Исправлен сбой проверки
rows_sourcesпри вертикальном слиянии во время быстрого переключенияSYSTEM STOP/START MERGESдля таблицы со столбцамиDynamic. #99532 (Alexey Milovidov). - Исправлено некорректное отсечение партиций для
toWeek(), из-за которого запросы сWHERE toWeek(date, mode) = Nвозвращали пустой результат для недель 49–52 в таблицах, разбитых на партиции поtoYYYYMM(date). #99542 (Takumi Hara). - Исправлено исключение в функциях, работающих с ColumnReplicated при наличии строк без ссылок, созданных JOIN. #99564 (Hechem Selmi).
- Исправлена проблема, из-за которой
CLEAR COLUMNне перестраивал проекции и не выполнял повторный расчёт материализованных столбцов, зависящих от очищаемого столбца, что могло приводить к исключениям или повреждению данных при последующих слияниях. #99565 (Desel72). - Исправлено Исключение (
Bad get: has Tuple, actual type String) вConditionSelectivityEstimator, возникавшее, когда в запросе используется IN с одним скалярным параметром запроса (например,WHERE col IN ({p:String})) для таблицы, у которой есть статистика по столбцам и включенuse_statistics. #99614 (Ilya Yatsishin). - Часть с неизвестными проекциями не должна считаться безвозвратно потерянной. #99623 (Sema Checherinda).
- Исправлено редкое исключение из-за логической ошибки при Вертикальном слиянии, когда
SYSTEM STOP MERGESиSYSTEM START MERGESвыполняются одновременно. #99628 (Desel72). - Исправлена висячая ссылка в injectRequiredColumns, приводившая к сбою при слиянии. #99679 (Tuan Pham Anh).
- Исправлено неопределённое поведение в модуле чтения Avro format при чтении числовых значений, вызывающих переполнение целевого типа столбца. Теперь запросы завершаются ошибкой при переполнении вместо того, чтобы незаметно возвращать некорректные значения. #99697 (asyablue22).
- Исправлен разбор кавычек в стиле shell в аргументах табличной функции
executable. #99794 (Nikita Semenov). - Исправлено ложное срабатывание аварийного завершения в
NativeReaderпри десериализации потока в формате Native с несовпадением количества строк: код ошибки изменён сLOGICAL_ERRORнаINCORRECT_DATA, чтобы ситуация обрабатывалась как ошибка данных, а не вызывалаabort()в сборках sanitizer/debug. #99822 (Rahul Nair). - Исправлено аварийное завершение процесса при десериализации столбца
Tuple, когда тип сериализации в бинарном потоке —DETACHED. #99823 (Rahul Nair). - Исправлено ложное исключение
LOGICAL_ERROR, возникавшее при динамическом изменении размера файлового кэша из-за состояния гонки при повышении приоритета подочереди SLRU. #99850 (Alexey Milovidov). - Исправлено некорректное отображение нулевых значений
written_rows,read_rowsиresult_rowsдля запросов async insert вquery_logи выводе клиента. #99879 (Sema Checherinda). - Исправлено исключение “Неверное приведение типа X к Y” в
KILL QUERY, когда внутренний запрос к системным таблицам возвращает столбцы, обёрнутые вColumnConst. #99881 (Alexey Milovidov). - Исправлена логическая ошибка, связанная с коррелированным подзапросом в аргументе untuple. #99917 (Vladimir Cherkasov).
- Исправлено Исключение при вызове
right,rightUTF8или других функций извлечения подстроки с длиной INT64_MIN (-9223372036854775808), которое ранее приводило к неопределённому поведению из-за целочисленного переполнения. Теперь эти функции корректно возвращают ошибку ARGUMENT_OUT_OF_BOUND. #99934 (Jimmy Aguilar Mena). - Теперь ClickHouse должен корректно обрабатывать таблицы в стиле Spark (где для каждого файла указан полный абсолютный путь или относительный путь к общему пути таблицы). Исправляет #92348. #99935 (alesapin).
- Исправлено Исключение “Inconsistent AST formatting” для
ALTER TABLE ... MODIFY QUERYсо вложенными подзапросами, содержащимиSETTINGS, когда у самогоALTERтоже естьSETTINGS. #99938 (Nikita Mikhaylov). - Отменён #97114 “Перенести оценку числа строк на этапе JOIN перед проверкой на наличие 1 дочернего элемента” из-за подозрения на регрессию производительности. #99957 (Alexander Gololobov).
- Исправлена ошибка, из-за которой ClickHouse мог пропускать файлы, если в ответе на HEAD-запрос к ним отсутствовал заголовок
Content-Length(например, из-за декомпрессионного транскодирования в GCS). #99971 (Yarik Briukhovetskyi). - Исправлен сбой assert (исключение в debug-сборках, некорректные результаты в release-сборках) при умножении состояний агрегатной функции
NumericIndexedVectorна чётную целочисленную константу, вызванный self-XOR для алиасов битмапов Roaring вpointwiseAddInplace. #99976 (Desel72). - Предотвращено исключение
Unexpected return typeв устаревшем pushdown фильтров через цепочкуJOIN USING, когда типы ключей меняются после преобразований JOIN. #99999 (Alexey Milovidov). - Исправлено Исключение
LOGICAL_ERROR“Неожиданный тип узла для табличного выражения … фактически IDENTIFIER”, возникавшее при использовании скалярного подзапроса внутри неразрешённого аргумента табличной функции, например:SELECT * FROM remote('localhost', view(SELECT 2 AS x), concat(x, (SELECT 1))). #100014 (Alexey Milovidov). - Исправлена ошибка, из-за которой
INSERTсVALUESзавершался сбоем, если после данных на следующей строке шёл завершающий SQL-комментарий (--или/* */). Теперь комментарий пропускается, а не разбирается как ещё одна строка. #100016 (Pratima Patel). - Исправлено исключение в
arrayRemoveпри сравнении кортежей с компонентами, равными NULL. #100017 (Alexey Milovidov). - Исправлена межпользовательская утечка данных в
system.asynchronous_inserts: любой пользователь сSELECTк таблице мог видеть ожидающие записи асинхронной вставки, принадлежащие другим пользователям. Теперь записи фильтруются по текущему пользователю, если только у него нет привилегииSHOW_USERS. #100024 (Shaohua Wang). - Исправлен случай, когда приведение Time64 к UInt64 могло обрезать значения до 24 часов. #100025 (Yarik Briukhovetskyi).
- Исправлен сбой локального сервера, когда CREATE DICTIONARY содержит определение со списочным значением, содержащим несуществующую функцию. #100036 (Yakov Olkhovskiy).
- Исправлена ошибка, из-за которой форматы
CSVиMsgPackне могли корректно разбиратьNullable(Tuple). Закрывает #99753. #100038 (Nihal Z. Miaji). - Исправлена ошибка
UNKNOWN_IDENTIFIER, из-за которойCREATE VIEWзавершался сбоем при использовании в качестве правой частиINалиаса функционального выражения вWITH(например,tuple(...)). #100042 (Peng). - Исправлена ошибка, из-за которой агрегатные функции временных рядов (например,
timeSeriesResampleToGridWithStaleness) завершались сILLEGAL_TYPE_OF_ARGUMENTпри использованииinitializeAggregationилиAggregatingMergeTreeс параллельными репликами. #100053 (Alexey Milovidov). - Исправлена обработка отрицательных значений в NumericIndexedVectorDataBSI. #100086 (Daniil Ivanik).
- Исправлено: функции
accurateCastOrDefaultиto*OrDefaultне сохраняли тип Const столбца для константных входных данных. #100132 (Alexey Milovidov). - У пропущенных параметров запроса с типом
LowCardinality(Nullable(T))теперь значение по умолчанию корректно устанавливается в NULL, как и дляNullable(T). #100144 (Denys Melnyk). - Исправлена ошибка использования неинициализированного значения в StringSearcher.h. #100225 (Konstantin Bogdanov).
- Добавлена возможность отменять скалярные подзапросы и другие конвейеры, запускаемые на этапе анализа, с помощью Ctrl+C. Ранее нажатие Ctrl+C во время выполнения длительного скалярного подзапроса не давало никакого эффекта, пока подзапрос не завершался. Также исправлены индикатор прогресса и статистика в JSON, чтобы они корректно сообщали о числе прочитанных строк во время выполнения скалярного подзапроса — как в
clickhouse-client, так и вclickhouse-local. В соавторстве с @YjyJeff. #100230 (Raúl Marín). - Исправлено исключение
LOGICAL_ERRORв запросах сDynamic-столбцами,CROSS JOINи runtime-фильтрами, вызванное тем, чтоColumnVariant::filterиспользовал общие указатели на Variant-столбцы вместо их клонирования в ветке оптимизацииhasOnlyNulls. Закрывает https://github.com/ClickHouse/ClickHouse/pull/100147. #100234 (Pavel Kruglov). - Исправлена ошибка в массивах с
Variant, из-за которой при вызове функцийarrayFirst/arrayLastмог переинтерпретироваться тип данных. Например, ранееArray(Variant(Date, Bool))преобразовывался вBool, хотя фактический тип варианта —Date. #100255 (timothygk). - Несколько небольших изменений в функциях: функции
h3теперь лучше проверяют границы;readWKBтеперь проверяет ограничения на размер (новая настройкаmax_wkb_geometry_elements); функции генерации случайных чисел ограничивают максимальное число итераций при вычислениях. Дополнение к #93543. #100270 (Alexey Milovidov). - Исправлена проблема, из-за которой cutURLParameter мог некорректно пропускать параметры, если они были подстроками других параметров. #100280 (Nikita Semenov).
- Исправлено исключение, возникавшее, если в настройке пути к файлу метаданных Iceberg присутствовал null-байт. #100283 (Alexey Milovidov).
- Исправлена проблема с квадратичным ростом числа выполняемых запросов при использовании
distributed_index_analysisс предикатами, содержащимиIN-подзапросы. #100287 (Anton Popov). - Исправлено исключение “Несоответствие структуры блока” при использовании
GROUP BY ... WITH TOTALS HAVINGвместе сUNION DISTINCTи Nullable-выражениями. #100293 (Alexey Milovidov). - Исправлено Исключение LOGICAL_ERROR в
estimateCompressionRatio, возникавшее, когда параметрblock_size_bytesбыл чрезвычайно большим. #100298 (Alexey Milovidov). - Исправлено Исключение “Несогласованное форматирование AST” в отладочных сборках при использовании
GROUP BY CUBE(...) WITH ROLLUPи похожих комбинаций. #100376 (Alexey Milovidov). - Исправлено Исключение при создании представления с псевдонимами столбцов и запросами
SELECT *илиEXCEPT/INTERSECT. #100386 (Alexey Milovidov). - Исправлено зависание
DROP TABLEна неопределённое время для таблиц с движком Kafka, когда consumer’ы застревают в состоянии перебалансировки после ошибки heartbeat. #100388 (Alexey Milovidov). - Исправлено Исключение
ReadBuffer is canceled. Can't read from it.при операциях резервного копирования и восстановления с использованием zip-архивов. #100400 (Alexey Milovidov). - Исправлено Исключение
TOO_MANY_ROWSдля запросовSELECT count()сmax_rows_to_read/force_primary_key, когда данные распределены по нескольким частям с несовпадающими границами гранул. #100408 (Alexey Milovidov). - Исправлен
system.completions: теперь он корректно фильтрует базы данных, таблицы и столбцы по правам доступа во всех сочетаниях grant — на уровне таблицы, базы данных и при отзыве прав на уровне столбца. #100432 (Shaohua Wang). - Исправлен SEGFAULT в NuRaft, вызванный состоянием гонки. #100444 (Pablo Marcos).
min/max/argMin/argMaxтеперь обрабатывают NaN так же, какORDER BY: NaN всегда пропускается (возвращается только если все значения — NaN). Ранее результаты зависели от положения NaN в данных из-за семантики неупорядоченного сравнения в IEEE 754. #100448 (Raúl Marín).- Исправлена ошибка, вызванная копированием и вставкой: если
delta_lake_snapshot_end_versionзадавался безdelta_lake_snapshot_start_version, он молча игнорировался вместо того, чтобы приводить к ошибкеBAD_ARGUMENTS. #100454 (Mohammad Lareb Zafar). StorageRabbitMQ::shutdownне является идемпотентным (он безусловно обращается к слабым указателям, а затем уничтожает соответствующие указатели с общим владением), но теперь вызывается дважды: сначала вStreamingStorageRegistry, а затем вDatabaseCatalog. Это исправление делает метод идемпотентным и добавляет защитные проверки наnull. #100455 (Miсhael Stetsyuk).- Исправлено Исключение
LOGICAL_ERROR, возникавшее при использованииaccurateCastOrNullс целевым типомQBit. #100470 (Raufs Dunamalijevs). - Исправлено исключение LOGICAL_ERROR “Stream … not found”, возникавшее при вставке в таблицу с вложенными столбцами
Array(JSON)в частях типа Wide приoptimize_on_insert=0. #100475 (Pavel Kruglov). - Проверка путей записей файлов в метаданных резервной копии для отклонения обхода путей, абсолютных путей и пустых имён при
RESTORE. #100483 (Pablo Marcos). - Исправлена ошибка, из-за которой не работал синтаксис
LIMIT m OFFSET n WITH TIES. Этот синтаксис эквивалентенLIMIT n, m WITH TIES, который уже работал. #100491 (Nihal Z. Miaji). - Исправлено исключение “No set is registered for key” при использовании
INсо столбцамиNullable(Tuple), содержащими именованные поля и элементыLowCardinality. #100523 (Alexey Milovidov). - Исправлен heap-buffer-overflow в usearch
sorted_buffer_gt::insert(), который мог вызывать сбой или незаметно повреждать память при поиске по векторному сходству. #100537 (Dustin Healy). - Исправлена ошибка, из-за которой
EXECUTE ASигнорировал секцииFORMATиINTO OUTFILE, указанные в запросе. #100538 (pufit). - Исправлено неконсистентное форматирование AST для SAMPLE с OFFSET на уровне запроса. Закрывает #100576. #100579 (Pavel Kruglov).
- Исправлена работа Polaris catalog с Azure. Начиная с версии 25.12 этот каталог для Azure начал добавлять бакет в начало пути. Например,
abfss://polaris-polaris@<some_url>.windows.net/polaris-polaris/<other-path>вместоabfss://polaris-polaris@<some_url>.windows.net/<other-path>. Этот PR убирает бакет из пути. #100583 (Konstantin Vedernikov). - Исправлено исключение из-за несоответствия типов в transform, когда столбец по умолчанию является const в некоторых блоках. Закрывает #100574. #100616 (Pavel Kruglov).
- Исправляет случаи NOT_FOUND_COLUMN_IN_BLOCK, когда в части SELECT проекции есть столбцы, которых нет в исходной части SELECT запроса. Закрывает #100194. #100623 (Yarik Briukhovetskyi).
- Проверка размерностей массива в формате Npy на соответствие размеру файла и ограничениям переполнения, чтобы предотвратить отказ в обслуживании из-за специально созданных файлов
.npyс чрезмерно большими размерностями. Также отклоняются пустые формы массивов, а объём памяти на строку ограничивается 2 GiB. #100625 (Raúl Marín). - Исправлена ошибка, из-за которой
session_timezoneигнорировался при разборе значенийDateTimeво время асинхронных вставок (TCP) и всех вставок по HTTP. #100647 (Sema Checherinda). - Разрешена передача ключа сегментирования в табличные функции
cluster()иclusterAllReplicas(), когда в качестве источника используется табличная функция (например,cluster('name', view(...), sharding_key)). #100665 (Sergey Veletskiy). - Исправлен сбой сервера (срабатывание assert) при использовании параметрических агрегатных функций с комбинатором Array и аргументами NULL, таких как
quantileIfArrayArray(0.5)([[NULL]], [[1]]). #100679 (nerve-bot). - Исправлено исключение, возникавшее при вычислении общего супертипа для пустых и непустых кортежей при включенном
use_variant_as_common_type. #100699 (Antonio Andelic). - Сервер больше не запускается с ошибкой, если настроен диск Azure Blob Storage, а конечная точка временно недоступна (например, из-за сбоя DNS). #100701 (Raúl Marín).
- Исправлено неопределённое поведение в
positiveModulo, когда беззнаковый делитель не помещается в знаковый тип результата. #100705 (Raúl Marín). - Исправлен сбой сервера (логическая ошибка “Неожиданный тип, возвращаемый __topKFilter”), когда включен
use_top_k_dynamic_filtering, а столбец вORDER BYимеет типDynamicилиVariant. #100742 (Groene AI). - Исправлен сбой сервера при использовании функции
has()в PREWHERE/WHERE для ключа Tuple, содержащего элементы LowCardinality. #100760 (Groene AI). - Исправлено срабатывание проверки
file_offset_of_buffer_end <= getFileSize()(исключение в отладочных сборках) при чтении из таблицLogилиStripeLogв объектном хранилище S3 при одновременной записи. #100763 (Alexey Milovidov). - Исправлено исключение в оценщике селективности статистики, возникавшее, когда предложение WHERE содержит функциональное выражение (например, toDecimal64(col, 3)) в таблице со включенной статистикой. Теперь оценщик пропускает такие предикаты вместо того, чтобы пытаться выполнить недопустимое приведение типов. #100764 (Han Fei).
- Исправлен редкий случай, когда JOIN с изменением порядка мог давать неверный результат. #100790 (Yarik Briukhovetskyi).
- Исправлены некорректные типы аргументов
AggregateFunctionв оптимизированном тривиальномcount, из-за которых при выполнении запросов с выражениями вродеcount(v0 + v1)на distributed таблицах возникало ИсключениеNUMBER_OF_ARGUMENTS_DOESNT_MATCH. #100794 (YjyJeff). - Некоторые каталоги могли отображать секреты в разделе
SETTINGSрезультата запросаselect * from system.databases. Этот PR предотвращает такое поведение. #100800 (Konstantin Vedernikov). - Исправлено неопределённое поведение (переполнение знакового целого числа) в
toStartOfIntervalпри использовании интервалов Week, Quarter или Year с аргументом origin и предельными значениями интервала. #100817 (Raúl Marín). - Исправлена невозможность чтения более старых сериализованных состояний после появления
Nullable(Tuple)для комбинаторов агрегатных функцийIf,Distinct,DistinctIf,IfStateс возвращаемым типомTupleи одним или несколькими аргументамиNullable. Закрывает #98917. #100826 (Nihal Z. Miaji). - Исправлен segfault в s3Cluster и распределённых запросах, вызванный use-after-free при работе с пулом соединений. #100837 (Konstantin Bogdanov).
- Исправлен segfault из-за разыменования нулевого указателя при загрузке словарей во время остановки сервера.
Context::getUserDefinedSQLObjectsStorage(разыменовываетuser_defined_sql_objects_storage) вызывается потоками словарей одновременно с вызовомContext::shutdownв основном потоке (он устанавливаетuser_defined_sql_objects_storageв null). Нужно убедиться, что до запускаContext::shutdownв загрузчике словарей отключены дальнейшие обновления, завершены выполняющиеся запросы к словарям и потоки загрузки словарей дожидаются завершения. Аналогично тому, как это делается для обычных запросов. #100839 (Miсhael Stetsyuk). - Исправлено переполнение буфера в
ULIDStringToDateTime, возникавшее, когда входные данные содержат не-ASCII-байты. #100843 (Konstantin Bogdanov). - Исправлен сбой (
LOGICAL_ERROR) при выполнении запроса к таблицеMerge(или табличной функцииmerge()), объединяющей несколько таблиц, включая таблицуDistributed, при включенномdistributed_group_by_no_merge=1. #100859 (Groene AI). - При включенном Cast_keep_nullable при приведении dynamic null к variant исключение не будет генерироваться. #100864 (Seva Potapov).
- Исправлено поведение команд
clickhouse-keeper-clientget,existsиls: они выводили дублирующиеся сообщения об ошибкеwatch_idв stdout вместо stderr. #100893 (Mohammad Lareb Zafar). - Исправлено исключение в
intDiv/intDivOrZeroпри работе с массивами Nullable-кортежей, напримерSELECT intDiv([divide((1, 2), ... AND NULL)], 2). #100895 (Raúl Marín). - Аргументы движка для
StorageAliasтеперь вычисляются перед сохранением определения, чтобы выражения вродеcurrentDatabase()преобразовывались в литералы до сохранения в базе данных. #100902 (Nikolay Degterinsky). - Исправлена ошибка в
processAndOptimizeTextIndexFunctionsприquery_plan_merge_expressions = 0, когдаExpressionStepрасположен непосредственно надReadFromMergeTree. Исправление #100879. #100909 (Jimmy Aguilar Mena). - Обновлён replxx: добавлено исправление выхода за границы массива в do_complete_line. #100925 (Azat Khuzhin).
- Исправлены неверные результаты, когда JOIN с оптимизацией сегментирования по PK использует кэш условий запроса, а некоторые части отфильтровываются на основе кэшированных условий. #100926 (Groene AI).
- Исправлена ошибка, из-за которой
divideиintDivв некоторых случаях возвращалиILLEGAL_DIVISIONпри использовании в выражениях фильтра во время анализа индексов. #100928 (Nihal Z. Miaji). - Исправлены ошибки “Целевая таблица не существует” для materialized view с внутренними таблицами при асинхронном запуске, вызванные неверным порядком инициализации зависимостей. #100946 (Nikolay Degterinsky).
- Исправлено неопределённое поведение (переполнение знакового целого числа) в parseDateTimeBestEffort при разборе строк даты и времени, содержащих более 18 цифр в дробной части секунды. #100948 (Vasily Chekalkin).
- Исправлен сбой при использовании индекса для текстового поиска с условием
IN, содержащим кортежный подзапрос, напримерWHERE (id, str) IN (SELECT (id, str) FROM ...), а также в случае, когда число столбцов в подзапросе не совпадает с кортежем в левой частиIN. #100959 (Anton Popov). - Исправлен сбой, возникавший при создании словаря Polygon из таблицы
MergeTree, использующей сериализацию разреженных столбцов. #100964 (Anton Popov). - Исправлена логическая ошибка “Invalid action query tree node” при использовании
INTERSECT ALL/UNION ALLс выражениями, свёрнутыми в константы. #100977 (Alexey Milovidov). - Исправлена агрегатная функция
sumCountOrDefault: при одном или нескольких аргументах типаNullableона не могла читать ранее сериализованные состояния после введенияNullable(Tuple). Закрывает #100882. #101021 (Nihal Z. Miaji). - Исправлен сбой (
Logical error: isConst/isSparse/isReplicated assertTypeEquality) в алгоритмах слияния, когда отложенная репликация столбцов (enable_lazy_columns_replication) создает столбцыColumnReplicated, которые попадают в конвейеры merge-sort при позднем поступлении входных данных. #101036 (Groene AI). - Исправлена некорректная ошибка
UNKNOWN_IDENTIFIER, возникавшая, когда один и тот же псевдоним использовался для нескольких выражений вSELECT; теперь вместо неё корректно сообщается ошибкаMULTIPLE_EXPRESSIONS_FOR_ALIAS. #101040 (Alexey Milovidov). - Исправлена проблема со столбцами ALIAS типов
DateTime/DateTime64: преобразование часового пояса не применялось, если указанный часовой пояс отличался от часового пояса выражения. #101043 (Alexey Milovidov). - Исправлена проблема, из-за которой политики строкового доступа не записывались в
query_logдля представлений, подзапросов иINSERT ... SELECT. Хотя политики строкового доступа применялись при планировании запросов, они не передавались от вложенных планировщиков в родительский планировщик для записи в журнал. Теперь политики строкового доступа (только для журналирования) хранятся вQueryAccessInfo, чтобы их могли заполнять и планировщики, и вложенные планировщики. #101044 (Narasimha Pakeer). - Исправлено Исключение в
DirectJoinMergeTreeEntity, когда блоки конвейера содержат столбцыColumnConst, которые объединяются с обычными столбцами. #101046 (Alexey Milovidov). - Исправлен лишний пробел в оформлении псевдонима столбца в CTE (
WITH t (a, b)→WITH t(a, b)). #101049 (Alexey Milovidov). - Исправлена ошибка, из-за которой табличные функции
remote/clusterне работали с вложенными табличными функциями, такими какmerge, при включенном анализаторе. #101055 (Alexey Milovidov). - Исправлено двойное применение
OFFSETв распределённых запросах приprefer_localhost_replica=1, из-за чего возвращалось меньше строк, чем ожидалось. #101071 (Nihal Z. Miaji). - Исправлен сбой, возникавший при использовании формата
Regexpс некорректным регулярным выражением в настройкеformat_regexp. #101074 (Nihal Z. Miaji). - Исправлена ошибка “Недопустимый тип Decimal64 для параметра start” в агрегатных функциях временных рядов при использовании
serialize_query_plan=1с параллельными репликами. #101083 (Groene AI). - Исправлено исключение в
optimizeLazyMaterialization, возникавшее при использовании проекции с PREWHERE вместе сORDER BY ... LIMIT. #101115 (Anton Popov). - Исправлен сбой сервера (SIGABRT) при использовании агрегатных функций с внутренним комбинатором
Null(например,sumNull,avgNull) и включенной настройкойaggregate_functions_null_for_empty = 1. #101147 (Groene AI). - Исправлена ошибка use-after-free при записи в файловый кэш, которая могла приводить к чтению из уже освобождённой памяти при логировании завершённых сегментов файла (обнаружена с помощью MemorySanitizer в BuzzHouse). #101161 (Groene AI).
- Исправлен сбой сервера с сообщением “Попытка подключить внешнюю таблицу к готовому Set без явных элементов”, который возникал, когда распределённый анализ индексов сталкивался с предикатом GLOBAL IN, чей Set был построен без явных элементов. #101178 (Groene AI).
- Исправлены агрегатные функции
MAX/MINдля столбцовDecimal, возвращавшие некорректные результаты при включенной JIT-компиляции (после достижения порога компиляции). #101203 (Raúl Marín). - Исправлена проблема, из-за которой оптимизации
minmax_count_projectionи тривиальногоCOUNT(*)оставались навсегда отключёнными после легковесного удаления, даже когда все части с маской легковесного удаления уже были слиты. #101212 (Anton Popov). - Исправлен сценарий, который мог приводить к логической ошибке
Having zero bytes, ...в кэше: удалённый объект мог быть перезаписан в промежутке междуlistиread, из-за чего ранее возникали устаревшие метаданные объекта. #101219 (Kseniia Sumarokova). - Исправлен сбой сервера (LOGICAL_ERROR: Bad cast from ColumnVector to ColumnLowCardinality) при запросе к таблице семейства MergeTree с
ORDER BY CAST(lc_column, 'Type'), гдеlc_columnимеет тип LowCardinality. #101220 (Groene AI). - Исправлена очистка устаревших узлов обработки в
S3Queue. #101230 (Kseniia Sumarokova). - Исправлено UB в mergeTreeAnalyzeIndexes() при недопустимом значении аргумента optimizations. #101253 (Azat Khuzhin).
- Исправлено Исключение
Logical error: 'partitions_count > 0', возникавшее при последовательном выполненииALTER TABLE UPDATEдля секционированной таблицы Iceberg. #101278 (Desel72). - Исправлены неверные результаты запроса, когда большая целочисленная константа (например, 256, 2147483648) используется как булевый предикат в предложении WHERE с оператором AND в таблицах семейства MergeTree. Например,
SELECT count() FROM t WHERE (2147483648 > b) AND 2147483648ошибочно возвращал 0 вместо того, чтобы учитывать все строки. #101287 (Groene AI). - Исправлен INSERT SELECT из кластера Delta Lake с ReplicatedMergeTree. #101299 (Konstantin Vedernikov).
- Исправлен сбой с сообщением “Логическая ошибка: чтение из материализованного CTE до материализации”, возникавший, когда скалярный подзапрос ссылался на цепочку зависимых материализованных CTE. #101305 (Groene AI).
- Исправлена гонка данных с
storage_idвIStorage::getDependentViewsByColumn. #101385 (Nikolay Degterinsky). - Исправлены форматирование и клонирование AST для BACKUP FROM SNAPSHOT. #101405 (Pablo Marcos).
- Исправлен сбой LOGICAL_ERROR “Текущий компонент пуст”, возникавший при запросе к
system.part_moves_between_shards, когда включенenforce_keeper_component_tracking. #101462 (Groene AI). - Исправлено падение из-за segmentation fault в DataTypeDynamic::create(), когда фаззер генерирует некорректный AST типа Dynamic. #101464 (Groene AI).
- Выдавать ошибку, если настройки
delta_lake_snapshot_versionили версии CDF используются без включенного DeltaKernel, вместо того чтобы незаметно возвращать некорректные данные. #101489 (Desel72). - Исправлено Исключение
NOT_FOUND_COLUMN_IN_BLOCK, возникавшее при использовании ARRAY JOIN с JOIN USING и включенной настройкеanalyzer_compatibility_join_using_top_level_identifier. Закрывает #101240. #101507 (Vladimir Cherkasov). - Исправлена ошибка в цикле повторных попыток Iceberg INSERT, возникавшая, когда таблица была создана с
iceberg_metadata_file_path, а целевая версия метаданных уже существовала. #101548 (Groene AI). - Убрали Nullable из результирующего столбца в arrayIntersect и связанных функциях, чтобы избежать несоответствия при сериализации/десериализации. #101569 (George Larionov).
- Исправлен сбой сервера (LOGICAL_ERROR) при выполнении SELECT-запроса к materialized view, использующему движок таблицы IcebergLocal. #101577 (Groene AI).
- Исправлено некорректное сообщение об ошибке при вызове
intExp10с аргументом NaN — в нём было указаноintExp2вместоintExp10. #101582 (Krishna Chaitanya). - Исправлено:
allow_statistics=0не блокировал выполнениеALTER TABLE ADD STATISTICSиALTER TABLE DROP STATISTICSпосле рефакторинга в #100288. #101585 (Krishna Chaitanya). - Исправлена ошибка
KeeperMapпри выполненииCREATE TABLEс сообщением “Cannot create metadata for table”, возникавшая, когда в оставшихся узлах ZooKeeper после неполного удаления в версиях до 25.1 отсутствовал узелdrop_lock_version. #101623 (Antonio Andelic). - Устранена возможная логическая ошибка при чтении подстолбцов типа Map. Закрывает #100769. Закрывает #101336. #101641 (Pavel Kruglov).
- Исправлен приоритет точного совпадения подстолбца над совпадением по префиксу в
getSubcolumnData, чтобы избежать возможного падения. Закрывает #101271. #101645 (Pavel Kruglov). - Исправлен сбой (LOGICAL_ERROR: “ColumnUnique не может содержать значения NULL”) при сравнении столбца
LowCardinalityс NULL-константойVariant, когдаuse_variant_default_implementation_for_comparisonsотключён. #101690 (Groene AI). - Что: В Bzip2ReadBuffer добавлена проверка на пустой поток, благодаря которой он возвращает EOF вместо UNEXPECTED_END_OF_FILE, если внутренний поток пуст. #101691 (ClickGap AI Bot).
- Что: Исправлено перепутанное описание столбца
alterableвsystem.s3_queue_settingsиsystem.azure_queue_settings— значения0и1поменяны местами в соответствии с фактическим поведением кода. #101703 (ClickGap AI Bot). - Исправлена ошибка, из-за которой для
positiveModulo(tuple, number)ошибочно вызывалось деление вместо операции взятия по модулю. #101709 (ClickGap AI Bot). - Исправляет сбой, возникавший при настройке
thread_pool_sizeна диске с кэшем. РанееFileCacheSettings::loadFromConfig()отклонялthread_pool_sizeкак неизвестную настройку, из-за чего сервер не мог запуститься. Эта настройка является допустимым параметромIDisk, который определяет количество потоков, используемых для операций копирования с диска на диск при фоновом перемещении частей. #101712 (Francisco). - Исправлено поведение, при котором при создании словаря
RANGE_HASHEDмолча принимался несуществующий атрибут диапазонаMAX, а также использовалась неверная конфигурация типов, если атрибуты минимального и максимального диапазона имели разные типы. Причиной ошибки была опечатка из-за копирования и вставки вbuildRangeConfiguration: для максимального атрибута искалсяmin_attr_nameвместоmax_attr_name. #101732 (Yakov Olkhovskiy). - Исправлено аварийное завершение, вызванное use-after-free в планировщике аренды CPU, когда таймер ожидания живёт дольше, чем воркер-поток, на
ProfileEvents::Countersкоторого он ссылается. #101761 (Antonio Andelic). - Исправлена ошибка в функциях arrayLevenshteinDistanceWeighted и arraySimilarity. Закрывает #101725. #101767 (Mikhail f. Shiryaev).
- Исправлена ошибка, из-за которой Prometheus Query API игнорировал тела POST-форм. #101794 (James Cunningham).
- Исправлен выход исключения из деструктора S3
Client::~Client, приводивший к аварийному завершению сервера. #101798 (Gagan Dhakrey). - Исправлена ошибка use-after-scope при параллельной десериализации динамических путей типа
Object, которая могла приводить к сбоям при чтении таблиц с большим количеством таких путей. #101823 (Antonio Andelic). - Исправлен некорректный вывод в функции
formatDateTimeдля форматтера%Wпри определённых (не используемых по умолчанию) настройках форматирования. #101847 (Robert Schulze). - Исправлено ложное срабатывание
shouldPatchFunctionвSYSTEM INSTRUMENT ADD, когда искомая строка впервые встречается внутри аргумента Template в деманглированном имени символа. #101885 (Pablo Marcos). - Исправлена потеря реестра UDF при истечении сеанса ZooKeeper во время периодического обновления — все пользовательские функции могли становиться недоступными, пока не завершится успешное полное обновление. #101891 (Nikita Fomichev).
- Исправлено описание
system.codecsдляAES_256_GCM_SIV: теперь указываетсяAES-256, а неAES-128. #101917 (Jimmy Aguilar Mena). - Исправлено использование некорректных экстремумов в min-max индексе, созданном для JSON-столбца, что приводило к неверному результату запроса. Закрывает #101700. #101918 (Pavel Kruglov).
- Токенизатор
splitByStringтеперь не принимает пустые строки в качестве разделителя. #101928 (Robert Schulze). - Исправлено поведение, при котором
materialize_skip_indexes_on_merge=falseне подавлял текстовые (полнотекстовые) индексы при слиянии. Ранее подавлялись только нетекстовые индексы пропуска данных (minmax, set, bloom_filter); текстовые индексы продолжали строиться, что приводило к напрасному расходу CPU и I/O. #101932 (Groene AI). - Токенизатор
sparseGramsгенерировал токены, длина которых превышала заданный максимум (это было связано с жёстко прописанным+2в реализации). #101934 (Elmi Ahmadov). - Исправлен SIGSEGV в
MergeTreeDataPartWriterWide::cancel, возникавший, когда конструктор потока выбрасывает исключение во времяaddStreams, из-за чего вcolumn_streamsоставался null-элемент. #101936 (Antonio Andelic). - Исправляет исключение при запросе к таблицам Merge или Distributed с полнотекстовым индексом и комбинированными условиями фильтрации, в которых
has*Tokensсочетается с LIKE, когда включенquery_plan_direct_read_from_text_index. #101939 (Jimmy Aguilar Mena). - Исправлено неопределённое поведение при разборе пакетов запроса собственного протокола с некорректными значениями
QueryProcessingStage. #101972 (Raúl Marín). - Закрывать TCP-соединение при возникновении исключения на этапе начального разбора запроса, чтобы предотвратить чтение мусорных данных из рассинхронизированного потока. #101989 (Raúl Marín).
- Исправлена ошибка гонки в SLRU в файловом кэше 26.1+, которая может приводить к логической ошибке при резервировании места. В отладочной сборке это также может приводить к срабатыванию assert:
'Previous state is Evicting, but expected state to be Active while setting Evicting flag for 2c1e3484ecdc6b78a8978fa5b17c5097:0:339 (state: Evicting)'.. #101991 (Kseniia Sumarokova). - Исправлено исключение при приведении строки с лишними данными в конце к пустому типу
Tuple(). #102011 (Alexey Milovidov). - Исправляет неправильный порядок строк в запросах, использующих ORDER BY с алгоритмом JOIN grace_hash. Затронутые запросы могли возвращать результаты в неверном порядке, что незаметно приводило к некорректному выводу. #102036 (János Benjamin Antal).
- Исправлена ошибка LOGICAL ERROR (Unexpected size of index type), которая могла возникать в запросах RIGHT JOIN и FULL JOIN, когда был настроен параметр
max_bytes_in_join. #102042 (Jimmy Aguilar Mena). - Исправляет случаи, когда
Timeс отрицательными значениями возвращал неверный результат при сравнении с типом DateTime. Закрывает #101670. #102056 (Yarik Briukhovetskyi). - Исправлен сбой при обновлении UDF, вызванный тем, что
ZooKeeperRetriesControlвыполнял повторную попытку с устаревшим (истекшим) сеансом ZooKeeper, не обновляя его. #102059 (Nikita Fomichev). - Исправлено отсутствие пробелов при форматировании unlock snapshot. Закрывает https://github.com/clickhouse/clickhouse/issues/101723. #102063 (Han Fei).
- Исправлен crash (SIGSEGV) при выполнении запроса к представлению с предложением WHERE, когда внутренний запрос возвращает столбцы с типами, отличающимися от метаданных представления (например, Nullable из LEFT JOIN с
join_use_nulls). #102085 (Miсhael Stetsyuk). - Исправлена ошибка, из-за которой записи в
VectorSimilarityIndexCacheне вытеснялись после удаления части из-за несоответствия ключей кэша. #102152 (Seva Potapov). - При использовании хранилища RabbitMQ для повреждённых сообщений теперь отправляется NACK. #102157 (Seva Potapov).
- Исправлена логическая ошибка при разборе некорректной строки с пустым кортежем. #102289 (Nihal Z. Miaji).
- Исправлены некорректные результаты агрегации (дублирующиеся строки) при использовании
optimize_aggregation_in_order=1, если столбцы в GROUP BY упорядочены иначе, чем ключ сортировки таблицы. #102299 (Groene AI). - Исправлен сбой в
IcebergLocalпри выполненииALTER TABLE ... UPDATEс использованием формата Avro: типы-обёрткиLowCardinality/Nullableне разворачивались перед сериализацией. #102337 (Desel72). - Исправлена ошибка сегментации в мутациях для материализованных столбцов без выражения. Закрывает #102185. #102342 (zoomxi).
- Исправление в Coalescing merge tree для типа Array. Это закрывает #89509. #102384 (Konstantin Vedernikov).
- Исправлен segfault (или LOGICAL_ERROR в отладочных сборках) при чтении файлов Parquet с включённым проталкиванием bloom filter и условиями равенства/неравенства в предложении WHERE. Сбой происходил из-за обращения к памяти за пределами допустимых границ при получении данных bloom filter в механизме предвыборки Parquet, а также мог приводить к непредсказуемо неверным результатам запроса. #102385 (Groene AI).
- Исправлено прерывание с
LOGICAL_ERRORпри динамическом изменении размера SLRU файлового кэша, вызванное общей статистикой вытеснения для подочередей и некорректным путём восстановления для кандидатов, завершившихся ошибкой. #102396 (Antonio Andelic). - Исправлен сбой инициализации на новой реплике таблиц-алиасов без целевой таблицы в базе данных Replicated. Закрывает #101320. #102397 (Nikolay Degterinsky).
- Исправлено чтение за пределами буфера в функциях поиска по строкам (
countSubstrings,positionи т. д.) при поиске подстроки, состоящей целиком из null-байтов. #102401 (Raúl Marín). - Настройки полнотекстового индекса (
enable_full_text_index,allow_experimental_full_text_index,use_skip_indexes_on_data_read) больше не отключаются, если настройкаcompatibilityуказывает на версию старее 26.1. Ранее из-за этогоSharedDatabaseCatalogмог не создавать таблицы с текстовыми индексами. #102422 (Nikita Fomichev). - Исправлено чтение за пределами буфера в
printfпри завершающем%. #102472 (Raúl Marín). - Исправлено исключение chassert
ReadBuffer is canceledв отладочных сборках AsynchronousMetrics, вызванное тем, что rewind не сбрасывал флаг отмены буфера. #102524 (Yuri Fedoseev). - Исправлены
hasToken/hasTokenOrNullдля искомых подстрок, состоящих только из разделителей (например,'()','!!!'), в столбцах с текстовым индексом: ранее индекс молча пропускал все гранулы вместо того, чтобы сгенерироватьBAD_ARGUMENTS(дляhasToken) или вернутьNULL(дляhasTokenOrNull). #102544 (Jimmy Aguilar Mena). - Исправлены OOM-ситуации на огромных
multi-запросах в Keeper. Для трассировки OpenTelemetry мы безусловно выделяли >1 KiB для OpenTelemetry spans в объектахZooKeeperRequest— то есть для действительно огромныхmulti-запросов пытались дополнительно выделить >10 GiB памяти. Чтобы это исправить, теперь мы храним общие данные в статической памяти и используемstd::unique_ptrвместоstd::optionalвZooKeeperOpentelemetrySpans. #102586 (Miсhael Stetsyuk). - Исправлено завышение CurrentMetric для
NamedCollectionиз-заCREATE NAMED COLLECTION IF NOT EXISTSна уже существующих коллекциях, а также отсутствие инициализации для коллекций, загружаемых из конфигурации или SQL-хранилища при запуске. Закрывает #102507. #102598 (Pablo Marcos). - Исправлено Исключение в
getStructureOfRemoteTable, когда локальный сегмент возвращает пустой список столбцов из-за параллельного DDL. #102604 (Alexey Milovidov). - Исправлено исключение
LOGICAL_ERROR, возникавшее, когда несколько параллельных запросовCREATE TABLE IF NOT EXISTSбыли направлены к одной и той же таблицеS3Queueв базе данных Shared. #102610 (Nikita Taranov). - Исправлен сбой LOGICAL_ERROR “Неожиданное количество строк в подфрагменте столбца” в нативном считывателе Parquet V3 при чтении столбцов с типом Nullable с фильтром WHERE. #102628 (Groene AI).
- Исправлено описание события профиля
AzureWriteMicroseconds: вместо “write” было указано “read”. #102639 (Miсhael Stetsyuk). - Ошибка в политике строк, из-за которой в ряде особых случаев возникает исключение ‘Not found column in block’. #102648 (Yarik Briukhovetskyi).
- Исправлено серверное исключение в ClusterDiscovery, возникавшее, когда в статическом кластере (заданном в config) временно не оставалось доступных узлов. #102661 (Kseniia Sumarokova).
- Исправлен неверный вывод типа данных Date при переполнении после поправки на часовой пояс. Закрывает #102601. #102674 (Pavel Kruglov).
- Исправлено бесконечное зависание
SYSTEM WAIT VIEW, если refreshable materialized view удаляется в процессе ожидания. #102681 (Nikolay Degterinsky). - Исправлена ошибка в
CASEс выражением Dynamic, из-за которой для всех строк возвращалсяELSE. Закрывает #102511. #102684 (Pavel Kruglov). - Исправлена сериализация уплощенного типа Dynamic для бинарно закодированных типов данных. Закрывает #101911. #102692 (Pavel Kruglov).
- Исправлена проблема, из-за которой format_schema_source=‘query’ молча игнорировал результаты, содержащие несколько строк. Закрывает #101905. #102698 (Pavel Kruglov).
- Передаётся фактический код выхода через SSH-клиент вместо того, чтобы сопоставлять все ошибки с
1. Закрывает #101741. #102700 (Konstantin Bogdanov). - Исправлена потеря HTTP-заголовков в обработчиках динамических/предопределённых запросов. Закрывает #101846. #102706 (Konstantin Bogdanov).
- Добавлена поправка на пуассоновское сэмплирование для свёрнутых профилей кучи jemalloc, чтобы привести их в соответствие с выводом jeprof. Ранее свёрнутый формат занижал фактические объёмы выделения памяти, поскольку не учитывал вероятность сэмплирования. #102759 (Antonio Andelic).
- Исправлен сбой в функции
hasPhraseпри аргументеNULL. #102802 (Nikita Taranov). - Исправлен сбой сервера (SIGSEGV) при чтении файлов Avro с рекурсивными схемами, содержащими циклические символьные ссылки на типы. Теперь такие схемы выявляются и отклоняются с понятным сообщением об ошибке, а не приводят к аварийному завершению. #102853 (Groene AI).
- Исправлен сбой сервера (assertion
LOGICAL_ERROR), возникавший, когда функция, применяемая к столбцуVariant, достигала лимита памяти или вызывала другое исключение, не связанное с преобразованием типов, при приведении результата вFunctionVariantAdaptor. Теперь исключение корректно пробрасывается, а не ошибочно классифицируется как внутренняя ошибка. #102855 (Groene AI). - Исправлен сбой сервера в отладочных сборках и сборках с sanitizer при возникновении
std::length_errorво время автоматического определения схемы (например, из-за экстремальных значенийinput_format_msgpack_number_of_columnsили некорректных входных данных). #102859 (Groene AI). - Исправлено представление null при сериализации реплицируемых и разреженных столбцов: теперь оно учитывает настройки (например, format_tsv_null_representation). #102888 (Hechem Selmi).
- Бэкпортировано в #103499: исправлена проблема, из-за которой запросы к S3 завершались ошибкой
ios_base::clear: unspecified iostream_category errorвместо повторной попытки; причина была в том, что PocoBufferedStreamBuf::flushBufferне обрабатывал короткие записи на уровне socket. #102894 (Sema Checherinda). - Исправлена ошибка, из-за которой оптимизации
minmax_count_projectionи тривиальногоCOUNT(*)навсегда отключались после легковесного удаления, даже если все части с маской легковесного удаления уже были слиты. #102900 (Anton Popov). - Исправлены случайные падения jemalloc из-за LTO. #102913 (Azat Khuzhin).
- Оптимизировано преобразование OR-цепочек в IN в политиках доступа к строкам в новом анализаторе. #102915 (Azat Khuzhin).
- Исправлено повреждение метаданных jemalloc, вызванное освобождением кэша страниц с неправильным выравниванием, что могло приводить к аварийным завершениям. #102918 (Azat Khuzhin).
- Обычные INSERT без materialized view больше не запрашивают чрезмерное количество слотов ConcurrencyControl и потоков (
max_threadsвместоmax_insert_threads), что предотвращает дефицит слотов CC и лавинообразный рост числа потоков в кластерах с высокой пропускной способностью INSERT. #102961 (Sema Checherinda). - Повторно введён ArrowMemoryPool, чтобы можно было сгенерировать MEMORY_LIMIT_EXCEEDED и избежать OOM ядра. #102999 (Azat Khuzhin).
- Исправлено игнорирование
cast_string_to_date_time_modeприCASTвNullable(DateTime). Закрывает #101840. #103035 (Pavel Kruglov). - Добавлена поддержка столбцов
ALIASв оптимизации прямого чтения текстового индекса. #103037 (Anton Popov). - Бэкпортировано в #103454: исправлена ошибка, из-за которой
SELECT DISTINCTнезаметно возвращал неполные результаты, когда агрегатная проекция соответствовала запросу, а у некоторых частей таблицы отсутствовали данные проекции (например, если проекцию добавили в таблицу, в которой уже были данные, иMATERIALIZE PROJECTIONне запускали). Закрывает #102951. #103052 (Nihal Z. Miaji). - Исправлены неверные результаты, возвращаемые
WHERE x AND toNullable(N)в таблицахMergeTree, когдаN— целое число ширеUInt8(например,256,65535,2147483648или любое отрицательное целое число). Фильтр ошибочно отбрасывал все строки, потому чтоsplitFilterNodeForAllowedInputsиспользовал нулевойNULLпри преобразованииNullable-остатка сокращённогоANDв булевый тип, из-за чего сравнение превращалось вNULLв рамках трёхзначной логики. #103077 (Groene AI). - Исправлено некорректное указание типа аргумента в сообщениях об ошибках функций поиска в строках (например,
locate,position), когда аргументы передаются в обратном порядке (locate(needle, haystack)приfunction_locate_has_mysql_compatible_argument_order = 1). #103102 (Alex Kuleshov). - Исправлено зависание waitForPause на неопределённое время, когда disableFailPoint вызывается, а ни один поток не приостановлен в failpoint. #103119 (Shaohua Wang).
- Ограничен размер строк в TCP-пакете Hello до аутентификации до 64 КБ и добавлена настройка сервера
handshake_timeout_milliseconds, чтобы ограничить общее время рукопожатия и не позволить неаутентифицированным клиентам потреблять чрезмерный объём памяти или удерживать потоки сколь угодно долго. #103284 (Sema Checherinda). - Исправлена ошибка в статистике min_value > max_value в Parquet ColumnIndex для столбцов String. #103334 (Saurabh Kumar Ojha).
- Проверка некорректно сформированных уплощённых данных Dynamic в формате Native. #103392 (Pavel Kruglov).
- Заполнение столбца
_timeданными из табличной функцииurl. #103437 (Nikita Taranov). - Исправлено определение SVE: инструкции SVE больше не используются, если они недоступны. #103568 (Raúl Marín).
Улучшение сборки/тестирования/пакетирования
- Зависимость Libstemmer (Snowball) теперь использует более новую версию — v3.0.1. #99256 (Jimmy Aguilar Mena).
- Рандомизированы настройки в clickhouse-test:
use_skip_indexes_for_top_k,use_top_k_dynamic_filtering,query_plan_max_limit_for_top_k_optimization. #91782 (Nikita Fomichev). - Реализован стресс-тест для функций, проверяющий корректность различных свойств функций. #93543 (Michael Kolupaev).
- Добавлена собственная конфигурация CMake для
llvm-projectвместо импорта конфигурации из upstream. #97453 (Konstantin Bogdanov). - В тестовой инфраструктуре сделали более случайными настройки
optimize_*, чтобы улучшить покрытие этапов оптимизации запросов. #97547 (Alexey Milovidov). - Используйте тулчейн Rust nightly-2026-03-22. #98602 (Konstantin Bogdanov).
- Используется
wasmtimev42.0.1. #98603 (Konstantin Bogdanov). - Использование
llvm-project22.1.1. #98882 (Konstantin Bogdanov). - Заменили
SANITIZE_COVERAGE(пользовательские обратные вызовы sanitizer, гранулярность на уровне символов) на покрытие на основе исходного кода LLVM (WITH_COVERAGE,-fprofile-instr-generate -fcoverage-mapping) для ночного конвейера покрытия по отдельным тестам. Теперь сервер при запуске считывает собственную карту покрытия из секций ELF и собирает кортежи(file, line_start, line_end)для каждого теста через новую командуSYSTEM SET COVERAGE TEST 'name'. Выбор тестов в таргетированных CI-проверках использует запросы по диапазонам строк к новой таблице CIDBchecks_coverage_linesи ранжирует тесты-кандидаты по числу покрываемых ими изменённых строк в diff. #99513 (Nikita Fomichev). - Исправлена ошибка линковки llvm-libc в сборке с -O0. #100023 (Zheguang Zhao).
- Исправлены два сообщения об ошибках при запуске контейнера, если в конфигурации отсутствовали параметры
logger.logиlogger.errorlog(например, когда все сообщения лога должны выводиться в STDOUT/STDERR). #100239 (Simon). - Предпочтительнее использовать
ld64.lldвместоldот Apple (cctools-port ld64) для сборок macOS. Это должно значительно сократить время компоновки на Darwin, посколькуld64из cctools-port работает очень медленно с-ffunction-sectionsи-dead_strip. Еслиld64.lldнедоступен, используетсяld. #100275 (Alexey Milovidov). - Тесты, гарантирующие, что в каталогах не обнаруживаются никакие секретные данные (REST + Glue). #100307 (Konstantin Vedernikov).
- Повторное выполнение недавно изменённых тестов с разными случайными настройками. #100385 (Alexey Milovidov).
- Отслеживание зависимостей файлов
#embedв CMake и включение режима depend в ccache для корректной пересборки. #100411 (Alexey Milovidov). - Добавлены тесты на корректность для запросов TPC-H. #100580 (Raufs Dunamalijevs).
- Используется
aws-sdk-cpp1.11.771. #100582 (Konstantin Bogdanov). - XML-файлы тестов производительности теперь могут ссылаться на внешние файлы SQL-запросов и настройки через атрибут file. #100747 (Raufs Dunamalijevs).
- Исправлена компиляция с
-march=x86-64-v4: вLowerUpperImpl.hдобавлен отсутствующий includeTargetSpecific.h. #100932 (Alexey Milovidov). - Исправлена сборка на Gentoo за счёт добавления —no-default-config в cxxflags. #100973 (Isak Ellmer).
- Добавлен
utils/auto-bisect/— shell-фреймворк для бисекции, который загружает готовые бинарные файлы CI и запускает пользовательский тестовый скрипт, чтобы найти первый коммит, в котором появилась регрессия, без необходимости локальной сборки. #100989 (Nikita Fomichev). - ThinLTO в CMake теперь по умолчанию отключён, чтобы в локальных сборках разработчиков он больше не включался неявно. Это не влияет на релизные сборки CI, поскольку в них параметр
-DENABLE_THINLTO=1передаётся явно. #101041 (Alexey Milovidov). - В набор тестов производительности добавлен бенчмарк TPC-DS SF1. #101209 (Raufs Dunamalijevs).
- Добавлены тесты без сохранения состояния для легковесных удалений в MergeTree, охватывающие: жизненный цикл флага
has_lightweight_delete, корректностьCOUNT(*)сoptimize_trivial_count_query, целостность столбцовMATERIALIZED/DEFAULT, восстановление флага вReplicatedMergeTree,read_in_orderс удалёнными строками, несколько циклов удаления и слияния, скрытие столбца_row_exists, различные предикаты и применение RBAC кALTER DELETE. #101792 (Nikita Fomichev). - Теперь для тегированных релизов публикуются distroless Docker-образы в вариантах ubuntu и alpine. #101941 (Rahul Nair).
- Трассировки стека теперь показывают чистые относительные пути (например,
src/Common/Exception.cpp) вместо путей, засорённых каталогом сборки (например,./ci/tmp/fast_build/./src/Common/Exception.cpp). #102000 (Raúl Marín). - Добавлена проверка стиля CI, отклоняющая файлы размером более 5 МБ, закоммиченные в репозиторий, со списком разрешённых исключений для существующих корректных тестовых данных. Удалён неиспользуемый файл
zookeeper_log.parquetразмером 14 МБ. #102080 (Raúl Marín). - Удалено ~400 неиспользуемых директив
#includeиз заголовочных файлов, что сокращает время компиляции. #102585 (Raúl Marín). - Используется
wasmtimev43.0.1. #102603 (Konstantin Bogdanov). - Используется
openssl3.5.6. #102606 (Konstantin Bogdanov). - Используйте
xz5.8.3. #102607 (Konstantin Bogdanov). - Базовый distroless Docker-образ обновлён с Debian 12 (glibc 2.36, OpenSSL 3.0) до Debian 13 (glibc 2.41, OpenSSL 3.5), что свело поверхность CVE к нулю достижимых уязвимостей. #101678 (Rahul Nair).
Релиз ClickHouse 26.3 LTS, 2026-03-26. Презентация, Видео
Обратно несовместимое изменение
- Понижение версии после обновления может привести к потере данных. Версии сериализации типов данных теперь распространяются на вложенные типы данных. Например, раньше версия сериализации String
with_size_streamприменялась только к столбцам String верхнего уровня и элементам Tuple. Теперь она применяется к любому типу String внутри любого вложенного типа, такого какArray/Map/Variant/JSON/и т. д. Это поведение управляется настройкой MergeTreepropagate_types_serialization_versions_to_nested_types, которая теперь включена по умолчанию. После этого изменения вновь созданные части данных не могут читаться старыми версиями, но старые части без проблем читаются новой версией. Обновление безопасно, а вот понижение версии — нет: если вам потребуется откатиться после обновления до 26.3, данные, записанные версией 26.3 в столбцы с вложенными типами, будут нечитаемы! Подробности см. в #101429. #94859 (Pavel Kruglov). - Удалён тип индекса пропуска данных
hypothesis. Это была малоизвестная экспериментальная возможность с ограниченной практической ценностью. При создании таблиц сINDEX ... TYPE hypothesisтеперь будет возникать ошибка. #96874 (Alexey Milovidov). - Удалена экспериментальная функция
detectProgrammingLanguage. #99567 (Alexey Milovidov). - Исправлен приоритет оператора
NOTв соответствии со стандартом SQL: теперьNOTимеет более низкий приоритет, чемIS NULL,BETWEEN,LIKEи арифметические операторы. Например,NOT (x) IS NULLтеперь разбирается какNOT (x IS NULL), а не как(NOT x) IS NULL. Это может изменить результат запросов, которые зависели от прежнего (нестандартного) поведения. #97680 (Alexey Milovidov). - Исправляет метаданные обычных проекций, чтобы проекции с ключами сортировки по нескольким столбцам распознавались корректно. Основано на #90429. #91352 (Amos Bird).
- Исправлены файлы индекса пропуска данных, которые не учитывали настройку replace_long_file_name_to_hash, из-за чего возникали ошибки “Имя файла слишком длинное” и нарушалось чтение индексов с длинными именами. Теперь имена файлов индекса пропуска данных хешируются, если они превышают max_file_name_length, аналогично файлам столбцов. Изменение обратно совместимо (новые серверы читают старые части), но при откате версии (или если во время rolling-обновления используются старые серверы) индексы с длинными именами могут игнорироваться. #97128 (Raúl Marín).
- async insert теперь включён по умолчанию. Теперь ClickHouse по умолчанию будет объединять все небольшие вставки в батчи. Этот параметр задаётся через compatibility. Если установить
compatibility=<version less than 26.2>, то значением по умолчанию останется прежнее —false. Вы можете включать и отключать async inserts на нескольких уровнях: в конфигурации профилей пользователей, для сеанса, для запроса или для таблицы семейства MergeTree. #97590 (Sema Checherinda). - Изменено значение
mysql_datatypes_support_levelпо умолчанию: вместо пустого теперь используетсяdecimal,datetime64,date2Date32, что по умолчанию обеспечивает корректное сопоставление MySQLDATEсDate32,DECIMAL/NUMERIC— сDecimal, аDATETIME/TIMESTAMPс точностью — сDateTime64. Ранее столбцы MySQLDATEсопоставлялись сDate, который не может представлять даты до 1970-01-01, что приводило к повреждению данных. #97716 (Alexey Milovidov). - Поддержка массива имён частей вместо regexp для
mergeTreeAnalyzeIndexes{,UUID}, поскольку regexp работает медленно (экспериментальная возможность). #98474 (Azat Khuzhin). - Изменено значение
stderr_reactionпо умолчанию сthrowнаlog_lastдля исполняемых UDF. UDF, записывающие предупреждения в stderr, больше не завершаются с ошибкой, если код выхода равен 0. Исключения, связанные с кодом выхода, теперь включают содержимое stderr. #99232 (Xu Jia).
Новая возможность
- Добавлена сериализация Map по бакетам для столбцов Map в MergeTree (
map_serialization_version = 'with_buckets'). Ключи распределяются по бакетам на основе хеша, так что при чтении одного ключа (m['key']) считывается только один бакет, а не весь столбец, что дает ускорение в 2–49 раз для lookup по одному ключу в зависимости от размера Map. Количество бакетов и стратегию бакетирования можно настраивать с помощью новых настроек MergeTree:map_serialization_version,max_buckets_in_map,map_buckets_strategy,map_buckets_coefficientиmap_buckets_min_avg_size. #99200 (Pavel Kruglov). - Добавлена поддержка материализованных CTE. Это позволяет вычислять CTE только один раз во время выполнения запроса и сохранять их результаты во временных таблицах. Закрывает #53449. #94849 (Dmitry Novik).
- Разрешена поддержка некоторых стандартных SQL-функций без скобок для совместимости, например
NOW. Закрывает #52102. #95949 (Aly Kafoury). - Теперь функцию natural sort key можно использовать как
naturalSortKey(s). #90322 (Nazarii Piontko). - Теперь для функций JSONExtract можно использовать нативный ввод JSON/Object. Закрывает #88370. #96711 (Fisnik Kastrati).
- Если параметр запроса имеет тип
Nullableи не задан, мы будем считать, что его значение —NULL. #93869 (Vikash Kumar). - Добавлена поддержка дополнительного ZooKeeper для базы данных
Replicated. #95590 (RinChanNOW). - Поддержка функции
hasдля типа JSON, чтобы проверять существование пути, аналогично Map. #96927 (DQ). - Добавлена табличная функция
mergeTreeTextIndex(database, table, index), которая позволяет читать данные напрямую из текстового индекса. Эту функцию можно использовать для интроспекции или выполнения агрегаций на основе данных текстового индекса. #97003 (Anton Popov). - Добавлена настройка MergeTree
table_readonly, позволяющая помечать таблицы как только для чтения, чтобы предотвратить вставку и другие изменения. #97652 (Alexey Milovidov). - Добавлена новая настройка
use_partition_pruningи алиасuse_partition_key. Установите значениеfalse, чтобы отключить отсечение партиций по ключу партиционирования. #97888 (Nihal Z. Miaji). - Реализована поддержка
ALTER TABLE ... EXECUTE expire_snapshots('<timestamp>')для таблиц Iceberg. #97904 (murphy-4o). #99130 - Для каждой записи
type=httpв<protocols>теперь можно указать пользовательский ключ<handlers>, указывающий на отдельный раздел config<http_handlers_*>, что позволяет задавать разные правила HTTP-маршрутизации для разных портов. #98414 (Amos Bird). - Добавлена опция
pretty=1вEXPLAINдля вывода в виде дерева с отступами, а такжеcompact=1для сворачивания шаговExpression, что делает планы запросов более читаемыми. #98500 (Kirill Kopnev). - Добавлена настройка сервера
restore_access_entities_with_current_grants. Когда она включена, у пользователей/ролей, восстанавливаемых из резервных копий, привилегии ограничиваются тем, какие привилегии пользователь, выполняющий восстановление, имеет право выдавать (та же семантика, что и уGRANT CURRENT GRANTS), вместо завершения с ошибкойACCESS_DENIED. #98795 (pufit). - Добавлены функции
caseFoldUTF8иremoveDiacriticsUTF8для свёртки регистра Unicode и удаления диакритических знаков. #98973 (George Larionov). - Добавлена строковая функция
normalizeUTF8NFKCCasefoldдля Unicode-нормализации NFKC_Casefold, которая сочетает нормализацию NFKC со свёрткой регистра. #99276 (George Larionov). - Добавлен токенизатор
asciiCJKдля полнотекстовых индексов и функцииtokens. Он разбивает текст по правилам границ слов Unicode: ASCII-слова могут включать символы-соединители (подчёркивание, двоеточие, точка, одинарная кавычка), а символы Unicode вне ASCII становятся односимвольными токенами. #99357 (Amos Bird). - Добавлены настройки
max_skip_unavailable_shards_numиmax_skip_unavailable_shards_ratio, чтобы ограничить число сегментов, которые можно незаметно пропустить, когда включенskip_unavailable_shards. Если число или доля недоступных сегментов превышает заданный порог, генерируется исключение вместо молчаливого возврата неполных результатов. #99369 (Alexey Milovidov). - Теперь можно использовать ключевое слово
SOMEв выражениях с подзапросами. Оно работает так же, какANY. #99842 (Artem Kytkin). - Добавлена настройка
output_format_trim_fixed_string, которая удаляет завершающие null-байты из значенийFixedStringв текстовых форматах вывода. #97558 (NeedmeFordev). - Добавлена поддержка заключённых в скобки выражений JOIN таблиц в предложении FROM, например
SELECT * FROM (t1 CROSS JOIN t2). #97650 (Alexey Milovidov). - Реализована функция
toDaysInMonth: она возвращает количество дней в месяце для указанной даты. #99227 (Vitaly Baranov).
Экспериментальные возможности
- Добавлена экспериментальная поддержка пользовательских функций (UDF) на базе WebAssembly, позволяющая реализовывать пользовательскую логику функций в WebAssembly и выполнять её внутри ClickHouse. Отдельная благодарность Alexey Smirnov за вклад в поддержку бэкенда Wasmtime. #88747 (Vladimir Cherkasov). Инкрементальные улучшения поддержки WASM UDF. #99373 (Vasily Chekalkin).
- Добавлена поддержка внешних SQL-диалектов с использованием библиотеки
polyglot. #99496 (Alexey Milovidov). - Добавлен кодек сжатия чисел с плавающей точкой
ALP(без fallback-механизма ALP_rd для несжимаемых значений double). #91362 (Nazarii Piontko). - Добавлены экспериментальные ленивые подсказки типов для столбцов
JSON. При включении черезallow_experimental_json_lazy_type_hintsкомандаALTER TABLE ... MODIFY COLUMN json JSON(path TypeName), которая только добавляет или изменяет подсказки типов, выполняется мгновенно как операция, затрагивающая только метаданные, без перезаписи исторических данных. Подсказки типов применяются во время выполнения запроса для старых частей и материализуются во время INSERT и фоновых слияний. #97412 (tanner-bruce). - Включено параллельное чтение из движка таблицы YTsaurus. #97343 (MikhailBurdukov).
Повышение производительности
- Повышена производительность озер данных. В предыдущих версиях при чтении из объектного хранилища конвейер не масштабировался по числу потоков обработки. Это дает прирост производительности на порядки (~40x) на многоядерных машинах. #99548 (Alexey Milovidov).
- Теперь связь между
enable_parallel_replicasиautomatic_parallel_replicas_modeтакова. Запрос может использовать параллельные реплики, только еслиenable_parallel_replicas > 0. Кроме того, еслиautomatic_parallel_replicas_mode=1, решение о том, использовать ли параллельные реплики, принимается на этапе планирования на основе ранее собранной статистики. Еслиautomatic_parallel_replicas_mode=0, параллельные реплики будут использоваться для всех поддерживаемых запросов независимо от наличия статистики. Одно из заметных исключений — распределённый insert-select с параллельными репликами: в этом случае запросы всегда будут выполняться так, как если быautomatic_parallel_replicas_mode=0. #97517 (Nikita Taranov). - Разрешено отсечение партиций, если предикат содержит любой оператор сравнения (
=,<,>,!=), а ключ партиционирования обёрнут в детерминированную цепочку функций (например, приPARTITION BY xпредикаты видаcityHash64(x) % 5 > 2,toYYYYMM(x) < 2026,toYYYYMM(x) = 2026илиtoYYYYMM(x) != 2026будут использовать ключ партиционирования для отсечения). Закрывает #28800. #98432 (Nihal Z. Miaji). - Разрешена оптимизация чтения в порядке сортировки и отсечение по первичному ключу, если целевой тип
CAST—Nullable, а преобразование монотонно; например, приPRIMARY KEY xClickHouse может использовать оптимизацию чтения в порядке сортировки дляORDER BY x::Nullable(UInt64)и отсечение по первичному ключу для таких предикатов, какWHERE x::Nullable(UInt64) > 500000. #98482 (Nihal Z. Miaji). - Теперь поддерживаются отсечение по индексу и pushdown фильтров, когда целочисленный столбец сравнивается с литералом с плавающей запятой; например, предикаты вида
WHERE x < 10.5теперь могут использовать первичный ключ для отсечения, а фильтры вродеprime < 1e9илиnumber < 1e5теперь проталкиваются в табличные функцииprimes()иnumbers()вместо того, чтобы приводить к неограниченному выполнению. Закрывает #85167. #98516 (Nihal Z. Miaji). - Добавлен новый SLRU-кэш для метаданных Parquet, который повышает производительность чтения, устраняя необходимость повторно загружать файлы только для чтения метаданных. #98140 (Grant Holly).
- Добавлена возможность менять местами стороны ANTI-, SEMI- и FULL JOIN на основе статистики оптимизатора. #97498 (Hechem Selmi).
- Оптимизирован пропуск гранул для
pointInPolygonпри работе с большими полигонами, а также исправлена ошибка, из-за которой анализ индексаpointInPolygonгенерировал исключение при отсечении по первичному ключу. #91633 (Nihal Z. Miaji). - Повышена производительность функции
levenshteinDistance. #94543 (Joanna Hulboj). - Оптимизировано преобразование батчей типа Decimal за счёт отказа от вызовов функций для каждого элемента. #95923 (Konstantin Bogdanov).
- Таблицы Iceberg теперь поддерживают асинхронную предзагрузку metadata через настройку таблицы
iceberg_metadata_async_prefetch_period_ms, которая периодически заранее заполняет кэш metadata. Кроме того, настройка запросаiceberg_metadata_staleness_msпозволяет запросам SELECT использовать кэшированные metadata, если они не старше указанного порога устаревания, что исключает обращения к каталогу Iceberg при обработке запроса. #96191 (Arsen Muk). S3Queueв режиме ordered использует S3 ListObjectsV2 StartAfter, чтобы не выполнять повторный вывод всей истории префикса, уменьшая число вызовов ListObjects. #96370 (Venkata Vineel ).- Снижено использование памяти при дедупликации вставок. В общем случае для дедупликации нужен исходный блок, но для sync insert можно обойтись без него и тем самым заметно сократить расход памяти. #96661 (Sema Checherinda).
- Использовать зависящее от архитектуры значение размера строки кэша вместо жёстко заданного значения 64. #97357 (Nikita Taranov).
- Незначительно оптимизировано чтение из словаря текстового индекса, что повысило общую производительность анализа текстового индекса. #97519 (Anton Popov).
- Ускорена декомпрессия
LZ4для 16-байтных блоков на ARM. #97774 (Raúl Marín). - Переработана токенизация: добавлен новый высокопроизводительный интерфейс, заменяющий старый API в стиле итератора, с поддержкой SIMD и токенизаторов с сохранением состояния. Часть #90268. #97871 (Amos Bird).
- Повышена производительность анализа текстового индекса для запросов с составными условиями, включающими как индексированные, так и неиндексированные столбцы. Ранее в таких случаях оптимизация раннего выхода при анализе индекса была ошибочно отключена. #98096 (Anton Popov).
- Повышена производительность запросов с константными выражениями, генерирующими очень длинные массивы или значения типа Map. #98287 (Alexey Milovidov).
- Исправлен анализ условий ключа для
DateTime64в первичных ключах при сравнении с целочисленными константами, из-за чего ранее не выполнялось отсечение гранул. #98410 (Amos Bird). - Параметр
optimize_syntax_fuse_functionsпо умолчанию включён. #98424 (Alexey Milovidov). - Оптимизирована агрегатная функция
avgWeighted: использование локальных аккумуляторов вместо построчной передачи через агрегатное состояние повышает производительность до 27% для входных данных типа Nullable. #98793 (Antonio Andelic). - Повышает производительность и снижает использование памяти для параллельных оконных функций в некоторых сценариях, а также для рабочих нагрузок
arrayFoldс большими массивами. Это также может уменьшить давление page fault и повысить стабильность затронутых запросов при жёстких ограничениях по памяти. #98892 (filimonov). - Повышена производительность слияний с сортировкой. #99013 (Artem Zuikov).
- Оптимизация
INTERSECT ALLиEXCEPT ALL. #99097 (Raufs Dunamalijevs). - Добавлена поддержка оптимизации
read_in_order_use_virtual_rowдля чтения в обратном порядке. #99198 (Vladimir Cherkasov). - Снижена конкуренция за кэш в
RIGHTиFULLJOIN-ах за счёт проверки того, установлен ли JoinUsedFlags, перед записью. #99274 (Hechem Selmi). - Оптимизирован
PrefetchingHelper::calcPrefetchLookAheadза счёт замены вычислений с плавающей запятой на чисто целочисленную арифметику, что улучшает размещение в кэше инструкций и снижает накладные расходы в циклах агрегации. #99327 (Riyane El Qoqui). - Снижено потребление памяти в Keeper за счёт замены
absl::flat_hash_setнаCompactChildrenSetдля хранения дочерних узлов. Новый контейнер хранит 0–1 дочерний узел inline, без выделения памяти в куче, что характерно для большинства узлов Keeper. Это уменьшает размерKeeperMemNodeсо 144 до 128 байт. #99860 (Antonio Andelic). - Агрегатные проекции теперь корректно поддерживаются в представлениях. Исправлено #32753. #88798 (Amos Bird).
- Реализована оптимизация преобразования OUTER JOIN в INNER JOIN при использовании
join_use_nulls. Закрывает #90978. #95968 (Vladimir Cherkasov). - Улучшено чтение подстолбцов благодаря корректному вычислению размеров перед чтением. Это снижает использование памяти и ускоряет чтение подстолбцов. #96251 (Pavel Kruglov).
- Кэши меток, несжатых данных и страниц переведены на использование отдельной arena jemalloc, чтобы избежать фрагментации памяти, когда кратковременные выделения памяти, например для queries и HTTP-запросов, смешиваются с более долгоживущими выделениями для кэшей. #96812 (Seva Potapov). #98812. #99021
- Таблицы с правилами
DELETE TTLтеперь могут использовать алгоритм Вертикального слияния. #97332 (murphy-4o). - Индексы пропуска данных теперь применяются при распределённом анализе индексов. #97767 (Azat Khuzhin).
- Метки вторичных индексов теперь заранее прогреваются, если включена настройка
prewarm_mark_cache(они загружаются в кэш меток индекса во время получения частей данных и при запуске таблицы). #97772 (Anton Popov). - Снижено число блокировок при управлении доступом. #97894 (Nikita Taranov).
- Если включен apply_row_policy_after_final или apply_prewhere_after_final, составные условия с AND в политиках строкового доступа и PREWHERE теперь раскладываются так, чтобы извлекать атомарные условия по ключу сортировки для анализа индекса первичного ключа. Ранее, если отложенный фильтр содержал смесь предикатов по ключу сортировки и не по ключу сортировки (например, x > 1 AND y != ‘foo’), всё выражение исключалось из анализа индекса. Теперь атомарные условия по ключу сортировки (например, x > 1) извлекаются и используются для отсечения гранул, в том числе из вложенных выражений с AND. #98513 (Yarik Briukhovetskyi).
- Уменьшена конкуренция за блокировку в MergeTreeBackgroundExecutor за счёт освобождения ресурсов задачи без захвата блокировки. Закрывает #93620. #98604 (Dmitry Novik).
- Исправлено чрезмерное использование памяти (~514 MiB) при автоопределении формата во время чтения данных не в формате Arrow (например, JSON из
urlилиfileбез явно указанного формата), вызванное тем, что средство чтения ArrowStream ошибочно интерпретировало первые байты как чрезмерно большую длину metadata. #98893 (Konstantin Bogdanov).
Улучшения
- Добавлена возможность разбирать файлы GeoParquet, содержащие разные типы Geo в одном и том же столбце. #97851 (Mark Needham).
- Добавлена SQL-функция
tokensForLikePattern, которая разбивает шаблоны LIKE на токены с учетом семантики подстановочных символов:%и_трактуются как подстановочные символы, экранированные подстановочные символы (\%,\_) трактуются как литералы, а токены, примыкающие к неэкранированным подстановочным символам, отбрасываются. #97872 (Amos Bird). - Добавлен заполнитель
{_schema_hash}для движка таблицы S3, добавляющий в путь S3 хеш определений столбцов таблицы. #98265 (Miсhael Stetsyuk). SymbolIndex,addressToSymbol,system.symbolsиbuildIdтеперь работают в macOS благодаря разбору таблиц символов Mach-O. #99014 (Alexey Milovidov).- Таблица
system.stack_traceтеперь работает в macOS, позволяя просматривать трассировки стека всех потоков сервера. #98982 (Alexey Milovidov). - Добавлена опция LDAP-конфигурации для каждого сервера
<follow_referrals>(по умолчаниюfalse), позволяющая управлять тем, переходит ли LDAP-клиент по рефералам. Отключение перехода по рефералам позволяет избежать тайм-аутов и зависаний при поиске от base DN корня домена Active Directory. Сообщения лога, связанные с рефералами, перенесены изwarnвtrace. #96765 (paf91). - Теперь в таблице query_log в новом столбце
skip_indicesмы отслеживаем все индексы пропуска данных, которые использовались при выполнении запроса. Исправляет #78676. Исходный автор — @pheepa. #87862 (Grant Holly). - Подсказки ACCESS_DENIED больше не раскрывают имена столбцов, если пользователь не может видеть все необходимые столбцы; имена базы данных/таблицы по-прежнему видны в подсказке. #91067 (filimonov).
- Добавлен отдельный поток очистки для MergeTree, чтобы избежать задержек очистки при высокой нагрузке на слияние. Это устраняет #86181. #91574 (Amos Bird).
- Перезагружать конфигурацию кластера, если изменились IP-адреса hostname локального сервера, а не какого-либо хоста. Исправляет #81215, #70156 и #65268. #93726 (Zhigao Hong).
- Обеспечена корректная оптимизация агрегатных функций в запросах GROUPING SETS с помощью optimize_aggregators_of_group_by_keys. #93935 (Xiaozhe Yu).
- Keeper-bench: отображать ошибки в метриках и генерировать JSON-файл с метриками для режима —input-request-log. #95748 (Mohammad Lareb Zafar).
- В CREATE USER добавлена новая клауза ROLE. #97074 (Vitaly Baranov).
- Теперь можно задавать настройки internal_replication для кластера, созданного с помощью базы данных Replicated. #97228 (Pervakov Grigorii).
- новая настройка
allow_nullable_tuple_in_extracted_subcolumnsопределяет, будут ли извлечённые подстолбцыTuple(...)изTuple,Variant,DynamicиJSONвозвращаться какNullable(Tuple(...))(NULLдля отсутствующих строк) или какTuple(...)(значения кортежа по умолчанию для отсутствующих строк). По умолчанию эта настройка отключена; изменить её можно только перезапуском сервера. #97299 (Nihal Z. Miaji). - Добавлена информация об отложенных фильтрах в виде отдельного элемента в выводе запроса EXPLAIN (при использовании Row Policies/PREWHERE с FINAL). Связано: #91065. #97374 (Yarik Briukhovetskyi).
- Параметр
type_json_allow_duplicated_key_with_literal_and_nested_objectтеперь включён по умолчанию. Это позволяет избежать ошибок о дублирующихся ключах при разборе JSON, таких как{"a" : 42, "a" : {"b" : 42}}, которые ClickHouse может формировать из исходных JSON-данных{"a" : 42, "a.b" : 42}. #97423 (Pavel Kruglov). - Улучшения Keeper:
find_super_nodes— очень полезная команда для отладки неожиданного роста количества узлов в Keeper. К сожалению, если суперузлов несколько, найти больше одного почти невозможно, потому что команда навсегда зависает при обходе дочерних узлов первого найденного суперузла. Этот PR запрещает обход дочерних узлов суперузлов. #97819 (pufit). - Базовая поддержка автодополнения для
clickhouse-keeper-client. #97828 (Konstantin Bogdanov). - Сбрасывать буферы асинхронного логирования при аварийном завершении. #97836 (Azat Khuzhin).
- Возможность impersonate теперь включена по умолчанию (см. EXECUTE AS target_user). #97870 (Vitaly Baranov).
- Улучшено прерывание запросов для движка таблицы SQLite с помощью KILL QUERY и отмены запроса (Ctrl+C) в clickhouse-client. #97944 (Roman Vasin).
- Добавлена настройка сервера
jemalloc_profiler_sampling_rateдля управленияlg_prof_sampleв jemalloc; она также доступна как асинхронная метрикаjemalloc.prof.lg_sample. #97945 (Antonio Andelic). - Добавлена поддержка весов в реализации ограниченной очереди с конкурентным доступом. #97962 (Daniil Ivanik).
- Добавлен
sslmodeв список допустимых ключей для источников словарей PostgreSQL. Ранееsslmodeотсутствовал в списке допустимых значенийdictionary_allowed_keysвPostgreSQLDictionarySource.cpp, из-за чего было невозможно настроить режим SSL для подключений словарей к PostgreSQL. В результате словари не могли подключаться к серверам PostgreSQL, где требуется SSL (например, к AWS RDS, где SSL обязателен по умолчанию), поскольку подключение не проходило согласование TLS, а сервер отклонял незашифрованный резервный вариант. #98014 (mcalfin). - Показывать понятную ошибку “no such file” при передаче несуществующего пути к файлу в
clickhouseилиclickhouse-localвместо сбивающего с толку общего сообщения. #98048 (Raúl Marín). - Текстовые индексы теперь можно создавать для столбцов
Nullable([Fixed]String)иArray(Nullable([Fixed]String)). #98118 (Jimmy Aguilar Mena). - Не удаляйте именованные коллекции, от которых зависят источники словарей. #98127 (Pablo Marcos).
- Включена поддержка алгоритма JOIN
grace_hashдля запросов с итогами. #98144 (János Benjamin Antal). - Раннее прекращение фоновых слияний при DROP DATABASE для обычного shared merge tree. #98161 (Shaohua Wang).
- Улучшена отмена запросов к MongoDB и MySQL с помощью KILL QUERY и сочетания Ctrl+C в clickhouse-client. #98187 (Roman Vasin).
- Удалён NetlinkMetricsProvider, и для сбора метрик taskstats по отдельным потокам теперь используется только procfs. Сбор через Netlink создаёт проблемы в контейнеризированных средах и сильнее ухудшает tail latency при конкуренции за ресурсы. #98229 (Amos Bird).
- Переработана обработка файлов манифеста в Iceberg, чтобы устранить проблемы с кэшированием файлов манифеста. #98231 (Daniil Ivanik).
- Теперь мы учитываем случаи, когда ключ сортировки таблицы может быть выражением вроде
toDate(time), и можем решать, не откладывать ли вычисление таких выражений, если они входят в фильтры. #98237 (Yarik Briukhovetskyi). - Добавлена новая метрика
MaxAllocatedEphemeralLockSequentialNumber— максимальный последовательный номер, выделенный для эфемерных lock znode в ZooKeeper. #98243 (Miсhael Stetsyuk). - ClickStack обновлён до версии 2.20.0. #98252 (Aaron Knudtson).
- Добавлено новое событие профиля
KeeperRequestTotalWithSubrequests, которое учитывает каждый подзапрос в составе мультизапроса отдельно, обеспечивая лучшую видимость фактической рабочей нагрузки Keeper. Существующее событиеKeeperRequestTotalпо-прежнему учитывает каждый мультизапрос как один запрос. #98348 (Antonio Andelic). SYSTEM RELOAD DICTIONARIESтеперь перезагружает словари в порядке топологической сортировки, поэтому словари, использующие другие словари в качестве источника, после перезагрузки получают актуальные данные. #98356 (Alexey Milovidov).- Перезапускайте кеш статистики после изменения настройки MergeTree. #98520 (Han Fei).
- Только “живые” реплики (доступные для подключения) участвуют в распределённом анализе индексов. #98521 (Azat Khuzhin).
- Добавлена настройка
access_control_improvements.disallow_config_defined_profiles_for_sql_defined_users(по умолчанию отключена/разрешена), которая запрещает использовать профили настроек, заданные в конфигурации (кроме профиляdefault), для пользователей, определённых через SQL. #98662 (Alexander Tokmakov). - Число узлов, используемых в автоматической эвристике параллельных реплик, теперь ограничивается фактическим числом узлов в кластере (а не только настройкой
max_parallel_replicas). #98668 (Nikita Taranov). - Реализованы хеджированные запросы и асинхронное чтение для распределённого анализа индексов. #98724 (Azat Khuzhin).
- Для десериализации бинарных состояний
AggregateFunctionтеперь необходимо полностью прочитать входные данные. Если в конце присутствуют лишние байты, ClickHouse генерирует исключение вместо того, чтобы принимать некорректные данные состояния. #98786 (Nihal Z. Miaji). - Сделать так, чтобы TRUNCATE DATABASE поддерживал отмену запроса. #98828 (Shaohua Wang).
- Улучшен
keeper-bench: добавлены конвейерная обработка запросов, период прогрева, статистика по каждой операции, воспроизводимые seed и улучшенная обработка ошибок. #98906 (Antonio Andelic). - Поддержка предложения SAMPLE при распределённом анализе индексов. #98931 (Azat Khuzhin).
- Показывать заголовок диаграммы на панели мониторинга, даже если запрос возвращает пустой результат или завершается ошибкой. #98975 (Yash ).
- Сообщения об ошибках анализатора больше не перечисляют все столбцы таблицы (что могло приводить к исключениям размером более 150 КБ). Теперь списки столбцов ограничиваются 10 элементами. #99002 (Yash ).
- Корректно возвращается статистика столбцов из подзапросов с JOIN, чтобы родительский запрос мог использовать её для изменения порядка JOIN. #99096 (Alexander Gololobov).
- Помечать сеанс ZooKeeper как истёкший сразу после начала финализации, а не ждать завершения потока отправки. Это позволяет другим потокам без задержки устанавливать новый сеанс. #99102 (Raúl Marín).
- Теперь используется больше математических функций из LLVM-libc:
exp,exp2,expm1,fabs,fabsl,floor,fmodl,log,log2,logf,pow,scalbn,scalbnl,copysignl,nan,nanf,nanlи общие константыexplogxf. #99118 (Konstantin Bogdanov). - Снизили использование памяти и устранили возможное дублирование вывода в collapsed-формате
system.jemalloc_profile_text. #99121 (Antonio Andelic). - Добавлен столбец
is_subrequestвsystem.aggregated_zookeeper_log, чтобы отделить отдельные запросы от подзапросов внутри запросов Multi/MultiRead. Ранее подзапросы агрегировались в те же бакеты, что и отдельные запросы, и поскольку каждая подоперация записывалась с общей длительностью мультизапроса, средняя задержка получалась некорректной. Теперь у подзапросов нулевая задержка. #99169 (Miсhael Stetsyuk). - Разрешена команда
ALTER TABLE MODIFY COLUMN x TTL ...без указания типа столбца. #99208 (Nikolay Degterinsky). - Пропускаются устаревшие запросы Keeper для сеансов, которые уже отключились, что позволяет избежать лишних обменов с Raft. Число отслеживаемых завершённых сеансов ограничивается настройкой coordination
max_finished_sessions_cache_size. #99246 (Antonio Andelic). - Добавлена поддержка текстового индекса, построенного на
mapValues(map), для оператораIN. #99286 (Anton Popov). - Поддержка shell-подобного автодополнения в clickhouse keeper-client (автодополнение аргументов в кавычках, то есть
'foo ba', обработка экранированных аргументов, то естьfoo\ ba,lsтеперь выводит узлы в кавычках, если они содержат пробелы). #99312 (Azat Khuzhin). - Предотвращено зависание команды Keeper
mntrиз-за конфликтов блокировок. #99472 (Antonio Andelic). - Снизить конкуренцию за блокировки в диспетчере Keeper, вызывая обратные вызовы и обрабатывая запросы на чтение вне области действия мьютекса, а также добавить профилированные lock guard’ы для обсервабилити. #99751 (Antonio Andelic).
- Допускается отсутствие заполнения в конце последнего блока файлов Parquet. #99857 (Seva Potapov).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Исправлено сохранение целевого объекта таблицы Alias как зависимости DDL, если он указан не полностью: теперь используется база данных таблицы Alias, а не база данных сеанса. #95175 (Enric Calabuig).
- Исправлены неверный результат или исключение при чтении подстолбцов у столбцов ALIAS. #95408 (Pavel Kruglov).
- Исправлено отсутствие столбца при использовании нестандартного алиаса идентификатора в JOIN со старым анализатором. Исправляет #25594, #47288 и #53263. #95679 (Zhigao Hong).
- Исправлен сбой в функциях диалекта Kusto
bin(),bin_at(),extract()иindexof(), возникавший при передаче пустых аргументов. #95736 (NeedmeFordev). - Запрещает монтировать local_object_storage (которое используется для озёр данных поверх локальной файловой системы и, возможно, для LocalDisk) где-либо, кроме user_files_path, в clickhouse-client. #96201 (Daniil Ivanik).
- В движке таблицы
DeltaLakeисправлена логическая гонка при смене версии снимка и устранены избыточные ресурсоёмкие перезагрузки снимка. #96226 (Kseniia Sumarokova). - Исправлена логическая ошибка при присоединении части в MergeTree, если между её отсоединением и присоединением происходило несколько последовательных переименований. #96351 (Alexey Milovidov).
- Исправлена ошибка, из-за которой явные настройки, отправленные вместе с
compatibilityв том же запросе, могли незаметно игнорироваться, если их значение совпадало со значением по умолчанию на сервере. #97078 (Raufs Dunamalijevs). - Исправлено поведение клиента: при столкновении
INSERTс параллельным разбором с недопустимыми данными он сообщал об ошибкеNETWORK_ERRORвместо фактической ошибки разбора (с правильным номером строки). #97339 (Alexey Milovidov). - Исправлена ошибка, из-за которой агрегатная функция
sumCountне могла читать сериализованные состояния старого формата после введенияNullable(Tuple). Закрывает #97370. #97502 (Nihal Z. Miaji). - Исправлено исключение при сравнении кортежей, содержащих элементы типа
Nothing(например, при сравнении с элементами кортежаNULL), при использованииGROUPING SETSиORDER BY. #97509 (Alexey Milovidov). - Исправлено недетерминированное вычисление
uncompressed_hashдля частей Compact MergeTree при использовании нескольких кодеков сжатия, что могло приводить к некорректной дедупликации. #97522 (Alexey Milovidov). - Исправлена логическая ошибка, связанная с отсутствием stream при INSERT SELECT с JSON и бакетами в общих данных. Закрывает #97331. #97523 (Pavel Kruglov).
- Исправлены случаи, когда исключения
MEMORY_LIMIT_EXCEEDEDво время слияний SummingMergeTree и CoalescingMergeTree ошибочно регистрировались какCORRUPTED_DATA. #97537 (János Benjamin Antal). - Исправлено исключение “Context has expired” для коррелированных подзапросов, содержащих табличные функции, например
url(). #97544 (Alexey Milovidov). - Исправлены исключения и некорректное поведение в
optimize_syntax_fuse_functionsпри работе с агрегатными проекциями, типами Date и сохранением имён столбцов. #97545 (Alexey Milovidov). - Убрано некорректное переписывание запроса с
replaceRegexpOneнаextract, которое приводило к неверным результатам, если регулярное выражение не находило совпадений; также исправлено Исключение при использованииreplaceRegexpOneсGROUP BY ... WITH CUBEиgroup_by_use_nulls=1. #97546 (Alexey Milovidov). - Исправлено бесконечное зависание
DROP DATABASEпри использованииdatabase_atomic_wait_for_drop_and_detach_synchronously, если запрос был принудительно завершён. #97586 (Alexey Milovidov). - Исправлено:
KILL QUERYне мог завершать запросы, зависшие при генерацииWITH FILL, загрузке словаря черезdictGetили выполненииALTER DELETEсmutations_sync=1наReplicatedMergeTree. #97589 (Alexey Milovidov). - Табличная функция
loopвызывалаinner_storage->read()напрямую, в обход слоя интерпретатора, где применяются политики уровня строк, привилегии на уровне столбцов и другие проверки безопасности. Это позволяло пользователю, ограниченному политиками уровня строк, читать все строки черезloop(table), даже если прямой SELECT не возвращал ни одной строки. #97682 (pufit). - Исправлено некорректное отсечение партиций при использовании DateTime64 со значениями до эпохи Unix в функции
toDate(). #97746 (Yarik Briukhovetskyi). - После этого патча
hasPartitionIdбудет возвращать false, если в наборе data part есть другая партиция с более высоким идентификатором партиции. #97748 (Mikhail Artemenko). - Исправлены возможные сбои при чтении пустых гранул в расширенных общих данных в JSON. Закрывает #97563. #97778 (Pavel Kruglov).
- Исправлена ошибка
Cannot schedule a fileLOGICAL_ERRORприINSERTвDistributed, возникавшая из-за состояния гонки междуDROPиINSERT. #97822 (Azat Khuzhin). - Исправлены аварийное завершение работы сервера ClickHouse и срабатывание assert при вызове
mapContainsKey/mapContainsKeyLikeс индексом пропуска данныхtokenbf_v1. #97826 (Shankar Iyer). - Исправлены исключения LOGICAL_ERROR, возникавшие из-за
LowCardinalityвнутри составных типов (Variant,Dynamic,Tuple) вconcatWithSeparator,format,IN-подзапросах,GLOBAL INи JOIN с runtime-фильтрами. #97831 (Raúl Marín). - Исправлено Исключение
LOGICAL_ERRORChunk info was not set for chunk in MergingAggregatedTransform, возникавшее при использованииARRAY JOINс table functionmerge()для нескольких distributed таблиц в сочетании сGROUP BY. #97838 (Raúl Marín). - Исправлен сбой сервера (
std::terminate), вызванный неперехваченным исключением в деструкторе пула HTTP-соединений, когда при высоком параллелизме достигался жёсткий лимит группы соединений. ИсключениеHTTP_CONNECTION_LIMIT_REACHEDмогло пробрасываться из~PooledConnectionпри возврате соединения в пул, что приводило кSIGABRT. #97850 (Antonio Andelic). - Исправлен некорректный результат при использовании алгоритма
grace_hashс неэквивалентными JOIN, когда левый блок не удаётся обработать полностью из-за ограничений на размер результата JOIN. #97866 (János Benjamin Antal). - Исправлена проблема низкой производительности при сканировании metadata DeltaLake, возникшая после #96686. #97880 (Kseniia Sumarokova).
- Исправлена гонка данных в клиенте ZooKeeper между
sendThreadиreceiveThread. #97887 (Pablo Marcos). - Исправлена ошибка, из-за которой было невозможно использовать CTE в распределённых INSERT SELECT. Продолжение https://github.com/ClickHouse/ClickHouse/pull/87789. Закрывает #95837. #97889 (Yarik Briukhovetskyi).
- Исправлено исключение в
CachedOnDiskReadBufferFromFile::readBigAt. Закрывает #97325. #97890 (Kseniia Sumarokova). - Исправлено исключение
LOGICAL_ERRORв движкеAliasпри работе с материализованными столбцами, вызванное несоответствием столбцов. Закрывает #97907. #97921 (Kai Zhu). - Исправлена потеря данных Keeper после перезапуска при использовании Azure Blob Storage с метаданными
s3_plainв качестве хранилища журнала. #97987 (Antonio Andelic). - Исправлена ошибка JIT-компиляции функции
signдля целочисленных типов с разрядностью выше, чем уInt8— для значений вне диапазона -128..127 знак мог определяться неверно. #98012 (Alexey Milovidov). - Исправлены исключение
DUPLICATE_COLUMNи неявное появление NULL при чтении таблиц Delta Lake, использующих режим сопоставления столбцов “name”, с полями struct, имена которых содержат точки (например,STRUCT<`a.foo`: STRING, `b.foo`: STRING>). #98013 (Caio Ishizaka Costa). - Исправлена мутация после легковесного обновления и при использовании вторичных индексов. #98044 (Raúl Marín).
- Исправлен некорректный результат FINAL-запросов при сочетании индексов пропуска данных по первичному и не по первичному ключу. #98097 (Raúl Marín).
- Обеспечено выполнение проверок прав READ ON FILE для скалярной функции file() и DESCRIBE TABLE file(). #98115 (Nikolay Degterinsky).
- Исправлен сбой, из-за которого запрос к файлам с glob-шаблоном (например,
file('dir/**', 'LineAsString')) приводил к необрабатываемому исключению файловой системы (STD_EXCEPTION), если каталог содержал битую символическую ссылку. Теперь такие символические ссылки молча пропускаются, и запрос возвращает результаты по всем корректным файлам. #98143 (Mark Andreev). - Исправлен сбой сегментации при оптимизации плана запроса во время преобразования OUTER JOIN в INNER JOIN с
arrayJoinв выражении фильтра. #98147 (Alexey Milovidov). - Исправлена ошибка, из-за которой формат
ProtobufListне работал с движком Kafka, поскольку состояние чтения не сбрасывалось между сообщениями. #98151 (Alexey Milovidov). - Исправлена логическая ошибка в analyzer_compatibility_join_using_top_level_identifier и ARRAY JOIN, закрыт #98164. #98179 (Vladimir Cherkasov).
- Для ответов наблюдения в
aggregated_zookeeper_logтеперь задаётся компонентWatchвместо пустого значения. #98202 (Antonio Andelic). - Если столбцы ключа партиционирования не входят в ключ сортировки, то отсечение партиций может ошибочно пропустить партиции, содержащие строки, которые должны были бы остаться после дедупликации FINAL. #98242 (Yarik Briukhovetskyi).
- Исправлена логическая ошибка “Bad cast from type DB::ColumnConst to DB::ColumnArray” в
kql_array_sort_asc/kql_array_sort_descпри вызове с аргументами в виде константных массивов. #98251 (Alexey Milovidov). - Исправлен выход за границы при обращении к
ColumnConst::getExtremes, который мог вызывать сбой при включенномextremes = 1. #98263 (Alexey Milovidov). - Исправлена потенциальная взаимная блокировка, возникавшая, когда две параллельные операции
MOVE PARTITIONработают с одной и той же парой таблиц в противоположных направлениях. #98264 (Alexey Milovidov). - HTTP-сервер теперь возвращает сообщение об ошибке в теле ответа на запросы с ответом 400 Bad Request, вызванные некорректными заголовками, вместо пустого тела. #98268 (Alexey Milovidov).
- Исправлены ошибки, приводившие к некорректным результатам при использовании распределённого анализа индексов (экспериментальная возможность) и кэша условий запроса. #98269 (Azat Khuzhin).
- Исправлено исключение LOGICAL_ERROR “Недопустимый результат двоичного поиска в
MergeTreeSetIndex”, вызванное преобразованиемtoDateдля столбцов ключа, когда данные переходили через границу 65535. #98276 (Alexey Milovidov). - Исправлено исключение
LOGICAL_ERROR, возникавшее, когда RIGHT JOIN, обёрнутый в CROSS JOIN, переставлялся оптимизациейquery_plan_join_swap_tableв устаревшем коде шага JOIN. #98279 (Alexey Milovidov). - Добавлена проверка повреждённых данных при десериализации
DDSketch, чтобы предотвратить segfault’ы, исключения, бесконечные циклы и OOM при чтении повреждённых состояний агрегатной функцииquantilesDD. #98284 (Alexey Milovidov). - Исправлен LOGICAL_ERROR “Trying to execute PLACEHOLDER action”, возникавший при обращении к коррелированным столбцам из внешних запросов внутри лямбда-функций, таких как
arrayMap. #98285 (Alexey Milovidov). - Исправлено исключение «Logical error» в
caseWithExpression, когда выражениеCASEвключаетmaterialize(NULL)или другие аргументыNullable(Nothing). #98290 (Alexey Milovidov). - Исправлено ошибочное исключение преобразования типов при фильтрации по виртуальному столбцу
_tableв табличной функцииmerge. #98291 (Alexey Milovidov). - Исправлен редкий сбой дедупликации, из-за которого повторные вставки ошибочно дедуплицировались из-за несогласованного порядка очистки каталогов ZooKeeper
blocks/иdeduplication_hashes/. #98293 (Alexey Milovidov). - Исправлено Исключение, возникавшее при одновременном использовании
ORDER BY ... WITH FILLиLIMIT BY. #98361 (Alexey Milovidov). - Исправлено скрытое повреждение данных при вставке столбца Parquet/Arrow
Dateв столбецEnum— теперь несовместимое преобразование типов корректно отклоняется, вместо того чтобы сохранять недопустимые значения enum. #98364 (Alexey Milovidov). - Исправлено исключение при чтении файла Arrow со столбцом
Arrayв таблицу со столбцомNested. #98365 (Alexey Milovidov). - Исправлены мутации
MATERIALIZE INDEXиMATERIALIZE PROJECTION, которые застревали, если индекс или проекция удалялись до завершения мутации. #98369 (Alexey Milovidov). - Исправлено исключение при чтении из
Nullable(Tuple(...)), когда имя элемента Tuple совпадает с подстолбцомnullу Nullable. #98372 (Alexey Milovidov). - Исправлено исключение “Столбец …: у узла дерева запроса нет корректного узла-источника” при выполнении JOIN между таблицей
Merge(оборачивающей таблицуDistributed) и другой таблицей. #98376 (Alexey Milovidov). - Исправлено некорректное преобразование
Boolиз Parquet вFixedStringв нативном ридере V3, из-за которого возвращались raw bytes вместо строкового представления. #98378 (Alexey Milovidov). - Исправлено:
tryGetColumnDescriptionтеперь фильтрует подстолбцы по виду родительского столбца, аналогично другим методам поиска столбцов. #98391 (Alexey Milovidov). - Принимать учетные данные Base64 без паддинга в HTTP Basic Auth. Некоторые HTTP-клиенты опускают завершающие символы паддинга
=в заголовкеAuthorization: Basic, что ранее приводило к ошибкам аутентификации. #98392 (Amos Bird). - Исправлены некорректные результаты отсечения партиций после слияния частей со столбцами ключа партиционирования типа
Nullable, вызванные неверными границами индекса min-max. #98405 (Amos Bird). - Исправлено редкое Исключение в исполнителе конвейера, которое могло проявляться сообщением
Received signal 6(только в отладочных сборках), когда расширение конвейера происходило одновременно с отменой запроса. #98428 (Alexey Milovidov). - Исправлено исключение “Column identifier is already registered” при использовании
count_distinct_optimizationс предложениемQUALIFY. #98433 (Alexey Milovidov). - Исправлено исключение “cannot be inside Nullable type”, возникавшее при использовании
IN/NOT INс аргументами-столбцами типаLowCardinality(например,a NOT IN (b), гдеaимеет типLowCardinality(String)). #98443 (Alexey Milovidov). - Исправлено исключение “Pipeline stuck” в JOIN-операциях
full_sorting_merge, вызванное взаимной блокировкой вPingPongProcessor, возникавшей, когда оптимизацияFilterBySetOnTheFlyсоздавала циклическую зависимость сMergeJoinTransform. #98454 (Alexey Milovidov). - Исправлено исключение
LOGICAL_ERROR“Проекция не может увеличить количество строк в блоке”, возникавшее при слиянии частей с TTL, удаляющим все строки, и агрегирующей проекцией с константным ключомGROUP BY. #98458 (Alexey Milovidov). - Исправлено исключение с логической ошибкой при совместном использовании
CROSS JOINиINNER JOIN USING. #98459 (Alexey Milovidov). - Исправлено обращение к нулевому указателю в
dictGetOrDefault, когда аргумент ключа имеет типNullable. #98460 (Alexey Milovidov). - Исправлено исключение в запросах
DISTINCT, возникавшее при использовании агрегатных проекций, еслиmaterializeприводил к различиям в типахLowCardinalityмежду запросом и проекцией. #98462 (Alexey Milovidov). - Исправлено исключение LOGICAL_ERROR, возникавшее при использовании
arrayJoinв выражении фильтра с OUTER JOIN и включенномjoin_use_nulls. #98464 (Alexey Milovidov). - Исправлено Исключение из-за логической ошибки “Реплика решила читать в режиме WithOrder, а не в ReverseOrder” при использовании параллельных реплик с
optimize_aggregation_in_order. #98467 (Alexey Milovidov). - Исправлено отключение Java-клиентов ZooKeeper от ClickHouse Keeper после запроса
addWatch. Java-клиент ожидает 4-байтовое телоErrorResponseв ответе наaddWatch, но Keeper отправлял пустое тело, из-за чего возникалоEOFExceptionи разрывался сеанс. Из-за этого переставали работатьCuratorCacheв Apache Curator и любые Java-приложения, использующие постоянные наблюдения. Исправляет #98079. #98499 (Antonio Andelic). - Исправлено поведение, при котором метрики Keeper
zk_followersиzk_synced_followersне уменьшались при отказе follower. В четырёхбуквенную командуmntrдобавлены новые метрикиzk_learnersиzk_synced_non_voting_followers. Исправляет #54173. #98504 (Antonio Andelic). - Исправлено исключение
LOGICAL_ERRORвrenameAndCommitEmptyParts, которое могло возникнуть при одновременном выполненииTRUNCATE TABLEиOPTIMIZE TABLEс использованием транзакций MergeTree. #98508 (Alexey Milovidov). - Исправлено поведение, при котором защищённый raft-порт Keeper игнорировал параметры
cipherListиdhParamsFileиз конфигурацииopenSSLи всегда использовал значения по умолчанию вместо заданных пользователем. Закрывает #51188. #98509 (Antonio Andelic). - Исправлены вводящие в заблуждение сообщения лога Keeper, такие как “Receiving request for session X took 9963 ms”, где указанное время на самом деле уходило на ожидание в состоянии бездействия в
poll()между heartbeat-сообщениями, а не на выполнение самой операции. Исправление #79026. #98510 (Antonio Andelic). - Исправлен неожиданный результат при использовании read_in_order_use_virtual_row и монотонных функций; закрыт #97837. #98514 (Vladimir Cherkasov).
- Исправлена ошибка
LOGICAL_ERROR: Not-ready Set is passed as the second argument for function 'in'при использованииPREWHEREс подзапросом вINв таблицах семейства MergeTree. #98522 (Alexey Milovidov). - Исправлены TCP-соединения Keeper, из-за которых сервер не мог корректно завершить работу, поскольку они не реагировали на сигнал завершения. #98525 (Alexey Milovidov).
- Исправлено исключение “Столбец сортировки не найден среди выходов ActionsDAG” при включенном
query_plan_convert_join_to_inиquery_plan_merge_expressions = 0. #98526 (Alexey Milovidov). - Исправлена проблема, из-за которой источник словаря MongoDB не работал с именованными коллекциями. Закрывает #97840. #98528 (Pablo Marcos).
- Исправлен LOGICAL_ERROR, возникавший, если после подстановки параметров Identifier оказывался пустым. #98530 (Pervakov Grigorii).
- Исправлена взаимная блокировка конвейера при одновременном использовании
sort_overflow_mode = 'break'и оконных функций. #98543 (Alexey Milovidov). - Исправлен откат столбца в движке Buffer при обработке исключения, возникающего при добавлении нового блока. Прежняя логика могла приводить к повреждению состояния столбцов в памяти. #98551 (Pavel Kruglov).
- Исправлено исключение
Bad cast from type ColumnConst to ColumnDynamicпри null-safe сравнении (<=>/IS NOT DISTINCT FROM) с константными столбцамиDynamicилиVariantиNULL. Также исправлена ошибка, из-за которойIS DISTINCT FROMдляDynamic/Variantпри сравнении сNULLвсегда ошибочно возвращал 0. #98553 (Alexey Milovidov). - Исправлено использование текстового индекса вместе с другими индексами пропуска данных. Ранее при одновременном использовании фильтром запроса текстового индекса и других обычных индексов пропуска данных могли возникать логические ошибки, такие как “Trying to get non-existing mark”. #98555 (Anton Popov).
- Исправлена логическая ошибка “TABLE_FUNCTION is not allowed in expression context”, которая возникала, когда табличная функция с псевдонимом использовалась несколько раз в пределах одной и той же области видимости запроса (например, в секциях
PREWHEREиQUALIFY). #98557 (Alexey Milovidov). - Исправлен распределённый анализ индексов для выражений (а не только для столбцов) в PK (из-за ошибки на удалённых репликах не отфильтровывались избыточные гранулы). #98561 (Azat Khuzhin).
- Запретить удаление столбца, если его подстолбцы используются в выражениях default/alias других столбцов, и использовать анализатор для выражений default при выполнении alter drop column. #98569 (Nikita Mikhaylov).
- Исправлены некорректные повторные попытки выполнения запросов S3 при ошибках, не допускающих повторной попытки (включая
HTTP_CONNECTION_LIMIT_REACHED), в HTTP-клиенте. #98598 (Sema Checherinda). - Исправлено переполнение Decimal при отсечении партиций с DateTime64. #98628 (Yarik Briukhovetskyi).
- Исправлены две ошибки в JIT-компиляции выражений: ошибка copy-paste в проверке типов
nativeCast, из-за которой ветви приведения integer-to-integer и float-to-float были недостижимы, а также передача некорректногоnullptrдля TargetMachine в LLVMPassBuilder, из-за чего не регистрировались специфичные для целевой платформы этапы оптимизации. #98660 (Alexey Milovidov). - Исправлен обход RBAC, который позволял пользователям выполнять DESCRIBE для любой таблицы через
remote(),remoteSecure(),cluster()илиclusterAllReplicas(), указывая на localhost, без привилегииSHOW_COLUMNS. #98669 (pufit). - Исправлено исключение
BAD_GETи некорректные результаты запроса, возникавшие, когда небулево выражение (например,sin(col)) использовалось одновременно в WHERE и SELECT с JOIN из-за того, что оптимизация проталкивания фильтра повреждала общие узлы DAG. #98681 (Alexey Milovidov). - Исправлен LOGICAL_ERROR “Реплика решила читать в режиме Default, а не WithOrder” при использовании
read_in_order_through_joinс параллельными репликами. #98685 (Alexey Milovidov). - Исправлено Исключение “Неверное приведение типа
DB::TableFunctionNodeкDB::QueryNode” при использовании табличной функцииinputв качестве аргумента функцииremote. #98694 (Alexey Milovidov). - Исправлено повторное появление устаревших частей данных, вызванное некорректной очисткой пустых перекрывающих частей. #98698 (Shaohua Wang).
- Исправлено исключение в
LogicalExpressionOptimizerPass, возникавшее, если булева функция в сравненииequalsвозвращала типVariant. #98712 (Alexey Milovidov). - Исправлен некорректный разбор функцией
parseDateTimeBestEffortслов, начинающихся с префиксов названий месяцев/дней недели. Закрывает #97965. #98742 (Pavel Kruglov). - Исправлено исключение
UNKNOWN_IDENTIFIER, возникавшее при выполнении запросов к табличной функцииmerge()или движкуMergeдля таблиц с JSON-столбцами с разными параметрами (например, разными полямиSKIP) и столбцамиALIAS, ссылающимися на подпути JSON, при включенном новом анализаторе. Закрывает #97812. #98753 (Pavel Kruglov). - Исправлена работа оптимизации
optimize_skip_unused_shardsс анализатором при использовании хранилищаDistributedвView. #98754 (Nikolai Kochetov). - Исправлен доступ по имени к подстолбцам кортежа (например,
SELECT x.aдляTuple(a UUID, b Int32)) во внешних таблицах, передаваемых через--externalвclickhouse-client. Закрывает #96925. #98755 (Pavel Kruglov). - Исправлено Исключение
reverseUTF8при некорректном (усечённом) вводе UTF-8. #98770 (Alexey Milovidov). - Исправлено определение применимости индекса пропуска данных типа set для предиката с OR и false (то есть
or(x, 0)). #98776 (Azat Khuzhin). - Исправлено исключение
LOGICAL_ERROR(несоответствие структуры блока вremoveUnusedColumns), которое могло возникать приFINAL+PREWHERE+ константном выраженииWHERE+ не зависящих от столбцов агрегатах, таких какcount(). #98778 (Alexey Milovidov). - Записи
system.trace_logдля автоперезагрузки словарей ClickHouse теперь имеют непустые идентификаторы запросов. #98784 (Miсhael Stetsyuk). - Исправлен crash, при котором мог происходить доступ по нулевому указателю в system tables, созданных в промежутке между созданием снимка таблиц при вызове
IDatabaseTablesIterator::table()и изменением таблиц в другом потоке во время последующей итерации. #98792 (Grant Holly). - Исправлена ошибка, из-за которой
SYSTEM START REPLICATED VIEWне активировала задачу обновления. #98797 (Pablo Marcos). - Исправлено исключение “Inconsistent table names” при использовании табличной функции
view(), содержащей JOIN-операции внутри другого JOIN (только со старым анализатором). #98809 (Alexey Milovidov). - Исправлена корректировка RLIMIT_SIGPENDING (через pending_signals). #98829 (Azat Khuzhin).
- Исправлено исключение при комбинировании
loopс табличными функциями кластера. #98860 (Konstantin Bogdanov). - LEFT ANTI JOIN по нескольким столбцам ключа JOIN возвращал некорректные результаты, когда
enable_join_runtime_filters=1(значение по умолчанию). #98871 (Alexander Gololobov). - Исправлено поведение, из-за которого
WITH FILL STALENESSсоздавал лишние заполненные строки при чтении данных несколькими фрагментами (например, при небольшомindex_granularity). #98895 (Alexey Milovidov). - Исправлена ошибка LOGICAL_ERROR «RPNBuilderFunctionTreeNode has A arguments, attempted to get argument at index B». #98900 (Azat Khuzhin).
- Исправлена рассинхронизация учёта памяти, вызванная тем, что при неудачных выделениях памяти не выполнялся откат, неопределённым поведением
nallocx(0)и ошибкой на единицу при отслеживании глобального пика. Отслеживание расширено и теперь охватывает кольцевые буферыio_uring. #98915 (Antonio Andelic). - Запретить выполнение Attach для таблиц локального озера данных вне пользовательских путей, а не только их создание. #98936 (Daniil Ivanik).
- Исправлено состояние гонки, которое могло вызывать исключение “ReadBuffer is canceled” в запросах, использующих
urlClusterили аналогичные кластерные табличные функции. #98955 (Alexey Milovidov). - Исправлено исключение
LOGICAL_ERRORв финансовых функциях (financialNetPresentValue,financialInternalRateOfReturnи т. д.), возникавшее при передаче аргументов типаBFloat16. #98958 (Alexey Milovidov). - Исправлена ошибка, из-за которой индексы пропуска данных (и условия по первичному ключу) не применялись к столбцам ALIAS, когда слияние выражений в плане запроса отключено (query_plan_merge_expressions = 0 или query_plan_enable_optimizations = 0). #98960 (Peng).
- Для асинхронных вставок теперь увеличивается ProfileEvent
InsertQuery. Закрывает #98626. #98962 (Narasimha Pakeer). - Исправлено исключение “Inconsistent KeyCondition behavior” в отладочных сборках, когда первичный ключ содержит значения NaN с плавающей запятой:
accurateLessиaccurateEqualsтеперь обрабатывают NaN согласованно с порядком сортировки ClickHouse. Закрывает #98075. #98964 (Alexey Milovidov). - SummingMergeTree больше не суммирует столбцы типа Bool (и других доменных типов). Значения Bool теперь сохраняются как есть, а не суммируются арифметически. #98976 (Yash ).
- Исправлено исключение Scalar doesn’t exist, возникавшее при выполнении запроса к удалённому сегменту с включённым
optimize_const_name_sizeиenable_scalar_subquery_optimization= 0. Крупные константы, заменённые в удалённом запросе ссылками__getScalar, не отправлялись в сегмент, из-за чего запрос завершался ошибкой. #98979 (andriibeee). - Исправлено
NOT_FOUND_COLUMN_IN_BLOCKдля некоторых запросов сGROUP BYи выражениями, включающими обратный поиск в словаре, сравнения при преобразованииDate/DateTimeи сравнения кортежей. Закрывает #98888. #98980 (Nihal Z. Miaji). - Исправлено неопределённое поведение (разыменование нулевого указателя) при изменении столбца version/sign/is_deleted в
EPHEMERALилиALIASв движках MergeTree. Такие изменения теперь корректно отклоняются. #98985 (Alexey Milovidov). - Исправлена проблема, из-за которой в
system.grantsотсутствовали параметры регулярного выражения для привилегийURLиS3в столбцеaccess_object. #98987 (DQ). - Исправлено чтение из Iceberg BigLake: учетные данные ADC теперь передаются S3-клиенту GCS (что устраняет ошибки 403), учетные данные OAuth2 перед отправкой теперь URL-кодируются (что устраняет сбои аутентификации для токенов со специальными символами), а обход пространства имен больше не прерывается при получении от BigLake ответов HTTP 400. #98998 (Nikita Fomichev).
- Исправлена ошибка, из-за которой
clickhouse-clientне переключал часовой пояс, если переменная окруженияTZзадавалась в виде пути к файлу POSIX (например,TZ=:/etc/localtime). #99000 (Yash ). - Исправлено некорректное или недостаточное отсечение, когда
startsWith,LIKE,NOT LIKEиспользуются со столбцомFixedString. Кроме того, функция приведенияFixedStringкStringтеперь может отсекать гранулы, если применяется к ключевому столбцу. Закрывает #98940. #99001 (Nihal Z. Miaji). - Исправлена ошибка, из-за которой
windowFunnelсstrict_deduplicationвозвращал неверный уровень при обнаружении дубликата события. #99003 (Yash ). - Исправлена ошибка, из-за которой EXISTS игнорировал секции LIMIT и OFFSET в подзапросах, что приводило к некорректным результатам, если подзапрос не возвращал ни одной строки из-за OFFSET или LIMIT со значением 0. Закрывает #88722. #99005 (andriibeee).
- Исправлено исключение “Block structure mismatch”, возникавшее, когда при оптимизации проталкивания фильтра выражение AND сводилось к константе из-за короткого замыкания при использовании
GROUPING SETS. #99010 (Alexey Milovidov). - Исправлено Исключение при чтении патч-частей (легковесные обновления), если в плане запроса отсутствует столбец
_part_offset. #99023 (Alexey Milovidov). - Запрос вида
SELECT * FROM table WHERE pk_id = '', гдеpk_id— первичный ключ типаString, теперь будет корректно использовать индекс первичного ключа для фильтрации гранул. #99027 (Shankar Iyer). - Исправлено исключение
DEPENDENCIES_NOT_FOUNDв движке Kafka, возникавшее, когда materialized view было отсоединено, пока фоновый поток передавал данные. #99028 (Alexey Milovidov). - Исправлено Исключение при создании таблицы со столбцом
EPHEMERAL, у которого то же имя, что и у виртуального столбца (например,_part_offset). #99031 (Alexey Milovidov). - Исправлено вводящее в заблуждение сообщение “inflate failed: buffer error” при чтении несуществующих сжатых файлов через табличную функцию
url()с глоб-шаблонами. Теперь при включенномhttp_skip_not_found_url_for_globs, как и ожидается, возвращается пустой результат. #99034 (Alexey Milovidov). - Исправлен сбой сервера (std::terminate) при выполнении
ALTER TABLE ... DROP PARTдля patch part после изменения схемы (например, ADD COLUMN). Сбой был вызван отсутствием системных столбцов (_part) в метаданных пустой coverage part, что приводило к неперехваченному исключению внутри NOEXCEPT_SCOPE. #99036 (Peng). - Процесс сервера ClickHouse мог аварийно завершиться, если во время чтения с кэш-диска возникало исключение о превышении лимита памяти. Теперь это исправлено. #99042 (Shankar Iyer).
- Исправлен
LOGICAL_ERRORпри запросе к таблице, в которой есть и ROW POLICY, и столбец ALIAS, с использованиемdictGet. Проблема была вызвана преждевременным обращением к табличному выражению при разрешении столбца ALIAS в новом анализаторе. #99065 (Peng). - Исправлена ошибка выхода за границы, возникавшая, когда пользователь пытался выполнить запрос только к виртуальным столбцам таблицы Iceberg с форматом данных Avro. Это крайне редкий сценарий, поэтому он не помечен как критический. Закрывает #88238. #99080 (alesapin).
- Исправлен segfault в рекурсивном CTE с
remote()+view(). #99081 (Konstantin Bogdanov). - Пропускается лишний анализ индексов, если применяется оптимизация чтения в порядке сортировки. #99084 (Vladimir Cherkasov).
- Исправлен сбой, вызванный исключением по ограничению памяти при применении patch part. #99086 (Anton Popov).
- Исправлено срабатывание отладочного assert в
DDLWorker, вызванное неактуальнымfirst_failed_task_nameпосле удаления записи ZooKeeper в ходе восстановления после повторной инициализации. #99099 (Antonio Andelic). - Исправлена проблема с перестроением текстовых индексов при слияниях с TTL. #99107 (Anton Popov).
- Исправлен сбой при выполнении запроса
ALTER TABLE ... REMOVE SETTINGSдля движка таблицы Iceberg. Исправляет #86330. #99108 (alesapin). - Исправлена ошибка в оптимизации
query_plan_convert_any_join_to_semi_or_anti_join, из-за которой для строк без совпадений возвращался некорректный результат. Связано: https://github.com/ClickHouse/ClickHouse/pull/95995. #99112 (Yarik Briukhovetskyi). - Исправлено Исключение LOGICAL_ERROR в
ASTColumnsExceptTransformer::transform. #99119 (Pablo Marcos). - Исправлен обход RBAC, который позволял пользователям получать структуру таблицы через
DESCRIBE TABLEилиCREATE TABLE ASдля табличных функций (mysql(),postgresql(),sqlite(),arrowFlight(),jdbc(),odbc()и т. д.) без необходимых привилегий доступа к источнику. Для функций, которые автоматически определяют схему по удалённым серверам, это также позволяло без авторизации инициировать исходящие соединения (SSRF). #99122 (pufit). - Исправлен сбой Keeper (segfault в NuRaft) во время динамической реконфигурации и передачи лидерства. #99133 (JIaQi Tang).
- Исправлен сбой при использовании таблицы Buffer с SAMPLE, если пункт назначения его не поддерживает. #99141 (Kseniia Sumarokova).
- Исправлена ошибка LOGICAL_ERROR, вызванная несоответствием порядка столбцов в патч-частях. #99164 (Pablo Marcos).
- Исправлено очень редкое аварийное завершение, возникавшее, когда таблица Iceberg содержит файлы смешанных форматов (ORC и Parquet). Исправление #88126. #99168 (alesapin).
- Исправлено неприменение max_execution_time при резервном копировании и восстановлении. #99205 (Kseniia Sumarokova).
- Исправлена проблема, из-за которой
insert_deduplication_tokenмолча игнорировался в запросахINSERT SELECTбезORDER BY ALL. Ранее для несортированныхINSERT SELECTдедупликация была полностью отключена, даже если был явно указан пользовательский токен. Теперь для включения дедупликации достаточно указатьinsert_deduplication_tokenнезависимо отORDER BY ALL. #99206 (Desel72). - Исправлены избыточные проверки доступа при оптимизации
InverseDictionaryLookupPass: теперь grantCREATE_TEMPORARY_TABLEпроверяется один раз перед проходом, а не для каждого посещаемого узла. #99210 (Mikhail Artemenko). - Исправлена проблема, из-за которой
clickhouse format --obfuscateвыдавал некорректный SQL при обфускации типов индекса пропуска данных, имён кодеков сжатия, имён движков баз данных и определений структуры/источника словаря. #99260 (Raúl Marín). - Исправлена ошибка, из-за которой в некоторых случаях сравнение типов Time[64] и DateTime[64] могло вызывать путаницу; теперь в таких случаях значения Time[64] приводятся к DateTime[64] с добавлением
1970-01-01в качестве даты. #99267 (Yarik Briukhovetskyi). - Ограничение значений настроек допустимыми пределами в DDL-воркере для распределённых DDL-запросов. #99317 (Pablo Marcos).
- Исправлены незначительные проблемы с аутентификацией TOTP: обработка пустого пароля в опции CLI
--one-time-password, проверка значений конфигурации<digits>и<period>. #99322 (Vladimir Cherkasov). - Исправлена логическая ошибка
unordered_map::at: key not foundв формате вывода Avro при сериализации столбцовEnum8/Enum16со значениями, отсутствующими в определении enum. #99332 (Desel72). - Исправлен
CHECK TABLEдля разреженной сериализации в Tuple с Dynamic. Закрывает #96588. #99351 (Pavel Kruglov). - Исправлена излишне строгая проверка предобработчика текстового индекса. #99359 (Anton Popov).
- Исправлена проблема совместимости при обновлении реплицированных таблиц с неявными индексами minmax с версии 25.10 на более новые версии. #99392 (Raúl Marín).
- Удалена поддержка функций с отрицанием (
notEquals,notLike,notIn) при анализе текстового индекса. Эти функции никогда не позволяли пропускать ни одной гранулы, поэтому их анализ в индексе лишь создавал дополнительную нагрузку, не принося никакой пользы. #99393 (Anton Popov). - Исправлена работа
optimize_skip_unused_shardsв новом анализаторе в случае, когда таблицаDistributedиспользовалась внутри подзапроса с IN. #99436 (Nikolai Kochetov). - Исправлена ошибка heap-use-after-free в
INTERSECT/EXCEPT, когда запрос возвращает повторяющиеся имена столбцов. #99471 (Alexey Milovidov). - Исправлена логическая ошибка в
ALTER TABLE ... DROP PART, когда в качестве имени части используется типизированный параметр запроса. #99489 (Alexey Milovidov). - Исправлено исключение
NOT_FOUND_COLUMN_IN_BLOCK, возникавшее, когда предикат текстового индекса (например,hasAllTokens) использовался в секцияхSELECTиWHEREчерез псевдоним. #99504 (Anton Popov). - Исправлены некорректные результаты при использовании
hasAllTokensс оператором OR между столбцами, для которых созданы отдельные текстовые индексы. #99505 (Anton Popov). - В
clickhouse-localинициализирован кэш страниц, чтобы начала действовать настройкаpage_cache_max_size. #99510 (Alexey Milovidov). - Исправлена редкая ошибка, из-за которой часть данных некорректно помечалась как повреждённая и отсоединялась после запроса
DETACH/ATTACH TABLE. #99529 (Anton Popov). - Исправлено исключение
std::length_error, возникавшее при запросе пустых системных таблиц в формате Pretty через HTTP-интерфейс. #99541 (Alexey Milovidov). - Исправлен
LOGICAL_ERRORпри использованииALTER TABLE ADD COLUMNдля созданияEPHEMERAL-столбца с тем же именем, что у виртуального столбца (например,_part_offset). #99549 (Alexey Milovidov). - Исправлена ошибка, из-за которой записи
VectorSimilarityIndexCacheникогда не вытеснялись после удаления части данных из-за несовпадения ключей кэша. #99575 (Seva Potapov). - Запретить чтение учетных данных Google из локального файла. Эта настройка небезопасна, поскольку позволяет читать и другие учетные данные, если известен путь к файлу. #99584 (Konstantin Vedernikov).
- Устранена деградация производительности в анализаторе. Из ARRAY JOIN исключены неиспользуемые столбцы. #99587 (Dmitry Novik).
- Исправлено чтение текстового индекса в таблице при наличии легковесных удалений и политик доступа на уровне строк. #99661 (Anton Popov).
- Исправлено разыменование nullptr в ридере Parquet, когда в ветке filter-in-decoder встречаются отфильтрованные страницы. Закрывает #99676. #99677 (Alexey Milovidov).
- Исправлен некорректный переход seek в AsynchronousReadBufferFromFileDescriptor с O_DIRECT. Закрывает #99358. #99678 (Pavel Kruglov).
- Исправлены переполнение буфера в куче в
CompressionCodecT64и аварийное завершение процесса вCompressionCodecMultipleпри распаковке повреждённых сжатых данных. Обе проблемы были обнаружены новыми таргетами libFuzzer. Теперь кодеки генерируют исключение вместо сбоя. #99680 (Rahul). - Откладывать обработку, пока сервер не завершит загрузку всех таблиц. #99700 (Seva Potapov).
- Исправлен обход
RemoteHostFilterисточником словаря MySQL при использовании встроенных параметров DDL. #99720 (Shaohua Wang). - Исправлена логическая ошибка при обходе таблиц озёр данных в
system.tables. #99739 (Konstantin Vedernikov). - Исправлен анализ предикатов с функцией
INдля текстового индекса с предобработчиком. Исправлена коллизия искомых токенов в текстовом индексе, которая могла приводить к некорректным результатам. #99755 (Anton Popov). - Исправлен бесконечный цикл при чтении файлов формата
Npyс отрицательными значениями размерностей в shape. #99812 (Desel72). - Исправлен global-buffer-overflow в функции
CRC32на аргументахFixedString, возникавший при вычислении с нулевым числом строк во время расчёта заголовка плана запроса. #99835 (Alexey Milovidov). - Исправлен сбой (обращение по нулевому указателю) при выполнении
ALTER TABLE ... MODIFY COLUMN ... COMMENTдля таблиц Iceberg. #99838 (Desel72). - Исправлена настройка
aggregate_functions_null_for_empty: теперь она работает с агрегатными функциями, возвращающими типы, отличные отNullable, такие какArrayилиMap(например,groupArray,sumMap). #99839 (Alexey Milovidov). - Исправлено исключение LOGICAL_ERROR в функции
midpoint, которое возникало при вызове со смешанными знаковыми и беззнаковыми целочисленными типами. #99867 (Alexey Milovidov). - Исправлено Исключение “Block structure mismatch” в запросах с предложением HAVING, где выражение фильтра содержит и агрегатную функцию, обёрнутую в функцию, возвращающую NULL, и
materialize(0). #99915 (Alexey Milovidov). - Исправлена ошибка assertion failure в
sipHash128Keyed(и аналогичных хеш-функциях с ключом), когда аргумент data имеет тип Map с ключами-массивами или другими вложенными типами массивов. #99921 (Alexey Milovidov). - Исправлено исключение
LOGICAL_ERROR“Not-ready Set” в функцииINпри оптимизации плана выполнения запроса сconvertAnyJoinToSemiOrAntiJoin. #99939 (Alexey Milovidov).
Улучшение сборки/тестирования/пакетирования
- Сокращено время компиляции за счёт удаления тяжёлых включений заголовочных файлов и переноса затратных инстанцирований шаблонов из заголовков. #97893 (Raúl Marín).
- Сокращено время компиляции арифметических функций и связанных с ними заголовочных файлов за счёт уменьшения матриц диспетчеризации шаблонов и удаления тяжёлых включений. #98204 (Raúl Marín).
- Используется
mongo-c-driver2.2.2. #98304 (Konstantin Bogdanov). - Используется
postgresREL_18_3. #98306 (Konstantin Bogdanov). - Для сборок UBSan включён jemalloc allocator, чтобы избежать накопления RSS из-за неэффективного возврата памяти в glibc malloc. #98444 (Alexey Milovidov).
- Используется манглинг символов Rust v0, а из библиотеки PRQL удалены внутренние символы, чтобы сократить разрастание имён символов из библиотек combinator для parser. #98446 (Alexey Milovidov).
- В
tests/benchmarksдобавлены набор бенчмарков TPC-H и README для TPC-DS. #98495 (Raufs Dunamalijevs). - Добавлены тесты корректности для всех 99 запросов TPC-DS. #99204 (Raufs Dunamalijevs).
- Добавлен интеграционный тест, воспроизводящий баг с DDL CREATE TABLE + ALTER при офлайн-реплике (#44070); он помечен как ожидаемо завершающийся с ошибкой. #99259 (Raufs Dunamalijevs).
- Интегрирован jemalloc с префиксом
je_, удалено использование--wrapкомпоновщика. #99342 (Azat Khuzhin).
Релиз ClickHouse 26.2, 2026-02-26. Презентация, Видео
Обратно несовместимое изменение
- Дедупликация по умолчанию включена для всех вставок. Раньше она была отключена для асинхронных вставок и MV, но включена для синхронных вставок. Цель — сделать одинаковые значения по умолчанию для обоих способов вставки. Если в вашем кластере дедупликация явно отключена, чтобы сохранить прежнее поведение, нужно явно установить
deduplicate_insert='backward_compatible_choice'. То же самое касаетсяdeduplicate_blocks_in_dependent_materialized_views. #95970 (Sema Checherinda). - Улучшен формат хранения статистики: теперь вся статистика хранится в одном файле. #93414 (Anton Popov). Если вы не включали статистику таблиц явно, этот пункт можно проигнорировать.
- Ограничен объём метаданных S3(Azure)Queue, хранимых в памяти. Системные таблицы переименованы:
azure_queueвazure_queue_metadata_cache, аsystem.s3queue— вs3queue_metadata_cache. #95809 (Kseniia Sumarokova). - Ранее при применении функции к столбцу
Variantпри несовместимости подтипа variant с функцией молча возвращались значения NULL; теперь генерируется исключение, что может нарушить работу запросов, которые опирались на такое поведение с молчаливым возвратом NULL. #95811 (Bharat Nallan). - Столбцы
DATEиз PostgreSQL теперь в ClickHouse автоматически определяются какDate32(в предыдущих версиях они определялись какDate, что приводило к переполнению значений за пределами узкого диапазона). Разрешена вставка значенийDate32обратно в PostgreSQL. Закрывает #73084. #95999 (Alexey Milovidov). - Семантика настройки
do_not_merge_across_partitions_select_finalстала понятнее. Ранее эта возможность могла включаться автоматически, даже если настройка не была явно задана в конфигурации. Это неоднократно вызывало путаницу и, к сожалению, приводило к проблемам в продакшне. Теперь правила проще:do_not_merge_across_partitions_select_final=1безусловно включает эту возможность. Еслиdo_not_merge_across_partitions_select_final=0, автоматический режим используется только приenable_automatic_decision_for_merging_across_partitions_for_final=1, а в противном случае не используется. Чтобы максимально сохранить прежнее поведение, значения по умолчанию были установлены следующими:do_not_merge_across_partitions_select_final=0иenable_automatic_decision_for_merging_across_partitions_for_final=1. #96110 (Nikita Taranov). - При создании таблицы S3 с явно указанными столбцами ClickHouse теперь проверяет, что эти имена столбцов действительно присутствуют в схеме удалённого файла. Запросы, которые раньше работали при несовпадении имён столбцов, теперь будут завершаться ошибкой уже на этапе создания таблицы. Это закрывает #96089. #96194 (Konstantin Vedernikov).
- Запрещено использование подзапросов в ORDER BY и других ключевых выражениях таблицы. #96847 (Alexey Milovidov).
- По умолчанию включить
apply_row_policy_after_final. Изначально, когдаoptimize_move_to_prewhere_if_final=0, и ROW POLICY, и PREWHERE учитывали FINAL и применялись после FINAL. Это поведение было нарушено в #87303, где для фильтра ROW POLICY игнорировался параметрoptimize_move_to_prewhere_if_final. Чтобы это исправить, в данном PR включается настройкаapply_row_policy_after_final, добавленная в #91065. При включенномapply_row_policy_after_finalROW POLICY, как и раньше, по умолчанию продолжает учитывать FINAL. Этот PR вносит несовместимое изменение, поскольку меняет поведение дляoptimize_move_to_prewhere_if_final=1. Теперь, чтобы ROW POLICY применялся до FINAL, следует использоватьapply_row_policy_after_final, а неoptimize_move_to_prewhere_if_final. #97279 (Nikolai Kochetov). - Тип
Dateтеперь сериализуется как встроенный тип Arrowdate32в форматах Arrow/ArrowStream вместоuint16. Инструменты вроде PyArrow теперь будут корректно распознавать столбец как тип даты. Прежнее поведение можно восстановить с помощью настройкиoutput_format_arrow_date_as_uint16. Чтение старых файлов Arrow, в которых для столбцовDateиспользовалсяuint16, по-прежнему поддерживается. #96860 (Alexey Milovidov).
Новая возможность
- Теперь пользователи могут напрямую использовать ClickStack (интерфейс обсервабилити) из ClickHouse, что удобно для отладки и локальной разработки. #96597 (Aaron Knudtson).
- Добавлена поддержка одноразовых паролей на основе времени (TOTP) в качестве метода аутентификации. #71273 (Vladimir Cherkasov).
- Добавлена настройка базы данных
lazy_load_tables. Когда она включена, таблицы не загружаются при запуске базы данных — вместо них создается легковесныйStorageTableProxy, а настоящий движок таблицы материализуется при первом обращении. #96283 (xiaohuanlin). - Добавлена настройка
input_format_max_block_wait_ms, позволяющая выдавать блоки данных по тайм-ауту, а также разрешена обработка оставшихся данных при неожиданном закрытии HTTP-соединения. #94509 (Mostafa Mohamed Salah). - Интеграция с каталогом Google BigLake. Закрывает #95339. #97104 (Konstantin Vedernikov).
- Добавлена системная таблица
system.tokenizers, содержащая список всех доступных токенизаторов. #96753 (Robert Schulze). - Добавлена новая системная таблица
system.user_defined_functionsдля мониторинга статуса загрузки UDF и настроек. #90340 (Xu Jia). - Добавлена таблица
system.jemalloc_stats, показывающая статистику аллокатора памяти jemalloc (черезmalloc_stats_print) для диагностики использования памяти на серверах, собранных с jemalloc. Также в HTTP-интерфейс ClickHouse добавлена HTTP-конечная точка/jemalloc.htmlдля интерактивной визуализации этой статистики. #97077 (Antonio Andelic). - Добавлена таблица
system.jemalloc_profile_textдля чтения и анализа профилей кучи jemalloc. Формат вывода задается настройкойjemalloc_profile_text_output_format(raw, symbolized или collapsed; по умолчанию — collapsed). Разрешение inline-фреймов задаетсяjemalloc_profile_text_symbolize_with_inline(если параметр включен, inline-фреймы включаются ценой более медленной символизации; если отключен, они пропускаются для более быстрого вывода). Для формата collapsed параметрjemalloc_profile_text_collapsed_use_countопределяет, взвешиваются ли стеки по числу активных аллокаций (true) или по объему активных байт (false, по умолчанию). Это упрощает профилирование памяти и визуализацию флеймграфов для профилей кучи jemalloc. Исправляет #93248. #97218 (Antonio Andelic). - Добавлена настройка
default_dictionary_database, которая позволяет ClickHouse искать внешние словари, указанные без имени базы данных, в заданной базе данных по умолчанию. Это упрощает миграцию с глобальных словарей, определённых в XML, на словари отдельных баз данных, определённые в SQL, позволяя существующим запросам к словарям (например, dictGet(‘name’, …)) продолжать работать без изменений. #91412 (Dmitrii Plotnikov). - Добавлена поддержка дополнительного ZooKeeper для
DatabaseReplicated. #91683 (RinChanNOW). - Добавлены новая табличная функция
primesи новая системная таблицаsystem.primes, содержащая простые числа в порядке возрастания. Закрывает #90839. #92776 (Nihal Z. Miaji). - Асинхронные вставки поддерживают параллельный кворум. Вставленные данные реплицируются до достижения кворума. Если обнаруживаются дубликаты, запрос ожидает, пока ранее вставленные данные тоже не будут реплицированы. #93356 (Sema Checherinda).
- Добавлены функции
colorOKLABToSRGBиcolorSRGBToOKLABдля преобразования значений из sRGB в OKLAB и обратно. #93361 (Pranav Tiwari). - Новая настройка
deduplicate_insert, переопределяющаяinsert_deduplicateиasync_insert_deduplicate. #94413 (Sema Checherinda). - Настройка сервера
insert_deduplication_versionпозволяет выполнять переход на единый хеш дедупликации. #95409 (Sema Checherinda). - Добавлена функция хеширования
xxh3_128. #96055 (Raúl Marín). - Добавлен запрос
OPTIMIZE <table> DRY RUN PARTS <part names>для имитации слияний без коммита результирующей части. Это может быть полезно при тестировании: для проверки корректности слияний в новой версии, детерминированного воспроизведения ошибок, связанных со слияниями, и надёжного бенчмаркинга производительности слияний. #96122 (Anton Popov). - Добавлена новая проверка, по умолчанию включенная настройкой
check_named_collection_dependencies, чтобы предотвратить удаление именованных коллекций, используемых таблицами. #96181 (Pablo Marcos). - Добавлен
system.fail_pointsдля просмотра существующих failpoint’ов в сервере и проверки, включены они или нет. Это поможет автоматизировать тестирование. #96762 (Pedro Ferreira). - Добавлена поддержка ролевого доступа к каталогу Glue. Используйте настройки
aws_role_arnи, при необходимости,aws_role_session_name. #90825 (Antonio Andelic). - Добавлен параметр
add_minmax_index_for_temporal_columns, который при включении автоматически создает индексы MinMax для всех столбцовDate,Date32,Time,Time64,DateTimeиDateTime64. #93355 (Michael Jarrett). - Поддержка расширенных псевдонимов таблиц в JOIN (запросы вида
SELECT * FROM (SELECT 1) AS t(a) JOIN (SELECT 1) AS u(b) ON a = b). Закрывает #95131. #95331 (Yarik Briukhovetskyi). - Добавлена поддержка
ALTER TABLE RENAME COLUMNдля таблиц Iceberg. Ранее поддерживались толькоADD COLUMN,DROP COLUMNиMODIFY COLUMN. #97455 (murphy-4o).
Экспериментальные возможности
- Текстовый индекс теперь доступен в статусе GA. #96794 (Robert Schulze).
- Тип данных
QBitдля хранения векторов в квантованном битово-упакованном формате (используется для приближенного поиска ближайших соседей) теперь общедоступен и больше не требует включения экспериментальной настройки. #95358 (Raufs Dunamalijevs). - Векторный поиск в ClickHouse теперь может использовать реплики в кластере, чтобы распределять нагрузку и поиск по частям векторного индекса. Это позволяет ClickHouse поддерживать крупные векторные индексы, которые превышают объем памяти одной VM. #95876 (Shankar Iyer).
- Добавлен AST-фаззер на стороне сервера, управляемый настройками
ast_fuzzer_runsиast_fuzzer_any_query. Когда он включен, сервер после обычного выполнения каждого запроса запускает его случайные мутации, отбрасывая результаты. #97568 (Alexey Milovidov). - В экспериментальный диалект KQL добавлена функция
iif. #94790 (happyso). - Автоматическое определение схемы теперь учитывает
allow_experimental_nullable_tuple_type. Когда эта возможность включена, выведенные типы кортежей могут бытьNullable(Tuple(...)), поэтому отсутствующие вложенные объекты могут становитьсяNULLвместо кортежа из элементовNULL. #95525 (Nihal Z. Miaji). - Настройка
use_statistics_cacheтеперь включена по умолчанию, поэтому статистика столбцов кэшируется в памяти для ускорения оптимизации запросов без необходимости заново загружать ее из каждой части. #95950 (Han Fei).
Повышение производительности
- Теперь для пропуска данных можно использовать любое детерминированное выражение в первичном ключе (например,
ORDER BY cityHash64(user_id)/ORDER BY length(user_id)). Для детерминированных выражений ClickHouse может применить выражение к константам запроса и использовать результат в индексе первичного ключа для предикатов=,INиhas. Если выражение также инъективно (например,ORDER BY hex(p)илиORDER BY reverse(tuple(reverse(p), hex(p)))), индекс можно эффективно использовать и для отрицательных форм:!=,NOT INиNOT has. Закрывает #10685. Закрывает #82161. #92952 (Nihal Z. Miaji). - Улучшен формат хранения статистики. Теперь вся статистика сохраняется в одном файле. #93414 (Anton Popov).
- Разрешено параллельное чтение для удалённых движков таблиц/функций в файловом кэше. #71781 (Kseniia Sumarokova).
- Добавлена возможность использовать кэш страниц в пространстве пользователя с локальными файлами и табличными функциями объектного хранилища. #77874 (Michael Kolupaev).
- Исключены ненужные
memcpyв кэше страниц в пространстве пользователя. #77884 (Michael Kolupaev). - Теперь для
concurrent_threads_schedulerпо умолчанию используетсяmax_min_fairвместоfair_round_robin. Это повышает справедливость при высокой нагрузке, отдавая приоритет запросам, которым выделено меньше слотов, поэтому короткие запросы не страдают из-за длинных. #95300 (Sergei Trifonov). - Если запрос
FINALиспользовал для фильтрации условие по первичному ключу, а затем индекс пропуска данных для других условий, то шаг обработкиPrimaryKeyExpandтеперь будет проверять на пересечение только изначально отобранные диапазоны первичного ключа. #94903 (Shankar Iyer). - При использовании параллельных реплик с табличными функциями, такими как
s3(...), запросы, в которых табличная функция обёрнута в один подзапрос, теперь автоматически распараллеливаются по репликам, тогда как раньше распараллеливались только прямые обращения к табличным функциям. Закрывает #92264. #96332 (phulv94). - Добавлена возможность разделять данные и системные файлы в кэше на отдельные сегменты. #87834 (MikhailBurdukov).
- Некоторые операции hash join ускорены за счёт реализации динамической диспетчеризации для
ColumnVector::replicate. #79573 (Raúl Marín). - Повышение производительности параллельного hash JOIN в случаях со сложными предикатами. Ранее строки, не вошедшие в JOIN, обрабатывались в одном потоке, что неоптимально; суть этой оптимизации — распараллелить обработку таких строк между несколькими потоками. Можно включать и отключать с помощью настройки
parallel_non_joined_rows_processing. Включено по умолчанию. #92068 (Yarik Briukhovetskyi). - Немного оптимизирован парсинг типа JSON. #93614 (Pavel Kruglov).
- Уменьшено потребление памяти AST. Оптимизация оправдана, поскольку поля не используются, если не используется подсветка и не выполняется парсинг VALUES. #93974 (Ilya Yatsishin).
- Оптимизировано потребление памяти объектами AST для именованных Tuple. Имена столбцов теперь хранятся в объекте Tuple как строки, а не в универсальных узлах литералов AST. #94704 (Ilya Yatsishin).
- Девиртуализация улучшена за счёт дополнительных параметров компоновщика. #94737 (Nikita Taranov).
- Повышена производительность клонирования реплики в таблицах ReplicatedMergeTree с большим числом частей благодаря пакетированию запросов ZooKeeper. #94847 (c-end).
- Когда на шаге чтения уже были фильтры PREWHERE, добавить новый фильтр было невозможно. Это изменение откладывает оптимизацию PREWHERE до оптимизации runtime filter для JOIN, чтобы runtime filters тоже можно было перенести в PREWHERE. #95838 (Alexander Gololobov).
- Ускорено сжатие кодеком
T64благодаря использованию динамической диспетчеризации на x86. #95881 (Raúl Marín). - Ускорен
uniqдля числовых типов за счёт батчинга вставок, когда это возможно (без NULL, без-If, безGROUP BY, без IPv6 и String). #95904 (Raúl Marín). - Низкоуровневые оптимизации для Keeper: было выявлено, что
ZooKeeper::observeOperationsпотребляет >20% CPU потока приёма ZooKeeper. Это изменение решает проблему следующим образом: 1. ДляAggregatedZooKeeperLog::statsиспользуетсяCityHash64вместоSipHash, что более чем в 10 раз быстрее. 2. ДляCoordination::ErrorCounterиспользуетсяstd::array<std::atomic<UInt32>, N>вместоstd::unordered_mapиstd::mutex. #95962 (Miсhael Stetsyuk). - Убрано 64-байтовое выравнивание для ProfileEvents::Counter, чтобы сэкономить память. #96097 (Azat Khuzhin).
- Оптимизация памяти: размер структуры
CachedOnDiskReadBufferFromFileсокращён в 50 раз. #96098 (Azat Khuzhin). - Не копировать старые данные при изменении размера пустой хеш-таблицы. #96180 (Raúl Marín).
- Добавлена поддержка JOIN Runtime Filters для
RIGHT OUTERJOIN. #96183 (Hechem Selmi). - Оптимизация
enable_join_runtime_filtersтеперь включена по умолчанию. #89314 (Alexey Milovidov). - Ранее оптимизация прямого чтения для текстового индекса применялась только в том случае, если во всех частях был материализованный текстовый индекс. В этом PR добавлена частичная поддержка: если материализованный текстовый индекс есть только в некоторых частях, он будет использоваться для них, а для частей без материализованного текстового индекса будет выполняться исходное выражение фильтра. #96411 (Anton Popov).
- Добавлены вторичные индексы
minmaxдля временных столбцов и индексыbloom_filterдля столбцовquery_id/initial_query_idв системных таблицах логов, чтобы ускорить фильтрацию. #96712 (Alexey Milovidov). - Оптимизация отложенной материализации теперь применяется ко всем ветвям запроса
UNION ALL, а не только к первой. Запросы, которые объединяют несколько отсортированных и ограниченных чтений из разных таблицMergeTreeчерезUNION ALL, теперь будут использовать отложенное чтение столбцов в каждой ветви, снижая I/O. #96832 (Federico Ginosa). - Оптимизировано вычисление индекса пропуска данных minmax при INSERT: устранено лишнее копирование данных и добавлен векторизованный расчёт min/max для числовых столбцов. #97392 (Raúl Marín).
- Движок
DeltaLakeтеперь берет результатcount()из метаданных delta lake и показывает корректную статистику таблицы в system.tables (общее число байт/строк). #96190 (Kseniia Sumarokova). - Неиспользуемые столбцы также исключаются из этапа чтения при чтении из MergeTree. Это особенно полезно, когда фильтр переносится в
PREWHERE. #89982 (János Benjamin Antal). - Улучшена обработка запроса
SHOW TABLES: теперь извлекаются только имена таблиц; также улучшен getLightweightTablesIterator, чтобы он возвращал структуру, содержащую только имена таблиц. Исправляет #93835. #94467 (Smita Kulkarni). - Улучшены
assumeNotNull,coalesceиifNull, чтобы задействовать отсечение по первичному ключу и индексу пропуска данных для диапазонных предикатов, когда столбцы ключа обёрнуты в эти функции. Закрывает #94689. #94754 (Nihal Z. Miaji). - В запрос Keeper getChildren добавлены расширения with_data и with_stat. Это позволяет за одну операцию получать не только список дочерних узлов, но и их
statи/илиdata. #94826 (Nikolay Degterinsky). - Анализ индексов выполняется только один раз (в большинстве случаев), независимо от того, будет ли в итоге выполняться локальный план или план с параллельными репликами. #94854 (Nikita Taranov).
- Добавлена возможность включать распределённый анализ индексов в зависимости от количества частей (
distributed_index_analysis_min_parts_to_activate) и размера индексов (distributed_index_analysis_min_indexes_size_to_activate). #95216 (Azat Khuzhin). - Включена PREWHERE optimization для таблиц Iceberg. #95476 (Konstantin Vedernikov).
- Уменьшено потребление памяти у некоторых классов AST. #95514 (Raúl Marín).
- Ограничено число потоков конвейера, создаваемых при включенной настройке
split_intersecting_parts_ranges_into_layers. Это помогает избежать чрезмерного потребления памяти. #96478 (Nikita Taranov). - Реализована оптимизация эквивалентных наборов для нескольких JOIN. Запросы с несколькими последовательными операциями
INNER JOINтеперь выигрывают от улучшенной оптимизации pushdown фильтров. Когда таблицы объединяются по эквивалентным столбцам (например,t1 JOIN t2 ON t1.id = t2.id JOIN t3 ON t2.id = t3.id WHERE t1.id > 10), фильтры, применённые к любой таблице в цепочке, автоматически проталкиваются для всех таблиц. Закрывает #96550. #96596 (Vladimir Cherkasov). - Оптимизировано сканирование метаданных Delta Lake. Использованы изменения из PR delta-kernel https://github.com/delta-io/delta-kernel-rs/pull/1827. #96686 (Kseniia Sumarokova).
- В базе данных Replicated больше не обновляется кэш кластера для каждого фиктивного запроса. #96897 (Tuan Pham Anh).
- Используйте индекс первичного ключа при использовании фильтра
startsWithUTF8, если префикс содержит только символы ASCII. #97055 (vkcku).
Улучшения
- Добавлена трассировка OpenTelemetry для запросов Keeper. #91332 (Miсhael Stetsyuk).
- Новые параметры конфигурации:
logger.startup_console_levelиlogger.shutdown_console_level, позволяющие переопределить уровень логирования в консоль во время запуска и завершения работы ClickHouse соответственно. #95919 (Garrett Thomas). - Учитывать переопределения из командной строки при перезагрузке конфигурации. Закрывает #80294. #80295 (Alexey Milovidov).
- Разрешены переопределения параметров именованной коллекции в формате ключ-значение в табличной функции
mongodb. #89616 (vanchaklar). - Оптимизация чтения в порядке сортировки для таблиц Iceberg теперь работает со сложными функциями сортировки, такими как
icebergBucketиicebergTruncate, а не только с простыми ссылками на столбцы. #90256 (Konstantin Vedernikov). - Добавлен новый столбец parts_postpone_reasons в system.mutations для улучшения диагностики; в нем отображаются причины отложенной обработки частей. #92206 (Shaohua Wang).
- Отслеживание изменений числа строк для чтения (из-за вставок/удалений или использования кэша условий запроса) в
DataflowStatisticsCache. #93636 (Nikita Taranov). - Добавлена поддержка запроса SYSTEM RESET DDL WORKER [ON CLUSTER]. Он сбрасывает состояние DDLWorker в основном потоке. Это полезно для обновления активной реплики при изменении идентификаторов хостов. #93780 (Tuan Pham Anh).
- Добавлена поддержка
mutation_idsвsystem.part_logдля типов событийMUTATE_PARTиMUTATE_PART_START. #93811 (Shaohua Wang). - Фоновые операции (Mutate, Merge) теперь можно настраивать независимо через профиль ‘background’. Ранее для таких операций использовались те же настройки, что и для обычных запросов, через профиль ‘default’. #93905 (Arsen Muk).
- В
system.crash_logдобавлено больше информации. #94112 #95857 (Miсhael Stetsyuk). - Добавлена новая метрика
QueryNonInternalдля отслеживания количества выполняющихся не внутренних запросов. Эта метрика публикуется какClickHouseMetrics_QueryNonInternalи помогает операторам контролировать параллелизм запросов относительно ограниченияmax_concurrent_queries, которое применяется только к не внутренним запросам. #94284 (Ashwath Singh). - Добавлена поддержка сбора статистики входных байтов для столбцов из компактных частей в
RuntimeDataflowStatisticsCacheUpdater. #94626 (Nikita Taranov). - Добавлена проверка на некорректную конфигурацию Keeper, приводящую к сбоям при формировании кластера. Закрывает #60932. #94682 (Konstantin Bogdanov).
- Улучшена десериализация JSON-префиксов при загрузке части. #94848 (Pavel Kruglov).
- Переработана операция записи с использованием полного конвейера INSERT, который запускает materialized views для целевой таблицы. #94890 (Kai Zhu).
- Используйте оптимизации плана поиска по векторному сходству только при наличии индекса для столбца поиска. #94998 (Eduard Karacharov).
- Проверять общий лимит памяти перед аутентификацией пользователя и выдавать
(total) memory limit exceeded, если общий лимит превышает допустимое значение. #95003 (Nikolai Kochetov). - Добавлен параметр конфигурации
throw_on_unmatched_row_policies, который во включенном состоянии генерирует исключение, если пользователь выполняет запрос к таблице, для которой заданы политики строк, но ни одна из них к нему не применяется, — это предотвращает неоднозначное поведение, при котором из-за неправильной настройки управления доступом возвращаются все строки. #95014 (Vitaly Baranov). - Динамическое обновление токенов доступа S3 в длительных запросах при использовании Unity Catalog. Это закрывает #93981. #95069 (Konstantin Vedernikov).
- Отключается механизм decay для dirty page в jemalloc, если ClickHouse испытывает длительное давление по памяти в течение
memory_worker_decay_adjustment_period_msмиллисекунд. Механизм decay для dirty page в jemalloc снова включается, если ClickHouse работает в нормальных условиях в течение того же промежутка времени. #95145 (Antonio Andelic). - Поддержка дополнительного Zookeeper в S3Queue при использовании настройки
keeper_pathиз s3Queue. #95203 (Diego Nieto). - Учитывается
max_parts_to_merge_at_onceпри TTL-слияниях частей сdrop. #95315 (Kseniia Sumarokova). - Добавлены
connection_addressиconnection_portв query_log для отображения физического соединения (addressиportподменяются при подключении через прокси и auth_use_forwarded_address=1). #95471 (Yakov Olkhovskiy). - Исправлен некорректный учёт памяти для кэша условий запроса. Основная проблема заключалась в том, что не учитывался ключ кэша, состоящий из нескольких строк (например, part_name, идентификатора таблицы и всего SQL-условия). #95478 (Nikita Mikhaylov).
- Сервер, запущенный со встроенной конфигурацией, позволит управлять пользователями и привилегиями и сохранять их в каталоге
access, как и при обычной конфигурации. Это упрощает тестирование. Также во встроенной конфигурации и в clickhouse-local были включены все улучшения access_control. #95481 (Alexey Milovidov). - Улучшены сообщения об ошибках аутентификации S3: теперь при отказе в доступе они содержат подсказку проверить учетные данные. #95648 (Gerald Latkovic).
- Включён кэш статистики, а период его обновления установлен на 300 с. #95841 (Han Fei).
- В
system.aggregated_zookeeper_logдобавлено имя компонента. #95882 (Antonio Andelic). - Не выполнять чтение из объектного хранилища при запросах к таблицам
DeltaLakeчерезsystem.tables. #95899 (Antonio Andelic). enable_max_bytes_limit_for_min_age_to_force_mergeтеперь включён по умолчанию, если значение настройкиcompatibility—26.2или выше. #95917 (Christoph Wurm).- Delta Lake теперь доступен на macOS. Закрывает #95979. #95985 (Alexey Milovidov).
- В предыдущих версиях при объединении конфликтующих выражений ALTER с UPDATE и RENAME COLUMN вместо корректного исключения возникала логическая ошибка. Закрывает #70678. #96022 (Alexey Milovidov).
- Улучшен вывод справки для всех приложений ClickHouse, добавлена опция —no-sudo и внесено несколько исправлений. Это продолжение #58244 от Ilya Yatsishin. #96025 (Alexey Milovidov).
- Добавлен алиас
distanceCosineдляcosineDistance, так как у всех остальных функций расстояния уже есть алиасы в таком формате. #96065 (Raufs Dunamalijevs). - Добавлена поддержка расширения Keeper
with_dataдля улучшения получения таблиц в Database Replicated. #96090 (Nikolay Degterinsky). - chdig обновлён до v26.2.1 (новые возможности и поддержка macOS). #96113 (Azat Khuzhin).
- Улучшен pushdown фильтра для
numbersиprimes. Теперь ClickHouse может определять консервативные границы значений по условиямWHERE, когда точные границы определить невозможно, и соответственно ограничивать генерацию последовательности (например, дляWHERE number % 5 < 2 AND number > 100 AND number < 300ClickHouse будет генерировать только числа от 100 до 300, а затем применять предикат), избегая сканирования без ограничений. Закрывает #84853. Закрывает #93913. #96115 (Nihal Z. Miaji). - Ранее форматтер заключал SELECT в круглые скобки при наличии секции
COMMENT, чтобы избежать неоднозначности при разборе. Вместо этогоCOMMENTтеперь выводится передAS SELECT, что устраняет неоднозначность без круглых скобок. #96293 (Alexey Milovidov). - Параметр конфигурации
allow_impersonate_userтеперь находится в разделеaccess_control_improvements, а не задается как отдельная настройка сервера. #96451 (Vitaly Baranov). - Параметр конфигурации
core_dump.size_limitтеперь поддерживает горячую перезагрузку, поэтому для применения изменений конфигурации больше не требуется перезапускать серверы. #96524 (Miсhael Stetsyuk). - Улучшена совместимость профилировщиков CPU и реального времени с тайм-аутами сокетов. #96601 (Sergei Trifonov).
- Предотвращено повторное появление удалённых данных, если ADD COLUMN выполняется вскоре после мутации DROP COLUMN. #96713 (Alexey Milovidov).
- Изменён тип
function_idвsystem.instrumentationс LowCardinality(Int32) на Int32. #96726 (Copilot). - При синхронном ожидании мутаций теперь учитываются отмена запроса и ограничения по времени. #96756 (Alexey Milovidov).
- Добавлена системная команда
SYSTEM RELOAD DELTA KERNEL TRACING <level>для изменения логирования delta-kernel, что может быть полезно при отладке. #96763 (Kseniia Sumarokova). - Фильтрация по семейству IP-адресов, то есть настройки
dns_allow_resolve_names_to_ipv4/ipv6, применяется даже при отключённом DNS-кэше. #96810 (c-end). - Улучшена диагностика jemalloc. #96840 (Azat Khuzhin).
- Исправлена ошибка
QUERY_CACHE_USED_WITH_SYSTEM_TABLEв веб-интерфейсе/playпри выполнении запросов к системным таблицам. #96869 (Alexey Milovidov). - Улучшен веб-интерфейс: favicon теперь меняется, показывая, что запрос выполняется; ошибки вспомогательных запросов (при загрузке баз данных и таблиц) теперь отображаются, а не молча игнорируются. Закрывает #85055. #96883 (Alexey Milovidov).
- Левую панель в интерфейсе
/playсделали кликабельной, чтобы показывать и скрывать список баз данных. #96884 (Alexey Milovidov). DROP DATABASEтеперь удаляет таблицы в порядке, обратном зависимостям, что повышает устойчивость к сбоям, если в базе данных есть таблицы с зависимостями при загрузке (например, таблицыDistributed, использующиеjoinGet). #97057 (Alexey Milovidov).- Обновлён yaml-cpp, чтобы исключить пропуск некорректного YAML. #97333 (Azat Khuzhin).
- Показывать индикатор загрузки на боковой панели
play.html, пока таблицы подгружаются. #97531 (Alexey Milovidov). - Добавлена кнопка копирования в буфер обмена для неформатированных результатов запроса во встроенном веб-интерфейсе (play.html). #97532 (Alexey Milovidov).
- Исправлен обфускатор запросов (
clickhouse-format --obfuscate), чтобы он в большем числе случаев генерировал SQL, который можно разобрать. #97584 (Alexey Milovidov).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- После
ALTER, изменяющих только метаданные, например при расширении списка значений Enum, оптимизация агрегации с проекцией может завершиться исключением. #84143 (Alexey Milovidov). - Materialized views теперь используют базу данных, в которой они были созданы, в качестве контекста выполнения, то есть: - можно не указывать базу данных явно в именах, используемых в
select-запросе представления - если база данных явно не указана, подразумевается та же база данных, в которой было создано materialized view. #88193 (Dmitry Kovalev). - Исправлена подстановка параметров запроса в методах аутентификации CREATE USER при использовании предложения ON CLUSTER. Параметры запроса в методах аутентификации (например, password) не подставлялись, что приводило к ошибкам UNKNOWN_QUERY_PARAMETER на удалённых узлах. #92777 (xiaohuanlin).
- Исправлены несоответствия при анализе текстового индекса для функций
has,mapContainsKeyиmapContainsValue. Ранее запросы с этими функциями могли возвращать разные результаты в зависимости от того, вычислялось ли выражение с использованием текстового индекса или без него. #93578 (Anton Popov). - Исправлен сбой при подключении таблицы к базе данных
MaterializedPostgreSQL, еслиdropReplicationSlotгенерирует исключение при раскрутке стека. #96871 (Alexey Milovidov). - Сервер мог аварийно завершаться, если одновременно запускалось много резервных копий, конфликтующих из-за одних и тех же файлов. #93659 (Alexey Milovidov).
- Исправлена работа запросов с параллельными репликами и JOIN с таблицей non-MT. Закрывает #92056. #93902 (Igor Nikonov).
- Исправлена проблема, из-за которой столбцы Iceberg с точками в именах возвращали NULL в качестве значений. #94335 (Mikhail Koviazin).
- Исправлена обработка строк в кодировке UTF8 в
stringJaccardIndexUTF8и повышена производительность. #94613 (Joanna Hulboj). - Исправлены возможные переполнения в
WITH FILL STALENESS(они приводили к UB и/или бесконечным циклам). Исправлен возможный бесконечный цикл из-за больших скачков. Добавлена поддержка старого анализатора (в основном для стресс-тестов). #94663 (Azat Khuzhin). - Исправлено возможное зависание распределённых запросов, когда имена хостов разрешаются в несколько адресов, а удалённая реплика перестаёт отвечать. #94726 (c-end).
- Исправлен некорректный результат при выполнении JOIN нескольких табличных выражений, когда самое левое табличное выражение представляет собой табличную функцию
-Cluster. Устраняет проблему #89996. #94748 (Konstantin Bogdanov). - Исправлено некорректное отсечение по первичному ключу и индексу пропуска данных для предикатов, включающих
toWeek,toYearWeek,toStartOfWeek,toLastDayOfWeekиtoDayOfWeek, а также устранены исключения в некоторых из этих функций для корректных запросов сLowCardinality(String). #94816 (Nihal Z. Miaji). - Удалена ненужная возможность пропуска проверки разрешений в запросах
ATTACHдля представления с безопасностью SQL. Это предотвращает потенциальное повышение привилегий, когда пользователь подключает представление сdefinerбез проверки необходимого доступа. #94865 (pufit). - Исправлен сбой при запуске
ReplicatedMergeTree, вызванный одновременным удалением каталоговdelete_tmp_*. #94892 (myeongjun). - Исправлена проблема с
INSERTв таблицы Iceberg с materialized views, из-за которой терялась информация о дедупликации и возникало исключение. #94938 (Daniil Ivanik). - Исправлена ошибка, из-за которой
SYSTEM DROP QUERY CACHE TAG 'TAGNAME' ON CLUSTER <CLUSTERNAME>удалял весь кэш во всём кластере. #94978 (Rory Crispin). - Сохраняется постоянная гранулярность индекса (use_const_adaptive_granularity) после вертикальных слияний (v2 с исправлением для Nested и в целом). #95013 (Azat Khuzhin).
- Исправлена состояние гонки в файловом кэше в версии 26.1 после [ClickHouse/ClickHouse#82764](https://github.com/ClickHouse/ClickHouse/pull/82764). #95042 (Kseniia Sumarokova).
- Исправлена отмена выполнения табличной функции postgresql() с помощью KILL QUERY и отмены запроса (Ctrl+C) в clickhouse-client. #95136 (Roman Vasin).
- Исправлен вывод типов для квалифицированных столбцов исходных таблиц при использовании нескольких JOIN с предложением
USING. Ранее последующие JOIN некорректно обновляли типы исходных столбцов до общего супертипа, даже если столбец не участвовал в этом JOIN (например, вSELECT t2.a FROM t1 LEFT JOIN t2 USING (a) LEFT JOIN t3 USING (a)столбецt2.aиспользуется только в первом JOIN, поэтому его тип должен быть супертипомt1.aиt2.a, без учётаt3.a). Это могло приводить к логическим ошибкам или сбоям, когда функции ожидали одни типы столбцов, а в плане выполнения фактически оказывались другие. #95157 (Vladimir Cherkasov). - Преобразование столбца теперь выполняется только один раз при получении содержимого списка manifest .avro и файлов. #95164 (Daniil Ivanik).
- Исправлен некорректный расчёт размеров JSON-столбцов, который мог приводить к избыточному использованию памяти или некорректной статистике столбцов. #95207 (Azat Khuzhin).
- Исправлен неточный учёт памяти при применении крупных патч-частей после легковесных обновлений. Ранее применение крупных патчей могло приводить к чрезмерному использованию памяти, из-за чего процесс сервера мог быть принудительно завершён OOM killer’ом. #95231 (Anton Popov).
- Исправлено неопределённое поведение, которое могло приводить к некорректным результатам или к исключению, если распределённый запрос с
max_parallel_replicasво время анализа индексов переключался на локальную реплику. #95263 (Azat Khuzhin). - Исправлена агрегация разреженных столбцов для
sumи временных рядов приgroup_by_overflow_mode = any. #95301 (Mikhail Koviazin). - Исправлена проблема с надёжностью в политике диска
plain_rewritable: сетевая ошибка в середине удаления файла метаданных могла привести к тому, что хранилище оставалось в несогласованном состоянии. #95302 (Mikhail Artemenko). - Заменён Date на Date32 для Iceberg. #95322 (Konstantin Vedernikov).
- Значение аргумента password табличной функции
redisтеперь будет маскироваться в журнале и системных таблицах (например, вquery_log). #95325 (János Benjamin Antal). - Исправлена ошибка, из-за которой таблицы можно было удалить или изменить, пока по ним ещё выполнялся распределённый запрос, что могло приводить к исключениям или некорректным результатам. #95356 (Azat Khuzhin).
- Исправлена логическая ошибка, возникавшая в некоторых случаях при использовании отрицательного
LIMIT/OFFSETв распределённых запросах. #95357 (Nihal Z. Miaji). - Исправлена ошибка, из-за которой clickhouse-client при подключении по SSH дважды запрашивал пароль. #95372 (Isak Ellmer).
- Устранена гонка данных в S3(Azure)Queue. #95385 (Kseniia Sumarokova).
- Исправлена ошибка в фильтре prewhere, вызванная лямбда-выражениями в prewhere. #95395 (Xiaozhe Yu).
- Исправлено
optimize_syntax_fuse_functions:sum/count/avgбольше не переписываются вsumCount(), если аргумент агрегатной функции имеет типNullable. Закрывает #95390. #95441 (Nihal Z. Miaji). - Предотвращено возможное аварийное завершение при отмене распределённых запросов. #95466 (Aleksandr Musorin).
- Исправлена дедупликация при стриминге из движка S3(Azure)Queue. #95467 (Kseniia Sumarokova).
- Исправлено обновление политик строкового доступа, назначенных исходному пользователю, при распределённых запросах. #95469 (Vitaly Baranov).
- Исправлена проверка зашифрованных дисков поверх plain_rewritable (устраняет возможную ошибку
It is not possible to register multiple plain-rewritable disks with the same object storage prefix). #95470 (Azat Khuzhin). - У табличной функции
mergeTreeProjectionотсутствовала проверка прав доступа, из-за чего пользователи без разрешения SELECT для таблицы (но с правами на табличные функции) могли читать данные из её проекций. В этом исправлении добавлена та же проверка прав доступа, которая уже есть уmergeTreeIndexиmergeTreeAnalyzeIndexes. #95480 (Alexey Milovidov). - Исправлена возможная логическая ошибка при чтении подстолбца size из динамических подстолбцов типов Dynamic/JSON. #95573 (Pavel Kruglov).
- Исправлена регрессия в (экспериментальной) zero‑copy-репликации, появившаяся после #94262, из‑за которой разделяемые части могли быть удалены до того, как другие реплики завершали их получение. #95597 (filimonov).
- Исправлен сбой при применении
tupleElementк массивам JSON. Закрывает #95581. #95647 (Pavel Kruglov). - Исправлено исключение logical error, возникавшее при использовании сопоставителя (
*) внутри лямбда-функции в предложении VALUES в JOIN с USING. Закрывает #93675. #95661 (Vladimir Cherkasov). - Исправлена логическая ошибка
There was an error: Cannot obtain error message, возникавшая при ожидании распределённой DDL-операции и одновременном удалении базы данных Replicated. Исправление #95539. #95664 (Alexander Tokmakov). - Исправлена ошибка, из-за которой функция
INвозвращала некорректные результаты со значениямиNULLпри включенномtransform_null_in. Закрывает #65776. #95674 (Nihal Z. Miaji). - Корректно обрабатываются типы LowCardinality Nullable в
CASTпри включенной настройкеcast_keep_nullable. Закрывает #95670. #95747 (Alexey Milovidov). - Исправлено укрупнение партиционированных данных Delta Lake. #95773 (Kseniia Sumarokova).
- Исправлено состояние гонки для JOIN-столбца типа Nullable в runtime-фильтрах. #95775 (Hechem Selmi).
- Исправлена возможная логическая ошибка в запросе с matcher (
*,table.*) иanalyzer_compatibility_join_using_top_level_identifier, когда столбецUSINGимеет разные типы в таблицах и в списке SELECT. Закрывает #90477. #95808 (Vladimir Cherkasov). - Исправлены ошибки, связанные с безопасностью памяти, в операциях, выполняемых в параллельном пуле потоков (резервное копирование, агрегация, распределённые запросы), которые могли приводить к исключениям при возникновении ошибки во время планирования задач. #95818 (Raúl Marín).
- Исправлен сбой при выполнении DROP WORKLOAD одновременно с выполнением запросов, использующих удаляемую рабочую нагрузку. #95856 (Alexey Milovidov).
- Исправлена медленная работа при выполнении запросов к системным таблицам от имени пользователя с ограниченными привилегиями во множестве баз данных. Закрывает #89371. #95874 (pufit).
- Исправлено выполнение функции tupleElement для JSON с вложенными путями: ранее это могло приводить к неверному результату запроса. #95907 (Pavel Kruglov).
- Исправлена ошибка
NOT_SUPPORTED, которая могла возникнуть при использовании алгоритма JOINdirectс пустой таблицей семейства MergeTree. #95935 (Vladimir Cherkasov). - Исправлено: клиент не предлагал и не автодополнял имена алиасов для настроек, закрывает #92190. #95945 (phulv94).
- Исправлено поле event_date в system.asynchronous_metric_log. #95947 (Raúl Marín).
- Исправлена обработка skipping paths в типе данных JSON. Ранее при
JSON(SKIP path)пропускались все ключи JSON с префиксомpath, включая ключи вроде"pathpath", что могло приводить к потере данных при вставке. Теперь это исправлено: пропускается только ключ"path". #95948 (Pavel Kruglov). - Часть с неизвестными проекциями не должна считаться безвозвратно утерянной. #95952 (Mikhail Artemenko).
- Исправлена ошибка, из-за которой пустая строка превращалась в
NULLв таблицеJoinс ключомNullable(String). Закрывает #71414. #96002 (Alexey Milovidov). - Теперь движок PostgreSQL может корректно читать
BOOLEAN[]. Закрывает проблему #72754. #96006 (Alexey Milovidov). - Исправлен формат
ProtobufListдля чтения из пустого файла. Закрывает #70059. #96007 (Alexey Milovidov). - Исправлена ошибка в формате
ProtobufList, из-за которой для пустых таблиц создавалась фантомная запись. Закрывает #72596. #96010 (Alexey Milovidov). - Исправлено несоответствие типов
UInt64иInt32в функцииifв редком случае распределённых запросов и PREWHERE при выводе типов. Закрывает #70017. #96012 (Alexey Milovidov). - Исправлены
JIT-скомпилированные запросы, использующие типBool. #96013 (Alexey Milovidov). - Исправлена логическая ошибка при чтении столбца UUID из текстового столбца SQLite TEXT. Закрывает #71263. #96016 (Alexey Milovidov).
- Исправлено преобразование типов в движке SQLite для
DateTime,Date,UUIDи других типов. Закрывает #73481. #96017 (Alexey Milovidov). - Значения
FixedStringнекорректно экранировались в запросах к внешним базам данных SQLite и PostgreSQL. Закрывает #73519. В соавторстве с @jh0x. #96019 (Alexey Milovidov). - Исправлен сбой из-за ошибки assert в WindowTransform при большом смещении PRECEDING. Закрывает #75852. #96026 (Alexey Milovidov).
- Исправлена ошибка, из-за которой могло происходить повреждение данных, когда параллельные асинхронные вставки используют одинаковые имена параметров, но содержат разные значения. #96035 (Seva Potapov).
- Исправлен период для глобальных профилировщиков (задаётся параметрами
global_profiler_real_time_period_nsиglobal_profiler_cpu_time_period_ns). Вместо заданного значения использовалось усечённое, из-за чего профилировщик срабатывал чаще, чем предполагалось. #96048 (Antonio Andelic). - Ранее, если в записи файла манифеста Iceberg для position delete присутствовала ссылка на файл данных, но имела значение NULL, мы не получали корректные границы для соответствующих файлов данных. Этот PR исправляет эту ошибку. #96061 (Daniil Ivanik).
- Исправлена проблема с отзывом ролей по умолчанию. #96103 (Vitaly Baranov).
- Исправлена ошибка use-after-free при анализе индекса в редком случае, когда
use_primary_keyотключен и имеется очень большое количество дизъюнкций условий, использующих индекс. #96112 (Alexey Milovidov). - Исправлена регрессия в кодеке
Gorilla, возникавшая, когда явно указанный размер не соответствовал размеру типа данных, а размер буфера был слишком мал. В предыдущих версиях это приводило к исключению при декомпрессии. Закрывает #78253. #96118 (Alexey Milovidov). - Предотвращена взаимная блокировка при загрузке словарей, когда один словарь ссылается на таблицу Merge, которая рекурсивно ссылается на него. Закрывает #78360. #96120 (Alexey Milovidov).
- Исправлено использование неинициализированного значения в
formatDateTimeпри использовании форматтеров переменной ширины, таких как в стиле MySQL и JODA. #96133 (Alexey Milovidov). - Сочетание настроек
use_const_adaptive_granularityиindex_granularity_bytes(что означает “неадаптивную гранулярность”) приводило к неверному вычислению количества строк для чтения и возникновению исключения. #96143 (Alexey Milovidov). - Выполнение некорректной мутации ALTER UPDATE на файлоподобных таблицах в объектном хранилище, таких как S3 и Azure, могло приводить к разыменованию nullptr. Закрывает #92994. #96162 (Alexey Milovidov).
- Исправлено некорректное поведение
AccessRights::contains, из-за которого при частичном отзыве привилегий возвращались неверные результаты. #96170 (pufit). - Исправлена коллизия хэша в кэше условий запроса для свернутых констант CTE, которая могла приводить к ошибочному результату запроса. Закрывает #96060. #96172 (Alexey Milovidov).
- Исправлена возможная взаимная блокировка в ProcessList. Она может возникнуть из-за инверсии блокировок, если трекер оверкоммита памяти срабатывает в момент добавления задачи в механизм проверки отмены. #96182 (Antonio Andelic).
- Исправлена ошибка, из-за которой запросы с OUTER JOIN (LEFT, RIGHT или FULL) в сочетании с несколькими INNER JOIN могли возвращать некорректные результаты из-за недопустимого изменения порядка JOIN. Если условие ON в OUTER JOIN ссылалось на столбцы из нескольких ранее присоединённых таблиц, оптимизатор не учитывал все зависимости между таблицами и мог неправильно изменить порядок JOIN, из-за чего часть строк терялась. Закрывает #95972. #96193 (Vladimir Cherkasov).
- Если для таблицы не определена статистика, ClickHouse не должен пытаться её загружать. Это позволяет избежать дополнительных накладных расходов (100+ мс) на проверку наличия файлов статистики. (тикет #96068). #96233 (Han Fei).
- Исправлено
optimize_syntax_fuse_functions: теперьsum/count/avgне переписываются вsumCount(), если аргумент агрегатной функции имеет типLowCardinality(Nullable). Закрывает #95390. #96239 (Nihal Z. Miaji). - Исправлено некорректное отсечение партиций для
not INи функцииnot hasв некоторых случаях. #96241 (Nihal Z. Miaji). - Исправлена ошибка
stack-use-after-scopeв индексе векторного сходства. #96259 (Alexey Milovidov). - Исправлено: средство запуска тестов не распознавало комментарии с подсказкой об ошибке, если запросу предшествовал SQL-комментарий. #96336 (Yakov Olkhovskiy).
- Исправлена логическая ошибка в KeyCondition, возникавшая, когда у таблицы primary key имеет тип Nullable, а в запросе используется функция
coalesce, у которой первый аргумент — константа. #96340 (Alexey Milovidov). - Взаимодействие
GROUPING SETS,group_by_use_nullsи типа данныхTupleсLowCardinalityвнутри него могло приводить к неожиданной структуре блока в конвейере выполнения запроса, что вызывало логическую ошибку. Это стало проявляться после добавленияNullableTuple-ов. #96358 (Alexey Milovidov). - Можно было создать таблицу, использовав пустое выражение
()в качестве индекса, что приводило к некорректному обращению к памяти. #96363 (Alexey Milovidov). - Исправлен сбой в старом анализаторе при JOIN и повторяющихся псевдонимах. #96405 (Ilya Golshtein).
- Исправлена ошибка
Nested columns sizes are inconsistent with local_discriminators, вызванная некорректной оптимизацией фильтрации на месте для столбцов Variant. #96410 (Alexey Milovidov). - Исправлена ошибка, из-за которой
CREATE TABLE ... CLONE AS ...игнорировал полный квалификатор исходной таблицы. #96415 (Hasyimi Bahrudin). - Исправлена отмена выполнения табличной функции
mysqlс помощью KILL QUERY и отмены запроса (Ctrl+C) в clickhouse-client. #96437 (Roman Vasin). - Исправлено состояние livelock в потоке проверки отмены для запросов с высокими значениями
max_execution_time. #96450 (Sergei Trifonov). - Исправлена логическая ошибка, которая в некоторых случаях возникала при использовании дробного
LIMIT/OFFSETв распределённых запросах. #96475 (Nihal Z. Miaji). - Исправлена ошибка разыменования нулевого указателя в некоторых выражениях с лямбда-функциями. #96479 (Alexey Milovidov).
- Исправлены некорректные результаты при преобразовании столбцов
LowCardinalityвNullable. #96483 (Nihal Z. Miaji). - Исправлен сбой при создании таблицы Iceberg с секцией
ORDER BY, ссылающейся на несуществующий столбец или использующей позиционный аргумент. Закрывает #93280. #96484 (Konstantin Vedernikov). - Исправлено исключение runtime filter для столбцов Tuple с Nullable-подполями. #96509 (Alexey Milovidov).
- Исправлено Исключение
LOGICAL_ERRORво встроенном считывателе Parquet V3, когда столбец фильтраPREWHEREсодержит небулевы значения UInt8. #96594 (Alexey Milovidov). - Исправлена неявная перестройка индекса в реплицируемых таблицах при изменении метаданных. #96600 (Raúl Marín).
- Исправлена гонка данных при DROP WORKLOAD. #96614 (Sergei Trifonov).
- Исправлена ошибка при записи в таблицы Iceberg, из-за которой при вставке в партиционированные таблицы данные могли некорректно распределяться по файлам партиций. #96620 (Konstantin Vedernikov).
- Исправлена ошибка
heap-use-after-freeвCREATE TABLEс ограничениями constraints. #96669 (Nikita Taranov). - Проверка witness version в bech32 во избежание переполнения буфера. #96671 (Raúl Marín).
- Исправлена проблема, из-за которой
system.tablesвозвращала ошибки, если REST-каталог озера данных создавался с недопустимым параметромauth_header. #96680 (Han Fei). - Исправлено поведение, при котором
min(timestamp)возвращал значение эпохи (1970-01-01) в_minmax_count_projectionпосле TTL-слияния, если все строки в блоке были отфильтрованы. #96703 (Raquel Barbadillo). - Улучшена проверка параметра
iceberg_metadata_file_path, чтобы предотвратить обход каталогов и убедиться, что указанный файл метаданных находится в каталоге таблицы. #96754 (Daniil Ivanik). - Исправлен сбой в
ifNullпри использовании аргументаVariantвGROUP BY. #96790 (Alexey Milovidov). - Исправлены коллизии ключей кэша между таблицами при настройке
table_disk=1. #96818 (Raufs Dunamalijevs). - Исправлено зависание потока очистки MemoryWorker, вызванное состоянием гонки. #96819 (Antonio Andelic).
- Не записывать в журнал данные с учетными данными из каталогов Iceberg. #96831 (Konstantin Vedernikov).
- Исправлен код возврата
clickhouse-clientпосле ошибки сервера. #96841 (Vitaly Baranov). - Запросы с CROSS JOIN и включенными параллельными репликами могли возвращать неверный результат. Исправлено в #74337. #96848 (Igor Nikonov).
- Исправлена ошибка, из-за которой запросы
ALTER TABLE DROP COLUMNзавершались сбоем, если ранее для того же столбца уже выполнялось легковесное обновление. #96861 (Anton Popov). - Исправлено переполнение стека (аварийное завершение) при создании резервных копий в архивном формате (
.zip,.tzst) на диске объектного хранилищаplain_rewritable. #96872 (Alexey Milovidov). - Исправлено аварийное завершение сервера, возникавшее, когда резервное копирование завершалось с ошибкой из-за нехватки места на диске или других ошибок ввода-вывода в файловой системе пункта назначения. #96873 (Alexey Milovidov).
- Исправлены
EXCEPT ALLиINTERSECT ALL, которые игнорировали кратность строк и работали как их вариантыDISTINCT. #96876 (Alexey Milovidov). - Исправлено исключение
std::terminateвindexOfAssumeSorted, возникавшее при вызове с несовместимыми типами (например, для массиваIPv4и целочисленного искомого значения). #96877 (Alexey Milovidov). - Исправлено Исключение
Bad cast from type DB::ColumnNullable to DB::ColumnString, возникавшее при использовании оконных функций сgroup_by_use_nulls = 1и CUBE/ROLLUP/GROUPING SETS. #96878 (Alexey Milovidov). - Исправлены некорректные результаты, возникавшие при преобразовании JIT-скомпилированными выражениями
DateTimeвDateTime64(например, вCASE/if/multiIfсо смешанными типами DateTime). Значение переинтерпретировалось вместо корректного масштабирования, из-за чего после включения компиляции выражений получались неверные временные метки. #96879 (Alexey Milovidov). - Исправлено исключение из-за логической ошибки в
CoalescingMergeTree, возникавшее, когда выражение индекса пропуска данных создаёт константный столбец (например,bloom_filterдляifNotFinite(1, c0)в случае целочисленного столбца). #96880 (Alexey Milovidov). - Исправлен неверный номер порта в сообщении об ошибке при ошибочном подключении по HTTP к порту собственного протокола с включенным TLS. #96881 (Alexey Milovidov).
- Исправлено, что
SETTINGS, заданные для отдельных подзапросов, не применялись к табличным функциям, таким какfile, в CTE и подзапросах. #96882 (Alexey Milovidov). - Исправлена утечка памяти в объектах BIO при чтении сертификатов X509. #96885 (Alexey Milovidov).
- Исправлено исключение
LOGICAL_ERRORв анализаторе запросов, возникавшее, если лямбда-выражение передавалось там, где ожидалось конкретное значение (например, в качестве аргумента аккумулятора дляarrayFold). #96892 (Alexey Milovidov). - Исправлено исключение
ColumnNullable is not compatible with originalпри приведении сложных вложенных типов (Array, состоящего из Nullable Tuple, содержащего Map со значениями типа Nullable Enum). #96924 (Alexey Milovidov). - Устранено состояние гонки при параллельной загрузке сегментированного словаря
HASHED, которое иногда приводило к тому, что некоторые строки не загружались. #96953 (Alexey Milovidov). - Исправлено состояние гонки между
REPLACE PARTITIONи фоновыми мутациями, из-за которого после замены могли быть одновременно видны старые и новые данные. #96955 (Alexey Milovidov). - Исправлена ошибка в функции
arrayJoin, из-за которой при использовании с INNER JOIN и предложением WHERE возникали дублирующиеся строки; причиной была оптимизация частичного проталкивания предикатов, которая ошибочно проталкивала фильтры сarrayJoinниже JOIN. #96989 (Alexey Milovidov). - Исправлен сбой (SEGFAULT) в
clearCaches, вызванный тем, чтоBlockIO::operator=не перемещалquery_metadata_cache, что приводило к преждевременному уничтожению кэшированных снимков хранилища и обращению к хранилищуMergeTreeDataпосле освобождения памяти. #96995 (Alexey Milovidov). - Исправлена ошибка assertion в
IfTransformStringsToEnumPass, когда функцияifилиtransformвозвращаетNullable(String)(например, приGROUP BY ... WITH CUBEиgroup_by_use_nulls = true). #97002 (Alexey Milovidov). - Исправлена ошибка, из-за которой при
INSERT ... SELECTсUNION ALLиJOINв константные строковые столбцы после укрупнения блоков могли записываться неверные значения. #97019 (Hasyimi Bahrudin). - Исправлено исключение
assert_cast(или скрытое повреждение данных в релизных сборках) при построении статистики столбцов после изменения типа столбца командойALTER TABLE MODIFY COLUMN. #97027 (Alexey Milovidov). - Исправлено чтение из неинициализированной памяти в Azure Blob Storage, протоколе SSH и интерфейсах Arrow Flight. #97053 (Alexey Milovidov).
- Исправлены случаи, когда индексы влияли на результат запросов с ROW POLICY/PREWHERE и FINAL. #97076 (Yarik Briukhovetskyi).
- Исправлено оставшееся условие гонки между
REPLACE PARTITIONи фоновыми мутациями в таблицахMergeTree, из-за которого старые данные могли снова появляться. #97105 (Alexey Milovidov). - Исправлена работа неявных индексов со столбцами-псевдонимами; теперь перед их созданием выполняется полная проверка. #97115 (Raúl Marín).
- Исправлена логическая ошибка в
FunctionVariantAdaptorдля функций, которым требуются константные аргументы, таких какarrayROCAUC. #97116 (Bharat Nallan). - Исправлены зависшие мутации в случае, когда
PartCheckThreadповторно ставит в очередьGET_PARTдля части, уже обработанной мутацией, оставляя фантомные записи вparts_to_do. #97162 (Alexey Milovidov). - Исправлена оценка числа строк в плане запроса для подзапросов с
ORDER BY ... LIMIT, из-за которой оптимизатор мог выбирать неоптимальный порядок JOIN. #97193 (Alexander Gololobov). - Исправлено исключение
LOGICAL_ERRORвFunctionVariantAdaptor, возникавшее, когда функция, работающая со столбцами Variant, возвращает типNothing, что может происходить с пустыми массивами в запросахUNION ALL. #97213 (Alexey Milovidov). - Исправлено состояние гонки при операциях многокомпонентного копирования в S3 (например, при
BACKUP/RESTOREв S3), которое могло вызывать исключения при одновременном доступе. #97227 (Azat Khuzhin). - Исправлено исключение
LOGICAL_ERROR, возникавшее, когдаarrayJoinв секцииWHEREссылался на столбцы с обеих сторонJOIN. #97239 (Alexey Milovidov). - Исправлено Исключение
LOGICAL_ERRORпри чтении подстолбца.sizeу разреженногоNullable(String)вTupleс PREWHERE. #97264 (Alexey Milovidov). - Исправлено исключение “Количество строк в отложенном фрагменте не совпадает с количеством смещений” в
LazyMaterializingTransformпри чтении из таблиц с неадаптивной гранулярностью индекса (index_granularity_bytes = 0) с использованиемORDER BY ... LIMIT. #97270 (Alexey Milovidov). - Исправлена потеря таблицы из базы данных при
SYSTEM RESTART REPLICA, если повторное создание таблицы завершается исключением, не связанным с ZooKeeper (например, из-за лимита памяти), что приводило к несовпадению дайджестов metadata вDatabaseReplicated. #97276 (Alexey Milovidov). - Поле
readonlyвsystem.merge_tree_settingsтеперь корректно отражает, что некоторые настройки MergeTree (например,index_granularity) всегда доступны только для чтения. #97277 (Robert Schulze). - Исправлен сбой при оптимизации
count()для таблицMergeTree, когда снимок хранилища создавался без данных. #97281 (Pablo Marcos). - Исправлено возможное аварийное завершение при определении имён функций по отладочной информации для трассировок стека. #97294 (Azat Khuzhin).
- Исправлена логическая ошибка, связанная с analyzer_compatibility_join_using_top_level_identifier и столбцами ALIAS. Закрывает #96228. #97297 (Vladimir Cherkasov).
- Исправлено исключение
LOGICAL_ERRORвapplyOrderпри использовании столбцов с текстовым индексом в предложенииQUALIFY. #97313 (Alexey Milovidov). - Системная таблица
system.functionsтеперь для внутренних функций отображаетcategories = 'Internal'вместоcategories = ''. #97315 (Robert Schulze). - Запрос с цепочкой RIGHT JOIN и включенными параллельными репликами может давать некорректный результат. Исправлено в #74341. #97316 (Igor Nikonov).
- Исправлены ложные ошибки
TABLE_UUID_MISMATCH, которые могли возникать в refreshable materialized view и других сценариях при переименовании таблиц. #97323 (Azat Khuzhin). - Исправлен segfault при резервном копировании
StorageKeeperMap, вызванный use-after-free висячего указателя на хранилище в отложенном батче резервного копирования. #97336 (Alexey Milovidov). - Исправлена функция
existsсо скалярным подзапросом внутриALTER UPDATE/DELETE, когда включен параметрmutations_execute_subqueries_on_initiator. Скалярный подзапрос вычислялся некорректно, что могло привести к ошибке или к повреждённой команде мутации, из-за которой таблица не загружалась при следующем перезапуске сервера. #97347 (Kirill Kopnev). - Исправлено логическое исключение
Unexpected return type from equals. Expected Nullable(UInt8). Got Const(LowCardinality(Nullable(UInt8))), возникавшее при сравнении NULL со столбцом Variant, содержащим типы LowCardinality. #97379 (Alexey Milovidov). - Исправлена возможная гонка при выполнении
EXCHANGE TABLESпараллельно с включенным сегментированным кэшем запросов. #97411 (Konstantin Vedernikov). - Исправлено исключение
LOGICAL_ERRORпри преобразовании из Array вQBit, когдаnullable_sourceиз внешней обёрткиTupleзаменяет преобразуемый столбец типа Array на столбец несовместимого типа. Закрывает #97389. #97413 (Alexey Milovidov). - Исправлена неконсистентность при повторном форматировании AST для литералов кортежей с алиасом в скобках: например,
(('a', 'b') AS x)ошибочно переформатировалось вtuple(('a', 'b') AS x). #97418 (Alexey Milovidov). - Исправлено исключение при асинхронных вставках с дедупликацией, возникавшее, когда ошибка парсинга приводила к созданию пустого блока без строк. #97460 (Sema Checherinda).
- Исправлено исключение “Количество строк в отложенном фрагменте не соответствует количеству смещений” в
LazyMaterializingTransformпри чтении из таблиц с неадаптивной гранулярностью индекса (index_granularity_bytes = 0) при использованииORDER BY ... LIMIT. #97482 (Alexey Milovidov). - Исправлены настройки вставки в Iceberg. Добавлен алиас для настройки
allow_experimental_insert_into_iceberg. #97483 (Konstantin Vedernikov). - Исправлена ошибка
ACCESS_DENIEDдля пользователей без разрешенияCREATE TEMPORARY TABLE, когда оптимизацияoptimize_inverse_dictionary_lookupпреобразует предикатыdictGet(...). Теперь ClickHouse пропускает это преобразование и выполняет исходное выражение. Закрывает #97269. #97484 (Nihal Z. Miaji). - Исправлен сбой assert (исключение в отладочных сборках и сборках с санитайзерами) в
SetиMergeTreeIndexSetпри обработке столбцов с внутренними разреженными подстолбцами (например, столбцовTupleиз частей MergeTree с разными профилями разреженной сериализации). #97493 (Alexey Milovidov). - Исправлено возможное обращение к памяти после её освобождения в StorageKafka2. #97520 (Bharat Nallan).
- Исправлена работа
INTO OUTFILEсTRUNCATEи настройкойinto_outfile_create_parent_directories, когда путь вывода содержит каталоги. #97549 (Alexey Milovidov). - Исправлена ошибка
BAD_ARGUMENTSпри запросах к таблицам с лямбда-выражениями в столбцах ALIAS через табличную функциюmerge()при включенном анализаторе. #97551 (Alexey Milovidov). - Исправлено исключение
system.zookeeper_info, если zxid в Keeper равен 0. #97553 (Alexey Milovidov). - Исправлена возможная логическая ошибка в словаре
ip_trie, если тип ключа отличается от String. #97555 (Bharat Nallan). - Исправлена ошибка, из-за которой OAuth-аутентификация REST-каталога не работала для базового
RestCatalog(она работала только для производных каталогов, таких какOneLakeCatalog). Из-за этого REST-каталог по умолчанию перестал работать после добавления каталога BigLake. #97561 (Konstantin Vedernikov). - Функции Geometry (
perimeterSpherical,areaSphericalи т. д.) теперь принимают отдельные подтипы геометрии (Polygon,Ring,Pointи т. д.) помимо вариативного типаGeometry. #97571 (Alexey Milovidov). - Исправлено исключение
LOGICAL_ERRORпри использованииisNull/isNotNullдля подстолбцов типовNullable(Tuple(... Nullable(T) ...)). Закрывает #97224. #97582 (Alexey Milovidov). - Исправлено разыменование нулевого указателя при применении патч-частей в ходе легковесных обновлений. #97583 (Alexey Milovidov).
BaseSettings::readBinaryпередаёт индекс изaccessor.findвfield_infos[]без проверки на специальное значение «не найдено» (то есть-1), что может привести к выходу за границыstd::vector. Проблему удалось выявить благодаря механизмам защиты libcxx. Вероятно, это происходило при десериализации плана запроса, когда более новый сервер отправляет настройку, неизвестную более старому серверу. Метод чтения на основе строк уже обрабатывает этот случай корректно; вreadBinaryтакой же проверки не было. #97585 (Miсhael Stetsyuk).- Исправлены некорректные результаты запросов
UNION ALL, в которых одна ветвь содержала предикат, всегда равный false: такая ветвь ошибочно читала данные вместо того, чтобы ничего не возвращать. #97620 (Bharat Nallan). - Исправлена ошибка
UNSUPPORTED_METHOD, возникавшая приIN (col)с единственной ссылкой на столбец. #97646 (Alexey Milovidov). - Исправлено Исключение логической ошибки при
GROUP BY ... WITH ROLLUP/CUBE, когда ключи содержатLowCardinality(Nullable(...))внутриNullable(Tuple(...)). #97647 (Alexey Milovidov). - Исправлена несогласованность в форматировании AST для
NOT (1, 1, 1), которая могла приводить кLOGICAL_ERRORв отладочных сборках. #97653 (Alexey Milovidov). - Исправлено исключение
keeper-converterпри обработке пустых файлов журнала транзакций ZooKeeper. #97673 (Alexey Milovidov).
Улучшение сборки/тестирования/пакетирования
- ClickHouse теперь можно собирать с помощью clang-23 (master). #95578 (Alexey Milovidov).
- Исправлено принудительное выставление
is_localв false при настроенномbind_host; вместо этого добавлен интеграционный тест. Дополнение к #74741. #93109 #96018 (Zhigao Hong). - Стресс-тесты: исправлены стресс-тесты и тесты обновления в CI. теги
no-{build}теперь игнорируются. добавлена рандомизация совместимости. #94693 (Nikita Fomichev). - Опубликован бинарный файл parser_memory_profiler из сборки. Инструмент можно использовать для анализа потребления памяти деревом AST. #95826 (Ilya Yatsishin).
- Добавлен флаг
--symbolizeдля инструментаparser_memory_profiler, который создаёт файлы.heap.symс разрешёнными именами символов в результатах. #96477 (Ilya Yatsishin). - Зафиксированы версии сторонних Docker-образов в интеграционных тестах. #96500 (Alexey Milovidov).
- Восстановлена возможность динамической линковки
OpenSSL. Это не рекомендуется и не используется ни в каких продакшн-сборках, но такая возможность всё ещё остаётся для энтузиастов из интернета. #96506 (Govind R Nair). - Диапазон
magic_enumуменьшен с [-100, 1000] до значения по умолчанию [-128, 127] с использованием специализацииCoordination::OpNumдля конкретного типа, что сокращает время сборки. #96632 (Alexey Milovidov). - Удалены лишние шаблоны C++ из классов Function, чтобы сократить время сборки. #96646 (Alexey Milovidov).
- Перенесли генерацию
StorageSystemLicensesна этап конфигурации, чтобы повысить параллелизм сборки. #96697 (Alexey Milovidov). - Распараллелено сканирование лицензий. #96727 (Raúl Marín).
- Добавлен функциональный тест без сохранения состояния для поддержки протокола SSH. #96996 (Alexey Milovidov).
- Kafka 3.9.0 добавлена в инфраструктуру функциональных тестов без сохранения состояния, что позволяет напрямую тестировать движки таблиц Kafka и Kafka2, где ClickHouse Keeper используется вместо ZooKeeper. Шесть новых тестов без сохранения состояния охватывают базовые сценарии записи и чтения, виртуальные столбцы, INSERT, несколько форматов, обработку повреждённых сообщений и хранение смещений через Keeper. #96997 (Alexey Milovidov).
- Добавлен CI-процесс для сборки оптимизированного тулчейна clang с PGO+BOLT. #96991 (Alexey Milovidov).
- В CI используется оптимизированная с помощью PGO сборка LLVM/Clang, что должно ускорить сборку на 20..30%. #97031 (Alexey Milovidov).
- Заменены математические функции glibc на реализации из llvm-libc. #90151 (Konstantin Bogdanov).
- Boost обновлён с 1.83 до 1.90, что исправляет сбой из-за срабатывания assert в
devectorв отладочных сборках. #97037 (Alexey Milovidov). - Обновлён
postgresдо версии REL_18_1. #95189 (Konstantin Bogdanov). - Используется
libexpat2.7.3. #95218 (Konstantin Bogdanov). - Используется
OpenSSL3.5.5. #95345 (Konstantin Bogdanov). - Используется
simdjsonv4.2.4. #97129 (Konstantin Bogdanov). - Используется
libarchive3.8.5. #97131 (Konstantin Bogdanov). - Используется
fast_floatверсии 8.2.3. #97133 (Konstantin Bogdanov). - Использовать
abseil-cpp20260107.1,s2geometryv0.13.1. #97134 (Konstantin Bogdanov). - Обновили
libxml2до версии 2.15.1. #95574 (Robert Schulze). - Обновлены 7 Docker-образов для интеграционных тестов уровня 3: устаревшие (EOL) или удалённые базовые образы заменены на актуальные поддерживаемые версии. #97314 (Rahul).
- Добавлены запросы из бенчмарка TPC-DS. #97349 (Raufs Dunamalijevs).
- Отдельные cmake-опции для наборов инструкций x86 (
ENABLE_SSSE3,ENABLE_AVX2,NO_SSE3_OR_HIGHER,ARCH_NATIVEи т. д.) заменены одной числовой опциейX86_ARCH_LEVEL(1/2/3/4), соответствующей стандартным уровням микроархитектуры x86-64, которые уже используются системой диспетчеризации во время выполнения. #97354 (Raúl Marín). - Устранено инстанцирование вариантов шаблона
division_by_nullable=trueдля операций, не связанных с делением, вFunctionBinaryArithmetic, что сокращает время компиляции и размер бинарного файла. #97496 (Raúl Marín). - Уменьшена зависимость от
Exception.h: этот файл убран из часто используемых заголовков, таких какtypeid_cast.h,assert_cast.h,Context_fwd.h,IDataType.hи различных заголовочных файлов Column. #97497 (Raúl Marín). - Всегда используйте заголовочные файлы из комплекта
compiler-rt(интерфейсы sanitizer и XRay) вместо заголовков системного компилятора и по умолчанию собирайте библиотекиcompiler-rtиз исходников. #97499 (Raúl Marín). - Исключено включение заголовков boost/multiprecision в
wide_integer_impl.hна платформах с достаточно точнымlong double, что ускоряет сборку. #96633 (Alexey Milovidov). - Реализован джоб LLVM Code Coverage; на первом этапе он включён для ветки master. #90952 (Alexey Bakharew).
- В релизных сборках включён быстрый режим защиты libcxx. В основном это нужно для проверок выхода за границы. Судя по результатам тестов производительности, заметного влияния на производительность не ожидается. #94757 (Miсhael Stetsyuk).
Релиз ClickHouse 26.1, 2026-01-29. Презентация, Видео
Обратно несовместимое изменение
- Исправлено несогласованное форматирование, вызванное некорректной подстановкой псевдонимов в форматтере. Это закрывает #82833. Это закрывает #82832. Это закрывает #68296. Это изменение потенциально нарушает обратную совместимость: когда анализатор отключен, некоторые запросы CREATE VIEW с IN, ссылающимся на псевдоним, не могут быть обработаны. Чтобы избежать этой несовместимости, включите анализатор (по умолчанию он включен начиная с версии 24.3). #82838 (Alexey Milovidov).
- Кодеки
DEFLATE_QPLиZSTD_QATбыли удалены. Пользователям рекомендуется до обновления перекодировать существующие данные, сжатые с помощьюDEFLATE_QPLилиZSTD_QAT, в другой кодек. Обратите внимание: для использования этих кодеков должны были быть включены настройкиenable_deflate_qpl_codecиenable_zstd_qat_codec. #92150 (Robert Schulze). - Улучшена отладка UDF: включён захват stderr в
system.query_log.exception. Ранее stderr из UDF записывался только в файлы и не отображался в журнале запросов, из-за чего отладка была невозможна. Теперь stderr по умолчанию вызывает исключения и полностью накапливается (до 1 МБ) перед тем, как сгенерировать исключение, поэтому полные трассировки Python и сообщения об ошибках появляются вsystem.query_log.exception, что упрощает диагностику. #92209 (Xu Jia). - Пустой список столбцов в условии
JOIN USING ()теперь считается синтаксической ошибкой. Ранее предполагалось, что во время выполнения запроса это будетINVALID_JOIN_ON_EXPRESSION. В некоторых случаях, например при JOIN с хранилищемJoin, это приводило кLOGICAL_ERROR; исправление закрывает #82502. #92371 (Vladimir Cherkasov). - По умолчанию для SKIP REGEXP в типе JSON используется частичное совпадение. Закрывает #79250. #92847 (Pavel Kruglov).
- Отменено изменение “Allow INSERT into simple ALIAS columns” (отменяет ClickHouse/ClickHouse#84154). Оно не работает с пользовательскими форматами, и для него нет отдельной настройки. #92849 (Azat Khuzhin).
- Настройка, вызывающая ошибку, если каталог озера данных не имеет доступа к объектному хранилищу. #93606 (Konstantin Vedernikov).
- Движок базы данных
Lazyудалён и больше не доступен. Закрывает #91231. #93627 (Alexey Milovidov). - Удалён режим
transposed_with_wide_viewдляmetric_log— из-за ошибки он неработоспособен. Задатьsystem.metric_logв этом режиме больше нельзя. Это частично отменяет #78412. #93867 (Alexey Milovidov). - Теперь для рабочих нагрузок по умолчанию используется вытесняющее планирование CPU. См. настройку сервера
cpu_slot_preemption. #94060 (Sergei Trifonov). - Экранировать имена файлов индексов, чтобы избежать повреждения частей. После этого изменения ClickHouse не сможет загружать индексы с не-ASCII-символами в имени, созданные в предыдущих версиях. Для этого можно использовать настройку MergeTree
escape_index_filenames. #94079 (Raúl Marín). - Настройки формата
exact_rows_before_limit,rows_before_aggregation,cross_to_inner_join_rewrite,regexp_dict_allow_hyperscan,regexp_dict_flag_case_insensitive,regexp_dict_flag_dotallиdictionary_use_async_executorтеперь переведены в разряд обычных настроек (не настроек формата). Это исключительно внутреннее изменение и не имеет заметных для пользователя побочных эффектов, кроме (маловероятного) случая, когда вы указали какие-либо из этих настроек в определениях движков таблиц Iceberg, DeltaLake, Kafka, S3, S3Queue, Azure, Hive, RabbitMQ, Set, FileLog или NATS. В таких случаях эти настройки раньше игнорировались, а теперь при таких определениях генерируется ошибка. #94106 (Robert Schulze). - Функции
joinGet/joinGetOrNullтеперь требуют наличия привилегииSELECTдля базовой таблицы Join. После этого изменения для выполненияjoinGet('db.table', 'column', key)требуется, чтобы у пользователя была привилегияSELECTкак для столбцов ключа, определённых в таблице Join, так и для извлекаемого столбца-атрибута. Запросы без этих привилегий будут завершаться ошибкойACCESS_DENIED. Для перехода предоставьте необходимые разрешения с помощьюGRANT SELECT ON db.join_table TO userдля полного доступа к таблице илиGRANT SELECT(key_col, attr_col) ON db.join_table TO userдля доступа на уровне столбцов. Это изменение затрагивает всех пользователей и приложения, использующиеjoinGet/joinGetOrNull, если явные привилегииSELECTранее не были настроены. #94307 (Vladimir Cherkasov). - Для запросов
CREATE TABLE ... AS ...теперь проверяетсяSHOW COLUMNS. Ранее проверялсяSHOW TABLES, но для такой проверки разрешений это некорректный grant. #94556 (pufit). - Формат вывода
Hashтеперь не зависит от размеров блоков. #94503 (Alexey Milovidov). Обратите внимание, что из-за этого хеш-значения в выводе будут отличаться от предыдущих версий.
Новая возможность
- HTTP API и встроенный веб-интерфейс для ClickHouse Keeper. #78181 (pufit и speeedmaster).
- Дедупликация async insert теперь работает с зависимыми materialized views. При коллизии по block_id исходный блок фильтруется: из него удаляются строки, связанные с block_id, а оставшиеся строки преобразуются всеми соответствующими SELECT-запросами materialized views; в результате исходный блок пересобирается без конфликтующих строк. #89140 (Sema Checherinda). Теперь можно использовать дедупликацию с async inserts, когда задействованы materialized views. #93957 (Sema Checherinda).
- Добавлены новый синтаксис и новый механизм, упрощающие и расширяющие функциональность индексов-проекций. Это продолжение работы из https://github.com/ClickHouse/ClickHouse/pull/81021. #91844 (Amos Bird).
- Добавлена поддержка текстовых индексов для столбцов
Array. #89895 (Jimmy Aguilar Mena). - Параметр
use_variant_as_common_typeтеперь включён по умолчанию, что позволяет использовать несовместимые типы внутриArray, в запросахUNIONи в ветвяхif/multiIf/case. #90677 (Alexey Milovidov). - Добавлена новая системная таблица
zookeeper_info. Реализовано в #88014. #90809 (Smita Kulkarni). - Добавлена поддержка типа
Variantво всех функциях. #90900 (Bharat Nallan). - Добавляет метрику
ClickHouse_Infoв конечную точку Prometheus/metrics, содержащую в основном информацию о версии, что позволяет строить графики и отслеживать подробные сведения о версии с течением времени. #91125 (Christoph Wurm). - Добавлена новая четырёхбуквенная команда
rcfgдля Keeper, позволяющая изменять конфигурацию кластера. Эта команда предоставляет более широкие возможности изменения конфигурации, чем стандартный запросreconfigure. В качестве аргумента команда принимает строкуjson. Полный набор байтов, отправляемых в TCP-интерфейс, должен выглядеть так:rcfg{json_string_length_big_endian}{json_string}. Вот как могут выглядеть некоторые примеры команды:{"preconditions": {"leaders": [1, 2], "members": [1, 2, 3, 4, 5]}, "actions": [{"transfer_leadership": [3]}, {"remove_members": [1, 2]}, {"set_priority": [{"id": 4, "priority": 100}, {"id": 5, "priority": 100}]}, {"transfer_leadership": [4, 5]}, {"set_priority": [{"id": 3, "priority": 0}]}]}. #91354 (alesapin). - Добавлена функция
reverseBySeparator, которая меняет порядок подстрок в строке, разделённой указанным разделителем, на обратный. Закрывает #91463. #91780 (Xuewei Wang). - Добавляет новую настройку
max_insert_block_size_bytes, которая позволяет точнее управлять формированием вставляемых блоков. #92833 (Kirill Kopnev). - DDL-запросы с предложением
ON CLUSTERможно выполнять для базы данных Replicated, если включена настройкаignore_on_cluster_for_replicated_database. В этом случае имя кластера будет проигнорировано. #92872 (Kirill). - Добавлена функция
mergeTreeAnalyzeIndexes. #92954 (Azat Khuzhin). - Добавлена новая настройка
use_primary_key. Установите её вfalse, чтобы отключить отсечение гранул по первичному ключу. #93319 (Nihal Z. Miaji). - Добавлена табличная функция
icebergLocalCluster. #93323 (Anton Ivashkin). - Добавлена функция
cosineDistanceTransposed, которая приблизительно вычисляет косинусное расстояние между двумя точками. #93621 (Raufs Dunamalijevs). - Добавлен столбец
filesв таблицу system.parts, показывающий количество файлов в каждой части данных. #94337 (Match). - Добавлен max-min-справедливый планировщик для управления параллелизмом. Обеспечивает более справедливое распределение ресурсов при высокой переподписке, когда множество запросов конкурируют за ограниченные слоты CPU. Короткие запросы не страдают из-за длительных запросов, которые со временем накопили больше слотов. Включается значением
max_min_fairнастройки сервераconcurrent_threads_scheduler. #94732 (Sergei Trifonov). - В клиенте ClickHouse появилась возможность переопределять TLS SNI при подключении к серверу. #89761 (Matt Klein).
- Добавлена поддержка временных таблиц в вызовах функции
joinGet. #92973 (Eduard Karacharov). - Поддержка векторов удаления в движке таблицы
DeltaLake. #93852 (Kseniia Sumarokova). - Добавлена поддержка deletion vectors в
deltaLakeCluster. #94365 (Kseniia Sumarokova). - Поддержка Google Cloud Storage для озер данных. #93866 (Konstantin Vedernikov).
Экспериментальные возможности
- Перевести
QBitиз экспериментальных возможностей в бета-статус. #93816 (Raufs Dunamalijevs). - Добавить поддержку
Nullable(Tuple). Чтобы включить её, установитеallow_experimental_nullable_tuple_type = 1. #89643 (Nihal Z. Miaji). - Добавить поддержку Paimon REST-каталога в продолжение https://github.com/ClickHouse/ClickHouse/pull/84423. #92011 (JIaQi Tang).
Повышение производительности
- Параметр
use_skip_indexes_on_data_readтеперь включен по умолчанию. Этот параметр позволяет выполнять фильтрацию в потоковом режиме одновременно с чтением, что улучшает производительность запросов и сокращает время запуска. #93407 (Shankar Iyer). - Повышена производительность
DISTINCTдля столбцовLowCardinality. Закрывает #5917. #91639 (Nihal Z. Miaji). - Оптимизирована агрегатная функция
distinctJSONPaths: теперь она читает только JSON-пути из частей данных, а не весь JSON-столбец. #92196 (Pavel Kruglov). - В JOIN теперь проталкивается больше фильтров. #85556 (Nikita Taranov).
- Поддержано больше случаев проталкивания из условия ON в JOIN, когда фильтр использует входные данные только с одной стороны. Поддерживаются JOIN
ANY,SEMI,ANTI. #92584 (Dmitry Novik). - Разрешено использовать эквивалентные множества для проталкивания фильтров при
SEMI JOIN. Закрывает #85239. #92837 (Dmitry Novik). - Пропускаем чтение левой стороны hash JOIN, если правая сторона пуста. Раньше левая сторона читалась до первого непустого блока, что могло приводить к большому объёму лишней работы при интенсивной фильтрации или агрегации. #94062 (Alexander Gololobov).
- Использование метода “fastrange” (Daniel Lemire) для партиционирования данных внутри конвейера выполнения запроса. Это может улучшить параллельную сортировку и JOIN-операции. #93080 (Alexey Milovidov).
- Повышена производительность оконных функций, когда PARTITION BY совпадает с ключом сортировки или является его префиксом. #87299 (Nikita Taranov).
- Внешний фильтр теперь проталкивается в представления, что позволяет применять PREWHERE на локальных и удалённых узлах. Устранена проблема #88189. #88316 (Igor Nikonov).
- Реализована JIT-компиляция для ещё большего числа функций. Закрывает #73509. #88770 (Alexey Milovidov совместно с Taiyang Li).
- Если индекс пропуска данных, используемый в запросе
FINAL, построен по столбцу, входящему в первичный ключ, дополнительный этап проверки пересечения по первичному ключу с другими частями не требуется и больше не выполняется. Устраняет #85897. #93899 (Shankar Iyer). - Улучшены производительность и использование памяти при дробных
LIMITиOFFSET. #91167 (Ahmed Gouda). - Исправлено использование более быстрой логики произвольного чтения в префетчере ридера Parquet V3. Закрывает #90890. #91435 (Arsen Muk).
- Повышена производительность
icebergCluster. Закрывает #91462. #91537 (Yang Jiang). - Не выполнять фильтрацию по виртуальным столбцам для константных фильтров. #91588 (c-end).
- Снижено использование памяти при INSERT и слияниях с частями Wide в очень широких таблицах за счёт включения адаптивных буферов записи. Добавлена поддержка адаптивных буферов записи для зашифрованных дисков. #92250 (Azat Khuzhin).
- Повышена производительность полнотекстового поиска с текстовым индексом и токенизатором
sparseGramsза счёт сокращения числа токенов, по которым выполняется поиск в индексе. #93078 (Anton Popov). - Функция
isValidASCIIбыла оптимизирована для случаев с положительным результатом, то есть для входных значений, полностью состоящих из ASCII. #93347 (Robert Schulze). - Оптимизация read-in-order теперь распознаёт случаи, когда столбцы ORDER BY являются константами из-за условий WHERE, что позволяет эффективно читать данные в обратном порядке. Это полезно для многотенантных запросов, таких как
WHERE tenant='42' ORDER BY tenant, event_time DESC, которые теперь могут использовать InReverseOrder без необходимости полной сортировки.”. #94103 (matanper). - Добавлен специализированный класс AST для Enum, который хранит значения параметров в виде пар (string, integer) вместо дочерних элементов ASTLiteral для оптимизации потребления памяти. #94178 (Ilya Yatsishin).
- Распределённый анализ индексов на нескольких репликах. Полезно при использовании совместно используемого хранилища и очень больших объёмов данных в кластере. Это применимо к SharedMergeTree (ClickHouse Cloud) и может быть применимо к другим типам таблиц MergeTree с совместно используемым хранилищем. #86786 (Azat Khuzhin).
- Снижены накладные расходы на JOIN Runtime Filters за счет их отключения в следующих случаях: - в фильтре Блума установлено слишком много битов - на этапе выполнения отфильтровывается слишком мало строк. #91578 (Alexander Gololobov).
- Используйте буфер в памяти для входных данных коррелированных подзапросов, чтобы не вычислять их многократно. Часть #79890. #91205 (Dmitry Novik).
- Разрешить всем репликам при чтении с использованием параллельных реплик параллельно перехватывать осиротевшие диапазоны. Это улучшает балансировку нагрузки и снижает задержки на длинном хвосте. #91374 (zoomxi).
- Внешняя агрегация/сортировка/JOIN теперь учитывают настройку запроса
temporary_files_codecво всех контекстах. Исправлена проблема с отсутствующими profile events для grace hash join. #92388 (Vladimir Cherkasov). - Сделали более надёжным определение использования памяти запросом при сбросе на диск во время агрегации/сортировки. #92500 (Azat Khuzhin).
- Оценка общего числа строк и статистики NDV (числа различных значений) для столбцов ключа агрегации. #92812 (Alexander Gololobov).
- Оптимизировано сжатие списка postings с помощью simdcomp. #92871 (Peng Jian).
- Переработана обработка режима Ordered в S3Queue с использованием бакетов. Это также должно повысить производительность за счёт сокращения числа запросов к Keeper. #92889 (Kseniia Sumarokova).
- Функции
mapContainsKeyLikeиmapContainsValueLikeтеперь могут использовать текстовый индекс дляmapKeys()иmapValues()соответственно. #93049 (Michael Jarrett). - Снижено использование памяти в не-Linux-системах (включена немедленная очистка «грязных» страниц jemalloc). #93360 (Eduard Karacharov).
- Реализована принудительная очистка арен jemalloc, если отношение объёма грязных страниц к
max_server_memory_usageпревышаетmemory_worker_purge_dirty_pages_threshold_ratio. #93500 (Eduard Karacharov). - Снижено использование памяти для AST. #93601 (Nikolai Kochetov).
- В некоторых случаях мы замечали, что ClickHouse не соблюдает лимит памяти при чтении из таблицы. Это исправлено. #93715 (Nikita Mikhaylov).
- Расширения Keeper
CHECK_STATиTRY_REMOVEтеперь включены по умолчанию. #93886 (Mikhail Artemenko). - Разбор нижних и верхних границ имён файлов для позиционных удалений из записей manifest file в Iceberg для более точного выбора соответствующих файлов данных. #93980 (Daniil Ivanik).
- Добавлены ещё две настройки для управления максимальным количеством динамических подстолбцов в JSON-столбце. Первая — настройка MergeTree
merge_max_dynamic_subcolumns_in_compact_part(аналогично уже добавленнойmerge_max_dynamic_subcolumns_in_wide_part), которая ограничивает количество динамических подстолбцов, создаваемых при слиянии в Compact part. Вторая — настройка уровня запросаmax_dynamic_subcolumns_in_json_type_parsing, которая ограничивает количество динамических подстолбцов, создаваемых при разборе JSON-данных; она позволяет задавать этот лимит при вставке. #94184 (Pavel Kruglov). - В некоторых случаях немного оптимизировано укрупнение блоков для JSON-столбцов. #94247 (Pavel Kruglov).
- Уменьшен размер очередей пула потоков с учетом опыта эксплуатации в продакшне. Добавлена явная проверка потребления памяти перед чтением каких-либо данных из MergeTree. #94692 (Nikita Mikhaylov).
- Сделано так, чтобы при нехватке CPU планировщик отдавал предпочтение потоку MemoryWorker, поскольку это защищает процесс ClickHouse от критической угрозы. #94864 (Nikita Mikhaylov).
- Очистка грязных страниц jemalloc теперь выполняется в отдельном потоке, а не в основном потоке MemoryWorker. Если очистка выполняется медленно, это может задерживать обновление использования RSS, что может приводить к аварийному завершению процесса из-за нехватки памяти. Добавлен новый параметр конфигурации
memory_worker_purge_total_memory_threshold_ratio, чтобы запускать очистку грязных страниц в зависимости от доли общего использования памяти. #94902 (Antonio Andelic).
Улучшения
system.blob_storage_logтеперь поддерживается для Azure Blob Storage. #93105 (Alexey Milovidov).- Реализован
blob_storage_logдля Local и HDFS. Исправлена ошибка, из-за которойS3Queueиспользовал для записи вblob_storage_logне имя диска. Вblob_storage_logдобавлен столбецerror_code. Тестовый файл конфигурации разделён, чтобы упростить локальное тестирование. #93106 (Alexey Milovidov). clickhouse-clientиclickhouse-localбудут подсвечивать группы цифр (тысячи, миллионы и т. д.) внутри числовых литералов во время ввода. Это закрывает #93100. #93108 (Alexey Milovidov).- В
clickhouse-clientдобавлена поддержка аргументов командной строки с пробелами вокруг знака равенства. Закрывает #93077. #93174 (Cole Smith). - С
<interactive_history_legacy_keymap>true</interactive_history_legacy_keymap>CLI-клиент теперь может, как и раньше, использовать Ctrl-R для обычного поиска, а Ctrl-T — для нечёткого поиска. #87785 (Larry Snizek). - Оператор очистки кэша
SYSTEM DROP [...] CACHEсоздавал ложное впечатление, что этот оператор отключает кэш. ClickHouse теперь поддерживает операторSYSTEM CLEAR [...] CACHE, который звучит понятнее. Старый синтаксис по-прежнему доступен. #93727 (Pranav Tiwari). - Поддержка составного первичного ключа в
EmbeddedRocksDB. Закрывает #32819. #33917 (usurai). - Теперь можно использовать неконстантный IN со скалярами (запросы вида
val1 NOT IN if(cond, val2, val3)). #93495 (Yarik Briukhovetskyi). - Предотвращена передача заголовков
x-amz-server-side-encryptionв S3-запросахHeadObject,UploadPartиCompleteMultipartUpload, поскольку они не поддерживаются. #64577 (Francisco J. Jurado Moreno). - Отслеживание hive-партиционирования в режиме ordered в S3Queue. Закрывает #71161. #81040 (Anton Ivashkin).
- Оптимизировано резервирование места в файловом кэше.
FileCache::collectCandidatesForEvictionтеперь будет выполняться без уникальной блокировки. #82764 (Kseniia Sumarokova). - Добавлена поддержка составной стратегии ротации (размер + время) для журнала сервера. #87620 (Jianmei Zhang).
- CLI-клиент теперь может использовать
<warnings>false</warnings>вместо параметра командной строки--no-warnings. #87783 (Larry Snizek). - Добавлена поддержка агрегатной функции
avg, принимающей в качестве аргументов значения типов Date, DateTime и Time. Закрывает #82267. #87845 (Yarik Briukhovetskyi). - Оптимизация
use_join_disjunctions_push_downпо умолчанию включена. #89313 (Alexey Milovidov). - Добавлена поддержка большего числа движков таблиц и типов источников данных в коррелированных подзапросах. Закрывает #80775. #90175 (Dmitry Novik).
- Если схема параметризованного представления явно задана, она отображается. Закрывает #88875, #81385. #90220 (Grigorii Sokolik).
- Корректная обработка пропуска в записях журнала Keeper, если они находятся до последнего зафиксированного индекса. #90403 (Antonio Andelic).
- Улучшена работа настройки
min_free_disk_bytes_to_perform_insertс томами JBOD. #90878 (Aleksandr Musorin). - Добавлена возможность указывать настройку
storage_class_nameв именованных коллекциях для движка таблицыS3и табличной функцииs3. #91926 (János Benjamin Antal). - Добавлена поддержка вставки в auxiliary ZooKeeper через
system.zookeeper. #92092 (RinChanNOW). - Добавлены новые метрики для Keeper: события профиля
KeeperChangelogWrittenBytes,KeeperChangelogFileSyncMicroseconds,KeeperSnapshotWrittenBytesиKeeperSnapshotFileSyncMicroseconds, а также гистограммные метрикиKeeperBatchSizeElementsиKeeperBatchSizeBytes. #92149 (Miсhael Stetsyuk). - Добавлена новая настройка
trace_profile_events_list, которая ограничивает трассировку с помощьюtrace_profile_eventуказанным списком имён событий. Это позволяет точнее собирать данные при высоких рабочих нагрузках. #92298 (Alexey Milovidov). - Добавлена поддержка SYSTEM NOTIFY FAILPOINT для приостанавливаемых failpoint. — Добавлена поддержка SYSTEM WAIT FAILPOINT fp PAUSE/RESUME. #92368 (Shaohua Wang).
- В
system.data_skipping_indicesдобавлен столбецcreation(неявный/явный). #92378 (Raúl Marín). - Разрешена передача описания столбцов dyn-таблиц YTsaurus в источник словаря. #92391 (MikhailBurdukov).
- В #63985 мы добавили возможность указывать все параметры, необходимые для настройки TLS, отдельно для каждого порта (см. composable protocols), так что теперь не нужно полагаться на глобальную конфигурацию TLS. Однако реализация по-прежнему неявно требует наличия глобального раздела конфигурации
openSSL.server, что конфликтует со сценариями, где для разных портов нужны разные настройки TLS. Например, в развертываниях keeper-in-server нам нужны отдельные конфигурации TLS для взаимодействия между узлами Keeper и для подключений клиента ClickHouse. #92457 (Miсhael Stetsyuk). - Добавлена новая настройка
input_format_binary_max_type_complexity, которая ограничивает общее число узлов типов, декодируемых в бинарном формате, чтобы предотвратить передачу вредоносных полезных нагрузок. #92519 (Raufs Dunamalijevs). - В
system.background_schedule_pool{,_log}теперь отражаются выполняющиеся задачи. Добавлена документация. #92587 (Azat Khuzhin). - Выполнять текущий запрос при поиске по Ctrl+R в клиенте, если в истории не найдено совпадений. #92749 (Azat Khuzhin).
- Добавлена поддержка
EXPLAIN indices = 1в качестве алиаса дляEXPLAIN indexes = 1. Закрывает #92483. #92774 (Pranav Tiwari). - Ридер Parquet теперь позволяет читать столбцы Tuple или Map в формате JSON:
select x from file(f.parquet, auto, 'x JSON')работает, даже если тип столбцаxвf.parquet— Tuple или Map. #92864 (Michael Kolupaev). - Поддержка пустых Tuple в ридере Parquet. #92868 (Michael Kolupaev).
- Переход к копированию с возможностью чтения и записи для Azure Blob Storage, если нативное копирование завершается ошибкой BadRequest (например, из-за недопустимого списка блоков). Ранее это выполнялось только для ошибки Unauthorized, которая наблюдалась при копировании blob между разными аккаунтами хранилища. Однако иногда также возникает ошибка “The specified block list is invalid”. Поэтому теперь условие обновлено так, чтобы переходить к чтению & записи при любых сбоях нативного копирования. #92888 (Smita Kulkarni).
- Исправлено ограничение частоты запросов к конечной точке метаданных EC2 при выполнении большого числа параллельных S3-запросов с учетными данными профиля экземпляра EC2. Ранее каждый запрос создавал собственный
AWSInstanceProfileCredentialsProvider, из-за чего к сервису метаданных EC2 отправлялись параллельные запросы, что могло приводить к тайм-аутам и ошибкамHTTP response code: 403. Теперь поставщик учетных данных кэшируется и используется всеми запросами совместно. #92891 (Sav). - Переработана настройка
insert_select_deduplicate, чтобы сохранить обратную совместимость. #92951 (Sema Checherinda). - Логировать фоновые задачи, которые выполняются медленнее среднего (
background_schedule_pool_log.duration_threshold_milliseconds=30), чтобы избежать избыточного логирования задач. #92965 (Azat Khuzhin). - В предыдущих версиях некоторые имена функций C++ в
system.trace_logиsystem.symbolsотображались некорректно («искажёнными»), а функцияdemangleплохо с ними справлялась. Закрывает #93074. #93075 (Alexey Milovidov). - Добавлена настройка резервного копирования
backup_data_from_refreshable_materialized_view_targets, позволяющая не включать в резервную копию refreshable materialized view. RMV со стратегией обновления APPEND всегда резервируются. #93076 (Julia Kartseva). #93658 (Julia Kartseva) - Использовать минимальную отладочную информацию вместо её полного отсутствия для тяжёлых единиц трансляции, таких как функции. #93079 (Alexey Milovidov).
- Добавлена поддержка совместимости MinIO в AWS S3 C++ SDK благодаря реализации сопоставления кодов ошибок для специфических ошибок MinIO. Это изменение позволяет ClickHouse корректно обрабатывать ошибки сервера MinIO и выполнять повторные попытки при использовании развертываний MinIO вместо AWS S3, повышая надежность для пользователей, использующих Объектное хранилище в самоуправляемых кластерах MinIO. #93082 (XiaoBinMu).
- Запись символизированных профилей jemalloc (без необходимости использовать бинарный файл при создании профиля кучи). #93099 (Azat Khuzhin).
- Восстановлена работа инструмента
clickhouse git-import— ранее он не работал с большими и некорректными коммитами. См. https://presentations.clickhouse.com/2020-matemarketing/. #93202 (Alexey Milovidov). - Не показывать пароли из URL-хранилища в журнале запросов. #93245 (Konstantin Vedernikov).
- Добавлена поддержка типа
GeometryдляflipCoordinates. #93303 (Bharat Nallan). - Улучшен UX команды SYSTEM INSTRUMENT ADD/REMOVE: для имён функций теперь используются строковые литералы String, исправлены все соответствующие функции, а также разрешено использовать function_name в
REMOVE. #93345 (Pablo Marcos). - Добавлена новая настройка
materialize_statistics_on_merge, которая включает или отключает материализацию статистики при слиянии. Значение по умолчанию —1. #93379 (Han Fei). - ClickHouse теперь может разбирать
SELECTв запросахDESCRIBE SELECTбез круглых скобок. Закрывает #58382. #93429 (Yarik Briukhovetskyi). - Добавлена рандомизация проверок корректности кэша с заданной вероятностью. #93439 (Kseniia Sumarokova).
- Добавлена настройка
type_json_allow_duplicated_key_with_literal_and_nested_object, позволяющая использовать дублирующиеся пути в JSON, где один является литералом, а другой — вложенным объектом, например{"a" : 42, "a" : {"b" : 42}}. Некоторые данные могли быть созданы до добавления этого ограничения на дублирующиеся пути в https://github.com/ClickHouse/ClickHouse/pull/79317, и дальнейшие манипуляции с такими данными теперь могут приводить к ошибкам. С этой настройкой такие старые данные по-прежнему можно использовать без ошибок. #93604 (Pavel Kruglov). - Не выводить значения простых типов в Pretty JSON на отдельных строках. #93836 (Pavel Kruglov).
- При большом количестве операторов
alter table ... modify setting ...может не удаваться получить блокировку за 5 секунд. Лучше возвращатьtimeout, а неlogical error. #93856 (Han Fei). - Предотвращён избыточный вывод при синтаксической ошибке. До этого изменения выводился весь SQL-скрипт, который мог содержать множество запросов. #93876 (Alexey Milovidov).
- Реализован корректный расчёт размера в байтах для запроса
checkсо статистикой в Keeper. #93907 (Mikhail Artemenko). - Добавлен параметр
use_hash_table_stats_for_join_reordering, который определяет, использовать ли статистику размера хеш-таблицы во время выполнения для изменения порядка JOIN. Этот параметр по умолчанию включен, что сохраняет существующее поведениеcollect_hash_table_stats_during_joins. #93912 (Vladimir Cherkasov). - Теперь пользователи могут частично просматривать вложенные глобальные настройки сервера в таблице
system.server_settings(например,logger.level). Это применимо только к настройкам с фиксированной структурой (без списков, перечислений, повторяющихся элементов и т. д.). #94001 (Hechem Selmi). QBitтеперь можно проверять на равенство. #94078 (Raufs Dunamalijevs).- Когда Keeper обнаруживает поврежденный снимок или несогласованные журналы изменений, он генерирует исключение вместо того, чтобы требовать ручного прерывания или автоматически очищать файлы. Это должно сделать поведение Keeper более безопасным, поскольку оно теперь опирается на ручное вмешательство. #94168 (Antonio Andelic).
- Исправлена ситуация, когда при сбое
CREATE TABLEмогли оставаться артефакты. #94174 (Azat Khuzhin). - Исправлена ошибка доступа к неинициализированной памяти (ошибка в OpenSSL) при использовании защищённого паролем TLS-ключа. #94182 (Konstantin Bogdanov).
- Обновлён chdig до v26.1.1. #94290 (Azat Khuzhin).
- Добавлена поддержка более общего партиционирования для режима ordered в S3Queue. #94321 (Bharat Nallan).
- Добавлен алиас
use_statisticsдля настройкиallow_statistics_optimize. Это лучше соответствует существующим настройкамuse_primary_keyиuse_skip_indexes. #94366 (Robert Schulze). - Включена настройка
input_format_numbers_enum_on_conversion_errorдля проверки существования элемента при преобразовании чисел в Enum. #94384 (Elmi Ahmadov). - В режиме
orderedдля S3(Azure)Queue очистка сбойных узлов теперь выполняется с учётом лимитов отслеживания (раньше это делалось только в режимеunordered— и для сбойных, и для обработанных узлов; теперь это будет выполняться и дляordered, но только для сбойных узлов). #94412 (Kseniia Sumarokova). - В
clickhouse-localдля пользователяdefaultвключено управление доступом. У пользователяdefaultвclickhouse-localотсутствовала привилегия access_management, из-за чего операции вродеDROP ROW POLICY IF EXISTSзавершались ошибкойACCESS_DENIED, хотя у этого пользователя не должно быть ограничений. #94501 (Alexey Milovidov). - Добавлена поддержка named collection для словарей и таблиц YTsaurus. #94582 (MikhailBurdukov).
- Добавлена поддержка именованных коллекций, определяемых в SQL, в BACKUP/RESTORE для S3 и Azure Blob Storage. Закрывает #94604. #94605 (Pablo Marcos).
- Добавлена поддержка бакетизации на основе ключа партиционирования для S3Queue в режиме ordered. #94698 (Bharat Nallan).
- Добавлена асинхронная метрика, показывающая время выполнения самого долгого слияния. #94825 (Raúl Marín).
- Добавлена проверка принадлежности файла перед применением позиционного удаления с использованием IcebergBitmapPositionDeleteTransform. #94897 (Yang Jiang).
- Теперь
view_duration_msпоказывает время, в течение которого группа была активна, а не суммарную длительность потоков в ней. #94966 (Sema Checherinda). - Снято ограничение на максимальное количество поисковых токенов в функциях
hasAnyTokensиhasAllTokens, которое ранее составляло 64. Пример:SELECT count() FROM table WHERE hasAllTokens(text, ['token_1', 'token_2', [...], 'token_65']]);Этот запрос приводил бы к ошибкеBAD_ARGUMENTS, поскольку содержит 65 поисковых токенов. В этом PR ограничение полностью снято, и тот же запрос будет выполняться без ошибки. #95152 (Elmi Ahmadov). - Добавлена настройка
input_format_numbers_enum_on_conversion_errorдля преобразования чисел в Enum с проверкой наличия элемента. Закрывает: #56144. #56240 (Nikolay Degterinsky). - Ресурсы парсера формата теперь совместно используются при чтении data file и position delete file в таблицах Iceberg, что позволяет сократить число выделений памяти. #94701 (Yang Jiang).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Исправлена ошибка, из-за которой в обработчиках предопределённых запросов пробельные символы в конце интерпретировались как данные при вставке. #83604 (Fabian Ponce).
- Исправлена ошибка INCOMPATIBLE_TYPE_OF_JOIN в хранилище Join при применении оптимизации преобразования outer join в inner join. Исправляет #80794. #84292 (Vladimir Cherkasov).
- Исправлено исключение “Invalid number of rows in Chunk” при использовании hash JOIN с включенным
allow_experimental_join_right_table_sorting. #86440 (yanglongwei). - Теперь в MergeTree имена файлов всегда заменяются хешами, если файловая система нечувствительна к регистру. Ранее в системах с нечувствительной к регистру файловой системой (например, macOS) это могло приводить к повреждению данных, если несколько имён столбцов/подстолбцов различались только регистром. #86559 (Pavel Kruglov).
- Добавлена полная проверка разрешений на этапе создания для запроса, лежащего в основе materialized view. #89180 (pufit).
- Исправлен сбой в функции
icebergHashпри константном аргументе. #90335 (Michael Kolupaev). - Исправлена логическая ошибка, из-за которой мутация вне транзакции изменяла части в активной транзакции, которая в итоге откатывалась. #90469 (Shaohua Wang).
system.warningsтеперь корректно обновляется после преобразования обычной базы данных в базу данных atomic. #90473 (sdk2).- Исправлено срабатывание assertion при чтении из файла Parquet, если часть выражения prewhere используется в другой части запроса. #90635 (Max Kainov).
- Исправлен сбой в одноузловом кластере при чтении из Iceberg в режиме split-by-buckets. Закрывает #90913. #91553 (Konstantin Vedernikov).
- Исправлена возможная логическая ошибка в движке Log при чтении подстолбцов. Закрывает #91710. #91711 (Pavel Kruglov).
- Исправлена логическая ошибка: ‘Хранилище не поддерживает транзакции’ при ATTACH AS REPLICATED. #91772 (Shaohua Wang).
- Исправлена некорректная работа runtime-фильтров, когда у LEFT ANTI JOIN есть дополнительное постусловие. #91824 (Alexander Gololobov).
- Исправляет ошибку в null-safe сравнении с типом Nothing. Закрывает #91834. Закрывает #84870. Закрывает #91821. #91884 (Yarik Briukhovetskyi).
- Исправлены ошибки декодирования DELTA_BYTE_ARRAY в нативном ридере Parquet, которые затрагивали строковые данные с высокой степенью повторяемости. #91929 (Daniel Muino).
- Кэшировать схему в глоб-шаблонах только для того файла, по которому она была определена, а не для всех файлов при определении схемы. Закрывает #91745. #92006 (Pavel Kruglov).
- Исправлена ошибка
Couldn't pack tar archive: Failed to write all bytes, вызванная некорректным заголовком с размером записи в архиве. Исправляет #89075. #92122 (Julia Kartseva). - Поток запроса в insert select теперь освобождается, чтобы предотвратить закрытие HTTP-соединения. #92175 (Sema Checherinda).
- Исправлена логическая ошибка в запросах с несколькими JOIN, использующих предложение
USINGиjoin_use_nulls. #92251 (Vladimir Cherkasov). - Исправлена логическая ошибка при изменении порядка JOIN с join_use_nulls, закрыт https://github.com/clickhouse/clickhouse/issues/90795. #92289 (Vladimir Cherkasov).
- Исправлено неконсистентное форматирование AST для arrayElement с отрицательным литералом. Закрывает #92288 Закрывает #92212 Закрывает #91832 Закрывает #91789 Закрывает #91735 Закрывает #88495 Закрывает #92386. #92293 (Pavel Kruglov).
- Исправлен возможный сбой при использовании настройки
join_on_disk_max_files_to_merge. #92335 (Bharat Nallan). - Связанный issue #https://github.com/ClickHouse/support-escalation/issues/6365. #92339 (Tuan Pham Anh).
- Исправлено отсутствие проверки прав доступа в
SYSTEM SYNC FILE CACHE. Закрывает #92101. #92372 (Kseniia Sumarokova). - Исправлен проход
count_distinct_optimizationдля оконных функций и нескольких аргументов. #92376 (Raúl Marín). - Исправлена ошибка “Невозможно записать в финализированный буфер”, возникавшая при использовании некоторых агрегатных функций с оконными функциями. Закрывает #91415. #92395 (Jimmy Aguilar Mena).
- Исправлена логическая ошибка в
CREATE TABLE ... AS urlCluster()и движке базы данныхReplicated. Исправление закрывает #92216. #92418 (Kseniia Sumarokova). - Наследовать настройки информации о сериализации исходной части во время мутации в MergeTree. Это исправляет возможный некорректный результат запроса к мутированной части после изменений в сериализации типов данных. #92419 (Pavel Kruglov).
- Исправлен возможный конфликт между столбцом и подстолбцом с одинаковым именем, приводивший к использованию некорректной сериализации и ошибкам запросов. Закрывает #90219. Закрывает #85161. #92453 (Pavel Kruglov).
- Исправлены
LOGICAL_ERROR, вызванные нежелательным изменением плана запроса при преобразовании OUTER JOIN в INNER JOIN. Также ослаблены требования к оптимизации, чтобы её можно было применять в случаях, когда к ключам агрегации в JOIN применяются инъективные функции. #92503 (János Benjamin Antal). - Исправлена возможная ошибка
SIZES_OF_COLUMNS_DOESNT_MATCHпри сортировке пустого столбца типа tuple. Закрывает #92422. #92520 (Pavel Kruglov). - Добавлена проверка несовместимых типизированных путей в типе JSON. Закрывает #91577. #92539 (Pavel Kruglov).
- Исправлена взаимная блокировка в
SHOW CREATE DATABASEдля базы данных Backup. #92541 (Azat Khuzhin). - Использовать корректный код ошибки при проверке индекса hypothesis. #92559 (Raúl Marín).
- Исправлено разрешение подстолбцов типа Dynamic в псевдонимах столбцов в анализаторе. Ранее подстолбец типа Dynamic в псевдониме столбца оборачивался в
getSubcolumnи в некоторых случаях вообще не разрешался. Закрывает #91434. #92583 (Pavel Kruglov). - Предотвращён сбой в
tokens()приNULLво втором аргументе. #92586 (Raúl Marín). - Исправлено потенциальное падение, вызванное изменением на месте базовых константных столбцов PREWHERE. Это могло произойти при уменьшении размера столбца (
IColumn::shrinkToFit) или фильтрации (IColumn::filter), которые могли параллельно выполняться в нескольких потоках. #92588 (Arsen Muk). - Создание и материализация текстовых индексов для таблиц, содержащих крупные части (более 4 294 967 295 строк), временно отключены. Это ограничение предотвращает некорректные результаты запросов, поскольку текущая реализация индексов пока не поддерживает части такого размера. #92644 (Anton Popov).
- Исправляет логическую ошибку
Too large size (A) passed to allocatorпри выполнении операций JOIN. Закрывает #92043. #92667 (Yarik Briukhovetskyi). - Исправлена ошибка, из-за которой индексы
ngrambf_v1с длиной n-граммы (1-й параметр) > 8 приводили к исключению. #92672 (Robert Schulze). - Исправлено неперехваченное исключение при фоновой перезагрузке named collections при использовании хранилища ZooKeeper. Закрывает https://github.com/ClickHouse/clickhouse-private/issues/44180. #92717 (Kseniia Sumarokova).
- Исправляет некорректную логику проверки grant с подстановочными символами. Предыдущая попытка https://github.com/ClickHouse/ClickHouse/pull/90928 устраняла критическую уязвимость, но в итоге оказалась слишком строгой, из-за чего некоторые операторы
GRANTс подстановочными символами завершались ошибкой из-за несвязанных отзывов привилегий. #92725 (pufit). - Исправлена ошибка в логике пропуска данных: при использовании
not match(...)вWHEREвозвращались некорректные результаты. Закрывает #92492. #92726 (Nihal Z. Miaji). - Не пытайтесь удалять временные каталоги при запуске, если таблица семейства MergeTree создана на диске в режиме только для чтения. #92748 (Alexey Milovidov).
- Исправлена ошибка “Невозможно добавить действие в пустую ExpressionActionsChain” для ALTER TABLE REWRITE PARTS (v2). #92754 (Azat Khuzhin).
- Предотвращён сбой при чтении из разорванного
Connection. #92807 (Raufs Dunamalijevs). - Исправлена логическая ошибка
Failed to set file processing within 100 retriesв хранилищеS3Queueв режимеOrdered. Теперь вместо неё выводится предупреждение. Эта ошибка могла возникать в версиях до 25.10, если истекал сеанс Keeper, однако в версиях 25.10+ она по-прежнему будет возникать лишь как предупреждение, поскольку теоретически её всё ещё можно получить при высоком параллелизме обработки в режимеOrdered. #92814 (Kseniia Sumarokova). - Ранее некоторые запросы, использовавшие сегментирование по PK при ложном условии, завершались с ошибкой. Теперь это исправлено. Необходимо для https://github.com/ClickHouse/ClickHouse/pull/89313. #92815 (Yarik Briukhovetskyi).
- Исправлен расчёт несжатых размеров текстовых индексов в таблице
system.parts. #92832 (Anton Popov). - Исправлено использование первичного индекса в легковесных обновлениях с оператором
IN, содержащим подзапросы в предикатеWHERE. #92838 (Anton Popov). - Исправлено создание подсказки типа для path ‘skip’ в JSON. Исправление закрывает #92731. #92842 (Pavel Kruglov).
- В движке таблицы S3 не следует кэшировать ключ партиционирования, если используются недетерминированные функции. #92844 (Miсhael Stetsyuk).
- Исправлена возможная ошибка
FILE_DOESNT_EXISTпосле выполнения мутации разреженного столбца сratio_of_defaults_for_sparse_serialization=0.0. Закрыт #92633. #92860 (Pavel Kruglov). - Исправлено определение схемы Parquet в старом ридере Parquet (по умолчанию не используется), когда JSON-столбец идет после столбца Tuple. Исправлена ошибка в старом ридере Parquet (по умолчанию не используется), из-за которой он завершался с ошибкой на пустых Tuple. #92867 (Michael Kolupaev).
- Исправлена логическая ошибка при использовании нескольких JOIN с постоянным условием и
join_use_nulls, закрыт #92640. #92892 (Vladimir Cherkasov). - Исправлена возможная ошибка
NOT_FOUND_COLUMN_IN_BLOCKпри вставке в таблицу с подстолбцом в выражении партиционирования. Закрывает #93210. Закрывает #83406. #92905 (Pavel Kruglov). - Исправлена ошибка
NO_SUCH_COLUMN_IN_TABLEв движке Merge при работе с таблицами, использующими псевдонимы. Закрывает #88665. #92910 (Pavel Kruglov). - Исправлен случай, когда NULL != NULL, для full_sorting_join на столбце LowCardinality(Nullable(T)). #92924 (Vladimir Cherkasov).
- Исправлено несколько сбоев, возникавших при слиянии текстовых индексов в таблицах
MergeTree. #92925 (Anton Popov). - При необходимости во время TTL-агрегации восстанавливаются обертки LowCardinality для результатов выражений SET, чтобы избежать исключений при оптимизации таблицы. #92971 (Seva Potapov).
- Исправлена логическая ошибка при анализе индекса, возникавшая при использовании пустого массива в функции
has. Закрывает #92906. #92995 (Nihal Z. Miaji). - Исправлено возможное зависание при завершении работы фонового пула планировщика (может приводить к зависанию сервера при остановке). #93008 (Azat Khuzhin).
- Исправлена возможная ошибка FILE_DOESNT_EXIST после мутации разреженного столбца при изменении значения
ratio_of_defaults_for_sparse_serializationна1.0с помощью ALTER. #93016 (Pavel Kruglov). - Исправлена ошибка в логике пропуска данных, из-за которой использование
not materialize(...)илиnot CAST(...)в WHERE приводило к некорректным результатам. Закрывает #88536. #93017 (Nihal Z. Miaji). - Исправлено возможное использование устаревших частей из-за TOCTOU-гонки для общих частей. #93022 (Azat Khuzhin).
- Исправлен crash при десериализации некорректного aggregate state
groupConcatсо смещениями, выходящими за допустимые границы. #93028 (Raufs Dunamalijevs). - Исправлено состояние, при котором после предварительной отмены распределённых запросов соединение оставалось в неисправном состоянии. #93029 (Azat Khuzhin).
- Исправлен результат JOIN, когда ключ JOIN с правой стороны — разреженный столбец. Это закрывает #92920. Мне удалось воспроизвести ошибку только с
set compatibility='23.3'. Не уверен, нужно ли делать бэкпорт. #93038 (Amos Bird). - Устранена возможная ошибка
Cannot finalize buffer after cancellationвestimateCompressionRatio(). Исправлено: #87380. #93068 (Azat Khuzhin). - Исправлено слияние текстовых индексов, построенных на основе сложных выражений (таких как
concat(col1, col2)). #93073 (Anton Popov). - Исправлено применение проекции, если фильтр содержит подстолбцы. Закрывает #92882. #93141 (Pavel Kruglov).
- Исправлена логическая ошибка, которая в некоторых случаях возникала при добавлении JOIN runtime-фильтров в план запроса. Причиной было некорректное возвращение дублированных константных столбцов с одной из сторон JOIN. #93144 (Alexander Gololobov).
- Специальная функция
__applyFilter, используемая JOIN Runtime Filters, в некоторых допустимых случаях возвращала ILLEGAL_TYPE_OF_ARGUMENT. #93187 (Alexander Gololobov). - Предотвращено схлопывание разных интерполированных столбцов в один и тот же столбец блока, когда такие столбцы фактически являются псевдонимами одного и того же столбца. #93197 (Yakov Olkhovskiy).
- Не добавлять runtime filter при выполнении JOIN с уже заполненной правой таблицей. #93211 (Alexander Gololobov).
- Исправлена очистка постоянных наблюдений в Keeper после завершения неактивного сеанса. Закрывает #92480. #93213 (Konstantin Vedernikov).
- Исправлен ORDER BY для кортежа в Iceberg. Закрывает #92977. #93225 (Konstantin Vedernikov).
- Исправлена ошибка, связанная с настройкой S3Queue
s3queue_migrate_old_metadata_to_buckets. Закрывает #93392, #93196, #81739. #93232 (Kseniia Sumarokova). - Удаляются неиспользуемые столбцы при перестроении проекции во время слияния. Это снижает использование памяти и уменьшает число временных частей. #93233 (Nikolai Kochetov).
- Исправлено удаление неиспользуемых столбцов из подзапросов при наличии скалярного коррелированного подзапроса. До этого исправления столбец мог быть удалён, если использовался только в коррелированном подзапросе, из-за чего запрос завершался ошибкой
NOT_FOUND_COLUMN_IN_BLOCK. #93273 (Dmitry Novik). - Исправлено возможное отсутствие подстолбца в MV при изменении исходной таблицы. Закрывает #93231. #93276 (Pavel Kruglov).
- Исправлено планирование запросов для движка таблицы
Mergeпри использовании анализатора, из-за которого при слиянии локальных и удалённых/Distributed таблиц дляhostName()могла возникать ошибка ILLEGAL_COLUMN. Закрывает #92059. #93286 (Jinlin). - Исправлен случай, при котором
NOT INс неконстантными аргументами в виде массивов возвращал неверное значение + добавлена поддержка неконстантных функций Array. Закрывает #14980. #93314 (Yarik Briukhovetskyi). - Исправлена ошибка
Not found columnв оптимизацииuse_top_k_dynamic_filtering. Исправление #93186. #93316 (Nikolai Kochetov). - Исправлена проблема с пересборкой текстовых индексов, созданных поверх подстолбцов. #93326 (Anton Popov).
- Исправлена обработка пустого массива при передаче его вторым аргументом в функциях
hasAllTokensиhasAnyTokens. #93328 (Anton Popov). - Исправлена логическая ошибка при использовании runtime filters в запросе с totals для таблицы в правой части. #93330 (Alexander Gololobov).
- Сервер больше не падает, если функция
tokensвызывается с неконстантными параметрами токенизатора (2-м, 3-м и 4-м параметрами), например,SELECT tokens(NULL, 1, materialize(1)). #93383 (Robert Schulze). - Исправлена уязвимость, связанная с переполнением целого числа при десериализации состояния
groupConcat, которая могла приводить к нарушениям безопасности памяти при использовании специально сформированных состояний агрегатной функции. #93426 (Raufs Dunamalijevs). - Исправлен анализ текстового индекса для столбцов типа Array в случаях, когда индекс не содержит токенов (все массивы пусты или все токены пропускаются токенизатором). #93457 (Anton Popov).
- Позволяет избежать oauth-входа в клиенте ClickHouse, если имя пользователя и пароль указаны в строке подключения. #93459 (Krishna Mannem).
- Исправлена поддержка предоставляемых учетных данных Azure ADLS Gen2 в DataLakeCatalog: разбор ключей
adls.sas-token.*из REST-каталогов Iceberg и исправлен разбор URL ABFSS. #93477 (Karun Anantharaman). - Исправлена поддержка GLOBAL IN в анализаторе (ранее множество заново создавалось на удалённом узле). #93507 (Azat Khuzhin).
- Исправлено извлечение подстолбца при десериализации непосредственно в разреженные столбцы. #93512 (Pavel Kruglov).
- Исправлена ошибка прямого чтения из текстового индекса при дублирующихся поисковых запросах. #93516 (Anton Popov).
- Исправление ошибки NOT_FOUND_COLUMN_IN_BLOCK при включенном runtime filter, если в таблицах, участвующих в JOIN, один и тот же столбец возвращается несколько раз (например, SELECT a, a, a FROM t). #93526 (Alexander Gololobov).
- Исправлена ошибка, из-за которой clickhouse-client при подключении по ssh дважды запрашивал пароль. #93547 (Isak Ellmer).
- Убедитесь, что ZooKeeper корректно завершается при остановке (исправлено возможное зависание при остановке в крайне редких случаях). #93602 (Azat Khuzhin).
- Исправлена LOGICAL_ERROR при восстановлении ReplicatedMergeTree из-за состояния гонки при дедупликации. #93612 (Pablo Marcos).
- Исправлена работа с разреженным столбцом при обновлении TTL во время прямой десериализации в разреженные столбцы в некоторых входных форматах. Это устраняет возможную логическую ошибку
Unexpected type of result TTL column. #93619 (Pavel Kruglov). - Исправлены функции работы с индексом H3, которые иногда аварийно завершались или зависали при вызове с недопустимыми входными данными. #93657 (Michael Kolupaev).
- Использование индекса
ngram_bfдля данных в кодировке не UTF-8 приводило к чтению неинициализированной памяти, значения из которой могли попасть в результирующую структуру индекса. Закрывает #92576. #93663 (Alexey Milovidov). - Проверка соответствия размера распакованного буфера ожидаемому значению. #93690 (Raúl Marín).
- Предотвращена возможность получать список столбцов таблицы через движок таблицы
mergeбез проверки разрешенияSHOW COLUMNS. #93695 (János Benjamin Antal). - Исправлена материализация индексов пропуска данных, созданных на основе подстолбцов. #93708 (Anton Popov).
- Мы сохраняем shared pointers на хранилища в
QueryPipeline::resources::storage_holders, чтобы объектыIStorageне уничтожались, пока существуетPipelineExecutor. #93746 (Miсhael Stetsyuk). - Исправлено подключение существующих БД Replicated, если межсерверный хост менялся после перезапуска. #93779 (Tuan Pham Anh).
- Исправлен assert
!read_until_positionвReadBufferFromS3, возникавший при включенном кэше. #93809 (Kseniia Sumarokova). - Исправлена логическая ошибка в редком случае, когда пустой кортеж используется со столбцом типа
Map. Закрывает #93784. #93814 (Nihal Z. Miaji). - Исправлено повреждение
_part_offset, возникавшее при перестроении проекций во время слияний, а также оптимизирована обработка проекций за счёт устранения лишнего чтения столбца_part_offsetи пропуска ненужных столбцов при вычислении проекций. Это продолжает оптимизации, начатые в #93233. #93827 (Amos Bird). - Убрана обработка ‘Bad version’. #93843 (Anton Ivashkin).
- Исправлена проблема, из-за которой
optimize_inverse_dictionary_lookupне работал с распределённым запросом, когда ключ имеет знаковый целочисленный тип. Закрывает #93259. #93848 (Nihal Z. Miaji). - Исправлена проблема, из-за которой
lag/leadне работали с распределённым запросомremote(). Закрывает #90014. #93858 (Nihal Z. Miaji). - Исправлена ошибка диспетчеризации системного инструмента. #93937 (Pablo Marcos).
- В https://github.com/ClickHouse/ClickHouse/pull/89173 мы добавили дополнительное поле в структуру, которую
TraceSenderотправляет через внутренний канал. Однако размер буфера не был обновлён (здесь), поэтому в буфер записывается больше данных, чем допускаетbuffer_size, что приводит к нескольким сбросам. А посколькуTraceSender::sendвызывается из разных потоков, сбросы из разных потоков могут чередоваться, нарушая инвариант, на который полагается принимающая сторона (TraceCollector). #93966 (Miсhael Stetsyuk). - Исправлено приведение типов к супертипу при выполнении операции JOIN для хранилища
Joinс предложениемUSING. Исправляет #91672. Исправляет #78572. #94000 (Dmitry Novik). - Исправлена ошибка, из-за которой FilterStep добавлялся некорректно при применении runtime filter для JOIN к таблице Merge. #94021 (Alexander Gololobov).
- Запрос
SELECT, содержащий предикат по нескольким столбцам с индексами пропуска данных bloom filter, при наличии условийORиNOTмог возвращать некорректные результаты. Теперь это исправлено. #94026 (Shankar Iyer). - Исправлена операция CLEAR для столбца с зависимыми индексами. #94057 (Raúl Marín).
- Исправлено использование неинициализированного значения в
ReadWriteBufferFromHTTP. #94058 (Alexey Milovidov). - Исправлена некорректная проверка типизированных путей в JSON. Эта проверка была добавлена в https://github.com/ClickHouse/ClickHouse/pull/92842 и может вызывать ошибку при запуске существующих таблиц. #94070 (Pavel Kruglov).
- Исправлен crash при анализе filter в присутствии OUTER JOIN. Исправляет #90979. #94080 (Dmitry Novik).
- Исправлена точность
uniqThetaпри параллельном использовании ключей агрегации UInt8 (max_threads> 1 — по умолчанию). #94095 (Azat Khuzhin). - Исправлен сбой, вызванный исключением, возникшим при вызове
socket.setBlocking(true)внутриSCOPE_EXIT. #94100 (Miсhael Stetsyuk). - Устранена потеря данных, возникавшая, когда
DROP PARTITIONудалял части, созданные более поздними записями журнала в ReplicatedMergeTree. #94123 (Tuan Pham Anh). - Исправлена ошибка в ридере Parquet v3 при обработке массивов, пересекающих границы страниц. Это происходит, например, с файлами, записанными Arrow без включённой статистики страниц или индекса страниц. Затрагивает только столбцы типа Array. Вероятный симптом — примерно один массив на каждый ~1 МБ данных оказывается усечённым. До этого исправления в качестве обходного решения используйте следующую настройку:
input_format_parquet_use_native_reader_v3 = 0. #94125 (Michael Kolupaev). - Исправлено избыточное количество наблюдений в ReplicatedMergeTree при ожидании записи в журнале. #94133 (Azat Khuzhin).
- Функции
arrayShuffle,arrayPartialShuffleиarrayRandomSampleтеперь материализуют константные столбцы, чтобы разные строки получали разные результаты. #94134 (Joanna Hulboj). - Исправлена гонка данных при вычислении табличных функций в materialized views. #94171 (Alexey Milovidov).
- Исправлено разыменование nullptr в движках баз данных
PostgreSQL(при некорректном запросе). Закрывает #92887. #94180 (Alexey Milovidov). - Исправлена утечка памяти в refreshable materialized view при использовании запросов
SELECTс несколькими подзапросами. #94200 (Antonio Andelic). - Исправлено состояние гонки данных между
DataPartStorageOnDiskBase::removeиsystem.parts. Закрывает #49076. #94262 (Alexey Milovidov). - Удалён неверный спецификатор
noexceptу оператора присваивания копированием HashTable, который мог приводить к аварийному завершению (std::terminate) при исключениях из-за нехватки памяти. #94275 (Nikita Taranov). - Ранее при создании проекции с дублирующимися столбцами в GROUP BY (например,
GROUP BY c0, c0) и вставке данных возникала ошибкаstd::length_error, если включенoptimize_row_order. Закрывает #94065. #94277 (Alexey Milovidov). - Исправлена трудноуловимая ошибка в клиенте ZooKeeper при подключении, которая приводила к зависаниям и аварийным завершениям. #94320 (Azat Khuzhin).
- Исправлена ошибка, из-за которой оптимизация преобразования функций в подстолбцы не применялась к подстолбцам. #94323 (Pavel Kruglov).
- Исправлен потенциально некорректный результат во вложенных RIGHT JOIN при включённом
enable_lazy_columns_replication. Из-за ошибки все строки в реплицируемых столбцах некорректно возвращали одно и то же значение вместо своих собственных значений. Закрыто #93891. #94339 (Vladimir Cherkasov). - Исправлен pushdown фильтра для SEMI JOIN с использованием множеств эквивалентности. Pushdown фильтра не выполняется, если типы аргументов изменились. Исправляет #93264. #94340 (Dmitry Novik).
- Исправлено использование DeltaLake CDF с движком базы данных DataLake (интеграция каталогов Delta Lake). Закрывает #94122. #94342 (Kseniia Sumarokova).
- Исправлено некорректное значение метрики
FilesystemCacheSizeLimitпри использовании политики кэшаSLRU. #94363 (Kseniia Sumarokova). - При создании движка базы данных Backup с менее чем двумя аргументами теперь возвращается более понятное сообщение об ошибке (
Wrong number of argumentsвместоstd::out_of_range: InlinedVector::at(size_type) const failed bounds check.). #94374 (Robert Schulze). - Игнорирует невозможный отзыв глобальных привилегий на уровне базы данных для привилегий с grant option. #94386 (pufit).
- Исправлено чтение разреженных смещений в компактных частях. Закрывает #94385. #94399 (Pavel Kruglov).
- Не запрещать ALTER столбцов с неявными индексами, даже если используется режим
throwпараметраalter_column_secondary_index_mode. #94425 (Raúl Marín). - Исправлен сбой в
TCPHandlerпри чтенииProtocol::Client::IgnoredPartUUIDsнесколькими вызовамиreceivePacketsExpectQuery. #94434 (Miсhael Stetsyuk). - Исправлено маскирование чувствительных данных в
system.functions. #94436 (Vitaly Baranov). - Исправлено разыменование nullptr при отключённой опции
send_profile_events. Эта возможность была недавно добавлена в Python-драйвер ClickHouse. Закрывает #92488. #94466 (Alexey Milovidov). - Исправлена несовместимость файлов .mrk текстового индекса при слиянии. #94494 (Peng Jian).
- Когда
read_in_order_use_virtual_rowвключён, код обращался к столбцам индекса, исходя из полного размера первичного ключа, не проверяя, был ли индекс усечён, что приводило к использованию освобождённой / неинициализированной памяти. Закрывает #85596. #94500 (Alexey Milovidov). - Исправлена ошибка, возникавшая из-за несоответствия типов при отправке внешних таблиц в подзапросах с GLOBAL IN, если используются типы Nullable. Закрывает #94097. #94511 (Alexey Milovidov).
- В предыдущих версиях запросы с несколькими условиями индекса для одного и того же выражения могли ошибочно генерировать исключение
Not found column. Закрывает #60660. #94515 (Alexey Milovidov). - Исправлена некорректная обработка столбца JOIN типа Nullable в runtime-фильтрах. #94555 (Alexander Gololobov).
- Создание рабочей нагрузки внутри другой рабочей нагрузки, которая в данный момент используется, больше не приводит к сбою. #94599 (Sergei Trifonov).
- Исправлен сбой при оптимизации ANY LEFT JOIN, когда
isNotNullвычисляется для отсутствующего столбца. #94600 (Molly). - Исправлено вычисление выражения по умолчанию при обращении к другим столбцам с вычисляемыми значениями по умолчанию. #94615 (Alexey Milovidov).
- Исправлены проблемы с разрешениями при операциях BACKUP/RESTORE. #94617 (Pablo Marcos).
- Исправлен сбой из-за некорректного приведения типов, когда тип данных —
Nullable(DateTime64). #94627 (Miсhael Stetsyuk). - Исправлена ошибка, из-за которой некоторые распределённые запросы с
ORDER BYмогли возвращать столбцыALIASс переставленными значениями (то есть столбецaпоказывал данные столбцаb, и наоборот). #94644 (filimonov). - Исправлена запись результатов keeper-bench в файл. #94654 (Antonio Andelic).
- Исправлены некорректные оценки в статистике типа MinMax, когда столбец содержит отрицательные числа с плавающей точкой. #94665 (zoomxi).
- Исправлено чтение файлов Parquet, когда ключом в map является struct. #94670 (Konstantin Vedernikov).
- Исправлен потенциально некорректный результат RIGHT JOIN при использовании сложных условий ON. Закрыт #92913. #94680 (Vladimir Cherkasov).
- Сохранение постоянной гранулярности индекса (
use_const_adaptive_granularity) после вертикальных слияний. #94725 (Azat Khuzhin). - Исправлена ошибка мутаций со скалярными подзапросами и зависимостями таблицы. Если у таблицы были зависимости (индекс или проекции), связанные со столбцом, скалярные подзапросы могли вычисляться и кэшироваться без данных, что приводило к некорректным изменениям. #94731 (Raúl Marín).
- Исправлено переключение AsynchronousMetrics cpu_pressure на резервный вариант при возникновении ошибки. #94827 (Raúl Marín).
- В функции
getURLHostRFCотсутствовали проверки выхода за границы перед разыменованием указателей. При передаче пустой строки вdomainRFCпроисходило чтение неинициализированной памяти, что приводило к ошибкам MSan. #94851 (Alexey Milovidov). - Исправлен режим «только для чтения» у зашифрованных дисков. #94852 (Azat Khuzhin).
- Исправлена логическая ошибка при дробных
LIMIT/OFFSETпри использовании старого анализатора с distributed таблицами. Закрывает #94712. #94999 (Ahmed Gouda). - Исправлено падение в некоторых случаях, когда JOIN Runtime Filters включены по умолчанию. #95000 (Alexander Gololobov).
- Улучшено маскирование паролей в URL-адресе, используемом в движке таблицы
URL()и табличной функцииurl(). #95006 (Vitaly Baranov). - Функция
toStartOfIntervalтеперь работает так же, какtoStartOfX, гдеX— этоDay, Week, Month, Quarter, Year, если включёнenable_extended_results_for_datetime_functions. #95011 (Kirill Kopnev). - Исправлены сравнения с константными строками, которые не учитывали настройки
cast_string_to_date_time_mode,bool_true_representation,bool_false_representationиinput_format_null_as_default. Закрывает #91681. #95040 (Nihal Z. Miaji). - Исправлено состояние гонки в файловом кэше. #95064 (Alexey Milovidov).
- Исправлено редкое проявление состояния гонки в ридере Parquet. #95068 (Alexey Milovidov).
- Исправлено падение в оптимизации top K, когда
LIMITравен нулю. Закрывает #93893. #95072 (Alexey Milovidov). - При преобразовании из DateTime/целых чисел в Time64 с помощью
toTimeизвлекается компонент времени суток, но эта функция не является монотонной. ШаблонToDateTimeMonotonicityошибочно утверждал, что это преобразование монотонно, из-за чего в отладочных сборках возникало Исключение “Invalid binary search result in MergeTreeSetIndex”. #95125 (Alexey Milovidov). - Список записей в файле манифеста пересоздавался только при необходимости (раньше это происходило на каждой итерации). #95162 (Daniil Ivanik).
Улучшения сборки/тестирования/пакетирования
- Добавлен набор инструментов для профилирования выделений памяти в парсере ClickHouse SQL с использованием возможностей jemalloc по профилированию кучи. #94072 (Ilya Yatsishin).
- Добавлен инструмент, упрощающий отладку выделений памяти в парсере. Он использует метрику jemalloc
stats.allocatedдо и после разбора запроса в AST-представление, чтобы показать, какая память была выделена. Также поддерживается режим профилирования памяти, который выгружает профиль до и после, чтобы строить отчёты о местах, где происходили выделения. #93523 (Ilya Yatsishin). - Удалены транзитивные включения libc++. #92523 (Raúl Marín).
- Некоторые последовательные тесты переведены в параллельный режим: https://github.com/ClickHouse/ClickHouse/pull/93030/changes#diff-c3a73510dae653c9bbfa24300b32f5d6ec663fd4e72cc4a3d5daa6e4342915df. #93030 (Nikita Fomichev).
- Приведены в порядок некоторые флаги сборки. #93679 (Raúl Marín).
- c-ares обновлён с v1.34.5 до v1.34.6. Это исправляет
CVE-2025-62408в c-ares, которая не затрагивает ClickHouse. #94129 (Govind R Nair). - Используется
curl8.18.0. #94742 (Konstantin Bogdanov).