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

v26.2 журнал изменений для Cloud

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

Изменения в запросах и синтаксисе

  • Исправлено непоследовательное форматирование запросов, вызванное некорректной подстановкой псевдонимов. Примечание: когда анализатор отключен, некоторые запросы CREATE VIEW, использующие IN со ссылкой на псевдоним, могут больше не обрабатываться. Чтобы избежать этого, убедитесь, что анализатор включён (по умолчанию он включён начиная с 24.3). #82838 (Alexey Milovidov).
  • Пустой список столбцов в JOIN USING () теперь считается синтаксической ошибкой. Ранее на этапе выполнения запроса в этом случае возвращалась ошибка INVALID_JOIN_ON_EXPRESSION, а в некоторых случаях (например, при соединении с хранилищем Join) это могло приводить к LOGICAL_ERROR. #92371 (Vladimir Cherkasov).
  • Подзапросы больше не допускаются в ORDER BY и других выражениях ключа таблицы. #96847 (Alexey Milovidov).

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

  • Добавлена поддержка Nullable(Tuple). Чтобы включить её, установите allow_experimental_nullable_tuple_type = 1. #89643 (Nihal Z. Miaji).
  • Поддержка advanced shared data для типа 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).
  • Движок базы данных Lazy удалён и больше недоступен. #93627 (Alexey Milovidov).
  • Режим 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).
  • Добавлена валидация схемы S3. #96194 (Konstantin Vedernikov).
  • Настройка apply_row_policy_after_final теперь включена по умолчанию, что гарантирует, что ROW POLICY учитывает FINAL, как это было изначально. Если вы ранее полагались на optimize_move_to_prewhere_if_final=1, чтобы применять ROW POLICY до 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).
  • Добавлена функция cosineDistanceTransposed, которая аппроксимирует косинусное расстояние между двумя точками. #93621 (Raufs Dunamalijevs).
  • Добавлена хеш-функция xxh3_128. #96055 (Raúl Marín).
  • Добавлена функция mergeTreeAnalyzeIndex() для анализа использования индекса MergeTree. #92954 (Azat Khuzhin).
  • Функции теперь поддерживают тип Variant с помощью нового FunctionVariantAdaptor. #90900 (Bharat Nallan).
  • Некоторые функции теперь можно вызывать в SQL без скобок. #94678 (Aly Kafoury).

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

  • Добавлена таблица system.user_defined_functions для отслеживания статуса загрузки и конфигурации UDF. #90340 (Xu Jia).
  • Добавлена таблица system.zookeeper_info. #90809 (Smita Kulkarni).
  • Добавлена таблица system.primes и табличная функция primes, содержащая простые числа в возрастающем порядке. #92776 (Nihal Z. Miaji).
  • В system.parts добавлен столбец files, показывающий количество файлов в каждой части данных. #94337 (Match).
  • Добавлена таблица system.fail_points для проверки существующих failpoint'ов и того, включены ли они. #96762 (Pedro Ferreira).

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

  • Добавлена поддержка текстовых индексов для столбцов Array. #89895 (Jimmy Aguilar Mena).
  • Добавлена поддержка REST-каталога Paimon. #92011 (JIaQi Tang).
  • Добавлена табличная функция icebergLocalCluster. #93323 (Anton Ivashkin).
  • Добавлен параметр базы данных 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).
  • Асинхронные вставки теперь поддерживают параллельный кворум — вставленные данные реплицируются до кворума, и при обнаружении дубликатов запрос ожидает, пока ранее вставленные данные также не будут реплицированы. #93356 (Sema Checherinda).
  • Добавлена серверная настройка insert_deduplication_version для перехода на унифицированный хеш дедупликации. #95409 (Sema Checherinda).
  • Начата миграция хешей дедупликации. #97562 (Sema Checherinda).

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

  • Добавлен синтаксис SYSTEM CLEAR [...] CACHE как более понятная альтернатива существующему SYSTEM DROP [...] CACHE. Старый синтаксис по-прежнему доступен. #93727 (Pranav Tiwari).
  • Добавлен запрос OPTIMIZE <table> DRY RUN PARTS <part names> для имитации слияний без фиксации результирующей части. Полезно для проверки корректности слияния, воспроизведения ошибок, связанных со слияниями, и оценки производительности слияний. #96122 (Anton Popov).
  • DDL-запросы с ON CLUSTER теперь могут выполняться для реплицируемых баз данных, если включена настройка ignore_on_cluster_for_replicated_database. Имя кластера будет игнорироваться. #92872 (Kirill).
  • Представлены новый синтаксис и новый фреймворк для упрощения и расширения функциональности индексов-проекций. #91844 (Amos Bird).

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

  • Добавлена настройка max_insert_block_size_bytes для более точного управления формированием вставляемых блоков. #92833 (Kirill Kopnev).
  • Добавлена настройка use_primary_key. Установите её в false, чтобы отключить отсечение гранул по первичному ключу. #93319 (Nihal Z. Miaji).
  • Добавлена настройка default_dictionary_database, которая позволяет ClickHouse разрешать внешние словари, указанные без явного имени базы данных, в заданной базе данных по умолчанию. Это упрощает миграцию от глобальных словарей, определённых в 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).
  • Улучшено проталкивание фильтров для табличных функций 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-фильтрацию в 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).
  • joinGet теперь поддерживает временные таблицы. #92973 (Eduard Karacharov).
  • Внешняя агрегация, сортировка и операция 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).
  • Фоновые операции (мутации, слияния) теперь можно настраивать независимо через профиль background, а не использовать для них общие настройки с обычными запросами из профиля default. #93905 (Arsen Muk).
  • Улучшено чтение подстолбцов за счёт корректного вычисления размера, что снижает потребление памяти и повышает скорость. #96251 (Pavel Kruglov).
  • Ограничено количество потоков конвейера, создаваемых при split_intersecting_parts_ranges_into_layers, чтобы избежать чрезмерного потребления памяти. #96478 (Nikita Taranov).
  • Текстовый индекс теперь находится в статусе GA. #96794 (Robert Schulze).
  • QBit теперь находится в статусе GA. #95358 (Raufs Dunamalijevs).
  • QBit теперь можно сравнивать на равенство. #94078 (Raufs Dunamalijevs).
  • При сохранении схемы таблицы с 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. #93852 (Kseniia Sumarokova).
  • Векторы удаления теперь также поддерживаются для deltaLakeCluster. #94365 (Kseniia Sumarokova).
  • DeltaLake теперь доступен в macOS. #95985 (Alexey Milovidov).
  • 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).
  • Записи в файлах манифеста Iceberg теперь анализируют нижние и верхние границы для имен файлов удаления по позиции, что улучшает выбор файлов данных. #93980 (Daniil Ivanik).
  • Для таблиц Iceberg включена оптимизация PREWHERE. #95476 (Konstantin Vedernikov).
  • Лимиты потоков и памяти теперь общие для средств чтения файлов данных и файлов удаления по позиции в таблицах Iceberg. #94701 (Yang Jiang).
  • Добавлена поддержка ALTER TABLE RENAME COLUMN для таблиц Iceberg. #97455 (murphy-4o).
  • Добавлена поддержка Google Cloud Storage для озер данных. #93866 (Konstantin Vedernikov).
  • Токены доступа 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).
  • flipCoordinates теперь поддерживает тип Geometry. #93303 (Bharat Nallan).
  • Для функций 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 для преобразования Numbers-to-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).

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

  • В system.mutations добавлен столбец parts_postpone_reasons для улучшения диагностики. #92206 (Shaohua Wang).
  • В system.data_skipping_indices добавлен столбец creation (implicit/explicit). #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.crash_log добавлена дополнительная информация. #94112 (Miсhael Stetsyuk).
  • В 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).
  • Пароли из URL storage больше не отображаются в журнале запросов. #93245 (Konstantin Vedernikov).

ClickHouse Keeper

  • Корректно обрабатывает пропуски в записях журнала Keeper, если логи находятся до последнего зафиксированного индекса. #90403 (Antonio Andelic).
  • Добавлена трассировка OpenTelemetry для запросов Keeper. #91332 (Miсhael Stetsyuk).
  • Добавлены новые метрики 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).
  • Теперь в Auxiliary ZooKeeper можно вставлять данные через system.zookeeper. #92092 (RinChanNOW).

Управление памятью

  • Оптимизировано резервирование места в файловом кэше — кандидаты на вытеснение теперь собираются без удержания эксклюзивной блокировки. #82764 (Kseniia Sumarokova).
  • В буфере чтения файлового кэша для удалённых движков таблиц/функций включено параллельное чтение. #71781 (Kseniia Sumarokova).
  • Снижено потребление памяти на системах не Linux за счёт включения немедленной очистки грязных страниц jemalloc. #93360 (Eduard Karacharov).
  • Очистка грязных страниц jemalloc теперь выполняется в отдельном потоке, а не в основном потоке MemoryWorker. Добавлен параметр конфигурации memory_worker_purge_total_memory_threshold_ratio для очистки на основе доли общего использования памяти. #94902 (Antonio Andelic).
  • Механизм decay для грязных страниц jemalloc теперь динамически отключается, когда ClickHouse испытывает длительное давление по памяти. #95145 (Antonio Andelic).
  • Добавлена явная проверка потребления памяти перед чтением данных из MergeTree, а размеры очередей пула потоков уменьшены на основе опыта промышленной эксплуатации. #94692 (Nikita Mikhaylov).
  • Общий лимит памяти теперь проверяется до аутентификации пользователя; при его превышении генерируется ошибка memory limit exceeded. #95003 (Nikolai Kochetov).
  • Исправлен некорректный учёт памяти для кэша условий запроса. #95478 (Nikita Mikhaylov).
  • Повышена надёжность определения использования памяти запросом для сброса на диск во время агрегации/сортировки. #92500 (Azat Khuzhin).
  • Планировщик теперь отдаёт приоритет потоку MemoryWorker при нехватке ресурсов CPU, чтобы защитить процесс. #94864 (Nikita Mikhaylov).
  • Исправлена проблема, из-за которой ClickHouse в некоторых случаях не соблюдал лимиты памяти при чтении из таблицы. #93715 (Nikita Mikhaylov).

Форматы данных

  • Модуль чтения Parquet теперь позволяет читать столбцы Tuple или Map как JSON. #92864 (Michael Kolupaev).
  • Модуль чтения Parquet теперь поддерживает пустые кортежи. #92868 (Michael Kolupaev).
  • Тип Date теперь сериализуется как нативный тип Arrow date32 в форматах Arrow/ArrowStream (ранее — uint16). Прежнее поведение можно восстановить с помощью настройки output_format_arrow_date_as_uint16. #96860 (Alexey Milovidov).
  • Формат вывода Hash теперь не зависит от размера блоков. #94503 (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).
  • Оптимизировано сжатие списка постингов с помощью simdcomp. #92871 (Peng Jian).

Резервное копирование и восстановление

  • Добавлен параметр резервного копирования backup_data_from_refreshable_materialized_view_targets, управляющий тем, следует ли создавать резервные копии данных refreshable materialized view. Целевые таблицы 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 view. #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).
  • Исправлен сбой при присоединении таблицы к базе данных 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).
  • Для release-сборок включён быстрый hardening libcxx (в первую очередь проверки выхода за границы) без заметного влияния на производительность. #94757 (Miсhael Stetsyuk).

Повышение производительности

Производительность JOIN

  • Ускорены некоторые операции hash join за счёт динамической диспетчеризации для ColumnVector::replicate. #79573 (Raúl Marín).
  • Теперь в JOIN проталкивается больше фильтров. #85556 (Nikita Taranov).
  • Расширено проталкивание фильтров из условий 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 теперь поддерживаются для RIGHT OUTER JOIN. #96183 (Hechem Selmi).
  • Оптимизация PREWHERE теперь откладывается до завершения оптимизации фильтров времени выполнения JOIN, что позволяет также проталкивать такие фильтры в 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 для запросов, объединяющих несколько отсортированных чтений с LIMIT из разных таблиц MergeTree. #96832 (Federico Ginosa).

Производительность функций и агрегации

  • JIT-компиляция теперь охватывает больше функций. #88770 (Alexey Milovidov).
  • Агрегатная функция 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 skip-индекса при 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).
  • Добавлен специализированный класс Enum AST, который хранит параметры значений в виде пар строка/целое число вместо универсальных дочерних узлов ASTLiteral, что снижает потребление памяти. #94178 (Ilya Yatsishin).
  • Оптимизировано потребление оперативной памяти объектами именованных tuple 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-to-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, вызванный нежелательным изменением плана запроса при преобразовании внешнего соединения во внутреннее. Также смягчены требования к оптимизации, чтобы она применялась при использовании инъективных функций на ключах агрегации в соединениях. #92503 (János Benjamin Antal).
  • Исправлена логическая ошибка при выполнении нескольких JOIN по константному условию с join_use_nulls. #92892 (Vladimir Cherkasov).
  • Исправлен случай NULL != NULL для full_sorting_join в столбце LowCardinality(Nullable(T)). #92924 (Vladimir Cherkasov).
  • Исправлены результаты 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-фильтры не добавлялись при соединении с уже заполненной правой таблицей. #93211 (Alexander Gololobov).
  • Исправлена ошибка NOT_FOUND_COLUMN_IN_BLOCK, возникавшая при включенном runtime filter, когда соединяемые таблицы возвращали один и тот же столбец несколько раз. #93526 (Alexander Gololobov).
  • Исправлена ошибка, из-за которой FilterStep не добавлялся должным образом при применении runtime-фильтра join к таблице Merge. #94021 (Alexander Gololobov).
  • Исправлено приведение типов к общему супертайпу при выполнении операции join для хранилища Join с предложением USING. #94000 (Dmitry Novik).
  • Исправлена работа запросов с параллельными репликами и JOIN с таблицей, отличной от MergeTree. #93902 (Igor Nikonov).
  • Исправлено состояние гонки для столбца JOIN с типом Nullable в runtime-фильтрах. #95775 (Hechem Selmi).
  • Исправлена ошибка, из-за которой в таблице Join с ключом Nullable(String) пустая строка становилась NULL. #96002 (Alexey Milovidov).
  • Исправлена ошибка NOT_SUPPORTED, возникавшая при использовании алгоритма JOIN direct с пустой таблицей MergeTree. #95935 (Vladimir Cherkasov).
  • Исправлены некорректные результаты запросов с внешними соединениями в сочетании с несколькими INNER JOIN, вызванные недопустимым изменением порядка соединений, когда условие ON внешнего соединения ссылалось на столбцы из нескольких ранее присоединённых таблиц. #96193 (Vladimir Cherkasov).
  • Исправлено исключение в runtime-фильтре для столбцов 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).
  • Исправлена возможная логическая ошибка с matcher (*, 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).
  • Исправлена ошибка при null-safe сравнении, связанная с типом Nothing. #91884 (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).
  • Исправлена ошибка в логике отсеивания данных при использовании not match(...) в WHERE, приводившая к некорректным результатам. #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, из-за которого возникала ошибка ILLEGAL_COLUMN для hostName() при слиянии локальных и удалённых/Distributed-таблиц. #93286 (Jinlin).
  • Исправлена ошибка NO_SUCH_COLUMN_IN_TABLE в движке Merge при работе с таблицами с псевдонимами. #92910 (Pavel Kruglov).
  • Исправлен запрос SELECT с предикатом по нескольким столбцам, использующий индексы пропуска на основе фильтра Блума и условия 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, из-за которой при включённом transform_null_in возвращались некорректные результаты для значений NULL. #95674 (Nihal Z. Miaji).
  • Исправлена ошибка, из-за которой IN (col) с одной ссылкой на столбец приводил к ошибке UNSUPPORTED_METHOD. #97646 (Alexey Milovidov).
  • Исправлено преобразование sum/count/avg в sumCount() параметром optimize_syntax_fuse_functions, когда аргумент агрегатной функции имел тип LowCardinality(Nullable). #96239 (Nihal Z. Miaji).
  • Исправлено некорректное отсечение партиций для функций not IN и not has. #96241 (Nihal Z. Miaji).
  • Исправлена ошибка фильтра в prewhere, вызванная лямбда-выражениями в 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).
  • Исправлен сбой, вызванный failed assertion в 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).
  • Исправлено срабатывание assert в 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).
  • Исправлены некорректные результаты, возникавшие при преобразовании DateTime в DateTime64 в JIT-скомпилированных выражениях (например, в CASE/if/multiIf со смешанными типами DateTime). #96879 (Alexey Milovidov).
  • Исправлена ошибка использования неинициализированного значения в formatDateTime со спецификаторами формата переменной ширины. #96133 (Alexey Milovidov).
  • Исправлено завершение через std::terminate в indexOfAssumeSorted при вызове с несовместимыми типами. #96877 (Alexey Milovidov).
  • Функции работы с геометрией теперь принимают не только вариантный тип 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).
  • Исправлена несогласованность при round-trip-форматировании AST для литералов кортежей с псевдонимами внутри скобок. #97418 (Alexey Milovidov).
  • Исправлена непоследовательность в форматировании AST для NOT (1, 1, 1). #97653 (Alexey Milovidov).

Исправления MergeTree и хранилища

  • В MergeTree имена файлов теперь всегда заменяются хешами, если файловая система не различает регистр. Ранее в macOS это могло приводить к повреждению данных, если имена столбцов/подстолбцов различались только регистром. #86559 (Pavel Kruglov).
  • materialized view теперь используют в качестве контекста выполнения базу данных, в которой были созданы, что позволяет опускать явное указание базы данных в SELECT-запросе представления. #88193 (Dmitry Kovalev).
  • Добавлена полная проверка прав доступа на этапе создания для запроса, лежащего в основе materialized view. #89180 (pufit).
  • Исправлена логическая ошибка, из-за которой мутация без транзакции изменяла части в активной транзакции, которая впоследствии была откатана. #90469 (Shaohua Wang).
  • Исправлена ошибка, из-за которой system.warnings некорректно обновлялась после преобразования обычной базы данных в атомарную. #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 при работе с общими частями. #93022 (Azat Khuzhin).
  • Унаследована информация о настройках сериализации исходных частей во время мутации в MergeTree, что исправляет возможные некорректные результаты запросов по изменённым частям после изменения сериализации типов данных. #92419 (Pavel Kruglov).
  • Исправлен возможный конфликт между столбцом и субстолбцом с одинаковым именем, приводивший к неправильной сериализации и ошибкам запросов. #92453 (Pavel Kruglov).
  • Исправлена ошибка NOT_FOUND_COLUMN_IN_BLOCK при вставке в таблицу с подстолбцом в выражении партиционирования. #92905 (Pavel Kruglov).
  • Исправлено возможное отсутствие подстолбца в MV при выполнении ALTER исходной таблицы. #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).
  • Исправлена материализация skip-индексов, созданных поверх подстолбцов. #93708 (Anton Popov).
  • Исправлена ошибка в 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).
  • Исправлены неявные индексы для alias-столбцов и добавлена полная проверка перед их созданием. #97115 (Raúl Marín).
  • Исправлена проблема, из-за которой min(timestamp) возвращал эпоху (1970-01-01) через _minmax_count_projection после TTL-слияния, когда все строки были отфильтрованы. #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).
  • Исправлена регрессия в zero-copy-репликации, из-за которой общие части могли удаляться до того, как другие реплики успевали их получить. #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, возникавшая при ожидании выполнения распределённого 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).
  • Исправлено падение из-за failed assertion в 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).
  • Теперь движок PostgreSQL может корректно считывать BOOLEAN[]. #96006 (Alexey Milovidov).
  • Исправлена логическая ошибка при чтении столбца UUID из столбца TEXT в SQLite. #96016 (Alexey Milovidov).
  • Исправлено преобразование типов данных в движке SQLite для DateTime, Date, UUID и других типов. #96017 (Alexey Milovidov).
  • Исправлено некорректное экранирование значений FixedString в запросах к SQLite и PostgreSQL. #96019 (Alexey Milovidov).
  • Добавлена настройка input_format_numbers_enum_on_conversion_error для преобразования чисел в Enum. #56240 (Nikolay Degterinsky).

Исправления текстового индекса и индекса пропуска

  • Создание и материализация текстовых индексов в таблицах, где части содержат более 4 294 967 295 строк, временно отключены во избежание некорректных результатов запросов. #92644 (Anton Popov).
  • Исправлено несколько сбоев при слиянии текстовых индексов в таблицах MergeTree. #92925 (Anton Popov).
  • Исправлены проблемы при слиянии текстовых индексов, построенных на сложных выражениях (например, concat(col1, col2)). #93073 (Anton Popov).
  • Исправлен анализ текстового индекса для столбцов-массивов в случае, когда индекс не содержал токенов. #93457 (Anton Popov).
  • Исправлено перестроение текстовых индексов, созданных на основе подстолбцов. #93326 (Anton Popov).
  • Исправлено прямое чтение из текстового индекса при повторяющихся поисковых запросах. #93516 (Anton Popov).
  • Исправлены расхождения в анализе текстового индекса для функций has, mapContainsKey и mapContainsValue, которые могли возвращать разные результаты в зависимости от использования текстового индекса. #93578 (Anton Popov).
  • Исправлен расчёт несжатых размеров текстовых индексов в system.parts. #92832 (Anton Popov).
  • Исправлена ошибка в индексах ngrambf_v1: длина ngram > 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 в режиме разбиения по бакетам. #91553 (Konstantin Vedernikov).
  • Исправлен кортеж в ORDER BY в Iceberg. #93225 (Konstantin Vedernikov).
  • Исправлена поддержка предоставляемых учетных данных Azure ADLS Gen2 в DataLakeCatalog — добавлен разбор ключей adls.sas-token.* из REST-каталогов Iceberg и исправлен разбор URL ABFSS. #93477 (Karun Anantharaman).
  • Заменили Date на Date32 для Iceberg. #95322 (Konstantin Vedernikov).
  • Исправлен сбой из-за ORDER BY в Iceberg. #96484 (Konstantin Vedernikov).
  • Исправлено партиционирование Iceberg. #96620 (Konstantin Vedernikov).
  • Исправлены некорректные границы файлов данных, когда ссылка на удаление по позиции была равна null в записях манифеста Iceberg. #96061 (Daniil Ivanik).
  • Добавлены дополнительные проверки параметра файла корневых метаданных в Iceberg. #96754 (Daniil Ivanik).
  • Учетные данные больше не попадают в логи каталогов Iceberg. #96831 (Konstantin Vedernikov).
  • Исправлено объединение партиционированных данных Delta Lake. #95773 (Kseniia Sumarokova).
  • Исправлен RESTful-каталог data lake, в котором из-за недопустимого auth_header нарушалась работа system.tables. #96680 (Han Fei).

Исправления S3/Azure/объектного хранилища

  • Исправлено кэширование ключа партиции в табличном движке S3 в случаях, когда использовались недетерминированные функции. #92844 (Miсhael Stetsyuk).
  • Исправлен assert в ReadBufferFromS3, возникавший при включённом кэше. #93809 (Kseniia Sumarokova).
  • Исправлена возможная ошибка в потоке очистки DiskObjectStorage. #87411 (Kseniia Sumarokova).
  • Устранены возможные взаимные блокировки в DiskObjectStorageTransaction. #93810 (Kseniia Sumarokova).
  • Исправлены возможные сбои в потоке очистки DiskObjectStorage при большом количестве ошибок. #94048 (Kseniia Sumarokova).
  • Устранена гонка данных в copyS3File, связанная с multipart_tags. #97227 (Azat Khuzhin).
  • Выполнение некорректной мутации ALTER UPDATE на файловоподобных таблицах в Объектном хранилище (S3, Azure) больше не приводило к разыменованию nullptr. #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).
  • Исправлены метаданные движков S3Queue/AzureQueue. #90498 (Kseniia Sumarokova).
  • Исправлена гонка данных в хранилище S3Queue/AzureQueue. #95385 (Kseniia Sumarokova).
  • Исправлена дедупликация при потоковом чтении из движка S3Queue/AzureQueue. #95467 (Kseniia Sumarokova).

Исправления в области безопасности и управления доступом

  • Исправлена ошибка: отсутствовала проверка доступа в SYSTEM SYNC FILE CACHE. #92372 (Kseniia Sumarokova).
  • Исправлена некорректная логика проверки грантов с подстановочными знаками при предоставлении доступа, которая была слишком строгой. #92725 (pufit).
  • Предотвращена возможность получения пользователями списка столбцов таблицы без разрешения SHOW COLUMNS при использовании табличного движка merge. #93695 (János Benjamin Antal).
  • Исправлена уязвимость, связанная с переполнением целого числа при десериализации состояния groupConcat, которая могла приводить к нарушениям безопасности памяти. #93426 (Raufs Dunamalijevs).
  • Проверен размер распакованного буфера: он соответствует ожидаемому. #93690 (Raúl Marín).
  • Исправлена проблема с отзывом ролей по умолчанию. #96103 (Vitaly Baranov).
  • Исправлена ошибка, из-за которой AccessRights::contains возвращал некорректные результаты при частичном отзыве прав. #96170 (pufit).
  • Исправлено обновление политик строк, назначенных первоначальному пользователю, в распределённых запросах. #95469 (Vitaly Baranov).
  • Аргумент password табличной функции redis теперь маскируется в логах и системных таблицах. #95325 (Janos Benjamin Antal).
  • Исправлена утечка памяти в объектах BIO при чтении сертификатов X509. #96885 (Alexey Milovidov).
  • Добавили проверку версии witness в 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).
  • Исправлен segfault при резервном копировании StorageKeeperMap, вызванный ошибкой use-after-free. #97336 (Alexey Milovidov).

Исправления сбоев и стабильности

  • Исправлен сбой, возникавший при чтении из отключённого Connection. #92807 (Raufs Dunamalijevs).
  • Исправлен возможный сбой функции tokens() при передаче null в качестве второго аргумента. #92586 (Raúl Marín).
  • Исправлен сбой сервера при вызове tokens с неконстантными параметрами токенизатора. #93383 (Robert Schulze).
  • Исправлен потенциальный сбой, вызванный изменением на месте базовых const-столбцов PREWHERE при одновременном уменьшении столбцов или их фильтрации. #92588 (Arsen Muk).
  • Исправлено возможное зависание при завершении работы фонового пула планировщика, которое могло приводить к зависанию сервера при завершении работы. #93008 (Azat Khuzhin).
  • Исправлена проблема, из-за которой подключение оставалось в неисправном состоянии после предварительной отмены распределённых запросов. #93029 (Azat Khuzhin).
  • Устранена возможная ошибка Cannot finalize buffer after cancellation в estimateCompressionRatio(). #93068 (Azat Khuzhin).
  • Обеспечена корректная финализация ZooKeeper при завершении работы для устранения возможных зависаний. #93602 (Azat Khuzhin).
  • Исправлено необработанное исключение, возникавшее во время фоновой перезагрузки именованных коллекций при использовании хранилища ZooKeeper. #92717 (Kseniia Sumarokova).
  • Исправлено обращение к неинициализированному значению в ReadWriteBufferFromHTTP. #94058 (Alexey Milovidov).
  • Исправлена ошибка, из-за которой не обновлялся размер буфера TraceSender, что приводило к чередующимся сбросам из разных потоков. #93966 (Miсhael Stetsyuk).
  • Сохранили разделяемые указатели на объекты хранилища в QueryPipeline, чтобы объекты IStorage не уничтожались, пока работает PipelineExecutor. #93746 (Miсhael Stetsyuk).
  • Исправлено возможное падение при выполнении распределённых запросов в случае отмены. #95466 (Aleksandr Musorin).
  • Исправлен сбой при одновременном выполнении DROP WORKLOAD и запросов. #95856 (Alexey Milovidov).
  • Исправлена гонка данных при DROP WORKLOAD. #96614 (Sergei Trifonov).
  • Исправлено несколько критических ошибок, связанных с работой 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).
  • Исправлено возможное обращение к уже освобождённой памяти в 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 благодаря включению захвата stderr в system.query_log.exception. #92209 (Xu Jia).
  • Исправлен filterPartsByVirtualColumns для предикатов, константно равных false. #97620 (Bharat Nallan).
  • Исправлена ошибка, из-за которой материализация ColumnConst не выполнялась перед squashing. #97019 (Hasyimi Bahrudin).