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

Несовместимые с предыдущими версиями изменения

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

  • Исправлено непоследовательное форматирование запросов, вызванное некорректной подстановкой псевдонимов. Примечание: когда анализатор отключен, некоторые запросы 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).
  • Движок базы данных 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, чтобы применять политики строк до 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_queuesystem.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).
  • Асинхронная вставка теперь поддерживает параллельный quorum — вставленные данные реплицируются в кворум, и при обнаружении дубликатов запрос ожидает, пока ранее вставленные данные тоже не будут реплицированы. #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 теперь можно выполнять для баз данных 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).
  • 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).
  • Фоновые операции (mutate, merge) теперь можно настраивать независимо через профиль 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).
  • Записи в manifest file Iceberg теперь разбирают нижние и верхние границы для имен файлов position delete file, что улучшает выбор файлов данных. #93980 (Daniil Ivanik).
  • Для таблиц Iceberg включена оптимизация PREWHERE. #95476 (Konstantin Vedernikov).
  • Лимиты потоков и памяти теперь общие для средств чтения файлов данных и position delete file в таблицах 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 для проверки существования элемента при преобразовании чисел в 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.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 больше не отображаются в журнале запросов. #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).
  • Теперь через 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).
  • Исправлен некорректный учёт памяти для кэша условий запроса. #95478 (Nikita Mikhaylov).
  • Улучшено определение использования памяти запросом при spilling to disk во время агрегации и сортировки. #92500 (Azat Khuzhin).
  • Планировщик теперь отдаёт приоритет потоку MemoryWorker при нехватке процессорного времени, чтобы защитить процесс. #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).
  • Оптимизировано сжатие 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 проталкивается больше фильтров. #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 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).

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

  • 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 во время 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).
  • Исправлена ошибка в 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).
  • Исправлена ошибка в логике пропуска данных, если в 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).
  • Исправлена материализация индексов пропуска данных, созданных поверх подстолбцов. #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).
  • Исправлены неявные индексы в столбцах-алиасах и добавлена полная проверка перед их созданием. #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).
  • Движок PostgreSQL теперь корректно читает BOOLEAN[]. #96006 (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).
  • Исправлен кортеж в ORDER BY для Iceberg. #93225 (Konstantin Vedernikov).
  • Исправлена поддержка предоставляемых учетных данных Azure ADLS Gen2 в DataLakeCatalog — теперь разбираются ключи adls.sas-token.* из REST-каталогов Iceberg, а также исправлен разбор URL ABFSS. #93477 (Karun Anantharaman).
  • Для Iceberg тип Date заменён на Date32. #95322 (Konstantin Vedernikov).
  • Исправлен сбой, возникавший при использовании ORDER BY в Iceberg. #96484 (Konstantin Vedernikov).
  • Исправлено партиционирование в Iceberg. #96620 (Konstantin Vedernikov).
  • Исправлены некорректные границы для файлов данных в записях манифеста Iceberg, когда ссылка на position delete была NULL. #96061 (Daniil Ivanik).
  • Добавлены дополнительные проверки для настройки корневого файла метаданных в Iceberg. #96754 (Daniil Ivanik).
  • В каталогах Iceberg учетные данные больше не записываются в журнал. #96831 (Konstantin Vedernikov).
  • Исправлено слияние партиционированных данных Delta Lake. #95773 (Kseniia Sumarokova).
  • Исправлена ошибка в RESTful-каталоге озера данных: недопустимый 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) больше не приводил к разыменованию нулевого указателя. #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 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).
  • Исправлен segfault при резервном копировании StorageKeeperMap, вызванный use-after-free. #97336 (Alexey Milovidov).

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

  • Исправлен сбой при чтении из отключённого Connection. #92807 (Raufs Dunamalijevs).
  • Исправлен возможный сбой в функции 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).
  • Устранён возможный сбой при отмене распределённых запросов. #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).
  • Исправлена возможная ошибка 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).
Последнее изменение 10 июня 2026 г.