Исправлено непоследовательное форматирование запросов, вызванное некорректной подстановкой псевдонимов. Примечание: когда анализатор отключен, некоторые запросы CREATE VIEW, использующие IN со ссылкой на псевдоним, могут перестать обрабатываться. Чтобы избежать этого, убедитесь, что анализатор включен (по умолчанию он включен с версии 24.3). #82838 (Alexey Milovidov).
Пустой список столбцов в JOIN USING () теперь является синтаксической ошибкой. Ранее об этом сообщалось как об ошибке INVALID_JOIN_ON_EXPRESSION во время выполнения запроса, а в некоторых случаях (например, при JOIN с хранилищем Join) это могло приводить к LOGICAL_ERROR. #92371 (Vladimir Cherkasov).
Подзапросы больше не допускаются в ORDER BY и других ключевых выражениях таблицы. #96847 (Alexey Milovidov).
Изменения типов данных
Добавлена поддержка Nullable(Tuple). Чтобы включить её, установите allow_experimental_nullable_tuple_type = 1. #89643 (Nihal Z. Miaji).
Расширенное хранение общих данных для типа JSON теперь включено по умолчанию. Понизить версию до более ранней, чем 25.8, будет невозможно, так как старые версии не могут читать части данных, записанные в новом формате JSON. Для безопасного обновления установите настройку compatibility на предыдущую версию или задайте настройки MergeTree dynamic_serialization_version='v2' и object_serialization_version='v2'. #92511 (Pavel Kruglov).
SKIP REGEXP в типе JSON теперь по умолчанию использует частичное совпадение. #92847 (Pavel Kruglov).
Исправлена логическая ошибка, возникавшая при несовпадении типов Variant. #95811 (Bharat Nallan).
Столбцы DATE из PostgreSQL теперь в ClickHouse автоматически определяются как Date32 (раньше они определялись как Date, что могло вызывать переполнение для значений за пределами его узкого диапазона). Теперь также поддерживается вставка значений Date32 обратно в PostgreSQL. #95999 (Alexey Milovidov).
Изменения в хранилище и индексах
Улучшена структура хранения инвертированного текстового индекса для более эффективного чтения из Объектного хранилища, а также повышена производительность операций слияния для таблиц с инвертированными текстовыми индексами. Если вы использовали экспериментальный текстовый индекс до версии 25.12, перед обновлением необходимо удалить индекс и заново построить его в новой версии. #91518 (Anton Popov).
Формат хранения статистики изменился — теперь вся статистика хранится в одном файле. #93414 (Anton Popov).
Имена файлов индексов теперь экранируются, чтобы избежать повреждения частей. ClickHouse не сможет загрузить индексы с символами вне ASCII в имени, созданные в предыдущих версиях. Для этого используйте настройку MergeTree escape_index_filenames. #94079 (Raúl Marín).
Удалённые возможности
Кодеки DEFLATE_QPL и ZSTD_QAT удалены. Перед обновлением перекодируйте все существующие данные, сжатые этими кодеками, с использованием другого кодека. Обратите внимание, что ранее для использования этих кодеков требовалось включить enable_deflate_qpl_codec или enable_zstd_qat_codec. #92150 (Robert Schulze).
INSERT в простые столбцы ALIAS больше не поддерживается (отмена #84154). Эта возможность не работала с пользовательскими форматами и не контролировалась отдельной настройкой. #92849 (Azat Khuzhin).
Режим transposed_with_wide_view у metric_log удалён из-за ошибки, которая делала его непригодным для использования. Определять system.metric_log с этим режимом больше нельзя. #93867 (Alexey Milovidov).
Изменения настроек и конфигурации
Новая настройка теперь генерирует ошибку, если каталог озера данных не имеет доступа к объектному хранилищу. #93606 (Konstantin Vedernikov).
Планирование CPU для рабочих нагрузок теперь по умолчанию выполняется с вытеснением. См. настройку сервера cpu_slot_preemption. #94060 (Sergei Trifonov).
Настройки 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).
Семантика do_not_merge_across_partitions_select_final была упрощена. Ранее эта возможность могла автоматически включаться даже без явной установки, что вызывало путаницу и проблемы в продакшне. Теперь: значение 1 безусловно включает эту функциональность, а значение 0 передает решение новой настройке enable_automatic_decision_for_merging_across_partitions_for_final (по умолчанию 1). #96110 (Nikita Taranov).
Настройка apply_row_policy_after_final теперь включена по умолчанию, что гарантирует, что ROW POLICY учитывает FINAL, как это и было изначально. Если ранее вы полагались на optimize_move_to_prewhere_if_final=1, чтобы применять политики строк до FINAL, используйте вместо этого apply_row_policy_after_final=0. #97279 (Nikolai Kochetov).
Изменения в безопасности и управлении доступом
joinGet/joinGetOrNull теперь требуют привилегию SELECT для лежащей в основе таблицы Join. Для выполнения joinGet('db.table', 'column', key) нужна привилегия SELECT как для столбцов ключа, так и для извлекаемого столбца атрибута. Запросы без этих привилегий завершатся ошибкой ACCESS_DENIED. Для миграции выдайте привилегии с помощью GRANT SELECT ON db.join_table TO user для полного доступа к таблице или GRANT SELECT(key_col, attr_col) ON db.join_table TO user для доступа на уровне столбцов. #94307 (Vladimir Cherkasov).
Запросы CREATE TABLE ... AS ... теперь требуют привилегию SHOW COLUMNS вместо SHOW TABLES, которая раньше проверялась некорректно. #94556 (pufit).
Изменения вставки и дедупликации
Дедупликация теперь включена по умолчанию для всех вставок. Ранее она была отключена для асинхронных вставок и materialized view, но включена для синхронных вставок. Чтобы сохранить прежнее поведение, явно задайте deduplicate_insert='backward_compatible_choice' (и аналогично для deduplicate_blocks_in_dependent_materialized_views). #95970 (Sema Checherinda).
Изменения системных таблиц
Объём метаданных S3Queue и AzureQueue, хранящихся в памяти, теперь ограничен. Системные таблицы были переименованы: system.s3queue теперь называется system.s3queue_metadata_cache, а system.azure_queue — system.azure_queue_metadata_cache. #95809 (Kseniia Sumarokova).
Другие несовместимые изменения
Исправлены функции индекса H3, которые могли приводить к аварийному завершению или зависанию при вызове с недопустимыми входными данными. #93657 (Michael Kolupaev).
Новые возможности
Аутентификация
Добавлена поддержка TOTP (одноразового пароля на основе времени) в качестве метода аутентификации. #71273 (Vladimir Cherkasov).
Функции
Добавлена функция reverseBySeparator, которая меняет порядок подстрок в строке, разделённых указанным разделителем. #91780 (Xuewei Wang).
Добавлены функции colorOKLABToSRGB и colorSRGBToOKLAB для преобразования между цветовыми пространствами sRGB и OKLAB. #93361 (Pranav Tiwari).
Добавлена настройка базы данных lazy_load_tables. Когда она включена, таблицы не загружаются при запуске базы данных — вместо них создается облегченный StorageTableProxy, а реальный движок таблицы материализуется при первом обращении. #96283 (xiaohuanlin).
Добавлена поддержка вспомогательного ZooKeeper для DatabaseReplicated. #91683 (RinChanNOW).
Файлы данных и системные файлы в кэше теперь можно разбивать на отдельные сегменты. #87834 (MikhailBurdukov).
Добавлен новый SLRU-кэш для метаданных Parquet, который повышает производительность чтения, предотвращая избыточные загрузки файлов. Кэш можно сбросить с помощью SYSTEM DROP PARQUET METADATA CACHE. #89750 (Grant Holly).
Таблицы озера данных теперь поддерживают PREWHERE и многоэтапный PREWHERE в ридере Parquet v3. #93542 (Konstantin Vedernikov).
Добавлен распределенный анализ индексов на нескольких репликах, полезный при использовании общего хранилища и больших объемов данных. #86786 (Azat Khuzhin).
Вставка и дедупликация
Дедупликация при асинхронной вставке теперь работает с зависимыми materialized view. При коллизии block_id исходный блок фильтруется: из него удаляются строки, связанные с конфликтующим block_id, а оставшиеся строки обрабатываются всеми соответствующими запросами materialized view. #89140 (Sema Checherinda).
Асинхронная вставка теперь поддерживает параллельный quorum — вставленные данные реплицируются в кворум, и при обнаружении дубликатов запрос ожидает, пока ранее вставленные данные тоже не будут реплицированы. #93356 (Sema Checherinda).
Добавлена настройка сервера insert_deduplication_version для перехода на унифицированный хеш дедупликации. #95409 (Sema Checherinda).
Добавлен синтаксис SYSTEM CLEAR [...] CACHE как более понятная альтернатива существующему SYSTEM DROP [...] CACHE. Старый синтаксис по-прежнему доступен. #93727 (Pranav Tiwari).
Добавлен запрос OPTIMIZE <table> DRY RUN PARTS <part names> для имитации слияний без коммита результирующей части. Полезно для проверки корректности слияния, воспроизведения ошибок, связанных со слиянием, и бенчмаркинга производительности слияний. #96122 (Anton Popov).
DDL-запросы с ON CLUSTER теперь можно выполнять для баз данных Replicated, если включен параметр ignore_on_cluster_for_replicated_database. Имя кластера будет игнорироваться. #92872 (Kirill).
Представлены новый синтаксис и новый фреймворк, упрощающие и расширяющие функциональность индексов-проекций. #91844 (Amos Bird).
Настройки и конфигурация
Добавлена настройка max_insert_block_size_bytes для более точного управления формированием вставляемых блоков. #92833 (Kirill Kopnev).
Добавлена настройка use_primary_key. Установите её в false, чтобы отключить pruning гранул на основе primary key. #93319 (Nihal Z. Miaji).
Добавлена настройка default_dictionary_database, которая позволяет ClickHouse разрешать external dictionaries, указанные без квалификатора базы данных, в заданной базе данных по умолчанию. Это упрощает migration с глобальных словарей, определённых в XML, на словари отдельных баз данных, определённые в SQL. #91412 (Dmitrii Plotnikov).
Добавлена настройка check_named_collection_dependencies (включена по умолчанию), чтобы предотвратить удаление именованных коллекций, используемых таблицами. #96181 (Pablo Marcos).
Добавлен планировщик max-min fair для управления параллелизмом, который обеспечивает более справедливое распределение ресурсов при высокой переподписке, когда множество запросов конкурируют за ограниченные слоты CPU. Теперь настройка сервера concurrent_threads_scheduler по умолчанию использует max_min_fair вместо fair_round_robin, поэтому короткие запросы больше не оказываются в невыгодном положении из-за длительных. #94732#95300 (Sergei Trifonov).
Добавлены параметры конфигурации logger.startup_console_level и logger.shutdown_console_level, которые позволяют переопределять уровень логирования в консоли во время запуска и остановки ClickHouse соответственно. #95919 (Garrett Thomas).
Мониторинг
В конечную точку Prometheus /metrics добавлена метрика ClickHouse_Info с информацией о версии, что позволяет строить графики и отслеживать подробные сведения о версии с течением времени. #91125 (Christoph Wurm).
Экспериментальные возможности
Векторный поиск теперь может распределять нагрузку между репликами в кластере, что позволяет использовать большие векторные индексы, которые превышают объем памяти одной виртуальной машины. #95876 (Shankar Iyer).
Добавлен серверный AST-фаззер, управляемый настройками ast_fuzzer_runs и ast_fuzzer_any_query. Когда он включен, сервер после обычного выполнения каждого запроса запускает его случайные мутации и отбрасывает результаты. #97568 (Alexey Milovidov).
Улучшения
Запросы и SQL
Коррелированные подзапросы теперь поддерживают больше движков таблиц и типов источников данных. #90175 (Dmitry Novik).
Теперь неконстантный IN поддерживается и для скалярных значений (например, val1 NOT IN if(cond, val2, val3)). #93495 (Yarik Briukhovetskyi).
Добавлена поддержка расширенных псевдонимов таблиц в JOIN (например, SELECT * FROM (SELECT 1) AS t(a) JOIN (SELECT 1) AS u(b) ON a = b). #95331 (Yarik Briukhovetskyi).
Теперь EXPLAIN indices = 1 также поддерживается как алиас для EXPLAIN indexes = 1. #92774 (Pranav Tiwari).
Улучшен pushdown фильтра для табличных функций numbers и primes — теперь ClickHouse может выводить консервативные границы значений на основе условий WHERE, чтобы ограничивать генерацию последовательностей и избегать неограниченного сканирования. #96115 (Nihal Z. Miaji).
Оптимизация эквивалентных множеств теперь работает для нескольких последовательных операций INNER JOIN, поэтому фильтры, применённые к любой таблице в цепочке, автоматически проталкиваются во все связанные таблицы. #96596 (Vladimir Cherkasov).
Теперь для отдельных подзапросов в FROM используются автоматические кластерные табличные функции. #96332 (phulv94).
Индекс первичного ключа теперь используется при фильтрации с помощью startsWithUTF8, если префикс содержит только символы ASCII. #97055 (vkcku).
assumeNotNull, coalesce и ifNull теперь поддерживают отсечение по первичному ключу и индексу пропуска данных для диапазонных предикатов, когда столбцы ключа обёрнуты в эти функции. #94754 (Nihal Z. Miaji).
Неиспользуемые столбцы теперь также исключаются уже на этапе чтения при чтении из MergeTree, что особенно полезно, когда фильтр проталкивается в PREWHERE. #89982 (János Benjamin Antal).
Оптимизация use_join_disjunctions_push_down теперь включена по умолчанию. #89313 (Alexey Milovidov).
Оптимизация enable_join_runtime_filters теперь включена по умолчанию. #89314 (Alexey Milovidov).
Накладные расходы на runtime filter в JOIN теперь снижены благодаря автоматическому отключению фильтров, если в фильтре Блума установлено слишком много битов или отфильтровывается слишком мало строк. #91578 (Alexander Gololobov).
Добавлена настройка use_hash_table_stats_for_join_reordering (включена по умолчанию), управляющая использованием статистики о размере хеш-таблицы во время выполнения для переупорядочивания JOIN. #93912 (Vladimir Cherkasov).
Анализ индексов теперь выполняется только один раз — независимо от того, выполняется ли запрос локально или с использованием параллельных реплик. #94854 (Nikita Taranov).
Если индекс пропуска данных в запросе FINAL построен по столбцу, который входит в первичный ключ, дополнительная проверка пересечения по первичному ключу в других частях теперь не выполняется. #93899 (Shankar Iyer).
DROP DATABASE теперь удаляет таблицы в порядке, обратном зависимостям, что повышает устойчивость к сбоям, если база данных содержит таблицы с зависимостями, связанными с загрузкой. #97057 (Alexey Milovidov).
Синхронное ожидание мутаций теперь учитывает отмену запроса и временные ограничения. #96756 (Alexey Milovidov).
Предотвращено повторное появление удалённых данных, если ADD COLUMN выполняется слишком быстро после мутации DROP COLUMN. #96713 (Alexey Milovidov).
Конфликтующие выражения ALTER с UPDATE и RENAME COLUMN теперь приводят к корректному Исключению вместо логической ошибки. #96022 (Alexey Milovidov).
Теперь для столбцов ключа агрегации собирается статистика по оценочному общему количеству строк и NDV (числу различных значений). #92812 (Alexander Gololobov).
Теперь при чтении с параллельными репликами все реплики могут параллельно перехватывать осиротевшие диапазоны, что улучшает балансировку нагрузки и снижает хвостовую задержку. #91374 (zoomxi).
Повышена точность оценки для автоматического режима параллельных реплик при использовании высокоселективных фильтров PREWHERE. #97231 (Nikita Taranov).
Внешняя агрегация, сортировка и JOIN теперь во всех случаях учитывают настройку запроса temporary_files_codec. #92388 (Vladimir Cherkasov).
Оптимизации плана поиска по векторному сходству теперь применяются только при наличии индекса для столбца, по которому выполняется поиск. #94998 (Eduard Karacharov).
Движки таблиц и хранилище
StorageEmbeddedRocksDB теперь поддерживает несколько столбцов в качестве первичного ключа. #33917 (usurai).
Добавлен синтаксис ALTER TABLE <table> ATTACH PART <part_name> FROM <directory_name>, позволяющий подключать части из произвольных подкаталогов detached/ (например, части с префиксами broken-on-start или unexpected) без ручного переименования в файловой системе. #74816 (Anton Popov).
min_free_disk_bytes_to_perform_insert теперь корректно работает с томами JBOD. #90878 (Aleksandr Musorin).
max_parts_to_merge_at_once теперь учитывается при TTL-слияниях с удалением частей. #95315 (Kseniia Sumarokova).
Фоновые операции (mutate, merge) теперь можно настраивать независимо через профиль background, а не делить настройки с обычными запросами через профиль default. #93905 (Arsen Muk).
Улучшено чтение подстолбцов с корректным вычислением размера, что снижает использование памяти и повышает скорость. #96251 (Pavel Kruglov).
Ограничено количество потоков в конвейере, создаваемых с split_intersecting_parts_ranges_into_layers, чтобы избежать чрезмерного потребления памяти. #96478 (Nikita Taranov).
При сохранении схемы таблицы с enable_positional_arguments_for_projections теперь подставляются выражения вместо позиционных аргументов, что позволяет перезапускать сервер с отключённой настройкой. #96372 (Alexey Milovidov).
В базах данных Replicated кэш кластера больше не обновляется для каждого фиктивного запроса. #96897 (Tuan Pham Anh).
Добавлен запрос SYSTEM RESET DDL WORKER [ON CLUSTER] для сброса состояния DDLWorker; это полезно для обновления сведений об активности реплик при изменении идентификаторов хостов. #93780 (Tuan Pham Anh).
DeltaLake теперь берет результаты count() из метаданных и показывает корректную статистику таблицы (общее число байт/строк) в system.tables. #96190 (Kseniia Sumarokova).
При запросах к таблицам DeltaLake из system.tables чтение из объектного хранилища теперь пропускается. #95899 (Antonio Andelic).
Добавлена команда SYSTEM RELOAD DELTA KERNEL TRACING <level> для отладки журналирования delta-kernel. #96763 (Kseniia Sumarokova).
Расположение метаданных таблицы Iceberg теперь определяется автоматически, если metadata_location не указан в метаданных Glue. #91994 (Andrey Zvonov).
Записи в manifest file Iceberg теперь разбирают нижние и верхние границы для имен файлов position delete file, что улучшает выбор файлов данных. #93980 (Daniil Ivanik).
Токены доступа S3 теперь динамически обновляются во время длительных запросов с Unity Catalog. #95069 (Konstantin Vedernikov).
Добавлен ролевой доступ к каталогу Glue через настройки aws_role_arn и aws_role_session_name. #90825 (Antonio Andelic).
S3Queue
S3Queue теперь отслеживает партиционирование Hive в упорядоченном режиме. #81040 (Anton Ivashkin).
Переработана обработка S3Queue в упорядоченном режиме с использованием бакетов, что сокращает число запросов к Keeper и повышает производительность. #92889 (Kseniia Sumarokova).
Добавлена более универсальная поддержка партиционирования для S3Queue в упорядоченном режиме. #94321 (Bharat Nallan).
Для S3Queue в упорядоченном режиме добавлено разбиение на бакеты на основе ключа партиционирования. #94698 (Bharat Nallan).
Добавлена поддержка экземпляра ZooKeeper в S3Queue через настройку keeper_path. #95203 (Diego Nieto).
В упорядоченном режиме S3(Azure)Queue теперь очищает сбойные узлы за счёт отслеживания лимитов. #94412 (Kseniia Sumarokova).
S3 и объектное хранилище
Заголовки S3 x-amz-server-side-encryption больше не добавляются в запросы HeadObject, UploadPart и CompleteMultipartUpload. #64577 (Francisco J. Jurado Moreno).
storage_class_name теперь можно указывать в именованных коллекциях для движка таблицы S3 и табличной функции s3. #91926 (János Benjamin Antal).
Исправлена проблема с ограничением запросов к конечной точке метаданных EC2 при выполнении большого количества параллельных S3-запросов с учетными данными профиля экземпляра — теперь поставщик учетных данных кэшируется и используется всеми запросами совместно. #92891 (Sav).
Добавлена поддержка совместимости AWS S3 C++ SDK с MinIO, включая сопоставление кодов ошибок для специфичных для MinIO ошибок, что повышает надежность самоуправляемых кластеров MinIO. #93082 (XiaoBinMu).
Улучшены сообщения об ошибках аутентификации S3: в них добавлены подсказки проверить учетные данные. #95648 (Gerald Latkovic).
Azure Blob Storage теперь переключается на копирование с возможностью чтения и записи, если нативное копирование завершается с любой ошибкой (ранее — только при Unauthorized). #92888 (Smita Kulkarni).
Функции
avg() теперь поддерживает значения Date, DateTime и Time в качестве аргументов. #87845 (Yarik Briukhovetskyi).
mapContainsKeyLike и mapContainsValueLike теперь могут использовать текстовый индекс для mapKeys() или mapValues(). #93049 (Michael Jarrett).
Для функций hasAnyTokens и hasAllTokens снято ограничение в 64 токена. #95152 (Elmi Ahmadov).
distanceCosine добавлен как псевдоним для cosineDistance в соответствии с другими функциями расстояния. #96065 (Raufs Dunamalijevs).
В ClickHouse KQL добавлена функция iif. #94790 (happyso).
use_variant_as_common_type теперь включен по умолчанию, что позволяет использовать несовместимые типы в Array, запросах UNION и ветвях if/multiIf/case. #90677 (Alexey Milovidov).
Настройки и конфигурация
use_skip_indexes_on_data_read теперь включён по умолчанию. #93407 (Shankar Iyer).
Добавлена настройка add_minmax_index_for_time_columns — при включении она автоматически создает minmax-индексы для всех столбцов Date, Date32, Time, Time64, DateTime и DateTime64. #93355 (Michael Jarrett).
Добавлена настройка materialize_statistics_on_merge (по умолчанию включена), которая управляет тем, материализуется ли статистика при слияниях. #93379 (Han Fei).
Добавлена настройка input_format_binary_max_type_complexity, ограничивающая общее количество узлов типов, которые можно декодировать в бинарном формате, что предотвращает вредоносные полезные нагрузки. #92519 (Raufs Dunamalijevs).
Добавлена настройка trace_profile_events_list, чтобы ограничить трассировку с помощью trace_profile_event указанными именами событий. #92298 (Alexey Milovidov).
Добавлена настройка type_json_allow_duplicated_key_with_literal_and_nested_object, разрешающая дублирующиеся пути в JSON, когда один из них является литералом, а другой — вложенным объектом, для обратной совместимости с данными, созданными до введения обязательной дедупликации путей. #93604 (Pavel Kruglov).
Добавлены настройка MergeTree merge_max_dynamic_subcolumns_in_compact_part и настройка на уровне запроса max_dynamic_subcolumns_in_json_type_parsing, чтобы ограничить динамические подстолбцы в JSON-столбцах при слиянии и парсинге. #94184 (Pavel Kruglov).
Добавлен 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).
Добавлена настройка, позволяющая сгенерировать исключение, если у таблицы есть политики строк, но ни одна из них не применяется к текущему пользователю, что помогает выявить возможные ошибки конфигурации. #95014 (Vitaly Baranov).
enable_max_bytes_limit_for_min_age_to_force_merge теперь включен по умолчанию для версий совместимости 26.2 и выше. #95917 (Christoph Wurm).
core_dump.size_limit теперь поддерживает горячую перезагрузку без перезапуска сервера. #96524 (Miсhael Stetsyuk).
Переопределения, заданные в командной строке, теперь учитываются при перезагрузке конфигурации. #80295 (Alexey Milovidov).
Добавлена комбинированная стратегия ротации (по размеру и времени) для серверных журналов. #87620 (Jianmei Zhang).
Анализ распределенных индексов теперь можно включать в зависимости от количества частей (distributed_index_analysis_min_parts_to_activate) и размера индекса (distributed_index_analysis_min_indexes_size_to_activate). #95216 (Azat Khuzhin).
Кэш статистики теперь включен по умолчанию; период обновления — 300 секунд. #95841 (Han Fei).
Параметр конфигурации path теперь определяется относительно рабочего каталога при запуске, что предотвращает размещение каталогов данных в нестандартных местах. #96305 (Alexey Milovidov).
Системные таблицы и мониторинг
Добавлен столбец parts_postpone_reasons в system.mutations для улучшения диагностики. #92206 (Shaohua Wang).
Добавлен столбец creation (implicit/explicit) в system.data_skipping_indices. #92378 (Raúl Marín).
Выполняющиеся задачи теперь отображаются в system.background_schedule_pool и соответствующей таблице журнала. #92587 (Azat Khuzhin).
Добавлена метрика QueryNonInternal для отслеживания числа выполняющихся не внутренних запросов, что помогает контролировать параллелизм относительно ограничения max_concurrent_queries. #94284 (Ashwath Singh).
Добавлена асинхронная метрика времени выполнения самого длительного слияния. #94825 (Raúl Marín).
В query_log добавлены connection_address и connection_port, чтобы отражать физическое соединение (полезно при подключении через прокси). #95471 (Yakov Olkhovskiy).
В system.aggregated_zookeeper_log добавлено имя компонента. #95882 (Antonio Andelic).
Добавлена таблица system.tokenizers, показывающая все доступные токенизаторы. #96753 (Robert Schulze).
Добавлены таблица system.jemalloc_stats и HTTP-конечная точка /jemalloc.html для интерактивной визуализации статистики аллокатора памяти jemalloc. #97077 (Antonio Andelic).
Добавлена таблица system.jemalloc_profile_text для чтения и анализа профилей кучи jemalloc с поддержкой выходных форматов raw, symbolized и collapsed. #97218 (Antonio Andelic).
В system.part_log добавлены mutation_ids для событий MUTATE_PART и MUTATE_PART_START. #93811 (Shaohua Wang).
Вложенные глобальные настройки сервера (например, logger.level) теперь частично видны в system.server_settings. #94001 (Hechem Selmi).
view_duration_ms теперь показывает время, в течение которого группа была активна, а не сумму длительностей потоков. #94966 (Sema Checherinda).
system.blob_storage_log теперь доступен для Azure Blob Storage, Local и HDFS. Добавлен столбец error_code. #93105 (Alexey Milovidov).
Фоновые задачи, выполняющиеся медленнее среднего, теперь записываются в журнал с настраиваемым порогом (background_schedule_pool_log.duration_threshold_milliseconds, по умолчанию 30 мс). #92965 (Azat Khuzhin).
Добавлены новые метрики Keeper: KeeperChangelogWrittenBytes, KeeperChangelogFileSyncMicroseconds, KeeperSnapshotWrittenBytes, KeeperSnapshotFileSyncMicroseconds, KeeperBatchSizeElements и KeeperBatchSizeBytes. #92149 (Miсhael Stetsyuk).
Расширения Keeper CHECK_STAT и TRY_REMOVE теперь включены по умолчанию. #93886 (Mikhail Artemenko).
Keeper теперь генерирует исключение вместо аварийного завершения работы при обнаружении поврежденного снимка или несогласованных журналов изменений, что требует ручного вмешательства для более безопасного восстановления. #94168 (Antonio Andelic).
В запросы Keeper getChildren добавлены расширения with_data и with_stat, позволяющие получать дочерние узлы вместе с их данными и статистикой за одну операцию. #94826 (Nikolay Degterinsky).
Добавлена проверка некорректной конфигурации Keeper, которая могла приводить к ошибкам при формировании кластера. #94682 (Konstantin Bogdanov).
Добавлена поддержка расширения Keeper with_data для улучшения получения таблиц в Database Replicated. #96090 (Nikolay Degterinsky).
Теперь через system.zookeeper можно выполнять вставку в экземпляр ZooKeeper. #92092 (RinChanNOW).
Управление памятью
Оптимизировано резервирование места в файловом кэше — кандидаты на вытеснение теперь собираются без удержания эксклюзивной блокировки. #82764 (Kseniia Sumarokova).
Включено параллельное чтение в буфере чтения файлового кэша для удалённых движков таблиц и функций. #71781 (Kseniia Sumarokova).
Снижено использование памяти в системах, отличных от Linux, за счёт включения немедленной очистки грязных страниц jemalloc. #93360 (Eduard Karacharov).
Очистка грязных страниц jemalloc теперь выполняется в отдельном потоке, а не в основном потоке MemoryWorker. Добавлен config memory_worker_purge_total_memory_threshold_ratio для очистки на основе доли общего использования памяти. #94902 (Antonio Andelic).
Деградация грязных страниц jemalloc теперь динамически отключается, когда ClickHouse длительное время работает в условиях нехватки памяти. #95145 (Antonio Andelic).
Добавлена явная проверка потребления памяти перед чтением данных из MergeTree, а размеры очередей пула потоков уменьшены на основе опыта эксплуатации в продакшне. #94692 (Nikita Mikhaylov).
Общий лимит памяти теперь проверяется до аутентификации пользователя; при его превышении генерируется исключение memory limit exceeded. #95003 (Nikolai Kochetov).
Тип Date теперь сериализуется как собственный тип Arrow date32 в форматах Arrow/ArrowStream (ранее uint16). Прежнее поведение можно восстановить с помощью настройки output_format_arrow_date_as_uint16. #96860 (Alexey Milovidov).
Простые типы в формате Pretty JSON больше не выводятся на отдельных строках. #93836 (Pavel Kruglov).
При определении схемы теперь учитывается allow_experimental_nullable_tuple_type — если эта настройка включена, отсутствующие вложенные объекты могут становиться NULL вместо кортежа из элементов NULL. #95525 (Nihal Z. Miaji).
SQL-форматтер теперь выводит COMMENT перед AS SELECT вместо того, чтобы заключать SELECT в круглые скобки. #96293 (Alexey Milovidov).
Оптимизировано сжатие postings list с помощью simdcomp. #92871 (Peng Jian).
Резервное копирование и восстановление
Добавлена настройка резервного копирования backup_data_from_refreshable_materialized_view_targets, управляющая тем, нужно ли включать в резервную копию данные refreshable materialized views. Целевые таблицы RMV со стратегией обновления APPEND резервируются всегда. #93658 (Julia Kartseva).
Добавлена поддержка определенных в SQL именованных коллекций в BACKUP/RESTORE для S3 и Azure Blob Storage. #94605 (Pablo Marcos).
Именованные коллекции и словари
В табличной функции MongoDB теперь допускаются переопределения параметров именованных коллекций. #89616 (vanchaklar).
Теперь поддерживаются именованные коллекции для словарей и таблиц YTsaurus. #94582 (MikhailBurdukov).
Для источников словарей на основе динамических таблиц YTsaurus теперь можно передавать описания столбцов. #92391 (MikhailBurdukov).
Схема параметризованного представления теперь отображается при явном указании. #90220 (Grigorii Sokolik).
Дедупликация
Настройка insert_select_deduplicate была переработана, чтобы добавить параметры обратной совместимости. #92951 (Sema Checherinda).
Теперь дедупликация с асинхронными вставками разрешена и при использовании materialized views. #93957 (Sema Checherinda).
Другие улучшения
Улучшен UX SYSTEM INSTRUMENT ADD/REMOVE: теперь для имен функций используются строковые литералы, патчатся все подходящие функции, а в REMOVE поддерживается function_name. #93345 (Pablo Marcos).
Добавлены SYSTEM NOTIFY FAILPOINT для приостанавливаемых failpoint и SYSTEM WAIT FAILPOINT для PAUSE/RESUME. #92368 (Shaohua Wang).
Имена функций C++ в system.trace_log, system.symbols и функции demangle теперь отображаются корректно. #93075 (Alexey Milovidov).
Профили jemalloc теперь записываются вместе с символами, что устраняет необходимость в бинарном файле при генерации профиля кучи. #93099 (Azat Khuzhin).
Исправлен сбой при Attach таблицы к базе данных MaterializedPostgreSQL, если dropReplicationSlot генерирует исключение во время раскрутки стека. #96871 (Alexey Milovidov).
Исправлена ситуация, когда после сбоя CREATE TABLE могли оставаться артефакты. #94174 (Azat Khuzhin).
Исправлен доступ к неинициализированной памяти при использовании TLS-ключа, защищенного паролем. #94182 (Konstantin Bogdanov).
Если alter table ... modify setting ... завершается по тайм-ауту при получении блокировки, теперь возвращается ошибка тайм-аута вместо логической ошибки. #93856 (Han Fei).
Улучшена совместимость CPU-профайлера и профайлера реального времени с тайм-аутами сокета. #96601 (Sergei Trifonov).
Для релизных сборок включено быстрое усиление защиты libcxx (главным образом проверки выхода за границы) без заметного влияния на производительность. #94757 (Miсhael Stetsyuk).
Повышение производительности
Производительность JOIN
Ускорены некоторые операции hash join благодаря реализации динамической диспетчеризации для ColumnVector::replicate. #79573 (Raúl Marín).
Расширено проталкивание фильтров из условий JOIN ON для ANY, SEMI и ANTI JOIN, когда фильтр использует данные только с одной стороны. #92584 (Dmitry Novik).
Эквивалентные множества теперь можно использовать для проталкивания фильтров в SEMI JOIN. #92837 (Dmitry Novik).
Распараллелена обработка неприсоединённых строк в ParallelHashJoin для сложных предикатов; это поведение управляется настройкой parallel_non_joined_rows_processing (включена по умолчанию). #92068 (Yarik Briukhovetskyi).
Hash join теперь полностью пропускает чтение левой стороны, когда правая сторона пуста, что позволяет избежать лишней работы при тяжёлой фильтрации или агрегации. #94062 (Alexander Gololobov).
JOIN runtime filters теперь поддерживаются для RIGHT OUTER JOIN. #96183 (Hechem Selmi).
PREWHERE optimization теперь откладывается до завершения оптимизации JOIN runtime filters, что позволяет также проталкивать runtime filters в PREWHERE. #95838 (Alexander Gololobov).
Оптимизация запросов
Отключена оптимизация порядка сортировки для оконных функций в случаях, когда ключ партиционирования совпадает с ключом сортировки или является его префиксом, что повышает производительность параллельного выполнения. #87299 (Nikita Taranov).
Внешние фильтры теперь проталкиваются в представления, что позволяет применять PREWHERE как на локальных, так и на удалённых узлах. #88316 (Igor Nikonov).
Оптимизированы производительность и использование памяти для дробных LIMIT и OFFSET. #91167 (Ahmed Gouda).
Константные фильтры по виртуальным столбцам больше не вычисляются повторно. #91588 (c-end).
Любое детерминированное выражение в первичном ключе (например, ORDER BY cityHash64(user_id)) теперь можно использовать для пропуска данных. ClickHouse применяет это выражение к константам запроса и использует результат для поиска по индексу первичного ключа с =, IN и has. Для инъективных выражений также поддерживаются отрицательные формы (!=, NOT IN, NOT has). #92952 (Nihal Z. Miaji).
Оптимизация чтения в порядке сортировки теперь распознаёт случаи, когда столбцы ORDER BY являются константами из-за условий WHERE, что позволяет эффективно читать данные в обратном порядке. Это полезно для многотенантных запросов, таких как WHERE tenant='42' ORDER BY tenant, event_time DESC. #94103 (matanper).
Для запросов FINAL, использующих условие по первичному ключу с последующим применением индексов пропуска данных, шаг PrimaryKeyExpand теперь проверяет только изначально отобранные диапазоны первичного ключа. #94903 (Shankar Iyer).
Оптимизация отложенной материализации теперь применяется ко всем ветвям запроса UNION ALL, а не только к первой, снижая I/O для запросов, которые объединяют несколько отсортированных и ограниченных чтений из разных таблиц семейства MergeTree. #96832 (Federico Ginosa).
Оптимизирована агрегатная функция distinctJSONPaths: теперь она считывает только JSON-пути из частей данных, а не весь JSON-столбец. #92196 (Pavel Kruglov).
Оптимизирована uniqExact для случаев, когда одинаковые элементы часто идут подряд. #93268 (Alexey Milovidov).
Оптимизирована isValidASCII для входных значений, полностью состоящих из ASCII-символов. #93347 (Robert Schulze).
Ускорена uniq для числовых типов за счёт вставки батчами, где это возможно (не NULL, не -If, без GROUP BY, без IPv6 и String). #95904 (Raúl Marín).
Производительность хранилища и ввода-вывода
Исправлен Prefetcher в Parquet Reader V3: теперь он использует более быструю логику произвольного чтения. #91435 (Arsen Muk).
Улучшена производительность icebergCluster. #91537 (Yang Jiang).
Снижено использование памяти при INSERT и слиянии для очень широких таблиц с Wide-частями за счет включения адаптивных буферов записи. Также добавлена поддержка адаптивных буферов записи для зашифрованных дисков. #92250 (Azat Khuzhin).
Улучшена производительность полнотекстового поиска с текстовым индексом и токенизатором sparseGrams за счет сокращения числа искомых токенов. #93078 (Anton Popov).
Ускорено сжатие кодеком T64 с использованием динамической диспетчеризации на x86. #95881 (Raúl Marín).
Ускорена распаковка LZ4 для 32-байтных блоков на x86. #96778 (Raúl Marín).
Оптимизация прямого чтения для текстового индекса теперь работает частично: части с материализованным текстовым индексом будут его использовать, а части без него — возвращаться к исходному выражению фильтра. #96411 (Anton Popov).
Оптимизировано вычисление индекса пропуска данных minmax во время INSERT за счет удаления лишнего копирования данных и включения векторизованного вычисления min/max для числовых столбцов. #97392 (Raúl Marín).
В системные таблицы логов добавлены вторичные индексы minmax для столбцов времени и индексы bloom_filter для столбцов query_id/initial_query_id, что ускоряет фильтрацию. #96712 (Alexey Milovidov).
Предотвращена регрессия использования памяти при INSERT, когда дедупликация не включена. #96503 (Alexey Milovidov).
Оптимизация памяти
Снижено потребление памяти ASTLiteral за счёт удаления неиспользуемых полей, когда подсветка и разбор VALUES не используются. #93974 (Ilya Yatsishin).
Добавлен специализированный класс AST для Enum, который хранит параметры значений как пары строка/целое число вместо универсальных дочерних элементов ASTLiteral, что снижает потребление памяти. #94178 (Ilya Yatsishin).
Оптимизировано потребление памяти объектами AST именованных кортежей: имена столбцов теперь хранятся напрямую в виде строк, а не в универсальных узлах-литералах AST. #94704 (Ilya Yatsishin).
Размер структуры CachedOnDiskReadBufferFromFile уменьшен примерно в 50 раз. #96098 (Azat Khuzhin).
HashTable::resize больше не копирует старые данные, если таблица пуста. #96180 (Raúl Marín).
Внутренние оптимизации
Внедрён метод "fastrange" (Daniel Lemire) для разбиения данных внутри конвейера запроса, что улучшило параллельную сортировку и операции JOIN. #93080 (Alexey Milovidov).
Улучшена девиртуализация за счёт дополнительных опций компоновщика. #94737 (Nikita Taranov).
Улучшена производительность клонирования реплики для таблиц ReplicatedMergeTree с большим количеством частей за счёт объединения запросов к ZooKeeper в батчи. #94847 (c-end).
Потребление CPU потоком приёма ZooKeeper в observeOperations снижено более чем на 20% за счёт перехода на более быстрое хеширование и безблокировочные счётчики. #95962 (Miсhael Stetsyuk).
Исправления ошибок
Все исправления ошибок (нажмите, чтобы развернуть)
Исправления JOIN
Исправлена ошибка INCOMPATIBLE_TYPE_OF_JOIN в хранилище Join, возникавшая при применении оптимизации преобразования outer JOIN в inner JOIN. #84292 (Vladimir Cherkasov).
Исправлена логическая ошибка в запросах с несколькими JOIN, использующих предложение USING и join_use_nulls. #92251 (Vladimir Cherkasov).
Исправлена логическая ошибка при изменении порядка JOIN с join_use_nulls. #92289 (Vladimir Cherkasov).
Устранён возможный сбой, связанный с настройкой join_on_disk_max_files_to_merge. #92335 (Bharat Nallan).
Исправлен LOGICAL_ERROR, вызванный нежелательным изменением плана запроса при преобразовании внешнего JOIN во внутренний JOIN. Также смягчены требования для применения оптимизации при использовании инъективных функций на ключах агрегирования в JOIN. #92503 (János Benjamin Antal).
Исправлена логическая ошибка при использовании нескольких JOIN с константным условием и join_use_nulls. #92892 (Vladimir Cherkasov).
Исправлена обработка случая NULL != NULL для full_sorting_join в столбце LowCardinality(Nullable(T)). #92924 (Vladimir Cherkasov).
Исправлены результаты JOIN, когда ключ JOIN с правой стороны был разреженным столбцом. #93038 (Amos Bird).
Исправлена некорректная работа runtime-фильтров при наличии у LEFT ANTI JOIN дополнительного постусловия. #91824 (Alexander Gololobov).
Исправлена логическая ошибка при использовании runtime-фильтров в запросе с итогами для правой таблицы. #93330 (Alexander Gololobov).
Исправлена логическая ошибка, которая в некоторых случаях возникала при добавлении в план запроса runtime-фильтров JOIN из-за некорректного возврата дублирующихся константных столбцов. #93144 (Alexander Gololobov).
Исправлена функция __applyFilter, используемая фильтрами времени выполнения JOIN, из-за которой в некоторых корректных случаях возвращалась ошибка ILLEGAL_TYPE_OF_ARGUMENT. #93187 (Alexander Gololobov).
Исправлена ошибка, из-за которой runtime-фильтры не добавлялись при JOIN с уже заполненной правой таблицей. #93211 (Alexander Gololobov).
Исправлена ошибка NOT_FOUND_COLUMN_IN_BLOCK, возникавшая, когда был включен runtime-фильтр и таблицы в JOIN возвращали один и тот же столбец несколько раз. #93526 (Alexander Gololobov).
Исправлена ошибка, из-за которой FilterStep добавлялся некорректно, когда runtime filter для JOIN применялся к таблице Merge. #94021 (Alexander Gololobov).
Исправлено приведение типов к супертипу при выполнении операции JOIN для хранилища Join с предложением USING. #94000 (Dmitry Novik).
Исправлены запросы с параллельными репликами и JOIN с таблицей, не относящейся к семейству MergeTree. #93902 (Igor Nikonov).
Устранено состояние гонки для Nullable-столбца JOIN в runtime-фильтрах. #95775 (Hechem Selmi).
Исправлена ошибка, из-за которой пустая строка преобразовывалась в NULL в таблице Join с ключом Nullable(String). #96002 (Alexey Milovidov).
Исправлена ошибка NOT_SUPPORTED, возникавшая при использовании алгоритма JOIN direct с пустой таблицей семейства MergeTree. #95935 (Vladimir Cherkasov).
Исправлены некорректные результаты запросов с внешними JOIN в сочетании с несколькими INNER JOIN, возникавшие из-за недопустимого переупорядочивания JOIN, когда условие ON внешнего JOIN ссылалось на столбцы из нескольких ранее объединённых таблиц. #96193 (Vladimir Cherkasov).
Исправлено исключение runtime filter для столбцов Tuple с Nullable-подполями. #96509 (Alexey Milovidov).
Исправлены запросы с CROSS JOIN при включенных параллельных репликах, возвращавшие некорректные результаты. #96848 (Igor Nikonov).
Исправлена ошибка, из-за которой arrayJoin создавал дублирующиеся строки при использовании с INNER JOIN и предложением WHERE; это происходило из-за того, что при частичном проталкивании предикатов фильтры, содержащие arrayJoin, ошибочно опускались ниже JOIN. #96989 (Alexey Milovidov).
Исправлен LOGICAL_ERROR, когда arrayJoin в условии WHERE ссылался на столбцы с обеих сторон JOIN. #97239 (Alexey Milovidov).
Исправлена логическая ошибка при использовании шаблона сопоставления (*) внутри лямбда-функции в предложении VALUES в JOIN с USING. #95661 (Vladimir Cherkasov).
Исправлена возможная логическая ошибка в матчере (*, table.*) и analyzer_compatibility_join_using_top_level_identifier, когда столбец, указанный в USING, имел разные типы. #95808 (Vladimir Cherkasov).
Исправлена логическая ошибка, связанная с analyzer_compatibility_join_using_top_level_identifier и столбцами ALIAS. #97297 (Vladimir Cherkasov).
Исправлен сбой в старом анализаторе при использовании JOIN с повторяющимися псевдонимами. #96405 (Ilya Golshtein).
Исправления запросов и анализатора
Исправлена ошибка, из-за которой в обработчиках предопределённых запросов завершающие пробельные символы при вставке интерпретировались как данные. #83604 (Fabian Ponce).
Исправлена ошибка в агрегации с проекцией, из-за которой возникало исключение после ALTER, изменяющих только метаданные, например при расширении элементов Enum. #84143 (Alexey Milovidov).
Исправлен проход count_distinct_optimization, работающий с оконными функциями и несколькими аргументами. #92376 (Raúl Marín).
Исправлена непоследовательность в форматировании AST для arrayElement с отрицательным литералом. #92293 (Pavel Kruglov).
Исправлена ошибка, из-за которой NOT IN с неконстантными аргументами в виде массивов возвращал неверные значения. #93314 (Yarik Briukhovetskyi).
Исправлена ошибка Not found column в оптимизации use_top_k_dynamic_filtering. #93316 (Nikolai Kochetov).
Исправлена ошибка при удалении неиспользуемых столбцов из подзапросов в случае наличия скалярного коррелированного подзапроса. #93273 (Dmitry Novik).
Исправлена ошибка, из-за которой optimize_inverse_dictionary_lookup не работал с распределёнными запросами, если ключ имел знаковый целочисленный тип. #93848 (Nihal Z. Miaji).
Исправлена ошибка, из-за которой lag/lead не работали с распределёнными запросами remote(). #93858 (Nihal Z. Miaji).
Исправлена ошибка в логике пропуска данных, если в WHERE использовалось not match(...), что приводило к некорректным результатам. #92726 (Nihal Z. Miaji).
Исправлена ошибка в логике пропуска данных: при использовании not materialize(...) или not CAST(...) в WHERE могли возвращаться некорректные результаты. #93017 (Nihal Z. Miaji).
Исправлена логическая ошибка при анализе индексов, возникавшая при использовании пустого массива в функции has. #92995 (Nihal Z. Miaji).
Исправлена логическая ошибка в редком случае, когда со столбцом Map использовался пустой кортеж. #93814 (Nihal Z. Miaji).
Исправлена ошибка, из-за которой завершались сбоем запросы, использовавшие сегментацию по PK с ложным условием. #92815 (Yarik Briukhovetskyi).
Исправлена ошибка, из-за которой при планировании запросов для движка таблицы Merge для hostName() генерировалось ILLEGAL_COLUMN при объединении локальных и удалённых/Distributed таблиц. #93286 (Jinlin).
Исправлена ошибка NO_SUCH_COLUMN_IN_TABLE в движке Merge над таблицами с псевдонимами. #92910 (Pavel Kruglov).
Исправлен SELECT-запрос с предикатом по нескольким столбцам, индексами пропуска данных bloom filter и условиями OR и NOT, который возвращал противоречивые результаты. #94026 (Shankar Iyer).
Исправлено применение проекции, если фильтр содержал подстолбцы. #93141 (Pavel Kruglov).
Исправлено повреждение _part_offset при перестроении проекций во время слияний, а также оптимизирована обработка проекций за счёт устранения лишних чтений. #93827 (Amos Bird).
Предотвращено схлопывание разных интерполированных столбцов в один и тот же столбец в блоке, когда они по сути были псевдонимами одного и того же столбца. #93197 (Yakov Olkhovskiy).
Удалены неиспользуемые столбцы при перестроении проекции во время слияния, что сократило использование памяти и уменьшило количество создаваемых временных частей. #93233 (Nikolai Kochetov).
Исправлена логическая ошибка, возникавшая в некоторых случаях при использовании отрицательного LIMIT/OFFSET в распределённых запросах. #95357 (Nihal Z. Miaji).
Исправлена логическая ошибка, возникавшая в некоторых случаях при использовании дробных значений LIMIT/OFFSET в распределённых запросах. #96475 (Nihal Z. Miaji).
Исправлена ошибка, из-за которой функция IN возвращала некорректные результаты для значений NULL при включенном transform_null_in. #95674 (Nihal Z. Miaji).
Исправлена ошибка, из-за которой IN (col) с одной ссылкой на столбец приводил к ошибке UNSUPPORTED_METHOD. #97646 (Alexey Milovidov).
Исправлено поведение optimize_syntax_fuse_functions, из-за которого sum/count/avg переписывались в sumCount(), когда аргумент агрегатной функции имел тип LowCardinality(Nullable). #96239 (Nihal Z. Miaji).
Исправлено некорректное отсечение партиций для not IN и функции not has. #96241 (Nihal Z. Miaji).
Исправлена ошибка фильтрации в PREWHERE, вызванная лямбда-выражениями. #95395 (Xiaozhe Yu).
Исправлен LOGICAL_ERROR в анализаторе запросов, возникавший, когда лямбда-выражение передавалось там, где ожидалось конкретное значение. #96892 (Alexey Milovidov).
Исправлена ошибка разыменования нулевого указателя в некоторых выражениях с лямбда-функциями. #96479 (Alexey Milovidov).
Исправлена ошибка, из-за которой SETTINGS, заданные на уровне отдельных подзапросов, не применялись к табличным функциям, таким как file, в CTE и подзапросах. #96882 (Alexey Milovidov).
Исправлена коллизия хэша в кэше условий запроса для схлопнутых констант CTE, которая могла приводить к некорректным результатам запроса. #96172 (Alexey Milovidov).
Исправлена ошибка BAD_ARGUMENTS при выполнении запросов к таблицам с лямбда-выражениями в столбцах ALIAS через табличную функцию merge() при включенном анализаторе. #97551 (Alexey Milovidov).
Исправлено поведение EXCEPT ALL и INTERSECT ALL: ранее они игнорировали кратность строк и работали как варианты DISTINCT. #96876 (Alexey Milovidov).
Исправлено падение из-за срабатывания assert в WindowTransform при большом смещении PRECEDING. #96026 (Alexey Milovidov).
Исправлено исключение, возникавшее при использовании оконных функций с group_by_use_nulls = 1 и CUBE/ROLLUP/GROUPING SETS. #96878 (Alexey Milovidov).
Исправлено взаимодействие GROUPING SETS, group_by_use_nulls и Tuple с LowCardinality, из-за которого возникала неожиданная структура блока. #96358 (Alexey Milovidov).
Исправлена логическая ошибка при GROUP BY ... WITH ROLLUP/CUBE, если ключи содержали LowCardinality(Nullable(...)) внутри Nullable(Tuple(...)). #97647 (Alexey Milovidov).
Исправлен сбой из-за assertion failure в IfTransformStringsToEnumPass, когда if или transform возвращали Nullable(String). #97002 (Alexey Milovidov).
Исправлена ошибка ACCESS_DENIED у пользователей без разрешения CREATE TEMPORARY TABLE, возникавшая, когда optimize_inverse_dictionary_lookup переписывал предикаты dictGet(...). #97484 (Nihal Z. Miaji).
Исправлено несоответствие типов в функции if между UInt64 и Int32 в редком случае распределённых запросов с PREWHERE и выводом типов. #96012 (Alexey Milovidov).
Исправлены запросы с JIT-компиляцией, связанные с типами Bool. #96013 (Alexey Milovidov).
Исправлены ошибки, приводившие к некорректным результатам, когда JIT-скомпилированные выражения преобразовывали DateTime в DateTime64 (например, в CASE/if/multiIf при смешанных типах DateTime). #96879 (Alexey Milovidov).
Исправлено использование неинициализированного значения в formatDateTime с форматтерами нефиксированной ширины. #96133 (Alexey Milovidov).
Исправлен вызов std::terminate в indexOfAssumeSorted, возникавший при вызове с несовместимыми типами. #96877 (Alexey Milovidov).
Функции Geometry теперь принимают не только тип варианта Geometry, но и отдельные подтипы геометрии. #97571 (Alexey Milovidov).
Исправлены случаи, когда индексы влияли на результаты запросов с ROW POLICY/PREWHERE и FINAL. #97076 (Yarik Briukhovetskyi).
Оптимизации чтения по порядку разрешено использовать политики доступа к строкам. #97538 (Janos Benjamin Antal).
Исправлен LOGICAL_ERROR при использовании столбцов с текстовым индексом в предложении QUALIFY. #97313 (Alexey Milovidov).
Исправлен возможный сбой, когда в условии WHERE было более 32 выражений с AND/OR. #97698 (Shankar Iyer).
Исправлено несоответствие структуры блока в оптимизации removeUnusedColumns при использовании indexHint с раскрытием * для таблиц с FINAL. #97622 (Alexey Milovidov).
Исправлено несоответствие при форматировании AST в цикле round-trip для литералов кортежей с алиасами внутри круглых скобок. #97418 (Alexey Milovidov).
Исправлена несогласованность в форматировании AST для NOT (1, 1, 1). #97653 (Alexey Milovidov).
Исправления MergeTree и хранилища
Имена файлов в MergeTree теперь всегда заменяются хешами, если файловая система не различает регистр. Ранее в macOS это могло приводить к повреждению данных, если имена столбцов/подстолбцов различались только регистром. #86559 (Pavel Kruglov).
Materialized views теперь используют базу данных, в которой были созданы, как контекст выполнения, что позволяет не указывать базу данных явно в SELECT-запросе представления. #88193 (Dmitry Kovalev).
Добавлена полная проверка разрешений на этапе создания для запроса, лежащего в основе materialized view. #89180 (pufit).
Исправлена логическая ошибка, из-за которой мутация без транзакции затрагивала части в активной транзакции, которая затем была откатана. #90469 (Shaohua Wang).
Исправлена ошибка, из-за которой system.warnings не обновлялась должным образом после преобразования обычной базы данных в базу данных с движком atomic. #90473 (sdk2).
Исправлена ошибка LOGICAL_ERROR: Storage does not support transaction, возникавшая при выполнении ATTACH AS REPLICATED. #91772 (Shaohua Wang).
Исправлена возможная ошибка FILE_DOESNT_EXIST, возникавшая после мутации разреженного столбца с ratio_of_defaults_for_sparse_serialization=0.0. #92860 (Pavel Kruglov).
Исправлена возможная ошибка FILE_DOESNT_EXIST после мутации разреженного столбца, когда ratio_of_defaults_for_sparse_serialization изменялся на 1.0 через ALTER. #93016 (Pavel Kruglov).
Исправлено возможное использование устаревших частей из-за гонки TOCTOU в shared parts. #93022 (Azat Khuzhin).
Наследование настроек информации о сериализации исходной части во время мутации в MergeTree, что устраняет возможные некорректные результаты запросов по частям, изменённым мутацией, после изменения сериализации типа данных. #92419 (Pavel Kruglov).
Исправлен возможный конфликт между столбцом и подстолбцом с одинаковым именем, который приводил к некорректной сериализации и сбоям при выполнении запросов. #92453 (Pavel Kruglov).
Исправлена ошибка NOT_FOUND_COLUMN_IN_BLOCK при вставке в таблицу с подстолбцом в выражении партиционирования. #92905 (Pavel Kruglov).
Исправлено возможное отсутствие подстолбца в MV при изменении исходной таблицы. #93276 (Pavel Kruglov).
Исправлена ошибка LOGICAL_ERROR при восстановлении ReplicatedMergeTree в случае гонки дедупликации. #93612 (Pablo Marcos).
Исправлено использование разреженного столбца для обновления TTL при прямой десериализации, что предотвращает возникновение ошибки Unexpected type of result TTL column. #93619 (Pavel Kruglov).
Восстановлены обёртки LowCardinality для результатов выражений SET, если это необходимо при TTL-агрегации. #92971 (Seva Potapov).
Исправлена ошибка Cannot add action to empty ExpressionActionsChain при ALTER TABLE REWRITE PARTS. #92754 (Azat Khuzhin).
Исправлена подстановка параметров запроса в методах аутентификации команды CREATE USER при использовании ON CLUSTER. #92777 (xiaohuanlin).
Больше не пытается удалять временные каталоги при запуске, если таблица семейства MergeTree находится на диске, доступном только для чтения. #92748 (Alexey Milovidov).
Исправлена команда CLEAR COLUMN при наличии зависимых индексов. #94057 (Raúl Marín).
Исправлено присоединение баз данных Replicated в случае, когда после перезапуска менялся межсерверный хост. #93779 (Tuan Pham Anh).
Исправлена логическая ошибка при использовании CREATE TABLE ... AS urlCluster() и движка базы данных Replicated. #92418 (Kseniia Sumarokova).
Исправлено состояние гонки между REPLACE PARTITION и фоновыми мутациями, из-за которого одновременно могли быть видны и старые, и новые данные. #96955 (Alexey Milovidov).
Устранено оставшееся состояние гонки между REPLACE PARTITION и фоновыми мутациями, из-за которого старые данные могли снова появляться. #97105 (Alexey Milovidov).
Исправлены зависшие мутации, возникавшие, когда PartCheckThread повторно ставил в очередь GET_PART для части, к которой уже была применена мутация. #97162 (Alexey Milovidov).
Исправлена проблема, из-за которой ALTER TABLE DROP COLUMN завершался сбоем, если ранее для того же столбца уже было выполнено легковесное обновление. #96861 (Anton Popov).
Исправлено разыменование нулевого указателя при применении патч-частей в легковесных обновлениях. #97583 (Alexey Milovidov).
Части с неизвестными проекциями больше не помечаются как безвозвратно утерянные. #95952 (Mikhail Artemenko).
Исправлена ошибка, из-за которой в CREATE TABLE ... CLONE AS ... игнорировался полный квалификатор исходной таблицы. #96415 (Hasyimi Bahrudin).
Исправлена неявная регенерация индекса в реплицированных таблицах при изменении метаданных. #96600 (Raúl Marín).
Исправлены неявные индексы в столбцах-алиасах и добавлена полная проверка перед их созданием. #97115 (Raúl Marín).
Исправлен случай, когда после TTL-слияния min(timestamp) возвращал эпоху (1970-01-01) через _minmax_count_projection, если все строки были отфильтрованы. #96703 (Raquel Barbadillo).
Исправлена комбинация use_const_adaptive_granularity и index_granularity_bytes (неадаптивная гранулярность), из-за которой происходил неверный расчёт. #96143 (Alexey Milovidov).
Исправлено исключение Number of rows in lazy chunk does not match number of offsets при чтении таблиц с неадаптивной гранулярностью индекса с использованием ORDER BY ... LIMIT. #97270 (Alexey Milovidov).
Исправлена регрессия в репликации с нулевым копированием: совместно используемые части могли удаляться до того, как другие реплики успевали завершить их загрузку. #95597 (filimonov).
Исправлена ошибка, из-за которой SYSTEM RESTART REPLICA удалял таблицу из базы данных, если повторное создание таблицы завершалось с ошибкой из-за исключения, не связанного с ZooKeeper, что приводило к несовпадению дайджестов метаданных в DatabaseReplicated. #97276 (Alexey Milovidov).
Исправлено исключение assert_cast, возникавшее при построении статистики по столбцам после изменения типа столбца командой ALTER TABLE MODIFY COLUMN. #97027 (Alexey Milovidov).
Если для таблицы не задана статистика, ClickHouse больше не пытается её загружать, что позволяет избежать лишних накладных расходов. #96233 (Han Fei).
Исправлена логическая ошибка There was an error: Cannot obtain error message, возникавшая при ожидании выполнения distributed DDL и одновременном удалении базы данных Replicated. #95664 (Alexander Tokmakov).
Исправлена логическая ошибка в KeyCondition, возникавшая, когда у таблицы был первичный ключ типа Nullable, а в запросе coalesce использовался с константой в качестве первого аргумента. #96340 (Alexey Milovidov).
Исправления типов данных и сериализации
Исправлена возможная ошибка при чтении подстолбца size в типах Dynamic/JSON. #95573 (Pavel Kruglov).
Исправлен сбой при применении tupleElement к JSON-массивам. #95647 (Pavel Kruglov).
Исправлена ошибка при выполнении tupleElement для JSON с вложенными путями, из-за которой возвращались неверные результаты. #95907 (Pavel Kruglov).
Исправлена ошибка, из-за которой tupleElement генерировал исключение при работе с JSON для путей с подсказками типа. #97728 (Pavel Kruglov).
Исправлена обработка пропускаемых путей в типе данных JSON — ранее JSON(SKIP path) пропускал все ключи с префиксом path (в том числе такие ключи, как pathpath), что могло приводить к потере данных. Теперь пропускается только точное совпадение ключа. #95948 (Pavel Kruglov).
Исправлено применение type_json_allow_duplicated_key_with_literal_and_nested_object к типизированным путям в JSON. #97422 (Pavel Kruglov).
Исправлена проверка на несовместимые типизированные пути в типе JSON. #92539 (Pavel Kruglov).
Исправлена ошибка при создании подсказки типа для пути 'skip' в JSON. #92842 (Pavel Kruglov).
В анализаторе исправлено разрешение динамических подстолбцов в псевдонимах столбцов. #92583 (Pavel Kruglov).
Исправлена ошибка Nested columns sizes are inconsistent with local_discriminators, вызванная неправильной оптимизацией фильтрации на месте для столбцов Variant. #96410 (Alexey Milovidov).
Исправлен сбой в ifNull при использовании аргумента Variant в GROUP BY. #96790 (Alexey Milovidov).
Исправлена логическая ошибка в FunctionVariantAdaptor для функций, которым требуются константные аргументы, таких как arrayROCAUC. #97116 (Bharat Nallan).
Исправлена ошибка LOGICAL_ERROR в FunctionVariantAdaptor, возникавшая, когда функция возвращала тип Nothing. #97213 (Alexey Milovidov).
Исправлено логическое исключение при сравнении NULL со столбцом типа Variant, содержащим типы LowCardinality. #97379 (Alexey Milovidov).
Исправлен LOGICAL_ERROR в concat, если аргумент содержал тип Variant с вложенным LowCardinality. #97654 (Alexey Milovidov).
Исправлены ошибки в результатах при преобразовании столбцов LowCardinality в Nullable. #96483 (Nihal Z. Miaji).
Исправлена корректная обработка типов LowCardinality Nullable в CAST, когда был включен cast_keep_nullable. #95747 (Alexey Milovidov).
Исправлено исключение ColumnNullable is not compatible with original, возникавшее при приведении сложных вложенных типов. #96924 (Alexey Milovidov).
Исправлена ошибка LOGICAL_ERROR при использовании isNull/isNotNull с подстолбцами типов Nullable(Tuple(... Nullable(T) ...)). #97582 (Alexey Milovidov).
Исправлена ошибка LOGICAL_ERROR при преобразовании Array в QBit. #97413 (Alexey Milovidov).
Исправлена ошибка LOGICAL_ERROR при одновременном чтении разреженного столбца и его подстолбца. #97515 (Pavel Kruglov).
Исправлена ошибка LOGICAL_ERROR при чтении подстолбца .size из разреженного Nullable(String) в Tuple с PREWHERE. #97264 (Alexey Milovidov).
Исправлен сбой из-за ошибки проверки утверждения в Set и MergeTreeIndexSet при обработке столбцов с внутренними разреженными подстолбцами. #97493 (Alexey Milovidov).
Исправлена возможная ошибка SIZES_OF_COLUMNS_DOESNT_MATCH при сортировке пустого столбца типа Tuple. #92520 (Pavel Kruglov).
Исправлены ошибки декодирования DELTA_BYTE_ARRAY в нативном ридере Parquet, затрагивавшие строковые данные с высокой повторяемостью. #91929 (Daniel Muino).
Исправлено срабатывание assertion при чтении из файла Parquet, когда часть выражения PREWHERE использовалась в другой части запроса. #90635 (Max Kainov).
Исправлена LOGICAL_ERROR в нативном ридере Parquet V3, когда столбец фильтра PREWHERE содержал значения UInt8, не являющиеся булевыми. #96594 (Alexey Milovidov).
Исправлено определение схемы Parquet в старом механизме чтения, когда JSON-столбец следовал за столбцом Tuple. #92867 (Michael Kolupaev).
Исправлено кэширование фиксированной схемы для всех файлов вместо только того файла, для которого схема была выведена, при выводе схемы через glob. #92006 (Pavel Kruglov).
Исправлено чтение формата ProtobufList из пустых файлов, из-за которого для пустых таблиц создавались фиктивные записи. #96007 (Alexey Milovidov).
Исправлена регрессия в кодеке Gorilla, возникавшая при явно указанном размере, не соответствовавшем размеру типа данных. #96118 (Alexey Milovidov).
Исправлена логическая ошибка при чтении столбца UUID из текстового столбца SQLite. #96016 (Alexey Milovidov).
Исправлено преобразование типов DateTime, Date, UUID и других в движке SQLite. #96017 (Alexey Milovidov).
Исправлено некорректное экранирование значений FixedString в запросах к SQLite и PostgreSQL. #96019 (Alexey Milovidov).
Добавлена настройка input_format_numbers_enum_on_conversion_error для преобразования чисел в значения enum. #56240 (Nikolay Degterinsky).
Исправления text index и индекса пропуска данных
Создание и материализация текстовых индексов для таблиц с частями, содержащими более 4 294 967 295 строк, временно отключены во избежание некорректных результатов запросов. #92644 (Anton Popov).
Исправлено несколько сбоев при слиянии текстовых индексов в таблицах семейства MergeTree. #92925 (Anton Popov).
Исправлены слияния текстовых индексов, построенных на сложных выражениях (например, concat(col1, col2)). #93073 (Anton Popov).
Исправлен анализ текстового индекса для столбцов типа Array, когда индекс не содержал токенов. #93457 (Anton Popov).
Исправлено перестроение текстовых индексов, созданных на основе подстолбцов. #93326 (Anton Popov).
Исправлена работа прямого чтения из текстового индекса при дублирующихся поисковых запросах. #93516 (Anton Popov).
Исправлены несогласованности в анализе текстового индекса для функций has, mapContainsKey и mapContainsValue, из-за которых они могли возвращать разные результаты в зависимости от использования текстового индекса. #93578 (Anton Popov).
Исправлен расчёт несжатых размеров текстовых индексов в system.parts. #92832 (Anton Popov).
Исправлена проблема с индексами ngrambf_v1: при длине n-граммы > 8 они генерировали исключение. #92672 (Robert Schulze).
Исправлен индекс ngram_bf для данных в кодировке, отличной от UTF-8, что приводило к чтению неинициализированной памяти. #93663 (Alexey Milovidov).
Исправлена ошибка stack-use-after-scope в индексе векторного сходства. #96259 (Alexey Milovidov).
Исправлена логическая ошибка, возникавшая, когда выражение индекса пропуска данных возвращало константный столбец. #96880 (Alexey Milovidov).
Исправлена ошибка при создании таблицы с пустым выражением () в качестве индекса, которая приводила к недопустимому доступу к памяти. #96363 (Alexey Milovidov).
Исправлена ошибка use-after-free при анализе индексов при отключённом use_primary_key и очень большом количестве дизъюнкций. #96112 (Alexey Milovidov).
Исправлено использование первичного индекса при легковесных обновлениях с подзапросами с оператором IN в условии WHERE. #92838 (Anton Popov).
При проверке индекса hypothesis теперь используется корректный код ошибки. #92559 (Raúl Marín).
Исправления для озера данных
Исправлено падение в одноузловом кластере при чтении из Iceberg в режиме split-by-buckets. #91553 (Konstantin Vedernikov).
Исправлена поддержка предоставляемых учетных данных Azure ADLS Gen2 в DataLakeCatalog — теперь разбираются ключи adls.sas-token.* из REST-каталогов Iceberg, а также исправлен разбор URL ABFSS. #93477 (Karun Anantharaman).
Исправлена ошибка в RESTful-каталоге озера данных: недопустимый auth_header нарушал работу system.tables. #96680 (Han Fei).
Исправления S3/Azure/объектного хранилища
Исправлено кэширование ключа партиционирования для движка таблицы S3 в случаях, когда использовались недетерминированные функции. #92844 (Miсhael Stetsyuk).
Исправлен assert в ReadBufferFromS3, возникавший при включенном кэше. #93809 (Kseniia Sumarokova).
Устранены возможные взаимные блокировки в DiskObjectStorageTransaction. #93810 (Kseniia Sumarokova).
Исправлены возможные сбои в потоке очистки DiskObjectStorage при большом количестве ошибок. #94048 (Kseniia Sumarokova).
Исправлено состояние гонки в copyS3File при обработке multipart_tags. #97227 (Azat Khuzhin).
Запуск некорректной мутации ALTER UPDATE для файлоподобных таблиц в объектном хранилище (S3, Azure) больше не приводил к разыменованию нулевого указателя. #96162 (Alexey Milovidov).
Исправления S3Queue
Исправлена ошибка Failed to set file processing within 100 retries в режиме упорядоченной обработки S3Queue (теперь это предупреждение, а не ошибка). #92814 (Kseniia Sumarokova).
Исправлена ошибка, связанная с настройкой S3Queue s3queue_migrate_old_metadata_to_buckets. #93232 (Kseniia Sumarokova).
Исправлена некорректная логика проверки привилегий доступа с подстановочными знаками, которая была слишком строгой. #92725 (pufit).
Пользователям запретили получать список столбцов таблицы без разрешения SHOW COLUMNS при использовании движка таблицы merge. #93695 (János Benjamin Antal).
Исправлена уязвимость из-за переполнения целого числа при десериализации состояния groupConcat, которая могла приводить к нарушениям безопасности памяти. #93426 (Raufs Dunamalijevs).
Проверено, что размер распакованного буфера соответствует ожидаемому значению. #93690 (Raúl Marín).
Исправлено некорректное поведение AccessRights::contains, из-за которого при частичном отзыве привилегий возвращались неверные результаты. #96170 (pufit).
Исправлено обновление политик доступа на уровне строк, назначенных первоначальному пользователю, в распределённых запросах. #95469 (Vitaly Baranov).
Аргумент password табличной функции redis теперь маскируется в журналах и системных таблицах. #95325 (Janos Benjamin Antal).
Исправлена утечка памяти в объектах BIO при чтении сертификатов X509. #96885 (Alexey Milovidov).
Добавлена проверка witness version в bech32 во избежание переполнения буфера. #96671 (Raúl Marín).
Исправлено замедление при выполнении запросов к системным таблицам пользователем с ограниченными привилегиями во многих базах данных. #95874 (pufit).
Исправления резервного копирования и восстановления
Исправлена ошибка Couldn't pack tar archive: Failed to write all bytes, вызванная некорректным заголовком с размером записи в архиве. #92122 (Julia Kartseva).
Исправлен сбой сервера при одновременном выполнении множества резервных копий, пытавшихся использовать одни и те же файлы. #93659 (Alexey Milovidov).
Исправлено переполнение стека при создании резервных копий в виде архивов (.zip, .tzst) на диске объектного хранилища plain_rewritable. #96872 (Alexey Milovidov).
Исправлен сбой сервера, возникавший, когда резервное копирование завершалось ошибкой из-за переполнения диска или других ошибок ввода-вывода. #96873 (Alexey Milovidov).
Исправлен возможный сбой в функции tokens() при NULL во втором аргументе. #92586 (Raúl Marín).
Исправлен сбой сервера при вызове tokens с неконстантными параметрами токенизатора. #93383 (Robert Schulze).
Исправлен возможный сбой, вызванный изменением на месте базовых константных столбцов PREWHERE при одновременном сокращении столбцов или фильтрации. #92588 (Arsen Muk).
Исправлено возможное зависание при завершении фонового пула планировщика, которое могло приводить к зависанию сервера при выключении. #93008 (Azat Khuzhin).
Исправлена проблема, из-за которой соединения оставались в некорректном состоянии после досрочной отмены распределённых запросов. #93029 (Azat Khuzhin).
Исправлена возможная ошибка Cannot finalize buffer after cancellation в estimateCompressionRatio(). #93068 (Azat Khuzhin).
Обеспечено корректное завершение работы ZooKeeper при остановке, что устраняет возможные зависания. #93602 (Azat Khuzhin).
Исправлено необработанное исключение при фоновой перезагрузке named collections в хранилище ZooKeeper. #92717 (Kseniia Sumarokova).
Исправлена ошибка использования неинициализированного значения в ReadWriteBufferFromHTTP. #94058 (Alexey Milovidov).
Исправлена ошибка, из-за которой размер буфера TraceSender не обновлялся, что приводило к чередованию операций flush из разных потоков. #93966 (Miсhael Stetsyuk).
Сохранили в QueryPipeline разделяемые указатели на хранилища, чтобы объекты IStorage не уничтожались, пока существует PipelineExecutor. #93746 (Miсhael Stetsyuk).
Исправлены несколько критических ошибок, связанных с использованием ThreadPoolCallbackRunnerLocal. #95818 (Raúl Marín).
Исправлена возможная взаимоблокировка в ProcessList из-за инверсии блокировок при срабатывании трекера оверкоммита памяти. #96182 (Antonio Andelic).
Исправлен livelock в потоке проверки отмены для запросов с большим значением max_execution_time. #96450 (Sergei Trifonov).
Исправлено зависание потока очистки в MemoryWorker из-за состояния гонки. #96819 (Antonio Andelic).
Исправлен сбой в clearCaches, возникавший из-за преждевременного уничтожения кэшированных снимков хранилища. #96995 (Alexey Milovidov).
Исправлен heap-use-after-free при CREATE TABLE с ограничениями. #96669 (Nikita Taranov).
Исправлена возможная ошибка use-after-free в StorageKafka2. #97520 (Bharat Nallan).
Исправлено состояние гонки для shutdown_called в DatabaseMaterializedPostgreSQL. #97554 (Alexey Milovidov).
Исправлено состояние гонки при параллельной загрузке сегментированного словаря HASHED, которое могло приводить к тому, что некоторые строки не загружались. #96953 (Alexey Milovidov).
Исправлена взаимная блокировка словарей, когда один словарь ссылался на таблицу Merge, которая рекурсивно ссылалась на него. #96120 (Alexey Milovidov).
Исправлено обращение за пределы допустимых границ в BaseSettings::readBinary, возникавшее, когда более новый сервер отправлял неизвестную настройку во время десериализации плана запроса. #97585 (Michael Stetsyuk).
Исправлен сбой при подключении таблицы к базе данных MaterializedPostgreSQL, если dropReplicationSlot выбрасывал исключение во время размотки стека. #96871 (Alexey Milovidov).
Освобожден поток запроса в INSERT SELECT, чтобы избежать закрытия HTTP-соединения. #92175 (Sema Checherinda).
Устранена взаимная блокировка при выполнении SHOW CREATE DATABASE для базы данных Backup. #92541 (Azat Khuzhin).
Другие исправления ошибок
Исправлена обработка пустых массивов в handleAllTokens для функций hasAllTokens и hasAnyTokens. #93328 (Anton Popov).
Исправлен период для глобальных профилировщиков: вместо установленного значения использовалось усечённое, из-за чего они пробуждались чаще. #96048 (Antonio Andelic).
Исправлено поле event_date в system.asynchronous_metric_log. #95947 (Raúl Marín).
Исправлено: для внутренних функций в system.functions вместо categories = 'Internal' отображалась пустая строка. #97315 (Robert Schulze).
Исправлена возможная логическая ошибка в словаре ip_trie, если тип ключа не был String. #97555 (Bharat Nallan).
Исправлена отладка UDF: в system.query_log.exception включён захват stderr. #92209 (Xu Jia).
Исправлена работа filterPartsByVirtualColumns с константно ложными предикатами. #97620 (Bharat Nallan).
Исправлена проблема, из-за которой ColumnConst не был материализован перед укрупнением. #97019 (Hasyimi Bahrudin).