> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-vortex-format.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Журнал изменений Cloud v26.6

> Журнал изменений v26.6

<h2 id="backward-incompatible-changes">
  Обратно несовместимые изменения
</h2>

<h3 id="query-and-syntax-changes">
  Изменения в запросах и синтаксисе
</h3>

* Оконные функции `RANK` и `DENSE_RANK` теперь отклоняют аргументы и генерируют исключение `NUMBER_OF_ARGUMENTS_DOESNT_MATCH` в соответствии со стандартом SQL. Ранее запросы вида `RANK(x) OVER (ORDER BY id)` принимались без каких-либо сообщений, а аргумент игнорировался, что часто вводило пользователей в заблуждение. Чтобы вернуть прежнее нестрогое поведение, установите `allow_rank_dense_rank_arguments = 1`. [#104324](https://github.com/ClickHouse/ClickHouse/pull/104324) ([groeneai](https://github.com/groeneai)).

<h3 id="data-type-changes">
  Изменения типов данных
</h3>

* `icebergHash` и `icebergBucket` теперь выдают явную ошибку при передаче аргументов типов `Int128`, `UInt128`, `Int256`, `UInt256` и `Decimal256`. Ранее они молча усекали значения большей разрядности, что приводило к коллизиям хешей. Спецификация Iceberg определяет хеширование только для 32- и 64-битных целых чисел и десятичных чисел с точностью до 38; для сохранения прежнего поведения значений, которые помещаются, приведите их к типу `Int64` или `Decimal128`. [#105866](https://github.com/ClickHouse/ClickHouse/pull/105866) ([Algunenano](https://github.com/Algunenano)).
* `toUUID`, `toUUIDOrNull`, `toUUIDOrZero`, `toUUIDOrDefault`, `CAST` к `UUID` и `Nullable(UUID)`, `accurateCastOrNull` к `UUID`, а также входные форматы, разбирающие UUID из текста (`Avro`, `MsgPack`, `JSONExtract`, ...), теперь отклоняют строки правильной длины, но содержащие не шестнадцатеричные символы. Ранее такие входные данные молча превращались в вымышленный UUID из-за выхода за пределы таблицы поиска шестнадцатеричных цифр. Теперь `toUUID` генерирует исключение `CANNOT_PARSE_UUID`, а варианты `Or*` возвращают `NULL`, нулевой UUID или переданное значение по умолчанию. [#104370](https://github.com/ClickHouse/ClickHouse/pull/104370) ([groeneai](https://github.com/groeneai)).
* Типы `Dynamic` и `Variant` теперь проверяются в оконном выражении `PARTITION BY`; ранее эта проверка не выполнялась при отключённой настройке `allow_suspicious_types_in_group_by`. Запросы, разбивающие окно по столбцу типа `Dynamic` или `Variant`, теперь генерируют исключение, если не задано `allow_suspicious_types_in_group_by = 1`. [#105450](https://github.com/ClickHouse/ClickHouse/pull/105450) ([Avogar](https://github.com/Avogar)).

<h3 id="storage-and-index-changes">
  Изменения хранилища и индексов
</h3>

* Запретить вложенные типы Dynamic/Variant в агрегатных функциях min/max и индексах minmax. Ранее проверялись только Dynamic/Variant верхнего уровня. [#105468](https://github.com/ClickHouse/ClickHouse/pull/105468) ([Avogar](https://github.com/Avogar)).
* Значение по умолчанию настройки сервера `insert_deduplication_version` меняется с `compatible_double_hashes` на `new_unified_hash`. Дедупликация вставок теперь выполняется для всего вставляемого блока (на одну вставку), а не для каждой части/партиции: повторная попытка той же вставки по-прежнему дедуплицируется, однако две разные вставки, создающие идентичную часть, больше не дедуплицируются между собой, как и вставки тех же строк в ином порядке. Чтобы восстановить прежнее поведение, установите `insert_deduplication_version = compatible_double_hashes`. Дедупликация асинхронных вставок при `new_unified_hash` также определяется окном синхронной дедупликации: как её включение (`replicated_deduplication_window`), так и срок хранения (`replicated_deduplication_window_seconds`, по умолчанию 1 час) используют настройки синхронной дедупликации, поэтому `*_for_async_inserts` устарели и применяются только к `old_separate_hashes` / `compatible_double_hashes`. Инстансы, обновляющиеся напрямую с релиза, где по умолчанию использовался `old_separate_hashes`, должны сначала работать с `compatible_double_hashes`, пока не истечёт самое длительное применимое окно дедупликации (включая `replicated_deduplication_window_for_async_inserts`, по умолчанию одна неделя, если используются асинхронные вставки), и только затем переходить на `new_unified_hash`. Асинхронные рабочие нагрузки, переходящие с `compatible_double_hashes`, должны сначала увеличить `replicated_deduplication_window[_seconds]` до размера асинхронного окна (и проработать полный период этого окна), остановить асинхронные вставки или остаться на `compatible_double_hashes`, поскольку `new_unified_hash` больше не проверяет ID `async_blocks`, хранящиеся дольше. [#107886](https://github.com/ClickHouse/ClickHouse/pull/107886) ([CheSema](https://github.com/CheSema)).
* Исправлена проблема, при которой `hasToken` с искомой подстрокой, содержащей разделитель, молча возвращал результаты через текстовый индекс вместо вызова ошибки `BAD_ARGUMENTS`. [#108189](https://github.com/ClickHouse/ClickHouse/pull/108189) ([Ergus](https://github.com/Ergus)).

<h3 id="removed-features">
  Удалённые возможности
</h3>

* Больше нельзя использовать устаревшие ридер и writer Parquet на основе Arrow. Вместо них всегда используется native-реализация. Настройки, которые выбирали старые реализации или管 настраивали их, теперь устарели и игнорируются: `input_format_parquet_use_native_reader_v3`, `output_format_parquet_use_custom_encoder`, `output_format_parquet_version`, `output_format_parquet_compliant_nested_types` и `output_format_parquet_unsupported_types_as_binary`. Native writer всегда записывает Parquet V2.6+ с совместимыми вложенными типами и генерирует исключение `UNKNOWN_TYPE` для неподдерживаемых типов вместо записи их как необработанных двоичных данных. [#100949](https://github.com/ClickHouse/ClickHouse/pull/100949) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Удалены устаревшая настройка `allow_experimental_query_deduplication` и связанное с ней неподдерживаемое экспериментальное поведение дедупликации запросов. [#99398](https://github.com/ClickHouse/ClickHouse/pull/99398) ([devcrafter](https://github.com/devcrafter)).
* `ALTER TABLE ... REPLACE PARTITION ... FROM ...` больше не удаляет молча данные партиции назначения, если в исходной таблице нет частей в указанной партиции. Ранее такой запрос удалял партицию назначения и ничего не записывал вместо неё. Теперь по умолчанию он отклоняется с ошибкой `BAD_ARGUMENTS`. Это обратно несовместимое изменение: `REPLACE PARTITION` из пустого источника, которое раньше успешно выполнялось (очищая партицию назначения), теперь после обновления сгенерирует исключение. Чтобы восстановить прежнее поведение с молчаливой очисткой, задайте новую настройку `allow_replace_partition_from_empty_source = 1` (для отдельного запроса или в профиле) либо установите `compatibility` в значение `26.5` или ниже. Чтобы явно удалить данные партиции назначения, используйте `ALTER TABLE ... DROP PARTITION ...`. [#104939](https://github.com/ClickHouse/ClickHouse/pull/104939) ([groeneai](https://github.com/groeneai)).
* Удалены экспериментальные функции KQL (Kusto) `array_sort_asc` и `array_sort_desc`, а также их SQL-бэкенды `kql_array_sort_asc` и `kql_array_sort_desc`. Эти функции были экспериментальными, реализованы некачественно и приводили к ошибкам корректности и парсера. Запросы, использующие эти имена, теперь возвращают `UNKNOWN_FUNCTION`. [#108101](https://github.com/ClickHouse/ClickHouse/pull/108101) ([groeneai](https://github.com/groeneai)).

<h2 id="new-features">
  Новые возможности
</h2>

<h3 id="functions">
  Функции
</h3>

* Добавлена поддержка функции PromQL `histogram_quantile` в табличных функциях `prometheusQuery` и `prometheusQueryRange`. Это позволяет вычислять квантили по бакетам классических гистограмм Prometheus, обозначенным меткой `le`. [#103477](https://github.com/ClickHouse/ClickHouse/pull/103477) ([Yasumoto](https://github.com/Yasumoto)).
* Добавлена функция `h3PolygonToCellsWithContainment`, поддерживающая режимы включения по центру, полного включения и пересечения. [#104455](https://github.com/ClickHouse/ClickHouse/pull/104455) ([yousefQadry](https://github.com/yousefQadry)).
* Теперь можно указывать необязательный аргумент точности для функций `formatReadableSize`, `formatReadableDecimalSize` и `formatReadableQuantity`, задающий количество знаков после десятичной точки. Значение по умолчанию — 2, как и ранее. [#104648](https://github.com/ClickHouse/ClickHouse/pull/104648) ([antoniofilipovic](https://github.com/antoniofilipovic)).
* Добавлены агрегатные псевдонимы `min_by` и `max_by` для `argMin` и `argMax`. [#105712](https://github.com/ClickHouse/ClickHouse/pull/105712) ([itsjoeoui](https://github.com/itsjoeoui)).

<h3 id="sql-and-query-features">
  Возможности SQL и запросов
</h3>

* `formatReadableTimeDelta` теперь принимает на вход выражения `INTERVAL` с типом, отличным от `Month` и `Year`. [#64315](https://github.com/ClickHouse/ClickHouse/pull/64315) ([Beetelbrox](https://github.com/Beetelbrox)).
* Добавлена поддержка выходного формата PNG, позволяющая напрямую визуализировать результаты запросов в виде изображений PNG. [#74691](https://github.com/ClickHouse/ClickHouse/pull/74691) ([m7kss1](https://github.com/m7kss1)).
* Добавлена возможность резервирования памяти для рабочих нагрузок. См. документацию по [планированию рабочих нагрузок](https://clickhouse.com/docs/operations/workload-scheduling). [#82414](https://github.com/ClickHouse/ClickHouse/pull/82414) ([serxa](https://github.com/serxa)).
* Добавлены параметры `IPV4_PREFIX_BITS` и `IPV6_PREFIX_BITS` для квот с ключом `IP_ADDRESS` или `FORWARDED_IP_ADDRESS`, позволяющие применять лимиты квот к IP-подсетям вместо отдельных полных адресов. [#89270](https://github.com/ClickHouse/ClickHouse/pull/89270) ([adityachopra29](https://github.com/adityachopra29)).
* Реализован `ADD ENUM VALUES` в запросах `ALTER TABLE`, упрощающий добавление новых значений в существующий тип Enum без необходимости повторно указывать все текущие значения Enum. [#93830](https://github.com/ClickHouse/ClickHouse/pull/93830) ([ilejn](https://github.com/ilejn)).
* Добавлен входной формат `GeoJSON` для чтения. [#98124](https://github.com/ClickHouse/ClickHouse/pull/98124) ([mneedham](https://github.com/mneedham)).
* В текстовый индекс добавлен постпроцессор, преобразующий токены после токенизации. [#98939](https://github.com/ClickHouse/ClickHouse/pull/98939) ([Ergus](https://github.com/Ergus)).
* Добавлена поддержка TTL-узлов в ClickHouse Keeper, включаемая явно. TTL-узлы автоматически удаляются по истечении настроенного времени жизни и не могут иметь дочерних узлов. [#100397](https://github.com/ClickHouse/ClickHouse/pull/100397) ([scanhex12](https://github.com/scanhex12)).
* Добавлено хранение позиций токенов для текстовых индексов, поддерживающее точный поиск `hasPhrase`. Включите аргумент индекса `support_phrase_search` и настройку `MergeTree` `allow_experimental_text_index_phrase_search`. [#103172](https://github.com/ClickHouse/ClickHouse/pull/103172) ([ahmadov](https://github.com/ahmadov)).
* Добавлены функции arrayTopK и arrayBottomK: - `arrayTopK(k, array)` возвращает K наибольших элементов в порядке убывания - `arrayBottomK(k, array)` возвращает K наименьших элементов в порядке возрастания. [#104563](https://github.com/ClickHouse/ClickHouse/pull/104563) ([vitlibar](https://github.com/vitlibar)).
* Добавлена поддержка выбора столбцов по шаблону имени с помощью `* LIKE '<pattern>'` и `* ILIKE '<pattern>'`, включая квалифицированные формы, такие как `table.* LIKE '<pattern>'` и `table.* ILIKE '<pattern>'`. `LIKE` сопоставляет имена столбцов с учётом регистра, `ILIKE` — без учёта регистра. [#104569](https://github.com/ClickHouse/ClickHouse/pull/104569) ([niyue](https://github.com/niyue)).
* Добавлены непрерывные запросы для таблиц `MergeTree`, использующие последовательность чтений снимков. [#105114](https://github.com/ClickHouse/ClickHouse/pull/105114) ([Michicosun](https://github.com/Michicosun)).
* Добавлен формат `RowBinaryWithNamesAndTypesAndDefaults` для улучшения поддержки изменения схемы. [#105736](https://github.com/ClickHouse/ClickHouse/pull/105736) ([mzitnik](https://github.com/mzitnik)).
* Добавлены функции для формирования векторных тайлов Mapbox непосредственно из SQL: `MVTEncodeGeom` проецирует геометрию в пиксельное пространство тайла slippy-map и обрезает её, `MVTEncode` агрегирует проецированные геометрии группы в бинарное представление однослойного тайла, а `MVTBoundingBox` / `MVTBoundingBoxMercator` возвращают ограничивающий прямоугольник тайла для ограничения строк его границами. Поддерживаются геометрии Point, line и polygon. Также доступны под псевдонимами PostGIS `ST_AsMVTGeom` и `ST_AsMVT`. [#106107](https://github.com/ClickHouse/ClickHouse/pull/106107) ([saarthak2002](https://github.com/saarthak2002)).
* Добавлены `LOCALTIME` и `LOCALTIMESTAMP` (стандартный SQL / синтаксис PostgreSQL). `LOCALTIMESTAMP` — псевдоним `now()` (возвращает `DateTime`); `LOCALTIME` возвращает текущее время суток в виде значения `Time`. [#106139](https://github.com/ClickHouse/ClickHouse/pull/106139) ([thomas-cabral](https://github.com/thomas-cabral)).
* Добавлены две новые стратегии `load_balancing`: `hostname_longest_common_prefix` и `hostname_longest_common_suffix`. Они выбирают реплику, имя хоста которой имеет самый длинный общий префикс (соответственно, суффикс) с именем хоста инициатора. Эти стратегии полезны, когда код центра обработки данных указан в качестве префикса или суффикса имён хостов с числовыми сегментами переменной длины: в таких случаях существующие стратегии `nearest_hostname` и `hostname_levenshtein_distance` могут выбирать неправильную реплику. [#107360](https://github.com/ClickHouse/ClickHouse/pull/107360) ([den-crane](https://github.com/den-crane)).
* Новые функции `quantizeBFloat16ToInt8` и `dequantizeInt8ToBFloat16`: скалярный кодек, сжимающий компоненты embedding до 8 бит с помощью 256-уровневого гауссовского квантователя Ллойда — Макса; коды Int4/Int2/двоичные коды можно получить из него усечением битов. [#108102](https://github.com/ClickHouse/ClickHouse/pull/108102) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="table-engines-and-storage">
  Движки таблиц и хранилище
</h3>

* Добавлена поддержка записи в Azure Data Lake Storage Gen2. [#105406](https://github.com/ClickHouse/ClickHouse/pull/105406) ([scanhex12](https://github.com/scanhex12)).

<h3 id="settings-and-configuration">
  Настройки и конфигурация
</h3>

* Добавлена настройка `output_format_always_write_decimal_point_in_float_and_decimal`, которая всегда выводит десятичную точку для чисел с плавающей запятой и `Decimal` в текстовых форматах, даже если значение является целым числом. Например, выводится `1.` вместо `1`. По умолчанию отключена. [#62614](https://github.com/ClickHouse/ClickHouse/pull/62614) ([qoega](https://github.com/qoega)).
* Добавлена новая неизменяемая настройка `MergeTree` `allow_tuple_element_aggregation`, по умолчанию отключенная. Когда она включена, `SummingMergeTree`, `AggregatingMergeTree` и `CoalescingMergeTree` рекурсивно разворачивают столбцы `Tuple` и агрегируют каждый конечный элемент независимо во время слияний, как если бы это был столбец верхнего уровня: `SummingMergeTree` суммирует его, `AggregatingMergeTree` объединяет состояние агрегатной функции, а `CoalescingMergeTree` сохраняет последнее значение, отличное от NULL. Настройка должна быть указана при создании таблицы и молча игнорируется движками, которые ее не поддерживают. [#98039](https://github.com/ClickHouse/ClickHouse/pull/98039) ([JingYanchao](https://github.com/JingYanchao)).
* Добавлена настройка `output_format_float_precision` для управления количеством десятичных знаков в текстовом выводе чисел с плавающей запятой. [#99721](https://github.com/ClickHouse/ClickHouse/pull/99721) ([phulv94](https://github.com/phulv94)).
* Добавлены настройки таблиц семейства MergeTree `materialize_projections_on_insert` и `materialize_projections_on_merge`. Когда `materialize_projections_on_insert = 0`, операции INSERT пропускают создание частей проекций, что повышает пропускную способность вставки для таблиц с большим количеством проекций. Когда `materialize_projections_on_merge = 1`, при слиянии заново создается проекция, отсутствующая во всех исходных частях, поэтому проекции можно создавать во время слияний, а не при вставке. Слияния по-прежнему объединяют только части с одинаковым набором проекций. [#100993](https://github.com/ClickHouse/ClickHouse/pull/100993) ([cwurm](https://github.com/cwurm)).
* Добавлена новая настройка S3Queue `after_processing_move_preserve_path`. Если она включена вместе с `after_processing='move'` и `after_processing_move_prefix`, обработанные объекты перемещаются с сохранением полного исходного пути под префиксом пункта назначения, а не сводятся только к имени файла. [#105354](https://github.com/ClickHouse/ClickHouse/pull/105354) ([asya-ch](https://github.com/asya-ch)).
* Добавлены элементы конфигурации HTTP-обработчика `url_prefix` и `full_url_prefix` для сопоставления всех путей с заданным префиксом, а также отдельные элементы `url_regexp`, `full_url_regexp` и `headers_regexp`. Устаревшая форма `<url>regex:...</url>` по-прежнему поддерживается. [#107492](https://github.com/ClickHouse/ClickHouse/pull/107492) ([vitlibar](https://github.com/vitlibar)).

<h3 id="authentication">
  Аутентификация
</h3>

* Добавлены необязательные учётные данные `external_id` для ролевого доступа к S3. [#106941](https://github.com/ClickHouse/ClickHouse/pull/106941) ([eliangidoni](https://github.com/eliangidoni)).
* В таблицу `system.session_log` добавлена информация о TLS-сертификате клиента (subjects, серийный номер, issuer и срок действия) для улучшения обсервабилити аутентификации на основе сертификатов. [#107679](https://github.com/ClickHouse/ClickHouse/pull/107679) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="system-tables">
  Системные таблицы
</h3>

* Добавлена таблица `system.iceberg_files`, предоставляющая метаданные отдельных файлов таблиц Iceberg: по одной строке для каждого файла данных или файла удаления в текущем снимке таблицы. [#104415](https://github.com/ClickHouse/ClickHouse/pull/104415) ([asya-ch](https://github.com/asya-ch)).
* Добавлены гипотетические (what-if) индексы пропуска данных. Используйте `CREATE HYPOTHETICAL INDEX ... ON t (expr) TYPE ...`, чтобы определить виртуальный индекс пропуска данных, действующий в рамках сеанса, а затем `EXPLAIN WHATIF SELECT ...`, чтобы оценить коэффициент пропуска и стоимость без его материализации. Определённые индексы отображаются в новой таблице `system.hypothetical_indexes`. [#104608](https://github.com/ClickHouse/ClickHouse/pull/104608) ([yariks5s](https://github.com/yariks5s)).
* Добавлена системная таблица `system.constraints`, содержащая информацию обо всех ограничениях CHECK и ASSUME во всех таблицах, включая имя, тип и выражение ограничения. [#105337](https://github.com/ClickHouse/ClickHouse/pull/105337) ([PedroTadim](https://github.com/PedroTadim)).
* Добавлена системная таблица `system.documentation`, объединяющая в одной таблице встроенную справочную документацию по унифицированным компонентам системы (функциям, движкам таблиц, типам данных, настройкам, форматам и другим); документация представлена в формате Markdown. [#107463](https://github.com/ClickHouse/ClickHouse/pull/107463) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h2 id="experimental-features">
  Экспериментальные возможности
</h2>

* Добавлены экспериментальный алгоритм изменения порядка внутренних JOIN `dphyp` в качестве варианта настройки `query_plan_optimize_join_order_algorithm`, а также настройка `query_plan_optimize_join_order_max_searched_plans`, ограничивающая поиск порядка JOIN и переключающаяся на следующий алгоритм в цепочке при достижении ограничения; установите значение `0`, чтобы сохранить прежнее неограниченное поведение поиска. [#98798](https://github.com/ClickHouse/ClickHouse/pull/98798) ([davenger](https://github.com/davenger)).
* Добавлен отложенный режим применения списков вхождений для текстового индекса. При включении с помощью `SET allow_experimental_text_index_lazy_apply = 1` и `SET text_index_posting_list_apply_mode = 'lazy'` списки вхождений декодируются по требованию на уровне упакованных блоков с помощью курсоров вместо полной материализации в Roaring Bitmaps, что сокращает использование памяти и время CPU при выполнении выборочных запросов к текстовому индексу. [#100035](https://github.com/ClickHouse/ClickHouse/pull/100035) ([fastio](https://github.com/fastio)).
* Разрешено подключать обработчики prometheus к основному HTTP-порту с необязательным префиксом. [#104975](https://github.com/ClickHouse/ClickHouse/pull/104975) ([JTCunning](https://github.com/JTCunning)).
* Добавлена экспериментальная настройка MergeTree `packed_skip_index_max_bytes`, которая объединяет небольшие подстримы индексов пропуска в один архив `skp_idx.packed` для каждой части, снижая нагрузку на inode при наличии в таблице множества индексов пропуска. Решение принимается для каждого подстрима при записи: подстримы, сериализованный размер которых не превышает порог, помещаются в архив, а более крупные сохраняют отдельную структуру `skp_idx_<name>.idx2` / `.mrk2`. В одной части могут сочетаться разные структуры. Полнотекстовые индексы не поддерживаются и всегда хранятся в отдельных файлах. Значение по умолчанию — 0 (упаковка отключена). [#105321](https://github.com/ClickHouse/ClickHouse/pull/105321) ([Algunenano](https://github.com/Algunenano)).
* Добавлена поддержка сериализации `Buffers` для WebAssembly UDF с использованием `ABI BUFFERED_V1`, а также настройка функции WASM UDF `webassembly_udf_enable_fuel`, которая сохраняется. [#105574](https://github.com/ClickHouse/ClickHouse/pull/105574) ([antonio2368](https://github.com/antonio2368)).
* Многостадийное выполнение распределённого запроса: планировщик разделяет план запроса на стадии, соединённые обменами scatter / broadcast / gather / shuffle, и направляет фрагменты плана на узлы-воркеры. Данные между стадиями передаются потоком через TCP или через временные файлы в общем объектном хранилище; поддерживаются распределённые shuffle- и broadcast-hash JOIN, shuffle-агрегация и распределённая сортировка. Эта возможность экспериментальная и по умолчанию отключена. [#106020](https://github.com/ClickHouse/ClickHouse/pull/106020) ([davenger](https://github.com/davenger)).
* Экспериментальный движок плана распределённого запроса (`make_distributed_plan`) теперь может использовать отдельные порты диспетчеризации задач и потокового обмена для каждого воркера, настраиваемые для каждой реплики в `<remote_servers>` с помощью `stateless_worker_port` и `streaming_exchange_port`. Если они не заданы, используются прежние порты уровня сервера (`stateless_worker_client.port` и `distributed_query.streaming_exchange_port`). Это позволяет запускать несколько воркеров на одном хосте. [#107885](https://github.com/ClickHouse/ClickHouse/pull/107885) ([davenger](https://github.com/davenger)).

<h2 id="performance-improvements">
  Повышение производительности
</h2>

<h3 id="join-performance">
  Производительность JOIN
</h3>

* Реализовано отложенное применение индексов селектора и репликации для JOIN, за которым следует селективный LIMIT, TopN или другой JOIN. Чтобы задать количество столбцов полезной нагрузки, необходимое для включения отложенных индексов селектора, используйте настройку `query_plan_min_columns_for_join_lazy_indexing` (0 означает, что оптимизация отключена). Чтобы задать LIMIT, при котором применяется оптимизация, используйте настройку `query_plan_max_limit_for_join_lazy_indexing`. [#98883](https://github.com/ClickHouse/ClickHouse/pull/98883) ([m-selmi](https://github.com/m-selmi)).
* `ASOF JOIN` теперь может использовать алгоритм JOIN `parallel_hash`, распараллеливая построение по различным значениям ключей равенства. Ранее ASOF безусловно исключался из использования `parallel_hash`. [#105375](https://github.com/ClickHouse/ClickHouse/pull/105375) ([gregakinman](https://github.com/gregakinman)).
* FixedHashMap хеш-JOIN используется в качестве фильтра времени выполнения JOIN на стороне probe. Если хеш-таблица на стороне build является FixedHashMap или может быть преобразована в неё, она публикуется как фильтр времени выполнения и заменяет `Set`/`BloomFilter`, который иначе был бы установлен `BuildRuntimeFilterStep`. Управляется новой настройкой `enable_join_runtime_filter_shared_fixed_hash_table` (по умолчанию `true`). [#105640](https://github.com/ClickHouse/ClickHouse/pull/105640) ([wudidapaopao](https://github.com/wudidapaopao)).
* Изменение порядка DP JOIN теперь поддерживается с параллельными репликами. [#105889](https://github.com/ClickHouse/ClickHouse/pull/105889) ([nickitat](https://github.com/nickitat)).
* Улучшен план запроса, когда JOIN использует фильтры времени выполнения (настройка `enable_join_runtime_filters` включена по умолчанию): модель стоимости изменения порядка JOIN теперь учитывает `WindowTransform` (и другие шаги плана, сохраняющие строки) в правом поддереве и использует фактическое количество строк и NDV для каждого столбца вместо отсутствующей статистики. [#107229](https://github.com/ClickHouse/ClickHouse/pull/107229) ([UnamedRus](https://github.com/UnamedRus)).

<h3 id="query-optimization">
  Оптимизация запросов
</h3>

* Повышена производительность анализа текстовых индексов при поиске по нескольким токенам за счёт оптимизации обработки редких токенов. [#98226](https://github.com/ClickHouse/ClickHouse/pull/98226) ([CurtizJ](https://github.com/CurtizJ)).
* Повышена производительность функций `encrypt`, `decrypt` и `halfMD5` за счёт исключения неявного поиска провайдера OpenSSL для каждой строки в OpenSSL 3.x. [#99105](https://github.com/ClickHouse/ClickHouse/pull/99105) ([thevar1able](https://github.com/thevar1able)).
* Объединение исходных блоков перед `projection.calculate()` во время `MATERIALIZE PROJECTION` сокращает число временных частей проекции и накладные расходы на слияние. Ускорение примерно в 3,4 раза для таблицы с 50 млн строк. [#100047](https://github.com/ClickHouse/ClickHouse/pull/100047) ([amosbird](https://github.com/amosbird)).
* Повышена производительность Approximate Runtime Filters и индексов Bloom Filter. [#100201](https://github.com/ClickHouse/ClickHouse/pull/100201) ([cv4g](https://github.com/cv4g)).
* Ускорены запросы `ORDER BY ... LIMIT BY` за счёт выполнения `LIMIT BY` в каждом параллельном отсортированном потоке на этапе `Sort`, когда столбцы `LIMIT BY` образуют префикс `ORDER BY`. Это уменьшает число строк, проходящих через финальное слияние сортировки и последующие этапы конвейера. Оптимизация управляется новой настройкой `query_plan_push_limit_by_into_sort` (включена по умолчанию). [#104000](https://github.com/ClickHouse/ClickHouse/pull/104000) ([nihalzp](https://github.com/nihalzp)).
* Снижены накладные расходы на обработку простых SELECT-запросов (парсинг, анализ и планирование). Например, `SELECT count() FROM hits` через одно подключение выполняется примерно на 50 % быстрее. [#104513](https://github.com/ClickHouse/ClickHouse/pull/104513) ([Algunenano](https://github.com/Algunenano)).
* Повышена производительность `bitmapContains` для состояний `groupBitmap` с типом, отличным от `UInt64`, за счёт исключения повторных вызовов `rb_max` при проверке диапазонов. [#105960](https://github.com/ClickHouse/ClickHouse/pull/105960) ([niyue](https://github.com/niyue)).
* Повышена производительность вставки в столбцы `LowCardinality` с индексами `bloom_filter`. [#106410](https://github.com/ClickHouse/ClickHouse/pull/106410) ([EmeraldShift](https://github.com/EmeraldShift)).
* Повышена производительность функций `L2DistanceTransposed` и `cosineDistanceTransposed` для типа данных `QBit`. [#106701](https://github.com/ClickHouse/ClickHouse/pull/106701) ([rienath](https://github.com/rienath)).
* Повышена производительность анализа запросов к таблицам с большим числом столбцов: исключено вычисление хешей узлов столбцов, включающих всё выражение исходной таблицы, когда оно не требуется. Анализ вложенных подзапросов `SELECT *` для таблицы с \~1200 столбцами теперь выполняется примерно в 50 раз быстрее. [#106957](https://github.com/ClickHouse/ClickHouse/pull/106957) ([novikd](https://github.com/novikd)).
* Производительность функций `encrypt`, `decrypt`, `tryDecrypt`, `aes_encrypt_mysql` и `aes_decrypt_mysql` повышена до десяти раз, что восстанавливает производительность, утраченную при миграции с BoringSSL на OpenSSL 3.x (24.4). [#107339](https://github.com/ClickHouse/ClickHouse/pull/107339) ([thevar1able](https://github.com/thevar1able)).
* Улучшено выполнение `arrayElement` для `Array(LowCardinality(String))` и функций map LIKE для map с ключами или значениями `LowCardinality(String)` за счёт исключения ненужной материализации строк. [#107450](https://github.com/ClickHouse/ClickHouse/pull/107450) ([EmeraldShift](https://github.com/EmeraldShift)).
* Снижена загрузка CPU и повышена производительность оценки skip-индексов для запросов, фильтрующих столбцы `DateTime64`. [#107707](https://github.com/ClickHouse/ClickHouse/pull/107707) ([shankar-iyer](https://github.com/shankar-iyer)).
* Повышена производительность регистронезависимого поиска подстрок, включая `positionCaseInsensitiveUTF8`, `ILIKE` и `multiSearchAnyCaseInsensitiveUTF8`. [#107882](https://github.com/ClickHouse/ClickHouse/pull/107882) ([Algunenano](https://github.com/Algunenano)).
* Исправлена регрессия пропускной способности примерно на 16 % у кодека чисел с плавающей точкой `FPC` на ARM, возникшая после того, как его таблицы предикторов начали использовать `VectorWithMemoryTracking`. [#108182](https://github.com/ClickHouse/ClickHouse/pull/108182) ([groeneai](https://github.com/groeneai)).
* Исправлена регрессия производительности, при которой один легковесный `DELETE` отключал кэш условий запроса для всей таблицы. Повторные выборочные запросы к таблице, которая хотя бы раз подвергалась легковесному удалению, переставали отсекать гранулы и переходили к чтению всех меток. [#112947](https://github.com/ClickHouse/ClickHouse/pull/112947) ([fm4v](https://github.com/fm4v)).
* Ограничены затраты на оценку селективности `col IN (...)` по статистике столбцов, которые могли добавлять сотни миллисекунд к планированию одного запроса. Оценщик больше не выполняет подзапрос в `col IN (subquery)`, чтобы заполнить множество, от которого ему требуется только одно значение селективности: вместо этого непостроенное множество пропускается. Для множеств, размер которых превышает значение новой настройки `statistics_max_set_size_for_exact_selectivity_estimation` (по умолчанию 10000), селективность теперь определяется по размеру множества и границам его диапазона. [#114389](https://github.com/ClickHouse/ClickHouse/pull/114389) ([nickitat](https://github.com/nickitat)).

<h3 id="function-and-aggregation-performance">
  Производительность функций и агрегации
</h3>

* Оптимизирован анализ индекса первичного ключа для длинных первичных ключей и ключей с высокой мощностью. Для длинного первичного ключа время анализа индекса теперь в основном зависит от сложности фильтра запроса (то есть от столбцов ключа, которые он фактически использует), а не от длины первичного ключа. Поэтому расширение ключа сортировки почти не увеличивает затраты на анализ индекса в запросах, фильтрующих лишь по нескольким его столбцам. Для первичного ключа с высокой мощностью, когда ClickHouse хранит в памяти только селективный префикс столбцов ключа и не загружает последующие столбцы, анализ индекса теперь работает только с этим префиксом в памяти, а не со всем ключом. Оптимизация включена по умолчанию; её можно отключить новой настройкой `use_lightweight_primary_key_index_analysis`. [#91836](https://github.com/ClickHouse/ClickHouse/pull/91836) ([nihalzp](https://github.com/nihalzp)).
* Снижено пиковое потребление памяти при слиянии частичных результатов двухуровневой агрегации с большими состояниями агрегатных функций (например, `groupArray`) благодаря постепенному освобождению исходных состояний каждого бакета во время слияния вместо хранения их всех до его завершения. [#102330](https://github.com/ClickHouse/ClickHouse/pull/102330) ([yurifedoseev](https://github.com/yurifedoseev)).
* Добавлена оптимизация `GROUP BY` для равномерно распределённых ключей высокой мощности: строки распределяются между потоками хешированием ключа группировки, поэтому каждый поток агрегирует непересекающееся подмножество ключей без этапа слияния. Чтобы включить её, задайте `enable_sharding_aggregator = 1`. [#104233](https://github.com/ClickHouse/ClickHouse/pull/104233) ([nihalzp](https://github.com/nihalzp)).
* Ускорены запросы `LIMIT BY` к партиционированным таблицам `MergeTree`: `LIMIT BY` выполняется параллельно внутри потока каждой партиции, а не после слияния всех потоков в один. Это применяется, когда выражение партиционирования является детерминированной функцией столбцов `LIMIT BY`, поэтому ни одна группа `LIMIT BY` не может охватывать две партиции. Управляется новой настройкой `allow_limit_by_partitions_independently` (включена по умолчанию). [#105126](https://github.com/ClickHouse/ClickHouse/pull/105126) ([nihalzp](https://github.com/nihalzp)).
* Ускорены запросы `SELECT ... LIMIT N BY <cols>`, когда `<cols>` являются префиксом ключа сортировки таблицы или становятся им после фиксации ведущих столбцов условием `WHERE col = const`. При включении этой оптимизации `MergeTree` читает данные в порядке первичного ключа, а `LIMIT BY` сначала фильтрует данные в потоковом режиме, используя O(1) памяти на каждый отсортированный поток и отбрасывая большую часть данных, после чего обычный `LIMIT BY` применяется к сокращённому набору данных для получения окончательного результата. Управляется новой настройкой `optimize_limit_by_in_order` (включена по умолчанию). [#105135](https://github.com/ClickHouse/ClickHouse/pull/105135) ([nihalzp](https://github.com/nihalzp)).
* Ускорены запросы `LIMIT BY` благодаря удалению избыточных ключевых выражений: ключ, являющийся детерминированной функцией других ключей, удаляется (например, `LIMIT 5 BY x, f(x)` становится `LIMIT 5 BY x`), а инъективная функция ключа заменяется её аргументом (например, `LIMIT 5 BY toString(x)` становится `LIMIT 5 BY x`). Благодаря этому для каждой строки вычисляется меньше выражений, и они проще. Управляется новыми настройками `optimize_limit_by_function_keys` и `optimize_injective_functions_in_limit_by`, обе включены по умолчанию. [#106818](https://github.com/ClickHouse/ClickHouse/pull/106818) ([nihalzp](https://github.com/nihalzp)).
* Ускорен анализ запросов с большим количеством или глубоко вложенными вызовами функций за счёт удаления избыточного хеша дерева запроса из кэша разрешения функций. [#107516](https://github.com/ClickHouse/ClickHouse/pull/107516) ([novikd](https://github.com/novikd)).
* Распараллелена обработка результата рекурсивного CTE: `GROUP BY` и другие операции над большим результатом `WITH RECURSIVE` больше не ограничены одним потоком. [#107694](https://github.com/ClickHouse/ClickHouse/pull/107694) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="storage-and-io-performance">
  Производительность хранилища и ввода-вывода
</h3>

* Клиенты S3 с одинаковыми конечной точкой и bucket используют общий кэш, что исключает повторное определение региона. [#96802](https://github.com/ClickHouse/ClickHouse/pull/96802) ([zvonand](https://github.com/zvonand)).
* Повышена производительность копирования в объектном хранилище благодаря параллельному копированию блобов. [#105089](https://github.com/ClickHouse/ClickHouse/pull/105089) ([asya-ch](https://github.com/asya-ch)).
* Исключено чтение содержимого файлов при использовании входного формата One с файловыми табличными функциями, такими как file и s3. [#105157](https://github.com/ClickHouse/ClickHouse/pull/105157) ([niyue](https://github.com/niyue)).
* Первичный ключ `MergeTree` и индексы пропуска данных теперь могут отсеивать гранулы для фильтров, где `ifNull` или `coalesce` оборачивает условие, например `ifNull(key = 0, 0)` или `coalesce(key = 0, 0)`. Такие предикаты, часто создаваемые генераторами запросов для преобразования сравнения с потенциальным `NULL` в однозначное логическое значение, ранее были непрозрачны для анализа индексов и не позволяли пропускать гранулы. Это расширяет существующую настройку `allow_key_condition_coalesce_rewrite` (включена по умолчанию). [#106272](https://github.com/ClickHouse/ClickHouse/pull/106272) ([andyzzhao](https://github.com/andyzzhao)).
* Повышена производительность декодирования столбцов Parquet `FLOAT` и `DOUBLE` с кодировкой `BYTE_STREAM_SPLIT`. [#106376](https://github.com/ClickHouse/ClickHouse/pull/106376) ([Algunenano](https://github.com/Algunenano)).
* Исправлены длительные задержки при входе и запуске запросов в реплицируемом хранилище управления доступом, возникавшие, когда одновременно изменялось множество объектов управления доступом (политики строк, роли, квоты, профили настроек). Теперь кэш каждого объекта пересчитывается один раз на пакет уведомлений, а не для каждого изменённого объекта, что устраняет квадратичную сложность обработки, из-за которой блокировка доступа могла удерживаться несколько минут. [#107672](https://github.com/ClickHouse/ClickHouse/pull/107672) ([azat](https://github.com/azat)).
* Исправлена регрессия производительности: при чтении множества небольших файлов из объектного хранилища через табличную функцию `s3` и другие табличные функции перестала выполняться предварительная выборка, и система перешла на синхронное чтение. Это существенно замедляло однопоточное чтение или чтение с низким параллелизмом множества небольших файлов. [#108872](https://github.com/ClickHouse/ClickHouse/pull/108872) ([fm4v](https://github.com/fm4v)).
* Включена начальная предварительная выборка небольших объектов при чтении из объектного хранилища через файловый кэш (`filesystem_cache_name`). Ранее чтение множества небольших файлов, например при загрузке через `S3Queue`, оставалось синхронным и зависело от задержек даже при включённом файловом кэше. [#109478](https://github.com/ClickHouse/ClickHouse/pull/109478) ([fm4v](https://github.com/fm4v)).
* Улучшена оптимизация `PREWHERE` для подстолбцов `Map` с учётом их размера на диске. [#110623](https://github.com/ClickHouse/ClickHouse/pull/110623) ([Avogar](https://github.com/Avogar)).
* Ленивая материализация теперь применяется к запросам с `FINAL`, фильтром и небольшим `LIMIT` даже без `ORDER BY` (для `ReplacingMergeTree`). [#110722](https://github.com/ClickHouse/ClickHouse/pull/110722) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* Сокращено потребление CPU при дедупликации во время сброса асинхронных вставок, охватывающих множество партиций. [#111150](https://github.com/ClickHouse/ClickHouse/pull/111150) ([valerypetrov](https://github.com/valerypetrov)).
* Исправлена регрессия потребления CPU для запросов, выполняющих множество независимых небольших чтений из одной и той же части `MergeTree`, если таблица содержит столбцы `LowCardinality`. Проверка, определяющая, использует ли часть один общий словарь, при каждой задаче чтения сканировала все метки части; теперь последовательности одинаковых меток находятся с помощью двоичного поиска. Запросы такого типа к таблицам с небольшим значением `index_granularity` начиная с версии 26.6 выполнялись в несколько раз медленнее. [#116134](https://github.com/ClickHouse/ClickHouse/pull/116134) ([groeneai](https://github.com/groeneai)).

<h3 id="memory-optimization">
  Оптимизация памяти
</h3>

* До 10 раз снижено потребление памяти метаданными типа `Enum` в таблицах со столбцами `Enum`. Поиск значений по именам остаётся таким же быстрым или ускоряется, тогда как поиск имён по значениям при парсинге и десериализации может замедлиться. [#95668](https://github.com/ClickHouse/ClickHouse/pull/95668) ([qoega](https://github.com/qoega)).
* Снижено пиковое потребление памяти `BACKUP` за счёт отказа от копирования внутреннего списка информации о файлах при записи записей резервной копии (что особенно существенно для резервных копий, содержащих миллионы файлов). [#111162](https://github.com/ClickHouse/ClickHouse/pull/111162) ([jkartseva](https://github.com/jkartseva)).

<h2 id="improvements">
  Улучшения
</h2>

<h3 id="query-and-sql-improvements">
  Запросы и SQL
</h3>

* При удалении неиспользуемых столбцов из плана запроса столбцы теперь идентифицируются по позиции, а не по имени. Это позволяет удалять неиспользуемые столбцы при наличии столбцов с повторяющимися именами. [#100586](https://github.com/ClickHouse/ClickHouse/pull/100586) ([antaljanosbenjamin](https://github.com/antaljanosbenjamin)).
* `SESSION_USER` добавлен в качестве регистронезависимого псевдонима `currentUser()` для совместимости с PostgreSQL и стандартом SQL. [#106081](https://github.com/ClickHouse/ClickHouse/pull/106081) ([takumihara](https://github.com/takumihara)).
* Снижена задержка отмены запросов, выполняемых по протоколу PostgreSQL: KILL QUERY теперь прерывает сериализацию вывода в рамках одного фрагмента, не дожидаясь отправки клиенту всего фрагмента. [#106535](https://github.com/ClickHouse/ClickHouse/pull/106535) ([rvasin](https://github.com/rvasin)).
* Исправлена ошибка `ILLEGAL_TYPE_OF_ARGUMENT` в распределённых запросах с `serialize_query_plan = 1`, содержащих лямбда-выражение с постоянным аргументом (например, `arrayMap(t -> t.2, ...)`). Постоянные столбцы узлов `INPUT` в `ActionsDAG` теперь сохраняются при сериализации плана запроса. [#107124](https://github.com/ClickHouse/ClickHouse/pull/107124) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Снижена задержка отмены запросов, выполняемых по протоколу MySQL: KILL QUERY теперь прерывает сериализацию вывода в рамках одного фрагмента, не дожидаясь отправки клиенту всего фрагмента. [#107228](https://github.com/ClickHouse/ClickHouse/pull/107228) ([rvasin](https://github.com/rvasin)).

<h3 id="functions-improvements">
  Функции
</h3>

* `EXPLAIN SYNTAX` теперь последовательно отображает операторы в выводе explain как вызовы функций (например, `plus(1, 2)` вместо `1 + 2`). [#94681](https://github.com/ClickHouse/ClickHouse/pull/94681) ([1abdelhalim](https://github.com/1abdelhalim)).
* Теперь поддерживается синтаксис PostgreSQL `expr OP SOME(array)` / `expr OP ALL(array)` (с правой частью, не являющейся подзапросом), который для `=`/`<>` преобразуется в `has` / `NOT has`, а для других операторов сравнения — в лямбда-выражения `arrayExists` / `arrayAll`. `ANY` не поддерживается в форме с массивом, поскольку `any` также является агрегатной функцией; используйте `SOME`. Форма с подзапросом для `ANY`/`SOME`/`ALL` по-прежнему преобразуется в `IN` / `NOT IN`. [#105129](https://github.com/ClickHouse/ClickHouse/pull/105129) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Добавлена поддержка функций `multiSearchAny`, `multiSearchAnyUTF8` и `multiMatchAny` в текстовых индексах. Также улучшен анализ текстовых индексов для функции `match`: теперь шаблоны регулярных выражений с альтернативными группами позволяют пропускать больше гранул. [#106279](https://github.com/ClickHouse/ClickHouse/pull/106279) ([CurtizJ](https://github.com/CurtizJ)).
* Функция `h3PolygonToCells` теперь применяет ограничение максимального размера массива ко всем полигонам в `MultiPolygon`, проверяет коды возврата базовой библиотеки H3 и отклоняет аргументы `MultiLineString`, вместо того чтобы без предупреждения возвращать пустой результат. [#106399](https://github.com/ClickHouse/ClickHouse/pull/106399) ([Algunenano](https://github.com/Algunenano)).
* Десериализация состояний агрегатных функций `contingency`, `cramersV`, `cramersVBiasCorrected` и `theilsU` теперь проверяет, что сохранённые счётчики образуют корректную таблицу сопряжённости, и в противном случае генерирует исключение `CORRUPTED_DATA`. [#107185](https://github.com/ClickHouse/ClickHouse/pull/107185) ([nihalzp](https://github.com/nihalzp)).
* Улучшена оценка мощности в оптимизаторе плана запроса: столбец, созданный детерминированной функцией с одним аргументом (например, `toYear(date)`), теперь наследует число уникальных значений своего аргумента в качестве верхней границы, а не остаётся без статистики, что позволяет точнее изменять порядок JOIN. [#107757](https://github.com/ClickHouse/ClickHouse/pull/107757) ([davenger](https://github.com/davenger)).

<h3 id="table-engines-and-storage-improvements">
  Движки таблиц и хранилище
</h3>

* Исправлена работа потребителей движка таблицы Kafka, которые после назначения разделов продолжали использовать короткий интервал опроса: теперь они возвращаются к настроенному значению `kafka_poll_timeout_ms`, избегая чрезмерных пустых опросов, создания более мелких частей и дополнительных накладных расходов на слияние после перебалансировки. [#100431](https://github.com/ClickHouse/ClickHouse/pull/100431) ([sugaf1204](https://github.com/sugaf1204)).
* Движки таблиц озёр данных, включая `Iceberg` и `DeltaLake`, теперь могут использовать S3- и Azure-диски с кэшированием, что позволяет задействовать файловый кэш при повторных чтениях. [#102017](https://github.com/ClickHouse/ClickHouse/pull/102017) ([RinChanNOWWW](https://github.com/RinChanNOWWW)).
* Фильтры, добавленные после первоначального выбора PREWHERE (проталкивание предикатов, фильтры времени выполнения или явный PREWHERE в сочетании с WHERE, заданным планировщиком), теперь можно объединять с существующим PREWHERE при втором проходе оптимизатора, вместо того чтобы оставлять их отдельным шагом Filter над чтением из MergeTree. [#105445](https://github.com/ClickHouse/ClickHouse/pull/105445) ([yariks5s](https://github.com/yariks5s)).
* Добавлена настройка `wait_for_part_commit_in_dependent_materialized_views`. Если она включена, каскадное materialized view, выполняющее соединение с исходной таблицей, может видеть вставляемую в данный момент строку. [#105943](https://github.com/ClickHouse/ClickHouse/pull/105943) ([ahmadov](https://github.com/ahmadov)).
* Добавлена совместимость с PostgreSQL для `EXTRACT(TIMEZONE_HOUR FROM dt)` и `EXTRACT(TIMEZONE_MINUTE FROM dt)`, извлекающих часовую и минутную части смещения часового пояса, а также для `EXTRACT(<unit> FROM INTERVAL n <unit>)` / `date_part('<unit>', INTERVAL n <unit>)`, извлекающих значение из интервала. [#106227](https://github.com/ClickHouse/ClickHouse/pull/106227) ([vinayakj592](https://github.com/vinayakj592)).
* Реализована команда `SYSTEM RESTART DISK <name>`: она перезагружает хранящиеся в памяти метаданные диска и повторно сканирует части данных таблиц реплик только для чтения, расположенных на этом диске. Это позволяет реплике таблицы только для чтения в общем хранилище `plain_rewritable` по запросу видеть данные, записанные другим сервером, не дожидаясь `refresh_parts_interval` и без перезапуска сервера. [#106645](https://github.com/ClickHouse/ClickHouse/pull/106645) ([jrdi](https://github.com/jrdi)).
* Пропускается ненужная загрузка файлов меток для расширенных общих данных JSON. [#107051](https://github.com/ClickHouse/ClickHouse/pull/107051) ([Avogar](https://github.com/Avogar)).
* Добавлена настройка, задаваемая при создании, `materialized_postgresql_use_extended_date_and_time_types` для движка базы данных `MaterializedPostgreSQL`. По умолчанию она включена: столбцы PostgreSQL `date`/`timestamp` определяются как `Date32`/`DateTime64`; при установке значения `0` во время `CREATE DATABASE` определяются более узкие типы `Date`/`DateTime`. Настройка неприменима к движку таблицы `MaterializedPostgreSQL`. [#107428](https://github.com/ClickHouse/ClickHouse/pull/107428) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* MergeTree теперь может читать сжатый поток, блоки которого используют разные кодеки. Это необходимое условие на стороне чтения для адаптивного выбора кодека. [#108592](https://github.com/ClickHouse/ClickHouse/pull/108592) ([rienath](https://github.com/rienath)).
* Пропускающий индекс `bloom_filter` теперь используется для предикатов `IN` по столбцу с прямым индексированием, если `transform_null_in = 1` и набор `IN` не содержит значения `NULL`. Ранее индекс не использовался для таких запросов, что вынуждало выполнять полное сканирование. [#111329](https://github.com/ClickHouse/ClickHouse/pull/111329) ([groeneai](https://github.com/groeneai)).

<h3 id="s3-and-object-storage-improvements">
  S3 и объектное хранилище
</h3>

* Привилегии теперь записываются в `system.query_log.used_privileges` для всех успешных проверок доступа, включая проверки по пути `isGranted`, не генерирующему исключения (`checkAccessWithFilter`). Ранее записывались только привилегии, проверяемые через точки входа, генерирующие исключения (`checkAccess` / `checkGrantOption`), поэтому `READ ON FILE` / `READ ON S3` / `READ ON AZURE` / `READ ON URL` не отображались в журнале аудита для запросов `DESCRIBE`, `CREATE TABLE AS` и аналогичных запросов, использующих табличные функции `file` / `s3` / `azure` / `url`. Контроль доступа не изменился. [#104693](https://github.com/ClickHouse/ClickHouse/pull/104693) ([alexbakharew](https://github.com/alexbakharew)).
* Финальный запрос multipart-загрузки в S3 теперь завершается асинхронно через трекер задач, поэтому он может выполняться параллельно с загрузкой последней части, а не последовательно на этапе завершения. [#105487](https://github.com/ClickHouse/ClickHouse/pull/105487) ([asya-ch](https://github.com/asya-ch)).
* Значение настройки `persistent_processing_node_ttl_seconds` по умолчанию для `S3Queue` и `AzureQueue` увеличено с одного до шести часов, что предотвращает преждевременную потерю блокировки бакета при длительной обработке или после её перезапуска. [#106838](https://github.com/ClickHouse/ClickHouse/pull/106838) ([kssenii](https://github.com/kssenii)).
* Добавлена поддержка значений `REDUCED_REDUNDANCY`, `STANDARD_IA`, `ONEZONE_IA`, `GLACIER_IR` и `EXPRESS_ONEZONE` (помимо `STANDARD` и `INTELLIGENT_TIERING`) для настройки `s3_storage_class_name`. [#107251](https://github.com/ClickHouse/ClickHouse/pull/107251) ([adityaksolves](https://github.com/adityaksolves)).
* Пример пути Hive-партиционирования для таблиц объектного хранилища (например, `S3`) теперь определяется при первом использовании таблицы, а не при `CREATE`/`ATTACH`, поэтому недоступная конечная точка больше не препятствует созданию таблицы и запуску сервера. [#111842](https://github.com/ClickHouse/ClickHouse/pull/111842) ([evillique](https://github.com/evillique)).

<h3 id="settings-and-configuration-improvements">
  Настройки и конфигурация
</h3>

* Стратегия партиционирования hive стала используемой по умолчанию в настройке совместимости `file_like_engine_default_partition_strategy`. [#86746](https://github.com/ClickHouse/ClickHouse/pull/86746) ([kssenii](https://github.com/kssenii)).
* Добавлены четыре новые настройки таблиц семейства MergeTree для управления параметрами текстовых индексов по умолчанию: `text_index_dictionary_block_size`, `text_index_dictionary_block_frontcoding_compression`, `text_index_posting_list_block_size` и `text_index_posting_list_codec`. Эти настройки позволяют настраивать поведение текстовых индексов на уровне таблицы без указания параметров в каждом определении индекса. Явно заданные аргументы отдельных индексов по-прежнему имеют приоритет. [#100626](https://github.com/ClickHouse/ClickHouse/pull/100626) ([CurtizJ](https://github.com/CurtizJ)).
* Добавлена настройка `output_format_pretty_use_nbsp_for_padding`, позволяющая использовать неразрывный пробел `U+00A0` в качестве заполнения при отображении таблиц в форматах `Pretty`, если `output_format_pretty_grid_charset` имеет значение `UTF-8`. Это позволяет сохранять выравнивание таблиц в скопированном выводе `Pretty` в инструментах, которые сворачивают обычные пробелы. По умолчанию настройка отключена, а в выводе с кодировкой `ASCII` используются обычные пробелы. [#103559](https://github.com/ClickHouse/ClickHouse/pull/103559) ([ashrithb](https://github.com/ashrithb)).
* Добавлена поддержка совместимости со старым анализатором с помощью настройки `analyzer_compatibility_allow_non_aggregate_in_having`. Если она включена, неагрегатные условия будут перенесены из HAVING в WHERE. [#104232](https://github.com/ClickHouse/ClickHouse/pull/104232) ([novikd](https://github.com/novikd)).
* `OPTIMIZE TABLE ... ON CLUSTER` и другие DDL больше не зависают, если для целевой таблицы задано `table_readonly = 1`. Теперь эта настройка вызывает новый специальный код ошибки `TABLE_IS_PERMANENTLY_READ_ONLY`, который `DDLWorker` не пытается обработать повторно (в отличие от временной ошибки `TABLE_IS_READ_ONLY`, возникающей при временном отключении ZooKeeper у `ReplicatedMergeTree`). Настройка `table_readonly` теперь также явно запрещена для `ReplicatedMergeTree` — как при создании, так и через `ALTER MODIFY SETTING`. [#105109](https://github.com/ClickHouse/ClickHouse/pull/105109) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Сортировка по убыванию в ключах сортировки `MergeTree` (например, `ORDER BY (time DESC, key)`) теперь всегда поддерживается и больше не требует экспериментальной настройки `allow_experimental_reverse_key`, которая стала устаревшей. [#106440](https://github.com/ClickHouse/ClickHouse/pull/106440) ([nikitamikhaylov](https://github.com/nikitamikhaylov)).
* Добавлена поддержка `keyed_by_normalized_query_hash` для квот, определённых в статической конфигурации сервера (`users.xml`), в соответствии с существующим синтаксисом DDL `CREATE QUOTA ... KEYED BY normalized_query_hash`. [#107654](https://github.com/ClickHouse/ClickHouse/pull/107654) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Настройка совместимости больше не применяет устаревшие настройки, поэтому не помечает их как изменённые и не выдаёт предупреждений об устаревших настройках. [#107737](https://github.com/ClickHouse/ClickHouse/pull/107737) ([UberDever](https://github.com/UberDever)).
* Добавлена настройка `analyzer_compatibility_multiple_joins_qualify_column_names` (по умолчанию `false`). Если она включена и предложение `FROM` запроса содержит два или более `JOIN`, имена столбцов результата, формируемые анализатором, имитируют преобразование нескольких JOIN в старом анализаторе: столбцы, развёрнутые из `*`, получают имена `<alias-or-table>.<column>`, а ссылка на столбец без псевдонима в списке `SELECT` сохраняет имя точно в том виде, в котором оно записано. Благодаря этому внешние запросы, ссылающиеся на такие квалифицированные имена, например `SELECT ll.Date FROM (SELECT * FROM t AS ll JOIN t1 ON ... JOIN t2 ON ...)`, работают так же, как со старым анализатором. Также исправлена потеря анализатором квалифицированных имён результирующих столбцов, развёрнутых из `*`, при сочетании `group_by_use_nulls` с `ROLLUP`, `CUBE` или `GROUPING SETS`, которая приводила к дублированию имён результирующих столбцов и нарушала внешние ссылки на них. [#110746](https://github.com/ClickHouse/ClickHouse/pull/110746) ([novikd](https://github.com/novikd)).
* Добавлена настройка `analyzer_compatibility_apply_final_to_all_joined_tables`, восстанавливающая прежнее поведение: модификатор `FINAL` для крайней левой таблицы в JOIN также применялся к другим присоединяемым таблицам. Настройка зарегистрирована в истории изменений настроек, поэтому при использовании `compatibility` с версиями до 26.6 прежняя семантика восстанавливается автоматически. [#111589](https://github.com/ClickHouse/ClickHouse/pull/111589) ([fm4v](https://github.com/fm4v)).
* Добавлена новая настройка MergeTree `text_index_version`, управляющая версией формата хранения текстовых индексов на диске: `v0_initial`, `v1_with_codec` или `v2_with_positions`. Во время поэтапного обновления или перед понижением версии задайте более раннюю версию, чтобы новые серверы продолжали записывать части текстовых индексов в формате, который старые серверы всё ещё могут читать; настройка совместимости корректирует это значение автоматически. [#111803](https://github.com/ClickHouse/ClickHouse/pull/111803) ([CurtizJ](https://github.com/CurtizJ)).

<h3 id="system-tables-and-monitoring-improvements">
  Системные таблицы и мониторинг
</h3>

* Поле `used_storages` в `system.query_log` теперь заполняется именем движка хранилища при запросах к таблицам через DataLakeCatalog. [#100706](https://github.com/ClickHouse/ClickHouse/pull/100706) ([melvynator](https://github.com/melvynator)).
* В `system.merges` добавлены столбцы `current_projection`, `current_projection_progress`, `projections_completed` и `projections_remaining` для отображения хода слияния проекций. [#102611](https://github.com/ClickHouse/ClickHouse/pull/102611) ([amosbird](https://github.com/amosbird)).
* Движки таблиц теперь содержат встроенную документацию, доступную через новые столбцы `description`, `syntax`, `examples`, `introduced_in` и `related` таблицы `system.table_engines`. [#106177](https://github.com/ClickHouse/ClickHouse/pull/106177) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Движки баз данных теперь содержат встроенную документацию, доступную через новые столбцы `description`, `syntax`, `examples`, `introduced_in` и `related` таблицы `system.database_engines`. [#106178](https://github.com/ClickHouse/ClickHouse/pull/106178) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Типы данных теперь содержат встроенную документацию, доступную через новые столбцы `description`, `syntax`, `examples`, `introduced_in` и `related` таблицы `system.data_type_families`. [#106180](https://github.com/ClickHouse/ClickHouse/pull/106180) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Форматы ввода-вывода теперь содержат встроенную документацию, доступную через новые столбцы `description`, `examples`, `introduced_in` и `related` таблицы `system.formats`. [#106181](https://github.com/ClickHouse/ClickHouse/pull/106181) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Комбинаторы агрегатных функций теперь содержат встроенную документацию, доступную через новые столбцы `description`, `syntax`, `examples`, `introduced_in` и `related` таблицы `system.aggregate_function_combinators`. [#106185](https://github.com/ClickHouse/ClickHouse/pull/106185) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Добавлена новая таблица `system.data_skipping_index_types`, в которой перечислены доступные типы индексов пропуска данных и встроенная документация к ним (`description`, `syntax`, `examples`, `introduced_in`, `related`). [#106186](https://github.com/ClickHouse/ClickHouse/pull/106186) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Добавлена новая таблица `system.disk_types`, в которой перечислены доступные типы дисков и встроенная документация к ним (`description`, `syntax`, `examples`, `introduced_in`, `related`). [#106187](https://github.com/ClickHouse/ClickHouse/pull/106187) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Добавлены асинхронные метрики `TotalUncompressedBytesOfMergeTreeTables` и `TotalUncompressedBytesOfMergeTreeTablesSystem`, отображающие общий несжатый размер данных, хранящихся в таблицах семейства MergeTree. [#106364](https://github.com/ClickHouse/ClickHouse/pull/106364) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Добавлено событие профиля `GlobalMemoryLimitExceeded`, позволяющее операторам отслеживать достижение глобального лимита памяти сервера. [#106466](https://github.com/ClickHouse/ClickHouse/pull/106466) ([sacheendra](https://github.com/sacheendra)).
* Добавлены асинхронные метрики `ExecutableUserDefinedFunctionMemoryResidentBytes` и `ExecutableUserDefinedFunctionProcesses`, отображающие объём резидентной памяти (`VmRSS`) и число работающих процессов пользовательских функций `executable` и `executable_pool`, включая дочерние процессы и неактивные рабочие процессы пула. [#107300](https://github.com/ClickHouse/ClickHouse/pull/107300) ([HanziJiang](https://github.com/HanziJiang)).
* Добавлена настройка `show_remote_databases_in_system_tables`, включенная по умолчанию, которая позволяет скрывать базы данных `MySQL` и `PostgreSQL` в `system.tables`, `system.columns` и `system.completions`. Настройка `show_data_lake_catalogs_in_system_tables` по-прежнему управляет только видимостью `DataLakeCatalog`. [#104416](https://github.com/ClickHouse/ClickHouse/pull/104416) ([pamarcos](https://github.com/pamarcos)). [#109082](https://github.com/ClickHouse/ClickHouse/pull/109082) ([pamarcos](https://github.com/pamarcos)).

<h3 id="clickhouse-keeper-improvements">
  ClickHouse Keeper
</h3>

* Различные изменения в Keeper, которые в целом ускоряют его примерно в 2 раза (улучшенный батчинг, конвейерная отправка сообщений лидеру, конвейерное добавление записей в журнал). [#101757](https://github.com/ClickHouse/ClickHouse/pull/101757) ([al13n321](https://github.com/al13n321)).
* Добавлено больше событий профилирования Keeper (на стороне сервера и клиента) для наблюдений. [#105336](https://github.com/ClickHouse/ClickHouse/pull/105336) ([scanhex12](https://github.com/scanhex12)).
* Добавлена новая таблица `system.keeper_snapshots`, доступная только в Keeper, со сведениями о локальных снимках ClickHouse Keeper. [#105571](https://github.com/ClickHouse/ClickHouse/pull/105571) ([mstetsyuk](https://github.com/mstetsyuk)).
* Добавлена новая таблица `system.keeper_changelogs`, доступная только в Keeper, со сведениями о локальных файлах журнала изменений ClickHouse Keeper (журнала Raft). [#105617](https://github.com/ClickHouse/ClickHouse/pull/105617) ([mstetsyuk](https://github.com/mstetsyuk)).
* Добавлена таблица `system.keeper_cluster`, доступная только в Keeper. Содержит по одной строке для каждого участника кластера Raft, как его видит текущий Keeper. [#105646](https://github.com/ClickHouse/ClickHouse/pull/105646) ([mstetsyuk](https://github.com/mstetsyuk)).
* Снижено пиковое потребление памяти при применении полученных снимков в ClickHouse Keeper с `KeeperMemoryStorage`. [#105851](https://github.com/ClickHouse/ClickHouse/pull/105851) ([antonio2368](https://github.com/antonio2368)).
* Добавлены параметры `coordination_settings` Keeper для ограничения допуска незафиксированных записей журнала `NuRaft` и регулирования обратных проверок append-entries. [#106108](https://github.com/ClickHouse/ClickHouse/pull/106108) ([antonio2368](https://github.com/antonio2368)).

<h3 id="memory-management-improvements">
  Управление памятью
</h3>

* Исправлены сообщения о синтаксических ошибках, которые могли содержать байты из соседних областей памяти после возврата парсера за конец оператора. [#105086](https://github.com/ClickHouse/ClickHouse/pull/105086) ([groeneai](https://github.com/groeneai)).
* Снижено использование памяти при открытии резервной копии (для `RESTORE` или в качестве основы для инкрементального `BACKUP`). Метаданные `.backup` теперь разбираются как поток, а не загружаются в находящееся в памяти дерево XML-документа, что позволяет избежать выделения многогигабайтного DOM-дерева для крупных (особенно инкрементальных) резервных копий. [#109107](https://github.com/ClickHouse/ClickHouse/pull/109107) ([jkartseva](https://github.com/jkartseva)).
* Снижено пиковое потребление памяти при завершении `BACKUP`. При записи метаданных резервной копии сведения обо всех файлах больше не копируются во временный вектор (что для резервных копий с миллионами файлов временно требовало нескольких гигабайтов); теперь они перебираются напрямую. [#109861](https://github.com/ClickHouse/ClickHouse/pull/109861) ([jkartseva](https://github.com/jkartseva)).

<h3 id="data-formats-improvements">
  Форматы данных
</h3>

* Теперь поддерживается вставка полей Avro Fixed для вариантов 8-, 16-, 32- и 64-битных целых чисел. [#98139](https://github.com/ClickHouse/ClickHouse/pull/98139) ([patrickpichler](https://github.com/patrickpichler)).
* Формат `AvroConfluent` теперь повторно подключает HTTP-клиент Confluent Schema Registry при временных сбоях (транспортных тайм-аутах, отказах в подключении, ошибках DNS, HTTP `5xx`/`408`/`429`) с экспоненциальной задержкой вместо отмены INSERT при первом сбое сети. Новые настройки `format_avro_schema_registry_max_retries` (по умолчанию `5`) и `format_avro_schema_registry_retry_initial_backoff_ms` (по умолчанию `100`) определяют эту политику. Ошибки валидации схемы (HTTP `409`, некорректный Avro JSON) по-прежнему считаются критическими. [#106661](https://github.com/ClickHouse/ClickHouse/pull/106661) ([groeneai](https://github.com/groeneai)).
* Сохранены исходные коды ошибок ClickHouse для ошибок, возвращаемых через Apache Arrow. [#107267](https://github.com/ClickHouse/ClickHouse/pull/107267) ([azat](https://github.com/azat)).

<h3 id="named-collections-and-dictionaries">
  Именованные коллекции и словари
</h3>

* Добавлена настройка `enable_compression` для табличной функции `mysql`, движка таблицы `MySQL`, движка базы данных `MySQL`, источника словаря `SOURCE(MYSQL)` и именованных коллекций. Если она включена, ClickHouse согласовывает сжатие на уровне протокола MySQL для всех данных, передаваемых по соединению. [#103229](https://github.com/ClickHouse/ClickHouse/pull/103229) ([bernardlim](https://github.com/bernardlim)).
* Добавлена новая таблица `system.dictionary_layouts`, содержащая список доступных структур словарей и встроенную документацию (`description`, `syntax`, `examples`, `introduced_in`, `related`). [#106182](https://github.com/ClickHouse/ClickHouse/pull/106182) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Добавлена новая таблица `system.dictionary_sources`, содержащая список доступных источников словарей и встроенную документацию (`description`, `syntax`, `examples`, `introduced_in`, `related`). [#106184](https://github.com/ClickHouse/ClickHouse/pull/106184) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Фактически используемый тип хранилища именованных коллекций теперь доступен как `named_collections_storage.type` в `system.server_settings` и через `getServerSetting('named_collections_storage_type')`. [#111806](https://github.com/ClickHouse/ClickHouse/pull/111806) ([pamarcos](https://github.com/pamarcos)).

<h3 id="other-improvements">
  Другие улучшения
</h3>

* Улучшены подсказки с именами таблиц в сообщениях об ошибках: теперь не предлагается то же имя, а в подсказке указывается имя базы данных (например, "Возможно, вы имели в виду other\_db.my\_table?"). [#95116](https://github.com/ClickHouse/ClickHouse/pull/95116) ([matt-metivier](https://github.com/matt-metivier)).
* Улучшено сообщение об ошибке для неразрешённых идентификаторов в запросах без предложения FROM: теперь оно предлагает добавить предложение FROM. [#101769](https://github.com/ClickHouse/ClickHouse/pull/101769) ([Onyx2406](https://github.com/Onyx2406)).
* Исправлена ситуация, при которой `PREWHERE` с подзапросом `IN` по столбцам первичного ключа не использовал индекс первичного ключа для отсечения гранул, что приводило к полному сканированию таблицы вместо чтения только нужных гранул. [#102570](https://github.com/ClickHouse/ClickHouse/pull/102570) ([nikitamikhaylov](https://github.com/nikitamikhaylov)).
* Refreshable materialized views теперь продолжают обновляться после замены их целевой таблицы с помощью `EXCHANGE TABLES` и удаления старой таблицы. Ранее обновления могли завершаться с исключением `UNKNOWN_TABLE`, поскольку сохраняли UUID старой таблицы. [#102724](https://github.com/ClickHouse/ClickHouse/pull/102724) ([seva-potapov](https://github.com/seva-potapov)).
* `enable_join_transitive_predicates` теперь включён по умолчанию. [#103724](https://github.com/ClickHouse/ClickHouse/pull/103724) ([davenger](https://github.com/davenger)).
* Refreshable materialized view теперь поддерживает `REFRESH DEPENDS ON`, позволяя запускать обновление при обновлении другой RMV вместо использования расписания. (`REFRESH EVERY ... DEPENDS ON` уже существовал, но его нельзя было надёжно использовать для этого сценария.) См. документацию CREATE MATERIALIZED VIEW. [#104440](https://github.com/ClickHouse/ClickHouse/pull/104440) ([al13n321](https://github.com/al13n321)).
* Добавлена возможность `EXPLAIN PIPELINE` для объединения повторяющихся цепочек процессоров. [#104662](https://github.com/ClickHouse/ClickHouse/pull/104662) ([niyue](https://github.com/niyue)).
* `REGEXP_SUBSTR` добавлен как регистронезависимый псевдоним `regexpExtract` для совместимости с Oracle, MySQL и Snowflake. [#105122](https://github.com/ClickHouse/ClickHouse/pull/105122) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Добавлена функция `date_part('unit', expr)` как синтаксический сахар для `EXTRACT(unit FROM expr)`. Поддерживаются все стандартные единицы интервала и дополнительные варианты PostgreSQL (`epoch`, `dow`, `doy`, `isodow`, `isoyear`, `century`, `decade`, `millennium`). [#105127](https://github.com/ClickHouse/ClickHouse/pull/105127) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `QueryConditionCache` теперь отдельно записывает гранулы, отфильтрованные даже в пакетах чтения, которые частично проходят `PREWHERE`, сокращая количество меток, повторно считываемых последующими запросами с тем же условием. [#105335](https://github.com/ClickHouse/ClickHouse/pull/105335) ([hanfei1991](https://github.com/hanfei1991)).
* Добавлена поддержка BFloat16 для числовых функций-предикатов. [#105391](https://github.com/ClickHouse/ClickHouse/pull/105391) ([mohhddhassan](https://github.com/mohhddhassan)).
* Добавлена поддержка basic statistics — компактной статистики по каждому столбцу, хранящей числовые минимум и максимум, среднюю длину строк и количество NULL, где применимо. [#106048](https://github.com/ClickHouse/ClickHouse/pull/106048) ([hanfei1991](https://github.com/hanfei1991)).
* Добавлена поддержка завершающего модификатора `NULL` / `NOT NULL` в `ALTER TABLE ... ADD/MODIFY COLUMN`, как и в `CREATE TABLE`. [#106150](https://github.com/ClickHouse/ClickHouse/pull/106150) ([takumihara](https://github.com/takumihara)).
* Оптимизатор PREWHERE теперь перед оценкой селективности группирует конъюнкты, ссылающиеся на один и тот же набор столбцов, поэтому такие условия, как `a > 2500 AND a < 2502`, оцениваются вместе как комбинированный диапазон (\~0,02% селективности), а не как два независимых предиката (\~50% каждый). Это позволяет точнее упорядочивать условия PREWHERE при наличии статистики по столбцам. [#106337](https://github.com/ClickHouse/ClickHouse/pull/106337) ([hanfei1991](https://github.com/hanfei1991)).
* Преамбула "Stack trace (when copying this message, always include the lines below):" больше не выводится в сообщениях об исключениях, если трассировка стека пуста. [#106524](https://github.com/ClickHouse/ClickHouse/pull/106524) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлено: `CREATE TABLE ... CLONE AS (and REPLACE / ATTACH PARTITION ... FROM)` на зашифрованных дисках копировал данные вместо создания жёстких ссылок. [#106731](https://github.com/ClickHouse/ClickHouse/pull/106731) ([nikitamikhaylov](https://github.com/nikitamikhaylov)).
* Исправлено чтение данных таблиц базами данных `DataLakeCatalog` с `catalog_type = 'onelake'`: теперь по умолчанию используется конечная точка OneLake Blob (`.blob.fabric.microsoft.com`). Установите `onelake_use_blob_endpoint = false`, чтобы сохранить прежнее поведение с конечной точкой DFS (`.dfs.fabric.microsoft.com`). [#106843](https://github.com/ClickHouse/ClickHouse/pull/106843) ([scanhex12](https://github.com/scanhex12)).
* Снижены накладные расходы CPU на асинхронное логирование при высокой скорости поступления логов: уведомление потребителя логов теперь выполняется только при переходе очереди из пустого состояния в непустое, а не для каждого сообщения. [#107352](https://github.com/ClickHouse/ClickHouse/pull/107352) ([nikitamikhaylov](https://github.com/nikitamikhaylov)).
* Исправлено чтение длины `auth_response` при рукопожатии MySQL: байт длины `>= 128` интерпретировался как значение в несколько гигабайт, поскольку считывался как знаковый `char`. [#107384](https://github.com/ClickHouse/ClickHouse/pull/107384) ([uwezkhan](https://github.com/uwezkhan)).
* `MaterializedPostgreSQL` теперь сопоставляет столбцы PostgreSQL `numeric(p, 0)` с точностью больше 76 (например, `numeric(78, 0)`, используемый для 256-битных целых чисел) с ClickHouse `Int256` вместо сбоя с сообщением "Precision too big". Значения, не помещающиеся в `Int256`, отклоняются с понятным сообщением об ошибке. [#107431](https://github.com/ClickHouse/ClickHouse/pull/107431) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `Nullable(Tuple(...))` теперь имеет статус Beta. По умолчанию отключён; для использования установите `enable_nullable_tuple_type = 1`. [#107754](https://github.com/ClickHouse/ClickHouse/pull/107754) ([nihalzp](https://github.com/nihalzp)).
* Асинхронные вставки больше не записывают полный список `query_id` на уровне `trace`/`debug`, что начиная с версии 26.2 могло переполнить `text_log` на сервисах с интенсивным трафиком асинхронных вставок. Подробные строки теперь выводятся на уровне `test`. [#107852](https://github.com/ClickHouse/ClickHouse/pull/107852) ([CheSema](https://github.com/CheSema)).
* Сокращено использование метаданных кэша файловой системы за счёт оперативного освобождения недействительных записей приоритета. [#107903](https://github.com/ClickHouse/ClickHouse/pull/107903) ([kssenii](https://github.com/kssenii)).
* Индекс пропуска данных `bloom_filter` для столбца `Array` теперь используется для `arrayJoin(column) IN (set)`, `arrayJoin(column) GLOBAL IN (set)` и `arrayJoin(column) = const` — так же, как он уже использовался для `hasAny(column, set)` и `has(column, const)`. Ранее эти варианты `arrayJoin ...` приводили к полному сканированию. [#109536](https://github.com/ClickHouse/ClickHouse/pull/109536) ([groeneai](https://github.com/groeneai)).
* `IS NOT DISTINCT FROM` и `IS TRUE` теперь используют индексы первичного ключа и minmax для исключения гранул, так же как `=`. Ранее `k IS NOT DISTINCT FROM 42` и `(k = 42) IS TRUE` сканировали все гранулы. [#110006](https://github.com/ClickHouse/ClickHouse/pull/110006) ([groeneai](https://github.com/groeneai)).

<h2 id="bug-fixes">
  Исправления ошибок
</h2>

<h3 id="join-fixes">
  Исправления JOIN
</h3>

* Исправлено удаление `LowCardinality` из типов столбцов функцией `nested` (внутренне используемой в `ARRAY JOIN`), из-за которого `Array(LowCardinality(String))` в результатах становился `Array(String)`. [#98974](https://github.com/ClickHouse/ClickHouse/pull/98974) ([Onyx2406](https://github.com/Onyx2406)).
* Исправлено изменение порядка JOIN, из-за которого при соединении через запятую (cross) с другой таблицей могли незаметно отбрасываться несовпадающие строки `RIGHT`/`LEFT JOIN`, например `t1 RIGHT JOIN t2 ON t1.c = t2.c, t3`. Ранее запрос возвращал результат внутреннего JOIN вместо внешнего. [#101684](https://github.com/ClickHouse/ClickHouse/pull/101684) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка `LOGICAL_ERROR` ("Port is not connected", код 49), которая могла возникать при выполнении запросов с VIEW, содержащим агрегацию внутри JOIN. [#102574](https://github.com/ClickHouse/ClickHouse/pull/102574) ([Ergus](https://github.com/Ergus)).
* Исправлено незаметное игнорирование `max_rows_to_transfer` и `max_bytes_to_transfer` для запросов `GLOBAL IN` и `GLOBAL JOIN` при использовании нового analyzer. Теперь эти настройки вызывают `SET_SIZE_LIMIT_EXCEEDED` (или прерывание — в зависимости от `transfer_overflow_mode`), когда материализованная внешняя таблица превышает заданный лимит, что соответствует поведению старого analyzer. [#104119](https://github.com/ClickHouse/ClickHouse/pull/104119) ([groeneai](https://github.com/groeneai)).
* Исправлены неверные результаты или сбои запросов `JOIN`, использующих `join_algorithm = 'direct'` с таблицей `MergeTree` в правой части, когда оптимизация меняла порядок столбцов поиска. [#104174](https://github.com/ClickHouse/ClickHouse/pull/104174) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка, при которой запросы, сочетающие `arrayJoin` с `ORDER BY ... LIMIT` после `JOIN`, могли незаметно возвращать ноль строк. Оптимизация плана запроса, поднимающая вычисление функций над `SortingStep`, больше не применяется, если поднимаемое выражение содержит `arrayJoin`, поскольку `arrayJoin` может изменять количество строк. [#104558](https://github.com/ClickHouse/ClickHouse/pull/104558) ([groeneai](https://github.com/groeneai)).
* Исправлена логическая ошибка, возникавшая в некоторых случаях при использовании отрицательного `LIMIT BY` с `ARRAY JOIN`. [#105403](https://github.com/ClickHouse/ClickHouse/pull/105403) ([nihalzp](https://github.com/nihalzp)).
* Добавлена новая настройка совместимости `analyzer_compatibility_prefer_alias_over_subcolumn` (по умолчанию отключена). Если она включена, новый analyzer для составных идентификаторов предпочитает интерпретацию с префиксом псевдонима совпадениям с подстолбцами Tuple или столбцами с точками, восстанавливая поведение предыдущего интерпретатора. Это позволяет избежать ошибок `AMBIGUOUS_IDENTIFIER` (и связанных с ними), когда запрос выполняет JOIN с таблицей, имя которой совпадает с именем внутренней таблицы CTE/подзапроса, использующего `SELECT *` для JOIN: иначе столбцы, переименованные через звёздочку (например, `b.id`), приводили бы к утечке идентификаторов внутренней таблицы во внешнюю область видимости. [#105491](https://github.com/ClickHouse/ClickHouse/pull/105491) ([vdimir](https://github.com/vdimir)).
* Исправлены потенциально неверные результаты запросов, сочетающих внешний JOIN с последующим внутренним JOIN, ссылающимся на сторону внешнего JOIN, предоставляющую NULL. Изменение порядка JOIN могло выбрать план, переносящий условия внутреннего JOIN в предложение ON внешнего JOIN. [#105992](https://github.com/ClickHouse/ClickHouse/pull/105992) ([vdimir](https://github.com/vdimir)).
* Улучшена совместимость со старым analyzer. Если таблица содержит столбцы вида `x.a Array, x.b Array, x String`, для `ARRAY JOIN x` предпочтение отдаётся массивам. [#106069](https://github.com/ClickHouse/ClickHouse/pull/106069) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* Исправлено исключение для запросов `INNER JOIN` с пустой левой таблицей `MergeTree`, когда включены `enable_parallel_replicas`, `query_plan_use_new_logical_join_step` и `query_plan_optimize_join_order_algorithm = 'greedy'`. [#106338](https://github.com/ClickHouse/ClickHouse/pull/106338) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* Исправлена логическая ошибка (`Left and right columns have same names`) в оптимизаторе порядка JOIN, которая могла возникать при выполнении JOIN с параллельными репликами, если два отношения в графе JOIN имеют столбцы с одинаковыми именами. [#106418](https://github.com/ClickHouse/ClickHouse/pull/106418) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлено исключение `LOGICAL_ERROR` (`Invalid number of rows in Chunk`) в `JoiningTransform` для `LEFT JOIN` с уникальными ключами правой стороны, смешанным условием `ON` и небольшим значением `max_joined_block_size_rows`. [#106928](https://github.com/ClickHouse/ClickHouse/pull/106928) ([groeneai](https://github.com/groeneai)).
* Исправлено исключение `LOGICAL_ERROR` в фильтре выполнения JOIN, возникавшее, когда ключ JOIN содержит тип `Variant` или `Dynamic`, вложенный в `Tuple`, `Array` или `Map`, а правая сторона JOIN содержит одно уникальное значение. [#106931](https://github.com/ClickHouse/ClickHouse/pull/106931) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка `LOGICAL_ERROR` (`Expected the argument N to have X rows, but it has Y`), возникавшая при выполнении функции над столбцом `Dynamic`, созданным JOIN по `Dynamic` (например, для строк, не сопоставленных при `RIGHT`/`FULL JOIN`, или для коррелированного подзапроса `EXISTS`, декоррелированного в JOIN). [#107095](https://github.com/ClickHouse/ClickHouse/pull/107095) ([groeneai](https://github.com/groeneai)).
* Исправлено исключение логической ошибки `Bad cast from type DB::IColumn const* to DB::ColumnNullable const*`, возникавшее, когда квалифицированная звездочка (`t.*`) для ключа `JOIN ... USING` передаётся в агрегатную функцию, а ключ на другой стороне внешнего JOIN имеет тип `Nullable` (при `join_use_nulls = 0`). [#107129](https://github.com/ClickHouse/ClickHouse/pull/107129) ([groeneai](https://github.com/groeneai)).
* Исправлена логическая ошибка (`Unexpected return type from equals. Expected Nullable(UInt8). Got UInt8`), возникавшая, когда оптимизация проталкивания дизъюнкции (частичного предиката) проталкивает условие по ключу `USING`, тип которого расширяется JOIN. Также исправлен сбой сервера (ошибка сегментации) в анализаторе при разрешении идентификаторов в запросах `JOIN ... USING`, содержащих сворачиваемые в константу ветви `if`/`multiIf`, ссылающиеся на неизвестные идентификаторы. [#107407](https://github.com/ClickHouse/ClickHouse/pull/107407) ([groeneai](https://github.com/groeneai)).
* Исправлен фильтр выполнения JOIN, выдававший неверные результаты для JSON-столбцов. [#107663](https://github.com/ClickHouse/ClickHouse/pull/107663) ([Avogar](https://github.com/Avogar)).
* Исправлено исключение логической ошибки `Bad cast from type DB::ColumnNullable to DB::ColumnVector<...>`, возникавшее, когда квалифицированная звездочка (`t.*`) выбирает ключ `JOIN USING`, а этот JOIN вложен под JOIN `PASTE`/`CROSS`/через запятую или внешний JOIN с `ON`, при `join_use_nulls = 0`. [#108043](https://github.com/ClickHouse/ClickHouse/pull/108043) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка в новом анализаторе, из-за которой FINAL для одной таблицы в JOIN (например, `FROM t1 FINAL JOIN t2`) некорректно применялся и к другим объединяемым таблицам, что могло замедлять такие запросы. [#108979](https://github.com/ClickHouse/ClickHouse/pull/108979) ([vdimir](https://github.com/vdimir)).
* При `analyzer_compatibility_join_using_top_level_identifier = 1` идентификатор в `JOIN ... USING` теперь может разрешаться по псевдониму, определённому для подвыражения внутри списка SELECT (например, `SELECT uniqExact(lower(x) AS id) FROM t1 JOIN t2 USING (id)`), что соответствует поведению старого анализатора. Ранее учитывались только псевдонимы проекции верхнего уровня, и такие запросы завершались исключением `UNKNOWN_IDENTIFIER` даже при включённой настройке. Подсказка об ошибке, предлагающая включить эту настройку, теперь также выводится, когда соответствующий псевдоним является вложенным. [#110739](https://github.com/ClickHouse/ClickHouse/pull/110739) ([novikd](https://github.com/novikd)).
* Исправлена ошибка `INCOMPATIBLE_TYPE_OF_JOIN` при `ANY` JOIN с таблицей движка `Join`, когда фильтр `WHERE` по столбцу правой стороны позволял планировщику запроса преобразовать JOIN в `SEMI` или `ANTI`. Для таблицы движка `Join` строгость фиксируется при объявлении и не может быть изменена, поэтому такое преобразование для этих таблиц теперь не выполняется. [#111362](https://github.com/ClickHouse/ClickHouse/pull/111362) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка `TYPE_MISMATCH` ("Key type for complex key ... does not match"), возникавшая, когда `JOIN` со словарём использовал ключ JOIN типа `Nullable`, `LowCardinality` или `LowCardinality(Nullable)`, а ключ словаря не был обёрнут. Поиск в словаре при прямом JOIN теперь приводит ключ к объявленному типу ключа словаря (как уже делают `dictGet`/`dictHas`), при этом ключ `NULL` никогда не сопоставляется. [#111857](https://github.com/ClickHouse/ClickHouse/pull/111857) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка `AMBIGUOUS_COLUMN_NAME` (`Block structure mismatch in (columns with identical name must have identical structure)`) для запроса, в котором условие `JOIN ON` повторяется в `WHERE` при `join_use_nulls = 1`. Теперь такой запрос возвращает результат вместо сбоя. [#112007](https://github.com/ClickHouse/ClickHouse/pull/112007) ([groeneai](https://github.com/groeneai)).
* Исправлены некорректные результаты и аварийное завершение работы сервера при прямом `JOIN` со словарём, ключ которого использует разреженную сериализацию. [#112327](https://github.com/ClickHouse/ClickHouse/pull/112327) ([groeneai](https://github.com/groeneai)).
* Исправлены некорректные результаты, возникавшие, когда hash join имел единственный ключ `LowCardinality` типа шире 8 байт (`UInt128`, `Int128`, `UInt256`, `Int256` и их варианты `Nullable`). Такой JOIN без предупреждения возвращал строки с неравными значениями ключей. [#113230](https://github.com/ClickHouse/ClickHouse/pull/113230) ([groeneai](https://github.com/groeneai)).
* Исправлено отсечение частей и гранул для условия `JOIN ON`, включающего постоянные столбцы другой стороны. [#113484](https://github.com/ClickHouse/ClickHouse/pull/113484) ([vdimir](https://github.com/vdimir)).
* Исправлено неверное значение, возвращаемое для виртуального столбца, например `_table` или `_database`, выбранного из правой стороны JOIN, обслуживаемого `DirectKeyValueJoin` (хранилищем ключ-значение, таким как `EmbeddedRocksDB`, `KeeperMap`, `Redis` или словарь). Вместо него запрос возвращал содержимое столбца данных либо завершался ошибкой `LOGICAL_ERROR`. [#113698](https://github.com/ClickHouse/ClickHouse/pull/113698) ([groeneai](https://github.com/groeneai)).

<h3 id="query-and-analyzer-fixes">
  Исправления в запросах и анализаторе
</h3>

* Исправлена ошибка, из-за которой splitMultipartQuery выдавал ошибку "Empty query" для запросов, заканчивающихся комментарием после точки с запятой. [#85491](https://github.com/ClickHouse/ClickHouse/pull/85491) ([yariks5s](https://github.com/yariks5s)).
* Исправлен случай, когда парсер не принимал псевдоним после подзапроса в DESCRIBE TABLE, что приводило к синтаксической ошибке. [#100205](https://github.com/ClickHouse/ClickHouse/pull/100205) ([yariks5s](https://github.com/yariks5s)).
* Исправлена ситуация, при которой предложение `FORMAT` обрабатывалось оператором `INSERT` вместо применения к выводу `EXPLAIN` в `EXPLAIN INSERT INTO ... SELECT ... FORMAT ...`. [#101772](https://github.com/ClickHouse/ClickHouse/pull/101772) ([Onyx2406](https://github.com/Onyx2406)).
* Исправлено значительное замедление SELECT-запросов при выполнении параллельных INSERT. Ранее конвейер INSERT резервировал до `max_threads` слотов CPU в начале запроса, даже если большинство из них никогда не использовалось, из-за чего параллельным SELECT не хватало ресурсов. Теперь слоты CPU выделяются по требованию: конвейер запрашивает их только при фактической передаче распараллеливаемой работы. Это относится как к управлению параллелизмом, так и к вытесняющему планировщику CPU для рабочих нагрузок. Новая настройка сервера `concurrent_threads_lazy_allocation` (по умолчанию `true`) позволяет откатить это изменение. [#102928](https://github.com/ClickHouse/ClickHouse/pull/102928) ([seva-potapov](https://github.com/seva-potapov)).
* Исправлена ошибка, при которой `ALTER TABLE ... MODIFY SETTING` для таблицы `EmbeddedRocksDB` мог сохранять недопустимое значение настройки в файл метаданных таблицы, даже если сервер отклонял запрос. При следующем перезапуске сервера таблицу не удавалось подключить из-за `CANNOT_PARSE_BOOL` (или аналогичной ошибки разбора), а в базах данных, где ошибки загрузки являются критическими, сервер отказывался запускаться. Теперь недопустимые значения настроек отклоняются до записи метаданных. [#103417](https://github.com/ClickHouse/ClickHouse/pull/103417) ([groeneai](https://github.com/groeneai)).
* Исправлена потоковая `INSERT` с `input_format_max_block_wait_ms` для интерфейса `HTTP` и `INSERT SELECT FROM input`: теперь частичные входные блоки сбрасываются до завершения запроса. [#104534](https://github.com/ClickHouse/ClickHouse/pull/104534) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлена ошибка, при которой выражение `CASE` возвращало ветвь `ELSE` вместо соответствующей ветви `THEN`, когда и выражение, и значение `WHEN` были `NULL`. [#105556](https://github.com/ClickHouse/ClickHouse/pull/105556) ([Algunenano](https://github.com/Algunenano)).
* Исправлена поддержка SQL UDF `WASM` в определениях `MATERIALIZED VIEW`. [#106161](https://github.com/ClickHouse/ClickHouse/pull/106161) ([niyue](https://github.com/niyue)).
* Исправлен случай, когда `INTERPOLATE ()` вызывал `INVALID_WITH_FILL_EXPRESSION`, если столбцам ORDER BY были назначены псевдонимы в списке SELECT при использовании старого анализатора. [#106252](https://github.com/ClickHouse/ClickHouse/pull/106252) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* Функции `base58Encode`, `base58Decode` и `tryBase58Decode` теперь учитывают `max_execution_time` и отмену запроса при обработке больших входных данных, а также отклоняют входные данные размером более 10 КБ вместо того, чтобы работать очень долго. Ограничение настраивается новой настройкой `function_base58_max_input_size` (`0` отключает его). [#106428](https://github.com/ClickHouse/ClickHouse/pull/106428) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлена ошибка, приводившая к неверным результатам: `WHERE c0 = const` не возвращал строк для таблиц с `ORDER BY f(c0)`, когда `f(const)` интерпретировалось как NaN, например при `ORDER BY sqrt(c0)` с отрицательной константой. Анализ первичного ключа ошибочно отсеивал все гранулы и загрязнял кэш условий запроса для последующих запросов. [#106507](https://github.com/ClickHouse/ClickHouse/pull/106507) ([groeneai](https://github.com/groeneai)).
* Исправлены неверные результаты запроса `SELECT c, count() FROM t WHERE c GROUP BY c` к таблицам с неявной `_minmax_count_projection`, явной агрегатной проекцией или обычной проекцией: ранее все группы сворачивались в одну строку с постоянным ключом и общим количеством строк. [#106590](https://github.com/ClickHouse/ClickHouse/pull/106590) ([groeneai](https://github.com/groeneai)).
* `FORMAT` теперь применяется к выводу `EXPLAIN` в `EXPLAIN ... INSERT ... SELECT ... FORMAT ...` также когда `SETTINGS` предшествует `FORMAT` или выходной формат — `Values`. [#106686](https://github.com/ClickHouse/ClickHouse/pull/106686) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлена редкая ложная ошибка `RESOURCE_ACCESS_DENIED` ("Scheduler queue with resource request is about to be destructed") для запроса, которому фактически был предоставлен доступ к ресурсу рабочей нагрузки. Причиной был повторно используемый локальный для потока объект запроса, сохранявший состояние сбоя предыдущего запроса. [#106690](https://github.com/ClickHouse/ClickHouse/pull/106690) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлена ошибка, из-за которой функции `match`, `extract`, `extractAll` и `countMatches` возвращали неверные результаты для регулярных выражений, содержащих шестнадцатеричные или восьмеричные экранированные последовательности. [#106709](https://github.com/ClickHouse/ClickHouse/pull/106709) ([ofeliacode](https://github.com/ofeliacode)).
* Исправлен выход за нижнюю границу диапазона целого числа в парсере PostgreSQL wire protocol: сообщение с полем длины меньше 4 вызывало переполнение при вычислении `size - 4` и чрезмерно большой `resize`/`ignore`. [#107485](https://github.com/ClickHouse/ClickHouse/pull/107485) ([uwezkhan](https://github.com/uwezkhan)).
* При `enable_analyzer = 1` (значение по умолчанию) запрос к таблице по имени без указания базы данных, если таблица существует только в другой базе данных, теперь предлагает правильную таблицу: например, `SELECT * FROM functions` сообщает `Maybe you meant system.functions?`. Ранее новый analyzer выдавал ошибку `Unknown table expression identifier` без подсказки, тогда как старый analyzer уже предлагал полезный вариант. [#107550](https://github.com/ClickHouse/ClickHouse/pull/107550) ([groeneai](https://github.com/groeneai)).
* Исправлено аварийное завершение сервера (`std::terminate`, сигнал 6) при завершении запроса с распределённым планом (`make_distributed_plan = 1`), когда проверка статуса рабочего узла не могла запланировать следующую проверку (например, из-за `CANNOT_SCHEDULE_TASK` при завершении работы или `MEMORY_LIMIT_EXCEEDED`). Теперь запрос корректно завершается с ошибкой, а сервер продолжает работу. [#107575](https://github.com/ClickHouse/ClickHouse/pull/107575) ([groeneai](https://github.com/groeneai)).
* Исправлены неверные результаты распределённых запросов, выбирающих столбцы `ALIAS` с общим подвыражением: столбцы могли быть неправильно выровнены, а значения возвращались в неверных столбцах. [#107675](https://github.com/ClickHouse/ClickHouse/pull/107675) ([vdimir](https://github.com/vdimir)).
* Исправлена логическая ошибка `Inconsistent AST formatting` для оконной функции без аргументов в объявлении `CODEC` или движка (например, `CODEC(cume_dist() OVER (...))`); теперь такая функция сохраняет скобки, поэтому запрос корректно проходит цикл форматирования и разбора. [#107806](https://github.com/ClickHouse/ClickHouse/pull/107806) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `getClientHTTPHeader` теперь корректно считается недетерминированной, поэтому её результат больше не переиспользуется кэшем результатов запроса. [#108029](https://github.com/ClickHouse/ClickHouse/pull/108029) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлены неверные результаты при использовании `SELECT [...] SAMPLE [...]` вместе с кэшем условий запроса (настройка `use_query_condition_cache = 1`, которая также включена по умолчанию). [#108488](https://github.com/ClickHouse/ClickHouse/pull/108488) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка `NOT_FOUND_COLUMN_IN_BLOCK`, возникающая, когда составному предикату присваивается псевдоним в `GROUP BY`, а затем на него снова ссылаются при включенном `enable_identifier_resolve_cache` (по умолчанию). Оптимизация `optimize_and_compare_chain` не была идемпотентной, и общий разрешенный узел накапливал дублирующий транзитивный конъюнкт. [#108553](https://github.com/ClickHouse/ClickHouse/pull/108553) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка `NUMBER_OF_COLUMNS_DOESNT_MATCH`, возникающая, когда подзапрос к таблице `Distributed` читает два или более столбца `ALIAS`, разворачивающихся в одно и то же выражение (например, `a1 String ALIAS toString(x), a2 String ALIAS toString(x)`), а результат подзапроса используется во внешнем запросе, например `SELECT count() FROM (SELECT a1, a2 FROM dist GROUP BY a1, a2)`. [#108725](https://github.com/ClickHouse/ClickHouse/pull/108725) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка `UNKNOWN_IDENTIFIER` при выполнении `ALTER TABLE ... DROP COLUMN`, когда у другого столбца есть выражение `DEFAULT` или `MATERIALIZED`, которое определяет встроенный псевдоним и ссылается на него. [#109374](https://github.com/ClickHouse/ClickHouse/pull/109374) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлено бесшумное пропускание баз данных в `system.tables` для пользователей с привилегиями на уровне отдельных баз данных, когда запрос читает только столбцы `name`/`database`. Добавлено в 26.2. [#109723](https://github.com/ClickHouse/ClickHouse/pull/109723) ([samay-sharma](https://github.com/samay-sharma)).
* Исправлена ошибка `UNKNOWN_IDENTIFIER` для столбцов с квалификацией именем CTE (`cte_name.column`) в запросах, сохраненных в представлениях, когда включен анализатор. [#111386](https://github.com/ClickHouse/ClickHouse/pull/111386) ([novikd](https://github.com/novikd)).
* Исправлена ошибка `NOT_FOUND_COLUMN_IN_BLOCK`, возникающая, когда запрос с `FINAL` фильтрует по столбцу ключа сортировки, отсутствующему в списке `SELECT`, а фильтр перемещается в `PREWHERE` (например, `SELECT s FROM t FINAL WHERE k GROUP BY s` при `optimize_move_to_prewhere_if_final = 1`). [#111721](https://github.com/ClickHouse/ClickHouse/pull/111721) ([groeneai](https://github.com/groeneai)).
* Исправлены сбои запуска сервера и `ATTACH` с сообщением `WITH RECURSIVE is not supported with the old analyzer` для представления с рекурсивным CTE, когда значением `enable_analyzer` по умолчанию на сервере является `0`. [#112784](https://github.com/ClickHouse/ClickHouse/pull/112784) ([evillique](https://github.com/evillique)).
* Исправлено распространение настроек запроса и обработка NULL в `accurateCastOrDefault`. [#114912](https://github.com/ClickHouse/ClickHouse/pull/114912) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлено, что `read_rows`, `read_bytes`, `written_rows` и `written_bytes` в `system.query_thread_log` сообщали накопленные за время жизни потока значения вместо значений для записанного запроса. Были затронуты строки долгоживущих потоков из пула, в частности поток `HTTPHandler`, инициирующий запрос. [#115596](https://github.com/ClickHouse/ClickHouse/pull/115596) ([groeneai](https://github.com/groeneai)).

<h3 id="mergetree-and-storage-fixes">
  Исправления в MergeTree и хранилище
</h3>

* Отсоединённые части с суффиксом `tryN` теперь можно удалять. [#58957](https://github.com/ClickHouse/ClickHouse/pull/58957) ([antaljanosbenjamin](https://github.com/antaljanosbenjamin)).
* Исправлено исключение `MULTIPLE_EXPRESSIONS_FOR_ALIAS` в запросах с дублирующимися псевдонимами проекций (например, `SELECT *, day + 365 AS day`) во вложенных подзапросах при выполнении на параллельных репликах. [#80310](https://github.com/ClickHouse/ClickHouse/pull/80310) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлен некорректный выбор кодека сжатия для частей `MergeTree`, когда настройка уровня таблицы `default_compression_codec` была задана явно. Части, записываемые при вставке, во время слияний и для проекций, использовали общесерверный кодек по умолчанию вместо настройки уровня таблицы. Теперь также учитывается пустая часть, создаваемая мутацией, полностью удаляющей данные. [#101784](https://github.com/ClickHouse/ClickHouse/pull/101784) ([Onyx2406](https://github.com/Onyx2406)).
* Исправлены ошибки `MULTIPLE_EXPRESSIONS_FOR_ALIAS`, генерируемые удалёнными репликами при выполнении запросов, ссылающихся на псевдонимы проекций в `PREWHERE` / `WHERE` / `HAVING` / `QUALIFY` (например, `SELECT x AS a, y AS b, (a AND b) AS c FROM t PREWHERE c`), или `SELECT *` для самосоединений с совпадающими именами столбцов при использовании параллельных реплик и `parallel_replicas_local_plan = 0`. [#103806](https://github.com/ClickHouse/ClickHouse/pull/103806) ([groeneai](https://github.com/groeneai)).
* Исправлена повреждённая patch-часть после `ALTER TABLE ... DROP PARTITION ID 'patch-...'` с последующим `DETACH`/`ATTACH TABLE`. Ранее пустая покрывающая часть записывалась без `partition.dat` и `source_parts.dat`, что приводило к появлению записи `broken-on-start_patch-...` в `system.detached_parts` после следующего подключения таблицы или перезапуска сервера. [#104353](https://github.com/ClickHouse/ClickHouse/pull/104353) ([groeneai](https://github.com/groeneai)).
* Исправлена незаметная замена данных значениями по умолчанию, когда `ALTER TABLE ... RENAME COLUMN` выполнялся одновременно с `OPTIMIZE TABLE ... FINAL` или другим фоновым слиянием. [#104822](https://github.com/ClickHouse/ClickHouse/pull/104822) ([groeneai](https://github.com/groeneai)).
* Исправлены два сценария возникновения исключения `LOGICAL_ERROR: Reading from materialized CTE 'X' before it has been materialized` в запросах с `enable_materialized_cte`: (1) повторно используемый материализованный CTE, отфильтрованный через `IN (subquery)` по другому материализованному CTE, и (2) материализованный CTE, на который ссылаются как напрямую, так и внутри фильтра `WHERE ... IN (...)`, обращающегося к первичному ключу MergeTree через вложенный IN-подзапрос. Это также затрагивало `EXPLAIN` для тех же запросов, поскольку ошибки возникали при оптимизации плана. [#105041](https://github.com/ClickHouse/ClickHouse/pull/105041) ([novikd](https://github.com/novikd)).
* При `skip_cache_on_disk_failure = 1` запросы теперь продолжают выполняться, если `FileCache` не может создать каталог кэша на диске. Сбой записывается в журнал, а запрос не завершается с ошибкой. [#105250](https://github.com/ClickHouse/ClickHouse/pull/105250) ([Diskein](https://github.com/Diskein)).
* Исправлено исключение логической ошибки `Mutation of Memory table produced incomplete output`, возникавшее при выполнении `ALTER TABLE <memory_table> APPLY PATCHES` и `ALTER TABLE <memory_table> APPLY DELETED MASK`. Таблицы `Memory` не содержат patch-частей или масок удаления, поэтому обе команды теперь корректно обрабатываются как операции без действия. [#105286](https://github.com/ClickHouse/ClickHouse/pull/105286) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка `CANNOT_CONVERT_TYPE` для `Merge` поверх `Merge` поверх `Distributed` с `distributed_group_by_no_merge=1`. [#105330](https://github.com/ClickHouse/ClickHouse/pull/105330) ([azat](https://github.com/azat)).
* Исправлена функция `singleValueOrNullMerge`, возвращавшая конкретное значение вместо `NULL` при слиянии состояния, в котором уже было обнаружено несколько различных значений. [#105734](https://github.com/ClickHouse/ClickHouse/pull/105734) ([fallintoplace](https://github.com/fallintoplace)).
* Исправлено аварийное завершение работы табличной функции `mongodb`, хранилища MongoDB и источника словаря MongoDB, возникавшее, когда имя коллекции пусто или содержит NUL-байты. [#105776](https://github.com/ClickHouse/ClickHouse/pull/105776) ([Algunenano](https://github.com/Algunenano)).
* Исправлено отклонение команды `ALTER TABLE ... CLEAR COLUMN` для явно указанных столбцов `columns_to_sum` движков `SummingMergeTree` и `CoalescingMergeTree`. [#105785](https://github.com/ClickHouse/ClickHouse/pull/105785) ([antonio2368](https://github.com/antonio2368)).
* Исправлены ошибки `UNKNOWN_DATABASE` при создании параметризованного представления, имя базы данных которого передаётся через параметр запроса. [#105799](https://github.com/ClickHouse/ClickHouse/pull/105799) ([groeneai](https://github.com/groeneai)).
* Восстановлена оптимизация чтения в порядке сортировки для таблиц `Merge` при использовании анализатора. [#105867](https://github.com/ClickHouse/ClickHouse/pull/105867) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* Исправлены мутации `UPDATE` и `DELETE` для таблиц Iceberg, доступ к которым осуществляется через каталог, включая повторные обновления и удаления, не затрагивающие ни одной строки. [#106111](https://github.com/ClickHouse/ClickHouse/pull/106111) ([scanhex12](https://github.com/scanhex12)).
* Исправлена ситуация, когда `optimize_skip_unused_shards` не применялся, а force\_optimize\_skip\_unused\_shards ошибочно завершался с ошибкой при запросе к таблице `Distributed` через таблицу `Merge` или табличную функцию `merge`, если предикат применялся на более высоком уровне. [#106250](https://github.com/ClickHouse/ClickHouse/pull/106250) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* Исправлена логическая ошибка `Column identifier ... is already registered`, возникавшая, когда предикат мутации (`DELETE`/`UPDATE`) содержит подзапрос `IN`/`EXISTS`, читающий из выражения таблицы по умолчанию, вложенного в другой подзапрос. [#106414](https://github.com/ClickHouse/ClickHouse/pull/106414) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлены периодически возникающие неверные результаты запросов `ORDER BY ... DESC` при обратном чтении частей Wide с `read_in_order_use_virtual_row_per_block = 1` и небольшим значением `max_block_size`. [#106429](https://github.com/ClickHouse/ClickHouse/pull/106429) ([vdimir](https://github.com/vdimir)).
* Исправлено исключение `Bad cast exception` для словарей Redis, использующих `STORAGE_TYPE 'simple'` с компоновкой `cache`/`direct` и единственным строковым (составным) ключом; теперь такие словари работают, а для составных ключей поверх хранилища `simple` выводится понятная ошибка. [#106501](https://github.com/ClickHouse/ClickHouse/pull/106501) ([vdimir](https://github.com/vdimir)).
* Исправлено исключение `Mutation of Memory table produced incomplete output`, вызываемое командами `ALTER TABLE <memory_table>`, которые не влияют на данные в отдельных строках таблицы с движком `Memory`, включая `APPLY PATCHES`, `APPLY DELETED MASK`, `MATERIALIZE STATISTICS`, `MATERIALIZE INDEX`, `MATERIALIZE PROJECTION` и `REWRITE PARTS`. Таблицы `Memory` не содержат этих структур, поэтому теперь такие команды считаются операциями без действия. [#106621](https://github.com/ClickHouse/ClickHouse/pull/106621) ([groeneai](https://github.com/groeneai)).
* Исправлен сбой запуска сервера с ошибкой `Too many marks in file ...skp_idx_idx.cmrk4, marks expected 0 (bytes size 0)`, возникавший, когда таблица `MergeTree` содержит часть skip-index с нулевым числом гранул и непустой файл меток на диске. [#106675](https://github.com/ClickHouse/ClickHouse/pull/106675) ([groeneai](https://github.com/groeneai)).
* Исправлен случай, когда параллельные реплики не применялись к представлению с UNION из-за пустой таблицы в UNION. [#106900](https://github.com/ClickHouse/ClickHouse/pull/106900) ([devcrafter](https://github.com/devcrafter)).
* Исправлено исключение логической ошибки `conflicted_part_name.has_value()`, которое могло возникать при синхронной вставке в таблицу `ReplicatedMergeTree`, если вставляемый блок был полностью дедуплицирован, а узел дедупликации конфликтующей части уже был удалён (например, параллельно выполнявшейся командой `DROP PARTITION`). [#107026](https://github.com/ClickHouse/ClickHouse/pull/107026) ([groeneai](https://github.com/groeneai)).
* Исправлены редкая ошибка `LOGICAL_ERROR` "Attempt to release query context that does not exist" и сопутствующее аварийное завершение сервера при чтении таблиц `MergeTree` через диск с файловым кэшем, созданный с `enable_filesystem_query_cache_limit = 1`. [#107028](https://github.com/ClickHouse/ClickHouse/pull/107028) ([groeneai](https://github.com/groeneai)).
* Исправлено аварийное завершение сервера при перемещении пустой части на диск `plain_rewritable` (например, с помощью `ALTER TABLE ... MOVE PARTITION ... TO DISK` для пустой части, сохраняемой при `remove_empty_parts = 0`). [#107040](https://github.com/ClickHouse/ClickHouse/pull/107040) ([groeneai](https://github.com/groeneai)).
* Исправлено исключение `Logical error: Too large size passed to allocator` при `INSERT` в таблицу `MergeTree`, если для `adaptive_write_buffer_initial_size` задано чрезвычайно большое значение. Начальный размер адаптивного буфера записи теперь ограничивается максимальным размером буфера. [#107104](https://github.com/ClickHouse/ClickHouse/pull/107104) ([groeneai](https://github.com/groeneai)).
* Исправлена ситуация, при которой пакеты `ALTER TABLE ... ON CLUSTER`, сочетающие `MODIFY SETTING`/`RESET SETTING` с изменением комментария (например, `MODIFY COMMENT 'x', MODIFY SETTING old_parts_lifetime = 123`), применялись только на ведущей реплике, из-за чего остальные реплики рассинхронизировались. Также исправлена ошибочная классификация позиционного или применяемого к отдельному столбцу `SETTINGS` в `MODIFY COLUMN ... COMMENT` как локального изменения метаданных, затрагивающего только комментарий. Из-за этого изменение порядка столбцов не попадало в реплицируемые метаданные и могло вызвать `INCOMPATIBLE_COLUMNS` при перезапуске реплики. [#107142](https://github.com/ClickHouse/ClickHouse/pull/107142) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка `Argument ... of GROUPING function is not a part of GROUP BY clause` для запросов, использующих функцию `grouping` при включённой настройке `group_by_use_nulls`. [#107206](https://github.com/ClickHouse/ClickHouse/pull/107206) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* Исправлены легковесные запросы `UPDATE` с включёнными устаревшими параллельными репликами для нереплицируемых таблиц `MergeTree`. [#107246](https://github.com/ClickHouse/ClickHouse/pull/107246) ([groeneai](https://github.com/groeneai)).
* Исправлено возможное исключение логической ошибки в `SYSTEM SYNC DATABASE REPLICA ... STRICT`; модификатор `STRICT` теперь действительно применяется к репликам базы данных. [#107344](https://github.com/ClickHouse/ClickHouse/pull/107344) ([PedroTadim](https://github.com/PedroTadim)).
* Исправлена ошибка `Logical error: 'Duplicate announcement received for replica number N'`, которая могла возникать при использовании параллельных реплик, если скалярный подзапрос содержал вложенные подзапросы, читающие одну и ту же таблицу. [#107381](https://github.com/ClickHouse/ClickHouse/pull/107381) ([groeneai](https://github.com/groeneai)).
* Исправлена незаметная потеря данных в обычном (нереплицируемом) `MergeTree`, если `REPLACE PARTITION`, `MOVE PARTITION`, `DETACH PARTITION` или `DETACH PART` выполнялась для партиции с ещё неприменёнными легковесными патчами `UPDATE`. Теперь эти операции отклоняются (как и в `ReplicatedMergeTree`) с указанием на `ALTER TABLE ... APPLY PATCHES` вместо незаметной отмены зафиксированного обновления. [#107386](https://github.com/ClickHouse/ClickHouse/pull/107386) ([groeneai](https://github.com/groeneai)).
* Исправлено незаметное прекращение репликации изменений в `MaterializedPostgreSQL`, если имя базы данных или таблицы PostgreSQL содержало прописные буквы (потребитель `pgoutput` запрашивал имя публикации без кавычек и в нижнем регистре, которое не соответствовало имени публикации с сохранённым регистром). [#107423](https://github.com/ClickHouse/ClickHouse/pull/107423) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлена ошибка `THERE_IS_NO_COLUMN`, возникавшая при `optimize_if_transform_strings_to_enum = 1`, если оптимизированное выражение `if`/`transform` со строковыми литералами использовалось как ключ `GROUP BY` или `ORDER BY` для таблицы Distributed или параллельных реплик. [#107455](https://github.com/ClickHouse/ClickHouse/pull/107455) ([groeneai](https://github.com/groeneai)).
* Исправлена проблема, из-за которой `SELECT ... FINAL` и `OPTIMIZE TABLE ... FINAL` возвращали дублирующиеся строки после переноса частей из обычной `MergeTree` в `ReplacingMergeTree`, `SummingMergeTree` или `AggregatingMergeTree` с помощью `CREATE TABLE ... CLONE AS`, `ATTACH PARTITION ... FROM` или `MOVE PARTITION ... TO TABLE`. Уровень слияния перенесённой части теперь сбрасывается до 0, если движки источника и пункта назначения различаются, поэтому при следующем слиянии она будет дедуплицирована в пункте назначения. [#107481](https://github.com/ClickHouse/ClickHouse/pull/107481) ([groeneai](https://github.com/groeneai)).
* Отмена запроса теперь корректнее отслеживается при ожидании кворума в ReplicatedMergeTree. [#107513](https://github.com/ClickHouse/ClickHouse/pull/107513) ([nickitat](https://github.com/nickitat)).
* Память, используемая библиотекой rapidjson (в `prettyPrintJSON`, `JSONMergePatch` и JSON-парсере rapidjson), теперь учитывается трекером памяти, поэтому патологические входные данные отклоняются с `MEMORY_LIMIT_EXCEEDED` вместо неограниченного выделения памяти. [#107555](https://github.com/ClickHouse/ClickHouse/pull/107555) ([Algunenano](https://github.com/Algunenano)).
* Исправлена ошибка `Logical error: Stream ... variant_discr ... is not found`, которая могла возникать при слиянии или чтении части `MergeTree`, созданной в результате мутации таблицы со столбцом `Dynamic`. [#107562](https://github.com/ClickHouse/ClickHouse/pull/107562) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлена ошибка `LOGICAL_ERROR` (`updateFormatPrewhereInfo called more than once`), возникавшая при запросе к источнику `file()`, `url()` или объектному хранилищу с явными `PREWHERE` и `WHERE`, когда был включён `optimize_prewhere_after_pushdown`. [#107568](https://github.com/ClickHouse/ClickHouse/pull/107568) ([groeneai](https://github.com/groeneai)).
* Исправлено исключение сервера (логическая ошибка `Digest does not match`), которое могло возникать при выполнении `RENAME TABLE`, `RENAME DATABASE` или `CREATE OR REPLACE TABLE` с таблицей `TimeSeries` в базе данных `Replicated`. Переименование таблиц `TimeSeries` теперь поддерживается. [#107583](https://github.com/ClickHouse/ClickHouse/pull/107583) ([groeneai](https://github.com/groeneai)).
* Исправлена проблема с `DROP TABLE` для таблицы `TimeSeries` в базе данных `Replicated`: ранее внутренние таблицы не удалялись, а фоновая задача удаления повторялась бесконечно (`DROP TABLE ... SYNC` зависал). [#107604](https://github.com/ClickHouse/ClickHouse/pull/107604) ([groeneai](https://github.com/groeneai)).
* Исправлены две уязвимости обхода пути в протоколе получения реплицируемых частей, которые могли позволить вредоносной реплике записывать файлы за пределами каталога части. [#107606](https://github.com/ClickHouse/ClickHouse/pull/107606) ([antonio2368](https://github.com/antonio2368)).
* Исправлена проблема, из-за которой `ALTER TABLE ... REPLACE PARTITION` в обычной таблице `MergeTree` восстанавливал заменённые части после перезапуска сервера, в результате чего таблица возвращала как строки замены, так и устаревшие строки из заменённых частей. [#107623](https://github.com/ClickHouse/ClickHouse/pull/107623) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка `LOGICAL_ERROR` ("Block structure mismatch ... between `ConvertingTransform` and `RemovingReplicatedColumnsTransform`"), возникавшая при вставке в materialized view, целевая таблица `TO` которой объявляет столбец с более широким типом `Enum`, чем создаёт `SELECT` представления. Допустимое расширение `Enum` теперь применяется при вставке в materialized view, как и при прямом `INSERT ... SELECT`. [#107648](https://github.com/ClickHouse/ClickHouse/pull/107648) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка `NUMBER_OF_COLUMNS_DOESNT_MATCH` при запросе к таблице `Distributed` (или при использовании параллельных реплик), содержащей несколько столбцов `ALIAS`, разворачивающихся в одно и то же выражение, если они используются вместе с `ORDER BY`/`GROUP BY`/`HAVING`. [#107913](https://github.com/ClickHouse/ClickHouse/pull/107913) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* Временная ошибка при обновлении частей данных таблицы только для чтения больше не приводит к окончательной остановке фоновой задачи обновления. [#108034](https://github.com/ClickHouse/ClickHouse/pull/108034) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `index_granularity_bytes` теперь учитывается для столбцов с состояниями `AggregateFunction`. Ранее ограничение размера гранулы в байтах игнорировалось для таких столбцов (например, состояний `uniqExact` в таблицах `AggregatingMergeTree` и агрегирующих проекциях), что приводило к созданию гранул, значительно превышающих настроенное ограничение, а также к увеличению объёма чтения и потребления памяти при выполнении запросов. [#108297](https://github.com/ClickHouse/ClickHouse/pull/108297) ([groeneai](https://github.com/groeneai)).
* Исправлено поведение `insert_quorum = 'auto'`, при котором вставки не отклонялись сразу, если в работе находилось менее половины реплик. Теперь такие вставки немедленно завершаются ошибкой `TOO_FEW_LIVE_REPLICAS` вместо записи локальной части с последующим тайм-аутом `UNKNOWN_STATUS_OF_INSERT`. [#108800](https://github.com/ClickHouse/ClickHouse/pull/108800) ([gagandhakrey](https://github.com/gagandhakrey)).
* Исправлено аварийное завершение сервера при асинхронной вставке с дедупликацией, когда `optimize_on_insert` делает вставляемый блок пустым (например, если сумма строк в `SummingMergeTree` равна нулю). [#109229](https://github.com/ClickHouse/ClickHouse/pull/109229) ([Diskein](https://github.com/Diskein)).
* Исправлена потеря данных столбца без выражения по умолчанию, когда слияние выполняется одновременно с `ALTER TABLE ... RENAME COLUMN` или когда единственные значения столбца поступают из легковесного `UPDATE`. Столбец мог быть удалён из слитой части, из-за чего при чтении все его значения возвращались как NULL. [#109356](https://github.com/ClickHouse/ClickHouse/pull/109356) ([groeneai](https://github.com/groeneai)).
* Исправлено редкое аварийное завершение сервера при слиянии агрегатных состояний `uniqExact` параллельно с `GROUPING SETS`, `ROLLUP` или `CUBE`. [#109389](https://github.com/ClickHouse/ClickHouse/pull/109389) ([groeneai](https://github.com/groeneai)).
* Исправлено бесконечное перепланирование rollup-слияний. [#109410](https://github.com/ClickHouse/ClickHouse/pull/109410) ([Michicosun](https://github.com/Michicosun)).
* Исправлены мутации `GROUP BY` для таблиц с материализованными или постоянными виртуальными столбцами. [#109532](https://github.com/ClickHouse/ClickHouse/pull/109532) ([Michicosun](https://github.com/Michicosun)).
* Исправлена ошибка `UNKNOWN_IDENTIFIER: Missing columns: '_block_offset'` при выполнении `ALTER TABLE ... MATERIALIZE INDEX` для неявного индекса minmax, созданного `add_minmax_index_for_block_number_column`/`add_minmax_index_for_block_offset_column`, в таблице с недавно вставленными частями (уровня 0). Теперь индекс строится для этих частей вместо завершения с ошибкой. [#110236](https://github.com/ClickHouse/ClickHouse/pull/110236) ([groeneai](https://github.com/groeneai)).
* Исправлено поведение реплики объектного хранилища только для чтения (диска, настроенного с `read_only = true`), при котором она не обнаруживала новые части через `refresh_parts_interval`, а `table_disk = true` отклонялся на таком диске с сообщением "table\_disk is not supported for non-ObjectStorage disks". [#110460](https://github.com/ClickHouse/ClickHouse/pull/110460) ([jkartseva](https://github.com/jkartseva)).
* Исправлена ошибка LOGICAL\_ERROR ("No set is registered for key") в операциях ALTER TABLE ... DROP COLUMN, мутациях ALTER TABLE ... DELETE/UPDATE и легковесном DELETE для таблиц со столбцом ALIAS, выражение которого использует оператор IN (в том числе через другой столбец ALIAS). [#111039](https://github.com/ClickHouse/ClickHouse/pull/111039) ([PedroTadim](https://github.com/PedroTadim)).
* Исправлены случаи, когда политика строк не применялась к проекциям MergeTree при выполнении запроса. [#112329](https://github.com/ClickHouse/ClickHouse/pull/112329) ([yariks5s](https://github.com/yariks5s)).
* Исправлена логическая ошибка `ReadBufferFromEncryptedFile: Wrong file position` при чтении части `Compact` с диска `encrypted` с прямым I/O, из-за которой слияния зависали в `system.replication_queue`. [#112943](https://github.com/ClickHouse/ClickHouse/pull/112943) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлено чтение внутренней базы данных `_temporary_and_external_tables` через табличную функцию `merge` и движок таблицы `Merge`, позволявшее одному сеансу читать временные таблицы других сеансов и пользователей и вызывавшее исключение при использовании старого analyzer. Теперь регулярное выражение для баз данных пропускает эту базу, а её явное указание запрещено — так же, как и прямой доступ к ней. [#113224](https://github.com/ClickHouse/ClickHouse/pull/113224) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлена проблема, при которой политика строк со скалярным подзапросом вычислялась лишь один раз и затем повторно использовалась при последующих чтениях таблицы через `Merge`. Разобранное условие политики кэшируется и совместно используется всеми запросами, а чтение через `Merge` изменяло кэшированное выражение на месте, что также приводило к гонке данных между одновременными запросами, использующими одну и ту же политику. [#113563](https://github.com/ClickHouse/ClickHouse/pull/113563) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлены ошибки `CANNOT_CONVERT_TYPE` при чтении таблицы `Merge`, содержащей таблицу `Distributed` с параллельными репликами и пользовательским ключом. [#113742](https://github.com/ClickHouse/ClickHouse/pull/113742) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлена ошибка `Logical error: No set is registered for key ...` при чтении через таблицу `Merge`, если её дочерняя таблица объявляет столбец `ALIAS`, содержащий `IN`, а дочерние таблицы имеют разные значения по умолчанию для этого столбца. [#113757](https://github.com/ClickHouse/ClickHouse/pull/113757) ([groeneai](https://github.com/groeneai)).
* Исправлена возможность обхода политики строк, при которой табличная функция mergeTreeIndex раскрывала значения первичного ключа и индекса minmax для строк, скрытых политикой строк SELECT в исходной таблице; теперь чтение mergeTreeIndex для таблицы с политикой строк запрещено. [#115304](https://github.com/ClickHouse/ClickHouse/pull/115304) ([yariks5s](https://github.com/yariks5s)).

<h3 id="data-type-and-serialization-fixes">
  Исправления типов данных и сериализации
</h3>

* Исправлено исключение в `ARRAY JOIN` при использовании числовых типов `LowCardinality`. [#91784](https://github.com/ClickHouse/ClickHouse/pull/91784) ([Ergus](https://github.com/Ergus)).
* Исправлено создание столбцов `NOT NULL` как `Nullable` без уведомления, когда `data_type_default_nullable = 1` и таблица создаётся в базе данных `Replicated` или с помощью `ON CLUSTER`. [#97572](https://github.com/ClickHouse/ClickHouse/pull/97572) ([xiaohuanlin](https://github.com/xiaohuanlin)).
* Исправлено некорректное число строк, возвращаемое запросом к `MaterializedView` с `query_plan_enable_optimizations = 0`, когда представление сопоставляет столбец `integer` со столбцом `Bool`. [#100692](https://github.com/ClickHouse/ClickHouse/pull/100692) ([Maximus5](https://github.com/Maximus5)).
* Исправлены несогласованные метаданные части после мутаций столбцов с нестандартными сериализациями. [#102817](https://github.com/ClickHouse/ClickHouse/pull/102817) ([korowa](https://github.com/korowa)).
* Исправлено распространение `NULL` при чтении подстолбцов, извлечённых из столбцов `Nullable(Tuple(...))`. Например, для `tup Nullable(Tuple(s Nullable(String)))` запрос `SELECT tup.s` теперь корректно возвращает `NULL` в строках, где внешний кортеж имеет значение `NULL`, вместо некорректных значений. Это относится ко всем типам элементов, способным представлять `NULL`: `Nullable`, `Dynamic`, `Variant` и `LowCardinality(Nullable(...))`. [#102942](https://github.com/ClickHouse/ClickHouse/pull/102942) ([nihalzp](https://github.com/nihalzp)).
* Исправлено удаление функцией `recursiveRemoveLowCardinality` пользовательских имён геометрических типов (например, различий между `LineString` и `Ring`, `MultiLineString` и `Polygon`), которое приводило к неверной интерпретации геометрического типа. [#103041](https://github.com/ClickHouse/ClickHouse/pull/103041) ([jh0x](https://github.com/jh0x)).
* Исправлена ситуация, когда `dictGetOrNull` незаметно перезаписывала `NULL` другие столбцы в проекции `SELECT` при вызове со столбцом ключа типа `Nullable`, значения которого отсутствуют в словаре. Функция изменяла на месте карту NULL, связанную с входными данными через псевдоним; теперь перед мутацией она выполняет глубокое копирование результирующего столбца. [#104327](https://github.com/ClickHouse/ClickHouse/pull/104327) ([groeneai](https://github.com/groeneai)).
* Исправлено исключение для распределённых запросов, содержащих пустой кортеж `IN` в ключе сегментирования при включённом `optimize_skip_unused_shards_rewrite_in`. [#104966](https://github.com/ClickHouse/ClickHouse/pull/104966) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлена оценка селективности `PREWHERE` по статистике count-min для столбцов `Float32`, включая сравнения с литералами `Float64`. [#105047](https://github.com/ClickHouse/ClickHouse/pull/105047) ([hanfei1991](https://github.com/hanfei1991)).
* Исправлена ошибка `ILLEGAL_TYPE_OF_ARGUMENT` при объединении состояний агрегатных функций `quantileExactWeightedInterpolated`, `quantileDD` или `quantilePrometheusHistogram` с соответствующими вариантами `quantilesXxxMerge` для множественных квантилей (и наоборот). Варианты единственного и множественного числа этих трёх семейств квантилей используют одно и то же внутреннее состояние агрегатной функции, но не были указаны во внутренней таблице сопоставления имён, поэтому объединение состояний между функциями — а также оптимизация объединения функций для этих семейств — отклонялось. [#105189](https://github.com/ClickHouse/ClickHouse/pull/105189) ([groeneai](https://github.com/groeneai)).
* Исправлены некорректные результаты `toStartOfWeek`, `toLastDayOfWeek`, `toMonday`, `toStartOfMonth`, `toLastDayOfMonth`, `toStartOfQuarter` и `toStartOfYear` для аргументов `Date32` и `DateTime64`, выходящие за пределы диапазона `Date`: вместо переполнения до произвольных дат результаты до `1970-01-01` теперь ограничиваются значением `1970-01-01`, а результаты после `2149-06-06` — значением `2149-06-06`. Также исправлены неверные результаты запросов (некорректно отсечённые части и гранулы), когда такие функции использовались в `WHERE` для ключа `Date32` или `DateTime64`, содержащего значения вне диапазона. [#105244](https://github.com/ClickHouse/ClickHouse/pull/105244) ([yariks5s](https://github.com/yariks5s)).
* Исправлена логическая ошибка в `arrayRemove`, когда первый аргумент — массив `Variant`, все альтернативы которого несовместимы с типом второго аргумента, а `variant_throw_on_type_mismatch` отключён. Теперь функция считает такое сравнение «никогда не равным» и возвращает массив без изменений вместо сбоя серверной функции `assertTypeEquality`. [#105248](https://github.com/ClickHouse/ClickHouse/pull/105248) ([groeneai](https://github.com/groeneai)).
* Исправлено игнорирование `cast_keep_nullable` функциями `toFloat64`/`toUInt32`/`toString` и т. д. для Dynamic. [#105467](https://github.com/ClickHouse/ClickHouse/pull/105467) ([Avogar](https://github.com/Avogar)).
* Исправлен segfault сервера в `uniqStateOrNull` / `uniqStateOrDefault` / `uniqOrNullState` (и аналогичных цепочках комбинаторов над `uniq`) при использовании с `GROUP BY ... WITH ROLLUP`, `WITH CUBE` или `WITH TOTALS` и аргументом Nullable. [#105470](https://github.com/ClickHouse/ClickHouse/pull/105470) ([groeneai](https://github.com/groeneai)).
* Исправлено, что `toStartOfMillisecond` и `toStartOfMicrosecond` возвращали результат с ошибкой почти в секунду для отрицательных значений `DateTime64` (до эпохи), а также переполнение знакового целого, выявляемое `UndefinedBehaviorSanitizer`, в `toStartOfSecond`, `toStartOfMillisecond` и `toStartOfMicrosecond` для значений `DateTime64` вблизи `INT64_MIN`. [#105482](https://github.com/ClickHouse/ClickHouse/pull/105482) ([groeneai](https://github.com/groeneai)).
* Исправлено завершение работы сервера при десериализации состояний `singleValueOrNull` для `JSON`. [#105535](https://github.com/ClickHouse/ClickHouse/pull/105535) ([Avogar](https://github.com/Avogar)).
* Исправлено игнорирование `input_format_try_infer_datetimes` при вставке в общие данные в JSON. [#105544](https://github.com/ClickHouse/ClickHouse/pull/105544) ([Avogar](https://github.com/Avogar)).
* Исправлено циклическое переполнение `DateTime` для значений вне диапазона в `JSONExtract` и при текстовой десериализации. [#105551](https://github.com/ClickHouse/ClickHouse/pull/105551) ([Avogar](https://github.com/Avogar)).
* Исправлен сбой при вставке кортежей разного размера в одном предложении VALUES в столбец String. [#105582](https://github.com/ClickHouse/ClickHouse/pull/105582) ([Avogar](https://github.com/Avogar)).
* Исправлена ошибка NOT\_IMPLEMENTED при вызове toString для DateTime с Timezone, содержащим значение NULL. [#105587](https://github.com/ClickHouse/ClickHouse/pull/105587) ([yariks5s](https://github.com/yariks5s)).
* Добавлена проверка некорректно преобразованных в плоскую структуру столбцов `Dynamic` во входных данных Native. [#105666](https://github.com/ClickHouse/ClickHouse/pull/105666) ([Avogar](https://github.com/Avogar)).
* Исправлена ошибка `LOGICAL_ERROR` (`Unexpected return type from if`) при планировании запроса для выражений `if` с типом результата `Variant`, вторая или третья ветвь которых представляет собой `if` с постоянным условием над литералом `UInt64`, помещающимся в `Int64`. [#105680](https://github.com/ClickHouse/ClickHouse/pull/105680) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка `Bad get: has Decimal32, requested Decimal128` в `sumMap` и `sumMapWithOverflow` при работе со столбцом `Nested(... Nullable(Decimal(P, S)))`, когда состояние агрегации сериализуется (например, при использовании параллельных реплик, `sumMapState` через форматтер бинарного состояния или внешней агрегации). [#105816](https://github.com/ClickHouse/ClickHouse/pull/105816) ([groeneai](https://github.com/groeneai)).
* Исправлены ошибки `Expected ColumnLowCardinality, got String` / `Bad cast from type DB::ColumnString to DB::ColumnLowCardinality`, возникающие при использовании `apply_mutations_on_fly = 1` в таблице с ожидающими on-fly-мутациями `UPDATE`/`DELETE`, поставленными в очередь до мутации `ALTER MODIFY COLUMN ... LowCardinality(...)`. [#105847](https://github.com/ClickHouse/ClickHouse/pull/105847) ([Algunenano](https://github.com/Algunenano)).
* Исправлена ошибка `Cannot find column` в новом анализаторе для распределённых запросов с фильтром `IN Array(...)`. [#105894](https://github.com/ClickHouse/ClickHouse/pull/105894) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* Исправлено завершение работы сервера при изменении столбца с `STATISTICS` на `Nullable`, если другой `ALTER` одновременно удалял этот столбец. [#105917](https://github.com/ClickHouse/ClickHouse/pull/105917) ([groeneai](https://github.com/groeneai)).
* Байты `IntervalKind`, выходящие за допустимый диапазон, теперь отклоняются при декодировании типов в `RowBinaryWithNamesAndTypes` (`input_format_binary_decode_types_in_binary_format = 1`) с понятной ошибкой `INCORRECT_DATA` вместо создания `DataTypeInterval` с недопустимым видом, который впоследствии мог привести к неопределённому поведению при хешировании. [#106261](https://github.com/ClickHouse/ClickHouse/pull/106261) ([groeneai](https://github.com/groeneai)).
* Подстолбец 'null' в Nullable(JSON) теперь читается как JSON-путь, а не как карта NULL. [#106295](https://github.com/ClickHouse/ClickHouse/pull/106295) ([Avogar](https://github.com/Avogar)).
* Исправлено чтение за пределами массива в `sipHash64Keyed`, `sipHash128Keyed` и `sipHash128ReferenceKeyed` при хешировании столбца, все массивы которого пусты, а ключ не является постоянным. [#106355](https://github.com/ClickHouse/ClickHouse/pull/106355) ([Algunenano](https://github.com/Algunenano)).
* Исправлена ошибка, из-за которой пользователи не могли использовать скалярные подзапросы в первом аргументе `IN`, если второй аргумент — неконстантный кортеж. [#106610](https://github.com/ClickHouse/ClickHouse/pull/106610) ([yariks5s](https://github.com/yariks5s)).
* Исправлено игнорирование `session_timezone` при сериализации столбцов `LowCardinality(DateTime)` в текстовые форматы (CSV, TSV, JSONEachRow и т. д.). Ранее после первой записи столбца `LowCardinality(DateTime)` на сервере каждый последующий запрос, записывающий такой столбец, отображал строку локального времени в первом использованном часовом поясе независимо от `session_timezone`. [#106634](https://github.com/ClickHouse/ClickHouse/pull/106634) ([groeneai](https://github.com/groeneai)).
* Исправлено завершение работы сервера в `if` и `multiIf`, когда условием является постоянное значение `Nullable(Nothing)`. [#106678](https://github.com/ClickHouse/ClickHouse/pull/106678) ([groeneai](https://github.com/groeneai)).
* Отменено изменение, из-за которого `sumMap` и комбинатор `-Map` отклоняли числовые типы значений с пользовательскими именами (такие как `SimpleAggregateFunction(sum, T)` и `Bool`) с ошибкой `ILLEGAL_TYPE_OF_ARGUMENT: Values for -Map cannot be summed`, что нарушало работу ранее работавших агрегаций. [#106729](https://github.com/ClickHouse/ClickHouse/pull/106729) ([fm4v](https://github.com/fm4v)).
* Исправлено исключение `Bad cast` при отсечении частей по статистике `MinMax`, когда ключевой столбец имеет тип `LowCardinality`, а константа предиката — тип `LowCardinality(Nullable(...))`. [#106793](https://github.com/ClickHouse/ClickHouse/pull/106793) ([groeneai](https://github.com/groeneai)).
* Исправлена логическая ошибка в `parseDateTime` при наличии не-ASCII-байтов во входных данных. [#106856](https://github.com/ClickHouse/ClickHouse/pull/106856) ([Avogar](https://github.com/Avogar)).
* Исправлено исключение `THERE_IS_NO_COLUMN` в распределённых запросах с оптимизацией `optimize_rewrite_aggregate_function_with_if`, когда аргумент агрегатной функции требует приведения к типу Nullable. [#106908](https://github.com/ClickHouse/ClickHouse/pull/106908) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* Исправлено переполнение знакового целого числа (неопределённое поведение) в `arrayLevenshteinDistanceWeighted` и `arraySimilarity`, когда массивы весов содержат большие целочисленные значения. Взвешенное расстояние для целочисленных весов теперь накапливается в целочисленном типе увеличенной разрядности, поэтому большие значения весов больше не вызывают переполнения и сохраняют точность. [#106934](https://github.com/ClickHouse/ClickHouse/pull/106934) ([groeneai](https://github.com/groeneai)).
* Исправлен сбой (`Source column is not Map` / `SIGSEGV`) при слиянии отсортированных блоков, содержащих столбец `Variant` с вариантом `Map`, локальный порядок хранения которого отличается от глобального. [#107011](https://github.com/ClickHouse/ClickHouse/pull/107011) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка `TYPE_MISMATCH` ("Cannot convert string ... to type ...") в запросах `ORDER BY <numeric column> ... LIMIT n`, когда отложенная материализация размещала другой столбец перед столбцом сортировки. Порог top-K теперь считывается из нужного столбца сортировки. [#107060](https://github.com/ClickHouse/ClickHouse/pull/107060) ([groeneai](https://github.com/groeneai)).
* Исправлен составной запрос `ALTER TABLE ... RENAME COLUMN a TO b, RENAME COLUMN c TO a`, повторно использующий освобождённое имя столбца (выполняющий «обмен») между столбцами разных типов. В материализованной части записывался неверный тип столбца, из-за чего последующий `SELECT` завершался ошибкой `Conversion between numeric types and IPv6 is not supported` (или прерывался при загрузке части в отладочных сборках). [#107064](https://github.com/ClickHouse/ClickHouse/pull/107064) ([groeneai](https://github.com/groeneai)).
* Исправлены недетерминированные результаты функции `roundDown`, когда массив границ содержит `NaN`. Одно и то же входное значение могло возвращать конечную границу или `NaN` в зависимости от окружающих строк в пакете. Границы `NaN` теперь игнорируются, поэтому результат зависит только от конечных границ. [#107065](https://github.com/ClickHouse/ClickHouse/pull/107065) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка `DECIMAL_OVERFLOW`, которую `quantileTDigest` и `quantileTDigestWeighted` генерировали для аргументов `Date` и `DateTime`, когда интерполированный квантиль был дробным, но находился в допустимом диапазоне (например, `quantileTDigestWeighted(date, weight)` для значений, каждое из которых помещается в тип). Дробный результат теперь усекается до типа результата, как в `quantilesTDigestWeighted`; для значений, действительно выходящих за диапазон, по-прежнему возникает ошибка. [#107066](https://github.com/ClickHouse/ClickHouse/pull/107066) ([groeneai](https://github.com/groeneai)).
* Исправлено бесшумное усечение целочисленных значений вне диапазона в определениях типов `Enum8`/`Enum16`. `Enum8('a' = 200)` теперь генерирует исключение `ARGUMENT_OUT_OF_BOUND` вместо бесшумного создания `Enum8('a' = -56)`. [#107081](https://github.com/ClickHouse/ClickHouse/pull/107081) ([groeneai](https://github.com/groeneai)).
* Исправлен неверный порядок строк (а также ошибка `LOGICAL_ERROR` "Rows are not sorted with permutation" в отладочных сборках) в запросах `ORDER BY ... LIMIT` с несколькими столбцами сортировки по `Nullable`, когда несколько строк имеют одинаковые значения в ведущих столбцах. [#107094](https://github.com/ClickHouse/ClickHouse/pull/107094) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка `Logical error: 'Bad cast from type DB::ColumnVector<...> to DB::ColumnTuple'` при чтении столбца `Array(Tuple(...))`, заполненного значениями по умолчанию, например после `ALTER TABLE ... ADD COLUMN` или незавершённой применяемой на лету мутации `ALTER TABLE ... CLEAR COLUMN`. [#107232](https://github.com/ClickHouse/ClickHouse/pull/107232) ([groeneai](https://github.com/groeneai)).
* Неподдерживаемое использование столбцов `AggregateFunction` в TTL-выражениях теперь отклоняется при выполнении `CREATE TABLE` (например, `TTL toDateTime(state)`), а не приводит позднее к сбою при выполнении TTL с ошибкой `ILLEGAL_TYPE_OF_ARGUMENT`. Это также относится к состояниям внутри альтернатив `Variant` и значений `Dynamic`. Допустимые функции, работающие с состояниями, такие как `finalizeAggregation`, по-прежнему разрешены. [#107366](https://github.com/ClickHouse/ClickHouse/pull/107366) ([Ria-K912](https://github.com/Ria-K912)).
* Исправлена работа `arrayResize` с аргументом размера типа `Decimal`: размер теперь интерпретируется по фактическому значению (например, `arrayResize([1, 2, 3], 1.5::Decimal(2, 1))` возвращает один элемент), а не по исходному немасштабированному представлению. [#107389](https://github.com/ClickHouse/ClickHouse/pull/107389) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлена ошибка `LOGICAL_ERROR: Unexpected return type from materialize` (и аналогичные ошибки несоответствия типов) при использовании `apply_mutations_on_fly = 1` для таблицы с ожидающим применяемым на лету `UPDATE`, целевой столбец которого также используется как входной аргумент функции в более раннем применяемом на лету `UPDATE`, перед мутацией `ALTER MODIFY COLUMN ... LowCardinality(...)`. [#107475](https://github.com/ClickHouse/ClickHouse/pull/107475) ([groeneai](https://github.com/groeneai)).
* Исправлено молчаливое преобразование значений NULL в пустые строки при вставке данных Arrow/ORC в столбец LowCardinality(Nullable(...)). Это была регрессия, появившаяся в 26.5. [#107532](https://github.com/ClickHouse/ClickHouse/pull/107532) ([Ergus](https://github.com/Ergus)).
* Исправлена ошибка `LOGICAL_ERROR` ("Input nodes size mismatch in dag"), возникавшая, когда запрос с `make_distributed_plan = 1` выполняет соединение по ключу, обёрнутому в функцию, стороны которого не имеют общего типа (например, `ON intDiv(-1, t1.key) = t2.key` с правым ключом `UInt64`). [#107701](https://github.com/ClickHouse/ClickHouse/pull/107701) ([groeneai](https://github.com/groeneai)).
* Исправлено вычисление неверных хешей при дедупликации вставок для столбцов `String` и `Array` с настройкой сервера `insert_deduplication_version = new_unified_hash`: идентичные вставки могли не дедуплицироваться, поскольку хеш дедупликации зависел от позиции строки внутри вставленного блока. [#107915](https://github.com/ClickHouse/ClickHouse/pull/107915) ([CheSema](https://github.com/CheSema)).
* Исправлено завершение работы сервера в `has` при поиске в `Map` с ключами `Dynamic` с использованием аргумента `LowCardinality`. [#107956](https://github.com/ClickHouse/ClickHouse/pull/107956) ([groeneai](https://github.com/groeneai)).
* Исправлена регрессия производительности для подстолбцов `Map`, используемых с `PREWHERE`. [#107988](https://github.com/ClickHouse/ClickHouse/pull/107988) ([Avogar](https://github.com/Avogar)).
* Исправлена логическая ошибка при приведении столбца `Dynamic` или `Variant`, вложенного в `Tuple`, к типу элемента без `Nullable` с помощью `accurateCastOrNull` или `accurateCastOrDefault`. [#108061](https://github.com/ClickHouse/ClickHouse/pull/108061) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлено исключение логической ошибки `Bad cast from type DB::ColumnSparse to DB::ColumnVector<char8_t>`, возникавшее, когда запрос `LIKE` читает из индекса `text` через резервный путь прямого чтения из столбца, хранящегося в разреженном виде. [#108068](https://github.com/ClickHouse/ClickHouse/pull/108068) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка `LOGICAL_ERROR` ("Unexpected return type from if") при чтении столбца с `apply_mutations_on_fly = 1` после выполнения `ALTER UPDATE col = ... WHERE <cond>` с неконстантным или ложным условием, за которым следует `ALTER MODIFY COLUMN col <new type>`. [#108128](https://github.com/ClickHouse/ClickHouse/pull/108128) ([groeneai](https://github.com/groeneai)).
* Исправлено переполнение знакового целого числа (`signed integer overflow`, неопределённое поведение) в `dateDiff` с единицами `hour` и `minute` для экстремальных значений `DateTime64`, близких к границам диапазона `Int64`. [#108229](https://github.com/ClickHouse/ClickHouse/pull/108229) ([groeneai](https://github.com/groeneai)).
* Исправлено исключение сервера (`Logical error` в `IColumn::insertFrom`) при приведении `Array(Dynamic)` или `Array(Variant)` к `QBit` с помощью `accurateCastOrNull`, например `accurateCastOrNull(CAST(range(114), 'Array(Dynamic)'), 'QBit(Float32, 114)')`. [#108288](https://github.com/ClickHouse/ClickHouse/pull/108288) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка, из-за которой `parseDateTimeBestEffort` с часовым поясом вызывала CANNOT\_PARSE\_DATETIME для строк со значением NULL в `toString(Nullable(DateTime64))`. [#108310](https://github.com/ClickHouse/ClickHouse/pull/108310) ([yariks5s](https://github.com/yariks5s)).
* Исправлен сбой сервера (переполнение стека), вызванный глубоко вложенными выражениями, такими как `[[[ ... ]]]` или `array(array( ... ))`, когда для `max_parser_depth` задано большое значение. [#108493](https://github.com/ClickHouse/ClickHouse/pull/108493) ([Algunenano](https://github.com/Algunenano)).
* Исправлена проблема, при которой проекция `SELECT *` возвращала значение по умолчанию для типа столбца (например, `0`) вместо значения `DEFAULT` столбца (например, `-1`) при чтении столбца, добавленного с помощью `ALTER TABLE ... ADD COLUMN ... DEFAULT` после создания проекции. Чтение из базовой таблицы уже было корректным; проблема затрагивала только запросы, обслуживаемые проекцией, до её пересоздания. [#108569](https://github.com/ClickHouse/ClickHouse/pull/108569) ([tiandiwonder](https://github.com/tiandiwonder)).
* Исправлено незаметное отключение отсечения по партициям и первичному ключу, когда ключевой столбец `LowCardinality(FixedString)` (или `LowCardinality(Nullable(FixedString))`) обёрнут в функцию в ключе, например `PARTITION BY sipHash64(k) % N` с `WHERE k = 'literal'`. Такие запросы сканировали все партиции вместо их отсечения. [#108777](https://github.com/ClickHouse/ClickHouse/pull/108777) ([groeneai](https://github.com/groeneai)).
* Сохранён исходный порядок ключей при сериализации Map по бакетам, чтобы исправить зависящие от него операции сравнения. [#109178](https://github.com/ClickHouse/ClickHouse/pull/109178) ([Avogar](https://github.com/Avogar)).
* Исправлено определение схемы для форматов `Arrow`, `ArrowStream`, `Avro` и устаревших средств чтения `ORC` и `Parquet`, которое возвращало `Nullable(Tuple)` для допускающих NULL структурных столбцов, хотя тип `Nullable(Tuple)` не разрешён (`allow_experimental_nullable_tuple_type` отключён). `DESCRIBE` возвращал тип, который отклоняет `CREATE TABLE`, поэтому создание таблицы или вставка данных с использованием определённой схемы завершались ошибкой `Nullable Tuple type is not allowed`. [#109185](https://github.com/ClickHouse/ClickHouse/pull/109185) ([nihalzp](https://github.com/nihalzp)).
* Исправлена ошибка, из-за которой значения `DEFAULT` для столбцов не применялись при `INSERT INTO TABLE FUNCTION` (например, `remote(...)` или `file(...)`) со встроенными данными `VALUES`, когда сервер самостоятельно разбирает встроенные данные (`send_table_structure_on_insert_with_inline_data = 0`). Явно указанное значение `NULL`, вставленное в не-`Nullable` столбец с `DEFAULT`, становилось `0` вместо объявленного значения по умолчанию. Теперь поведение соответствует обычному `INSERT` в таблицу и HTTP-протоколу. [#109258](https://github.com/ClickHouse/ClickHouse/pull/109258) ([groeneai](https://github.com/groeneai)).
* Исправлен segfault в `groupArrayLastMerge`. Теперь десериализация состояния агрегатной функции проходит валидацию, поэтому повреждённое состояние не приводит к выходу за границы массива. [#109485](https://github.com/ClickHouse/ClickHouse/pull/109485) ([mstetsyuk](https://github.com/mstetsyuk)).
* Исправлен segfault в агрегатной функции `largestTriangleThreeBuckets`: повреждённое состояние агрегатной функции теперь отклоняется при десериализации. [#109492](https://github.com/ClickHouse/ClickHouse/pull/109492) ([mstetsyuk](https://github.com/mstetsyuk)).
* Исправлено чтение столбца Parquet с не допускающим NULL типом `Tuple`, когда запрошенный тип ClickHouse оборачивает его в `Nullable` (например, `Nullable(Tuple(...))`): ранее оно завершалось ошибкой `TYPE_MISMATCH`. [#109615](https://github.com/ClickHouse/ClickHouse/pull/109615) ([groeneai](https://github.com/groeneai)).
* Собственный модуль чтения Parquet v3 теперь может читать физически допускающий NULL столбец struct (группу OPTIONAL в Parquet) как `Nullable(Tuple(...))`. Ранее это приводило к ошибке `TYPE_MISMATCH`. [#109898](https://github.com/ClickHouse/ClickHouse/pull/109898) ([groeneai](https://github.com/groeneai)).
* Исправлено аварийное завершение сервера (переполнение нативного стека) при копировании или уничтожении глубоко вложенного литерала `Array`/`Tuple`/`Map`/`Object`, например в запросе с очень глубоко вложенным литералом при увеличенном `max_parser_depth`. [#110393](https://github.com/ClickHouse/ClickHouse/pull/110393) ([Algunenano](https://github.com/Algunenano)).
* Исправлены неверные результаты `IS NULL` / `IS NOT NULL` / `count()` при использовании `optimize_functions_to_subcolumns` для столбца, преобразованного в `Nullable` с помощью операции metadata-only `ALTER MODIFY COLUMN T` в `Nullable(T)`. Для частей, записанных до преобразования, подстолбец `.null` заполнялся значением по умолчанию для типа хранения (NULL), а не формировался на основе физически присутствующего родительского столбца, поэтому существующие строки без NULL ошибочно определялись как NULL. [#110584](https://github.com/ClickHouse/ClickHouse/pull/110584) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка `LOGICAL_ERROR` ("Bad cast from ColumnString to ColumnLowCardinality") при анализе индекса первичного ключа, когда ключевой столбец `LowCardinality` обёрнут во вложенную цепочку `CAST`, повторно вводящую `LowCardinality`, например `WHERE CAST(CAST(s, 'LowCardinality(String)'), 'String') < '5'`. В сборках debug и sanitizer это приводило к аварийному завершению сервера, а в release — к сбою запроса. [#111050](https://github.com/ClickHouse/ClickHouse/pull/111050) ([groeneai](https://github.com/groeneai)).
* Исправлено чтение данных `Arrow` и `ArrowStream` с пустыми вложенными столбцами `Array` или `Map`, созданными Apache Arrow Java до версии 19.0.0 (поставляемой с Apache Spark). Ранее такие данные отклонялись с ошибкой `INCORRECT_DATA` о слишком маленьком буфере смещений. [#111101](https://github.com/ClickHouse/ClickHouse/pull/111101) ([Algunenano](https://github.com/Algunenano)).
* Исправлены логическая ошибка `Block structure mismatch` (в сборках debug и sanitizer) и ошибка `Illegal types of arguments` при операциях над множествами над совместимыми столбцами состояний агрегатных функций (например, `quantileState` и `quantilesState(0.9)`), вложенными в столбцы-контейнеры, такие как `Tuple`, `Array`, `Map`, `Nullable` или `Variant`. [#111191](https://github.com/ClickHouse/ClickHouse/pull/111191) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Добавлена валидация повреждённых данных реплицированного индекса, полученных по собственному протоколу. [#112331](https://github.com/ClickHouse/ClickHouse/pull/112331) ([Avogar](https://github.com/Avogar)).
* Исправлено чтение за границами массива при дедупликации вставок, когда `INSERT` проходит через materialized view, изменяющее количество строк перед записью в партиционированную целевую таблицу. [#112649](https://github.com/ClickHouse/ClickHouse/pull/112649) ([CheSema](https://github.com/CheSema)).
* Исправлена запись за пределы буфера при чтении столбца `Parquet` типа `DECIMAL`, физический тип которого шире типа, соответствующего объявленной точности, например `DECIMAL(9, 2)`, хранимого как `INT64`. Такие файлы являются допустимыми файлами `Parquet`, и другие средства записи их создают, однако считыватель определял размер целевого столбца по объявленной точности, тогда как декодер записывал данные физической ширины, что приводило к повреждению памяти. Теперь при чтении такого файла также возникает ошибка `DECIMAL_OVERFLOW`, если значение не помещается в объявленную точность, вместо возврата повреждённых данных; при использовании подсказки типа не уже физического типа данные читаются без потерь. [#113046](https://github.com/ClickHouse/ClickHouse/pull/113046) ([groeneai](https://github.com/groeneai)).
* Исправлены сбои `ATTACH PARTITION FROM`, `REPLACE PARTITION`, `MOVE PARTITION TO TABLE` и добавления реплики `ReplicatedMergeTree` с ошибками `Tables have different ...`, `METADATA_MISMATCH` или `INCOMPATIBLE_COLUMNS` для таблиц, определения которых содержали избыточные скобки, например `PARTITION BY (a)`, `ORDER BY (b)`, `INDEX ix (b * c) TYPE minmax`, `PROJECTION p (SELECT (b) ...)`, `CONSTRAINT c CHECK (a > 0)`, `TTL (d + INTERVAL 10 YEAR)` или `DEFAULT (a + 1)`. [#114188](https://github.com/ClickHouse/ClickHouse/pull/114188) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлена ошибка, при которой объект управления доступом с настройкой типа `Map`, например профиль настроек с `http_response_headers` или `additional_table_filters`, сохранялся в формате, который ClickHouse не мог прочитать, из-за чего после перезапуска объект становился недоступным для загрузки. [#114620](https://github.com/ClickHouse/ClickHouse/pull/114620) ([groeneai](https://github.com/groeneai)).
* Исправлены `has`, `indexOf`, `countEqual`, `mapContainsKey`, `mapContainsValue` и обращение по индексу к `Map`, возвращавшие "не найдено" для константного искомого значения `LowCardinality`, равного значению по умолчанию типа элемента, например пустой строки `String` или нуля. [#114624](https://github.com/ClickHouse/ClickHouse/pull/114624) ([groeneai](https://github.com/groeneai)).
* Исправлены неверные результаты тривиальной оптимизации `GROUP BY ... LIMIT` (настройка `optimize_trivial_group_by_limit_query`) для запросов с `DISTINCT`, `QUALIFY`, оконными функциями или `arrayJoin` в проекции: они обрабатывают или фильтруют группы после агрегации, поэтому ограничение агрегации до `LIMIT + OFFSET` ключей могло возвращать слишком мало строк или неверные значения. Эта оптимизация больше не применяется к таким запросам. [#114695](https://github.com/ClickHouse/ClickHouse/pull/114695) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлены неверные результаты для `SELECT count(arrayJoin(arr))` при значении по умолчанию `optimize_trivial_count_query = 1`. Вместо числа элементов массива возвращалось сохранённое количество строк, а для `file()` и `url()` запрос возвращал `0`. [#115227](https://github.com/ClickHouse/ClickHouse/pull/115227) ([groeneai](https://github.com/groeneai)).
* Исправлены `uniq`, `uniqExact`, `uniqHLL12` и `uniqTheta`, возвращавшие неверный результат для аргумента, обёрнутого в инъективную функцию, скрывающую допускаемость NULL, например `uniqExact(tuple(x))` для столбца `Nullable`. Оптимизация `optimize_injective_functions_inside_uniq` удаляла оборачивающую функцию, после чего строки со значением NULL пропускались вместо подсчёта. [#115466](https://github.com/ClickHouse/ClickHouse/pull/115466) ([vdimir](https://github.com/vdimir)).
* Считыватели KeeperMap теперь могут принимать общие метаданные, если эквивалентные первичные ключи отличаются только избыточными внешними скобками. [#115642](https://github.com/ClickHouse/ClickHouse/pull/115642) ([skuznetsov-clickhouse](https://github.com/skuznetsov-clickhouse)).

<h3 id="text-index-and-skip-index-fixes">
  Исправления текстового индекса и индекса пропуска данных
</h3>

* Исправлено аварийное завершение сервера, когда запрос использует вложенные сравнения `coalesce`/`ifNull` (например, `WHERE coalesce(a, b, coalesce(c, d), e) = const`) в таблице `MergeTree` с несколькими индексами пропуска данных `minmax` и `use_skip_indexes_for_disjunctions = 1`. Теперь переписывание `<op>(coalesce(...), const)` для индекса пропуска данных рекурсивно применяется к внутренним аргументам `coalesce`, поэтому RPN `KeyCondition` каждого индекса соответствует RPN шаблона, как предполагает код отслеживания дизъюнкций. [#103929](https://github.com/ClickHouse/ClickHouse/pull/103929) ([groeneai](https://github.com/groeneai)).
* Исправлено исключение `NOT_FOUND_COLUMN_IN_BLOCK`, возникавшее при выполнении `ALTER TABLE ... MATERIALIZE INDEX` для частей, созданных в версии 25.8 и содержащих индекс пропуска данных по столбцу, добавленному отдельной командой `ALTER TABLE ... ADD COLUMN`. Теперь при принудительном пересчёте мутация корректно считывает каждый столбец, необходимый для каждого существующего в части индекса пропуска данных и проекции. [#105039](https://github.com/ClickHouse/ClickHouse/pull/105039) ([groeneai](https://github.com/groeneai)).
* Исправлен незаметный недоподсчёт в запросах `SELECT`, когда `use_query_condition_cache = 1` (по умолчанию). Запрос вида `PREWHERE pk_prefix = X WHERE non_pk IN (...)` к столбцу с индексом пропуска данных на основе bloom-фильтра приводил к загрязнению `QueryConditionCache` для предиката `pk_prefix = X`, поэтому последующий безобидный запрос `SELECT count() ... WHERE pk_prefix = X` возвращал неверный результат с недоподсчётом. Затронуты все выпуски 26.x. [#105686](https://github.com/ClickHouse/ClickHouse/pull/105686) ([groeneai](https://github.com/groeneai)).
* Исправлено исключение при использовании в запросе векторного поиска векторного индекса, другого индекса пропуска данных, например `minmax`, и `use_skip_indexes_on_data_read = 1`. [#106473](https://github.com/ClickHouse/ClickHouse/pull/106473) ([shankar-iyer](https://github.com/shankar-iyer)).
* Исправлена ошибка "Too many marks" для текстового индекса в пустой слитой части. [#106867](https://github.com/ClickHouse/ClickHouse/pull/106867) ([azat](https://github.com/azat)).
* Исправлены неверные результаты при запросах к таблице `ReplacingMergeTree` с `FINAL` и фильтром по текстовому индексу, когда был включён параметр `query_plan_optimize_lazy_final`. Отложенная оптимизация `FINAL` формировала шаги чтения, не воспроизводившие прямое чтение из текстового индекса, поэтому фильтр отбрасывал все подходящие строки. [#106894](https://github.com/ClickHouse/ClickHouse/pull/106894) ([Ergus](https://github.com/Ergus)).
* Исправлена ошибка `LOGICAL ERROR` (`Bad cast from type DB::ColumnString to DB::ColumnLowCardinality`), возникавшая, когда константа `Variant`, содержащая элемент `LowCardinality`, сравнивается с ключевым столбцом, ключевым выражением которого является немонотонная детерминированная функция (например, индекс пропуска данных `minmax` по `sipHash64(col)`). [#107111](https://github.com/ClickHouse/ClickHouse/pull/107111) ([groeneai](https://github.com/groeneai)).
* Исправлены неверные (часто пустые) результаты `ORDER BY <col> LIMIT n`, когда активна оптимизация `use_skip_indexes_for_top_k` и из части с индексом пропуска данных `minmax` по столбцу сортировки были удалены строки с помощью легковесного `DELETE`. Оптимизация больше не ранжирует устаревшие значения minmax в частях с легковесно удалёнными данными выше частей, содержащих актуальные верхние строки. [#107320](https://github.com/ClickHouse/ClickHouse/pull/107320) ([groeneai](https://github.com/groeneai)).
* Исправлено отсутствие отсечения гранул индексом пропуска данных Set для столбцов LowCardinality. [#107868](https://github.com/ClickHouse/ClickHouse/pull/107868) ([thevar1able](https://github.com/thevar1able)).
* Параметр `use_skip_indexes_on_data_read` теперь можно вернуть к значению по умолчанию, действовавшему до версии 26.1 (`false`), с помощью параметра `compatibility`. Это позволяет обойти регрессию производительности, при которой путь чтения данных препятствует отсечению диапазонов меток индексами пропуска данных `minmax`/`set`/`bloom_filter`. [#108330](https://github.com/ClickHouse/ClickHouse/pull/108330) ([egor-click](https://github.com/egor-click)).
* Исправлено прямое чтение из нескольких частично материализованных текстовых индексов. [#108607](https://github.com/ClickHouse/ClickHouse/pull/108607) ([CurtizJ](https://github.com/CurtizJ)).
* Исправлена ситуация, при которой текстовый индекс, определённый для `mapValues(map)` или `mapKeys(map)`, не использовался без каких-либо уведомлений при запросе к таблице движка `Distributed` с analyzer. Для локальной таблицы и при использовании `cluster()`/`remote()` индекс применялся, однако запрос через таблицу движка `Distributed` его пропускал (и завершался ошибкой `INDEX_NOT_USED` при `force_data_skipping_indices`). [#109188](https://github.com/ClickHouse/ClickHouse/pull/109188) ([groeneai](https://github.com/groeneai)).
* Исправлен сбой сервера при выполнении `CREATE HYPOTHETICAL INDEX ... TYPE set` (а также `ngrambf_v1`/`tokenbf_v1`), если обязательный аргумент индекса не указан. Такие команды теперь отклоняются с понятным сообщением об ошибке. [#109294](https://github.com/ClickHouse/ClickHouse/pull/109294) ([groeneai](https://github.com/groeneai)).
* Исправлены неверные результаты функций `has`, `mapContainsKey` и `mapContainsValue` с пустой искомой подстрокой при наличии текстового индекса. [#110246](https://github.com/ClickHouse/ClickHouse/pull/110246) ([rschu1ze](https://github.com/rschu1ze)).
* Исправлена ошибка `ATTEMPT_TO_READ_AFTER_EOF` при слиянии частей с текстовым индексом, если одна из сливаемых частей была пустой, например после мутации, удалившей все строки из части. [#112490](https://github.com/ClickHouse/ClickHouse/pull/112490) ([CurtizJ](https://github.com/CurtizJ)).
* Исправлено зависание оптимизации плана запроса, когда предложение `WHERE` содержит большую строковую константу с множеством точек, а таблица имеет индекс пропуска данных `bloom_filter`, `tokenbf_v1`, `ngrambf_v1` или `text`. При сопоставлении имени столбца фильтра с индексными столбцами `JSONAllPaths(...)` перебирались все варианты разбиения имени по точкам, из-за чего построение условия индекса пропуска данных имело квадратичную сложность относительно длины константы. [#113289](https://github.com/ClickHouse/ClickHouse/pull/113289) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка, из-за которой `ORDER BY ... LIMIT` возвращал меньше строк, чем запрошено, а иногда не возвращал ни одной, когда политика строк была единственным фильтром запроса, а столбец сортировки имел индекс пропуска данных `minmax`. Оптимизация top-K ограничивала чтение до применения политики строк. [#114073](https://github.com/ClickHouse/ClickHouse/pull/114073) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="data-lake-fixes">
  Исправления для озёр данных
</h3>

* Исправлено исключение логической ошибки при чтении таблиц Iceberg, версию формата которых повысил внешний инструмент (например, Spark). [#100407](https://github.com/ClickHouse/ClickHouse/pull/100407) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлено исключение (`LOGICAL_ERROR: 'PREWHERE passed to format that doesn't support it'`) при чтении таблиц Iceberg, содержащих файлы данных ORC с включенной оптимизацией PREWHERE. [#101206](https://github.com/ClickHouse/ClickHouse/pull/101206) ([groeneai](https://github.com/groeneai)).
* Исправлены исключения `LOGICAL_ERROR` при чтении таблиц озер данных `Iceberg` или `DeltaLake` по путям, которые могут передаваться в конвейер чтения без зафиксированного `datalake_table_state`, например при параллельном обновлении метаданных `Iceberg` или чтении `merge` таблиц `DeltaLake`. [#102033](https://github.com/ClickHouse/ClickHouse/pull/102033) ([groeneai](https://github.com/groeneai)).
* Исправлена спорадическая ошибка `Logical error: 'Database <name> not found'` в `DataLakeConfiguration::getCatalog`, возникающая при загрузке таблицы с движком `Iceberg` в обычной базе данных во время асинхронной загрузки метаданных. [#103775](https://github.com/ClickHouse/ClickHouse/pull/103775) ([groeneai](https://github.com/groeneai)).
* Исправлено чрезмерное чтение метаданных каталога и S3, когда операция INSERT или DDL-оператор ссылается на несуществующую таблицу в базе данных каталога DataLake с включенным `show_data_lake_catalogs_in_system_tables`. Механизм подсказок при опечатках загружал полные метаданные Iceberg для каждой таблицы всего каталога, что могло привести к исчерпанию памяти в больших каталогах. [#104124](https://github.com/ClickHouse/ClickHouse/pull/104124) ([il9ue](https://github.com/il9ue)).
* Исправлено завышенное значение `read_bytes` (и производное значение байтов/с, отображаемое в `system.query_log`, индикаторе выполнения и т. д.) при чтении файлов Parquet. Предыдущая реализация сообщала общий сжатый размер группы строк для каждого блока, поэтому при чтении K из N столбцов значение завышалось в `N / K` раз. Теперь размер суммируется только по выбранным столбцам. Также исправлено отслеживание хода выполнения на уровне файлов для таблиц Iceberg, которое ранее никогда не сообщало размер файла данных. [#105413](https://github.com/ClickHouse/ClickHouse/pull/105413) ([groeneai](https://github.com/groeneai)).
* Исправлены неверные результаты при чтении таблицы Iceberg с `iceberg_use_version_hint = 1`, если другой компонент записи (например, табличная функция `icebergLocal`/`icebergS3`) продвигал таблицу без этой настройки. Теперь после создания файла каждый компонент записи поддерживает `version-hint.text` в актуальном состоянии, поэтому последующие читатели, использующие подсказку, видят последний снимок. [#105682](https://github.com/ClickHouse/ClickHouse/pull/105682) ([groeneai](https://github.com/groeneai)).
* Записи в Iceberg теперь сохраняют значения NULL в столбцах партиции `Nullable(T)`. Ранее NULL, записанный ClickHouse, при последующем чтении в Spark или других средствах чтения Iceberg отображался как значение по умолчанию внутреннего типа (`0` для `int`). [#105862](https://github.com/ClickHouse/ClickHouse/pull/105862) ([groeneai](https://github.com/groeneai)).
* Исправлено, что позиционные удаления merge-on-read в `Iceberg` v2 возвращали неверные строки, когда один файл удаления ссылался на несколько файлов данных и к одному файлу данных применялось несколько файлов удаления. Теперь записи об удалении фильтруются по пути к файлу, на который они ссылаются. [#105888](https://github.com/ClickHouse/ClickHouse/pull/105888) ([groeneai](https://github.com/groeneai)).
* Исправлен переход движка таблицы `IcebergLocal` в режим только для чтения после цикла `DETACH` + `ATTACH` или перезапуска сервера, из-за чего каждая последующая операция `INSERT` завершалась ошибкой `Local object storage Local is readonly. (READONLY)`. [#106016](https://github.com/ClickHouse/ClickHouse/pull/106016) ([groeneai](https://github.com/groeneai)).
* Исправлено незаметное отключение файлового кэша для Azure Blob Storage (например, для таблиц Delta Lake в Azure), поскольку метаданные объекта не содержали ETag blob. [#106091](https://github.com/ClickHouse/ClickHouse/pull/106091) ([thewisenerd](https://github.com/thewisenerd)).
* Добавлена проверка путей для таблиц Delta Lake, предотвращающая доступ метаданных к объектам за пределами настроенного расположения хранилища. [#106115](https://github.com/ClickHouse/ClickHouse/pull/106115) ([scanhex12](https://github.com/scanhex12)).
* Отсечение партиций Iceberg теперь корректно обрабатывает фильтры `WHERE partition_col = (SELECT ... FROM ...)`, в которых анализатор оборачивает результат скалярного подзапроса во внутренний `_CAST(Const, 'TargetType')` с совпадающими исходным и целевым типами. Ранее такие фильтры отключали отсечение партиций и приводили к полному сканированию таблицы. [#106204](https://github.com/ClickHouse/ClickHouse/pull/106204) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка, из-за которой REST-каталоги `Iceberg`, содержащие таблицы, ошибочно определялись как пустые. [#106301](https://github.com/ClickHouse/ClickHouse/pull/106301) ([LefterisXefteris](https://github.com/LefterisXefteris)).
* Исправлено исключение `NOT_FOUND_COLUMN_IN_BLOCK` при запросах к таблице Iceberg или S3 с составным условием `WHERE`, содержащим `IS NOT NULL` для столбца, отсутствующего в списке `SELECT`, при использовании нативного ридера Parquet V3. [#106443](https://github.com/ClickHouse/ClickHouse/pull/106443) ([tiandiwonder](https://github.com/tiandiwonder)).
* Исправлено завышенное отображение прогресса при чтении из таблиц Iceberg с фильтрами `_file` или `_path`. Ранее показатель прогресса `total_bytes_to_read` включал все файлы из манифеста независимо от фильтрации. [#106491](https://github.com/ClickHouse/ClickHouse/pull/106491) ([PedroTadim](https://github.com/PedroTadim)).
* Исправлено исключение сервера (логическая ошибка `std::out_of_range`) при вставке в таблицу `Iceberg`, когда имена столбцов блока записи не соответствуют ID полей в последней схеме (например, если параллельный писатель переименовал столбец в пределах окна `iceberg_metadata_staleness_ms`). Теперь вместо аварийного завершения работы сервера вставка завершается понятной ошибкой запроса. [#107279](https://github.com/ClickHouse/ClickHouse/pull/107279) ([groeneai](https://github.com/groeneai)).
* Исправлено возможное переполнение стека сервера (сбой) при чтении глубоко вложенной схемы или значения в форматах MsgPack, BSON, ORC, Parquet, JSON, DeltaLake, Iceberg и Paimon. Такие глубоко вложенные входные данные теперь отклоняются с исключением. [#107341](https://github.com/ClickHouse/ClickHouse/pull/107341) ([Algunenano](https://github.com/Algunenano)).
* Исправлены сбой (`LOGICAL_ERROR` в отладочных сборках) и ошибка, приводившая к незаметно некорректным результатам (в релизных сборках), при чтении таблицы Iceberg, метаданные которой повторно связывают существующий `schema-id` с другой схемой в разных версиях метаданных. Такие метаданные теперь отклоняются с `ICEBERG_SPECIFICATION_VIOLATION`. [#107370](https://github.com/ClickHouse/ClickHouse/pull/107370) ([groeneai](https://github.com/groeneai)).
* Исправлено чтение таблиц Iceberg v3, в файлах данных Parquet которых присутствуют зарезервированные столбцы происхождения строк (например, `_row_id`); нативный ридер Parquet больше не вызывает `ICEBERG_SPECIFICATION_VIOLATION` для зарезервированных ID полей, не входящих в схему таблицы. [#107377](https://github.com/ClickHouse/ClickHouse/pull/107377) ([gregakinman](https://github.com/gregakinman)).
* Исправлено ложное исключение `filesystem error: in last_write_time: No such file or directory` при получении списка содержимого каталога объектного хранилища на локальном диске (например, таблицы Iceberg на диске `local`) во время параллельной замены файлов. Одновременно удалённая запись теперь пропускается при выводе списка вместо прерывания операции. [#107432](https://github.com/ClickHouse/ClickHouse/pull/107432) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка 'Необходимо указать учётную запись' при чтении таблицы Delta Lake через Azure. [#107620](https://github.com/ClickHouse/ClickHouse/pull/107620) ([SmitaRKulkarni](https://github.com/SmitaRKulkarni)).
* Исправлено аварийное завершение при чтении таблиц Iceberg с файлами удаления по равенству. Если столбец в файле удаления по равенству допускает NULL, а в схеме таблицы — нет (или наоборот), значения из файла удаления вставлялись в столбец другого типа через непроверяемое приведение типов (смешение типов столбцов), что приводило к повреждению столбца и аварийному завершению сервера. [#109551](https://github.com/ClickHouse/ClickHouse/pull/109551) ([mstetsyuk](https://github.com/mstetsyuk)).
* Исправлена ложная ошибка `ICEBERG_SPECIFICATION_VIOLATION` при чтении таблицы Iceberg, десятичный тип которой (или другой параметризованный примитивный тип) сериализован с различными пробелами в файлах метаданных, например `decimal(20,0)` в метаданных таблицы и `decimal(20, 0)` в манифесте. Такие эквивалентные с точки зрения спецификации строки типов теперь сравниваются без учета пробелов. [#109676](https://github.com/ClickHouse/ClickHouse/pull/109676) ([groeneai](https://github.com/groeneai)).
* Исправлено чтение таблиц Iceberg, порядок сортировки по умолчанию которых ссылается на столбец, требующий заключения в кавычки (например, `@timestamp`). Такие таблицы было невозможно прочитать, поскольку синтезированное выражение `ORDER BY` для хранилища строилось из необработанного имени столбца и не разбиралось из-за `SYNTAX_ERROR`. [#110233](https://github.com/ClickHouse/ClickHouse/pull/110233) ([groeneai](https://github.com/groeneai)).
* Исправлено чтение таблиц Paimon, содержащих допускающий NULL столбец `ARRAY` или `MAP`. Такие таблицы вообще не удавалось прочитать, поскольку сопоставитель схемы оборачивал составной тип в `Nullable`, что запрещено в ClickHouse, поэтому и `DESC`, и `SELECT` завершались ошибкой `Nested type Array(Nullable(Int32)) cannot be inside Nullable type`. Допускающий NULL составной столбец теперь сопоставляется с составным типом без `Nullable`, а значение `NULL` читается как пустое. [#113450](https://github.com/ClickHouse/ClickHouse/pull/113450) ([groeneai](https://github.com/groeneai)).
* Регистрация пространства имен Iceberg в каталоге перед записью файлов таблицы (необходимо для SeaweedFS) [#114285](https://github.com/ClickHouse/ClickHouse/pull/114285) ([azat](https://github.com/azat)).

<h3 id="s3-azure-object-storage-fixes">
  Исправления S3/Azure/объектных хранилищ
</h3>

* Исправлено исключение «Distributed task iterator is not initialized» при использовании табличных функций `url`, `s3` и аналогичных в запросах с включенными параллельными репликами. [#100146](https://github.com/ClickHouse/ClickHouse/pull/100146) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлен возможный сбой сервера (segfault) в кластерных табличных функциях (`s3Cluster`, `urlCluster`, `fileCluster`, ...), когда планировщик формирует `SELECT` с установленным флагом `recursive_with`, но без выражения `WITH`. [#105433](https://github.com/ClickHouse/ClickHouse/pull/105433) ([groeneai](https://github.com/groeneai)).
* Исправлен pushdown фильтров для `Parquet` и `ORC` с предикатами `IN (subquery)`, благодаря чему при чтении из `file`, `url`, `s3` и объектного хранилища работает отсечение групп строк, страниц и bloom-фильтров. [#105863](https://github.com/ClickHouse/ClickHouse/pull/105863) ([arsenmuk](https://github.com/arsenmuk)).
* Исправлено исключение `LOGICAL_ERROR` при предварительной загрузке кэша, возникавшее, если удаленный объект S3 между получением списка и чтением перезаписывался более коротким содержимым. [#106375](https://github.com/ClickHouse/ClickHouse/pull/106375) ([fm4v](https://github.com/fm4v)).
* Исправлено молчаливое игнорирование табличной функцией `s3` строчной формы позиционной стратегии партиционирования `partition_strategy` (например, `hive`). [#107297](https://github.com/ClickHouse/ClickHouse/pull/107297) ([jkartseva](https://github.com/jkartseva)).
* Исправлена регрессия, при которой настройка `compatibility = '26.6'` (неявно включающая стратегию партиционирования `hive`) молчаливо принимала `{_partition_id}` в путях таблиц `S3` и объектного хранилища вместо выдачи ошибки `BAD_ARGUMENTS`. [#107437](https://github.com/ClickHouse/ClickHouse/pull/107437) ([LefterisXefteris](https://github.com/LefterisXefteris)).
* Исправлено, что `s3` и другие табличные функции объектного хранилища выдавали `LOGICAL_ERROR` вместо `BAD_ARGUMENTS` при дублировании аргумента ключ-значение, например `s3('http://...', format = 'CSV', format = 'TSV')`. [#107670](https://github.com/ClickHouse/ClickHouse/pull/107670) ([groeneai](https://github.com/groeneai)).
* Исправлено исключение сервера (`Logical error: 'index >= result.start'`) при форматировании некорректного запроса, в котором смешиваются позиционная и именованная формы аргумента `secret` табличных функций `s3`/`gcs`, например `s3('url', 'a', 'b', secret_access_key = 'c')`. [#107818](https://github.com/ClickHouse/ClickHouse/pull/107818) ([groeneai](https://github.com/groeneai)).
* Исправлен приоритет настроек S3: блок конечной точки `<s3>`, заданный для URL, теперь имеет приоритет над настройками по умолчанию верхнеуровневого блока `<s3>`. [#109251](https://github.com/ClickHouse/ClickHouse/pull/109251) ([bharatnc](https://github.com/bharatnc)).
* Исправлены ошибки `411 Length Required` от сервисов Azure: HTTP-транспорт Azure на основе Poco теперь задает `Content-Length` на основе тела запроса для клиентов SDK, которые сами не устанавливают этот заголовок (например, Azure Key Vault). [#110299](https://github.com/ClickHouse/ClickHouse/pull/110299) ([thevar1able](https://github.com/thevar1able)).

<h3 id="s3queue-fixes">
  Исправления S3Queue
</h3>

* Исправлено падение сервера (выход за границы массива) в `S3Queue`/`AzureQueue` при `enable_hash_ring_filtering = 1`, если батч содержал необрабатываемый файл и одновременно завершался ошибкой запрос Keeper на перевод батча в состояние обработки. [#108977](https://github.com/ClickHouse/ClickHouse/pull/108977) ([groeneai](https://github.com/groeneai)).
* Исправлены утечки учётных данных в `SHOW CREATE`, `system.query_log`, серверных журналах и выводе `EXPLAIN`. Во всех формах локаторов `S3` теперь маскируются `session_token` и секреты Google ADC, значения `extra_credentials`/`headers` в любой позиции аргументов, дублирующиеся ключи секретов и ключи секретов в выражениях, недопустимые позиционные формы (безопасная обработка при ошибке), а также учётные данные, встроенные в URL S3; это относится к табличным функциям `s3`/`s3Cluster` с явным URL и именованными коллекциями, движкам таблиц на базе S3 (`S3`, `GCS`, движки озёр данных, `S3Queue`), движку базы данных `S3`, `BACKUP ... TO S3` и движку базы данных `Backup`. Кроме того, секретные аргументы `encrypt`/`decrypt`/HMAC, сформированные выражением (включая встроенные из SQL UDF), теперь скрываются в именах проекций, `EXPLAIN QUERY TREE` и `EXPLAIN actions`. [#109768](https://github.com/ClickHouse/ClickHouse/pull/109768) ([Algunenano](https://github.com/Algunenano)).
* Исправлен упорядоченный режим `S3Queue`/`AzureQueue` с постоянными узлами обработки: блокировки бакетов теперь обновляются во время стриминга, поэтому очистка по TTL (`persistent_processing_node_ttl_seconds`) не удаляет блокировки активного процессора. Если владение блокировкой всё же утрачивается, это обнаруживается и регистрируется (логическая ошибка и событие профиля `ObjectStorageQueueBucketLockLostOwnership`), а стриминг возобновляется с новым итератором файлов. [#110292](https://github.com/ClickHouse/ClickHouse/pull/110292) ([kssenii](https://github.com/kssenii)).

<h3 id="security-and-access-control-fixes">
  Исправления в области безопасности и управления доступом
</h3>

* Исправлено падение сервера (SIGSEGV), воспроизводимое любым пользователем с правами `CREATE TABLE` при отправке по HTTP или собственному протоколу команды `CREATE TABLE ... TO INNER UUID '...'` без предложения `ENGINE`. Эта же ошибка также приводила к падению клиента. Теперь парсер возвращает корректную ошибку `BAD_ARGUMENTS` вместо разыменования нулевого указателя. [#105579](https://github.com/ClickHouse/ClickHouse/pull/105579) ([groeneai](https://github.com/groeneai)).
* Исправлено падение сервера при запросах к таблицам DeltaLake с включённым `allow_experimental_delta_kernel_rs`, если учётные данные или параметр содержали недопустимые байты (Rust FFI паниковал при пересечении границы `extern "C"`). [#106109](https://github.com/ClickHouse/ClickHouse/pull/106109) ([Algunenano](https://github.com/Algunenano)).
* Исправлены множественные чтения за границами кучи в средстве чтения формата Arrow IPC (`ArrowColumnToCHColumn`). Некорректно сформированный файл Arrow мог объявлять больше строк, чем содержится в его буферах, задавать длины дочерних элементов list/struct/map, не согласованные с родительским элементом, содержать немонотонные смещения list или усекать битмап валидности дочернего элемента, что приводило к чтению за пределами выделенной памяти в куче. Проблема доступна любому пользователю с привилегией `SELECT` через `file()`, `format()`, табличные функции или входные данные ArrowFlight. Теперь перед любым доступом к необработанным указателям проверяются все буферы данных, смещений, view-struct и битмапов валидности, а согласованность структур и смещений list/struct/map проверяется отдельно. [#106395](https://github.com/ClickHouse/ClickHouse/pull/106395) ([Algunenano](https://github.com/Algunenano)).
* Исправлена ошибка, из-за которой столбцы `used_privileges` и `missing_privileges` в `system.query_log` могли содержать строки привилегий, оставшиеся от несвязанных предыдущих запросов другого пользователя, базы данных или сеанса. [#106425](https://github.com/ClickHouse/ClickHouse/pull/106425) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлено переполнение буфера кучи (падение сервера) в `decodeHTMLComponent` при декодировании строк, содержащих расширяющиеся HTML-сущности `&nGt;` или `&nLt;`, воспроизводимое любым пользователем с одной привилегией `SELECT`. [#106741](https://github.com/ClickHouse/ClickHouse/pull/106741) ([Algunenano](https://github.com/Algunenano)).
* Исправлены неверные результаты запроса, вызванные кэшем условий запроса, когда мутации на лету (`apply_mutations_on_fly`) или патч-части отфильтровывали строки до `PREWHERE`. Запрос с `apply_mutations_on_fly = 1` мог испортить кэш, из-за чего последующий запрос с `apply_mutations_on_fly = 0` и тем же предикатом пропускал метки, которые должен был прочитать, и возвращал слишком мало строк. Исправление также распространяется на политики безопасности на уровне строк, которые добавляются в качестве фильтра перед `PREWHERE`: запрос, выполненный с ограничительной политикой на уровне строк, мог испортить кэш для последующего запроса с тем же предикатом, но без этой политики. [#107145](https://github.com/ClickHouse/ClickHouse/pull/107145) ([groeneai](https://github.com/groeneai)).
* Исправлено переполнение буфера кучи (падение сервера) в `windowFunnel` при финализации специально сформированного состояния агрегатной функции с типом события вне допустимого диапазона, воспроизводимое любым пользователем с одной привилегией `SELECT`. [#107412](https://github.com/ClickHouse/ClickHouse/pull/107412) ([uwezkhan](https://github.com/uwezkhan)).
* Исправлена ошибка, из-за которой `currentUser()`, `user()`, `SESSION_USER` и `authenticatedUser()` вычислялись как пустая строка при сбросе асинхронной вставки (с `async_insert = 1`). Это затрагивало выражения столбцов `DEFAULT`/`MATERIALIZED` и materialized views, ссылающиеся на эти функции: вместо пользователя, выполняющего вставку, они незаметно сохраняли пустую строку. [#107541](https://github.com/ClickHouse/ClickHouse/pull/107541) ([groeneai](https://github.com/groeneai)).
* Если одному пользователю или роли назначено несколько квот, теперь все они применяются одновременно (запрос отклоняется при превышении любой из них), а не только одна квота, выбираемая недетерминированно. `SHOW QUOTA` и `system.quota_usage` теперь показывают все квоты, применяемые к текущему пользователю. [#107664](https://github.com/ClickHouse/ClickHouse/pull/107664) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Для `SYSTEM RESET DDL WORKER` теперь требуется новая привилегия `SYSTEM RESET DDL WORKER`. Ранее эту команду мог выполнить любой аутентифицированный пользователь (включая пользователей с правами `readonly`) и многократно сбрасывать состояние воркера DDL, блокируя DDL с `ON CLUSTER`. [#108460](https://github.com/ClickHouse/ClickHouse/pull/108460) ([groeneai](https://github.com/groeneai)).
* Исправлена идентификация пользователей по `ssl_certificate`: один подстановочный знак `*` теперь соответствует ровно одному компоненту имени (RFC 6125 6.4.3). Ранее подстановочный знак в `CN` или `DNS:` SAN (например, `*.corp.example.com`) также соответствовал многоуровневым именам, таким как `evil.deep.corp.example.com`, что позволяло владельцу сертификата для более глубокого поддомена аутентифицироваться как пользователь с подстановочным знаком. Сопоставление `URI:` SAN не изменилось. [#108472](https://github.com/ClickHouse/ClickHouse/pull/108472) ([groeneai](https://github.com/groeneai)).
* Команды протокола MySQL `COM_FIELD_LIST` (`mysql_list_fields`) и `COM_INIT_DB` (`USE database`) теперь применяют те же правила управления доступом, что и их SQL-эквиваленты (`SHOW COLUMNS`/`DESCRIBE` и `USE`). Ранее они могли раскрывать имена столбцов таблиц, для которых у пользователя были привилегии только на часть столбцов, а также переключать текущую базу данных без привилегии `SHOW DATABASES`. [#108508](https://github.com/ClickHouse/ClickHouse/pull/108508) ([groeneai](https://github.com/groeneai)).
* Сопоставление `http_forbid_headers` теперь выполняется без учёта регистра. Имена HTTP-заголовков регистронезависимы, поэтому запрет `Authorization` теперь также блокирует `authorization`, `AUTHORIZATION` и другие варианты регистра. Настроенные шаблоны `header_regexp` теперь сопоставляются без учёта регистра без явного флага `(?i)`. [#108509](https://github.com/ClickHouse/ClickHouse/pull/108509) ([groeneai](https://github.com/groeneai)).
* Исправлена уязвимость, раскрывавшая метаданные: `DESCRIBE loop('db', 'table')` и `DESCRIBE loop(<inner table function>)` обходили проверку `SHOW COLUMNS` / проверку доступа к источнику, позволяя непривилегированному пользователю прочитать схему столбцов таблицы. [#108624](https://github.com/ClickHouse/ClickHouse/pull/108624) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка запуска, при которой базу данных `DataLakeCatalog`, созданную в более старой версии (25.12 или ранее) с некорректным `auth_header`, нельзя было подключить после обновления до версии 26.2 или новее, что препятствовало запуску сервера. `auth_header` теперь проверяется только при `CREATE`, а при `ATTACH` каталог создаётся отложенно при первом использовании, а не во время запуска. Поэтому одна неправильно настроенная или недоступная база данных каталога больше не блокирует запуск сервера. [#108674](https://github.com/ClickHouse/ClickHouse/pull/108674) ([groeneai](https://github.com/groeneai)).
* Усилена защита подключений RabbitMQ от вредоносных AMQP-фреймов чрезмерного размера, а проверки `remote_url_allow_hosts` теперь последовательно применяются к `rabbitmq_address`. [#112479](https://github.com/ClickHouse/ClickHouse/pull/112479) ([kssenii](https://github.com/kssenii)).
* Исправлен случай, когда `CREATE TABLE ... ENGINE = Distributed(...)` без списка столбцов мог раскрыть структуру локальной таблицы, к которой создающий пользователь не имеет доступа. При `CREATE`, выполняемом самим локальным сервером, структура теперь определяется в контексте самого пользователя, поэтому для целевой таблицы требуется `SHOW COLUMNS`, как и для движка `Remote`. Это не относится к `CREATE`, воспроизведённому из очереди DDL (`ON CLUSTER` или внутри базы данных `Replicated`). [#113220](https://github.com/ClickHouse/ClickHouse/pull/113220) ([groeneai](https://github.com/groeneai)).
* Исправлен случай, когда `CREATE TABLE ... ENGINE = Buffer(...)` без списка столбцов мог раскрывать структуру целевой таблицы пользователю, не имеющему права её просматривать. При выполнении `CREATE` локальным сервером структура теперь выводится в контексте самого пользователя, поэтому для целевой таблицы требуется право `SHOW COLUMNS`, как и для `Merge` и `Remote`. Это не распространяется на `CREATE`, воспроизведённый из очереди DDL (`ON CLUSTER` или внутри базы данных `Replicated`). [#113372](https://github.com/ClickHouse/ClickHouse/pull/113372) ([groeneai](https://github.com/groeneai)).
* Ограничен размер стартового сообщения PostgreSQL wire protocol, считываемого до аутентификации. [#115708](https://github.com/ClickHouse/ClickHouse/pull/115708) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="backup-and-restore-fixes">
  Исправления резервного копирования и восстановления
</h3>

* Исправлено аварийное завершение работы сервера при выполнении `RESTORE` резервных копий, содержащих таблицы с циклическими зависимостями. [#103824](https://github.com/ClickHouse/ClickHouse/pull/103824) ([thevar1able](https://github.com/thevar1able)).
* Исправлено игнорирование класса хранилища S3 (`s3_storage_class` / `s3_storage_class_name`) для объектов, записываемых посредством multipart-загрузки на диски `S3` и в объектное хранилище, из-за чего крупные объекты создавались с классом `STANDARD` по умолчанию. Для дисков, объектного хранилища и резервных копий теперь принимаются оба имени параметра: `s3_storage_class` и `s3_storage_class_name`. [#106214](https://github.com/ClickHouse/ClickHouse/pull/106214) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлено отбрасывание `SYSTEM RELOAD CONFIG` настроек Azure Blob Storage для отдельных конечных точек (например, `use_native_copy`), из-за чего настроенные параметры диска игнорировались при `BACKUP`/`RESTORE` до перезапуска сервера. [#106357](https://github.com/ClickHouse/ClickHouse/pull/106357) ([jkartseva](https://github.com/jkartseva)).
* Исправлена ошибка, из-за которой резервное копирование завершалось с FILE\_DOESNT\_EXIST при сборе цели REPLACE для refreshable materialized view в базе данных Replicated или Shared, если materialized view ещё не было создано на реплике, инициировавшей резервное копирование. [#106411](https://github.com/ClickHouse/ClickHouse/pull/106411) ([jkartseva](https://github.com/jkartseva)).
* Исправлено игнорирование Azure BACKUP/RESTORE настроек конечной точки для дисков `azure_blob_storage` устаревшего формата. [#106784](https://github.com/ClickHouse/ClickHouse/pull/106784) ([jkartseva](https://github.com/jkartseva)).
* Исправлено выполнение `BACKUP` в `AzureBlobStorage`: при копировании файла данных внутри резервной копии целевой объект записывался вне каталога резервной копии. Проверки существования объектов резервной копии в пунктах назначения `S3` теперь используют точные запросы `HeadObject` вместо перечисления по префиксу, что предотвращает ложные совпадения ключей с похожими префиксами. [#107153](https://github.com/ClickHouse/ClickHouse/pull/107153) ([pamarcos](https://github.com/pamarcos)).
* Инкрементальные резервные копии больше не сохраняют учётные данные `S3` в локаторе `<base_backup>` файла метаданных `.backup`. Резервные копии, созданные с `use_same_s3_credentials_for_base_backup = 1` или с явно указанными учётными данными базовой резервной копии, совпадающими с локатором этой резервной копии, сохраняют несекретный маркер и восстанавливаются без дополнительных настроек при восстановлении. Для резервных копий, созданных с другими явно указанными учётными данными базовой резервной копии или дополнительными аргументами аутентификации базовой резервной копии, передайте их в `RESTORE` с настройкой `base_backup`. Резервные копии, созданные старыми версиями со встроенными учётными данными, по-прежнему можно восстановить. [#107357](https://github.com/ClickHouse/ClickHouse/pull/107357) ([pamarcos](https://github.com/pamarcos)).
* Исправлено выполнение `RESTORE` для таблиц `ReplicatedMergeTree`: части из резервной копии с одинаковым содержимым теперь сохраняются, а не молча дедуплицируются. [#107652](https://github.com/ClickHouse/ClickHouse/pull/107652) ([pamarcos](https://github.com/pamarcos)).
* Заполнитель `{_partition_id}` в пути файлового движка (`S3`, `AzureBlobStorage`, `URL` и т. д.) без явно указанного `partition_strategy` снова подразумевает стратегию `wildcard` независимо от `file_like_engine_default_partition_strategy`. Это восстанавливает обратную совместимость с DDL до версии 26.6, которые начали завершаться с `BAD_ARGUMENTS` ("Partition strategy hive can not be used with a '\_partition\_id' wildcard in the path"). [#111279](https://github.com/ClickHouse/ClickHouse/pull/111279) ([fm4v](https://github.com/fm4v)).

<h3 id="clickhouse-keeper-fixes">
  Исправления ClickHouse Keeper
</h3>

* Исправлена очистка снимков `Keeper` после неудачных записей: частичные снимки теперь безопасно удаляются, а неудачные записи можно повторить без изменения `latest_snapshot_meta`. [#105779](https://github.com/ClickHouse/ClickHouse/pull/105779) ([antonio2368](https://github.com/antonio2368)).
* Исправлены сбои `Keeper` при дозагрузке follower, когда новая очередь ответов диспетчера запросов могла заполниться до запуска потока обработки ответов. [#106049](https://github.com/ClickHouse/ClickHouse/pull/106049) ([antonio2368](https://github.com/antonio2368)).
* Исправлена проблема, из-за которой Keeper иногда зависал при запуске, если для настройки `nuraft_max_log_gap_in_stream` задано нестандартное значение (по умолчанию — 0, то есть конвейерная обработка запросов append\_entries отключена). [#106220](https://github.com/ClickHouse/ClickHouse/pull/106220) ([al13n321](https://github.com/al13n321)).
* Внутренний Raft TLS в Keeper теперь учитывает настройку `openSSL.client.verificationMode`. Ранее проверка сертификатов peer для межузлового Raft-взаимодействия Keeper всегда была включена независимо от этой настройки, поэтому `none` молча игнорировалось. Теперь `none` явно отключает проверку сертификатов Raft peer, а отсутствие настройки сохраняет прежнее безопасное поведение по умолчанию. Конфигурации, в которых явно задано `none`, после обновления перестанут проверять сертификаты Raft peer в соответствии с заданной настройкой. [#106726](https://github.com/ClickHouse/ClickHouse/pull/106726) ([antonio2368](https://github.com/antonio2368)).
* Исправлено ошибочное пересоздание сеанса ZooKeeper при перезагрузке конфигурации. [#107096](https://github.com/ClickHouse/ClickHouse/pull/107096) ([azat](https://github.com/azat)).
* Исправлена ошибка в ClickHouse Keeper, из-за которой метаданные снимка, передаваемые через `last_snapshot` (и `zk_latest_snapshot_size` в `mntr`), могли откатываться к меньшим значениям после установки устаревшего или дублирующего снимка. Это также могло привести к тому, что локальный снимок с тем же индексом перезаписывал зарегистрированный файл снимка, пока тот ещё передавался peer или загружался в S3. [#107321](https://github.com/ClickHouse/ClickHouse/pull/107321) ([antonio2368](https://github.com/antonio2368)).
* Исправлена проблема, из-за которой refreshable materialized view зависало при потере соединения с ZooKeeper в неподходящий момент. [#108234](https://github.com/ClickHouse/ClickHouse/pull/108234) ([al13n321](https://github.com/al13n321)).
* Исправлены мутации с параметром запроса в качестве партиции (`ALTER TABLE ... UPDATE/DELETE ... IN PARTITION {param:Type}`): подставленное значение партиции сериализовалось в запись мутации в формате, который нельзя было разобрать обратно, что нарушало загрузку таблицы (для реплицируемых таблиц — на каждой реплике). Теперь перед записью в ZooKeeper или на диск также проверяется, что команды мутаций можно разобрать обратно, поэтому подобное несоответствие приведёт к ошибке запроса `ALTER`, а не к нарушению работы таблицы. [#111518](https://github.com/ClickHouse/ClickHouse/pull/111518) ([al13n321](https://github.com/al13n321)).
* Исправлено числовое переполнение при разборе данных для `system.zookeeper_info`. [#111629](https://github.com/ClickHouse/ClickHouse/pull/111629) ([kssenii](https://github.com/kssenii)).

<h3 id="crash-and-stability-fixes">
  Исправления сбоев и повышения стабильности
</h3>

* Исправлено исключение NOT\_FOUND\_COLUMN\_IN\_BLOCK при использовании LIMIT BY с константными столбцами вместе с DISTINCT и ORDER BY при новом analyzer. [#93195](https://github.com/ClickHouse/ClickHouse/pull/93195) ([ashrithb](https://github.com/ashrithb)).
* Повышена стабильность подключения HiveCatalog: добавлены механизм автоматических повторных попыток и логика переподключения для обработки ошибок TTransportException при взаимодействии с Hive Metastore. [#98471](https://github.com/ClickHouse/ClickHouse/pull/98471) ([otselnik](https://github.com/otselnik)).
* Исправлена свёртка констант на этапе анализа для функций с коротким замыканием (`if`, `multiIf`, `and`, `or` и т. д.), благодаря чему статически недостижимые ветви больше не вызывают исключений во время анализа. Например, `WITH 0 AS n SELECT multiIf(n = 0, 0, intDiv(100, n))` теперь корректно возвращает `0` вместо ошибки деления на ноль. [#103157](https://github.com/ClickHouse/ClickHouse/pull/103157) ([fastio](https://github.com/fastio)).
* Исправлено аварийное завершение работы сервера при вызове `runningAccumulate` для агрегатной функции, возвращающей собственное состояние. [#105085](https://github.com/ClickHouse/ClickHouse/pull/105085) ([antaljanosbenjamin](https://github.com/antaljanosbenjamin)).
* Исправлена функция `getServerSetting`: теперь она возвращает текущее фактическое значение изменяемых во время выполнения настроек сервера (таких как `max_server_memory_usage`, `mark_cache_size`, `max_concurrent_queries`, размеры пулов потоков и т. д.) в соответствии с данными `system.server_settings`. [#105172](https://github.com/ClickHouse/ClickHouse/pull/105172) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлено исключение `NOT_FOUND_COLUMN_IN_BLOCK` при сочетании `ORDER BY ... WITH FILL INTERPOLATE` и `LIMIT N BY` с включённым analyzer. [#105481](https://github.com/ClickHouse/ClickHouse/pull/105481) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* Исправлено исключение сервера (логическая ошибка `Trying to execute PLACEHOLDER action`), возникавшее, когда `MATERIALIZED` CTE с коррелированным подзапросом в теле использовался в правой части `IN`. Такой CTE теперь отклоняется на этапе анализа, как и тот же шаблон при прямом указании CTE в `FROM`. [#105518](https://github.com/ClickHouse/ClickHouse/pull/105518) ([groeneai](https://github.com/groeneai)).
* Исправлено отсутствие перехвата исключений во время выполнения функций при `variant_throw_on_type_mismatch/dynamic_throw_on_type_mismatch=false`. [#105543](https://github.com/ClickHouse/ClickHouse/pull/105543) ([Avogar](https://github.com/Avogar)).
* Исправлено исключение NOT\_FOUND\_COLUMN\_IN\_BLOCK, возникавшее, когда TTL-выражение ссылается на подстолбец. [#105578](https://github.com/ClickHouse/ClickHouse/pull/105578) ([Avogar](https://github.com/Avogar)).
* Исправлено аварийное завершение работы сервера, которое могло происходить при отмене запроса, читающего данные из PostgreSQL — через табличную функцию postgresql, движок таблицы PostgreSQL или словарь с источником PostgreSQL, — например с помощью KILL QUERY, если не удавалось отменить удалённый запрос PostgreSQL. [#105949](https://github.com/ClickHouse/ClickHouse/pull/105949) ([rorylshanks](https://github.com/rorylshanks)).
* Исправлено возможное аварийное завершение работы из-за слишком большого строкового литерала, переданного в запросе. [#105996](https://github.com/ClickHouse/ClickHouse/pull/105996) ([nickitat](https://github.com/nickitat)).
* Исправлено исключение `INVALID_WITH_FILL_EXPRESSION` при использовании пустого `INTERPOLATE ()` с префиксом сортировки в `ORDER BY` и включённым `use_with_fill_by_sorting_prefix`. Столбцы префикса сортировки теперь корректно исключаются из набора для неявной интерполяции, как и при явно указанном `INTERPOLATE (col)`. [#106001](https://github.com/ClickHouse/ClickHouse/pull/106001) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* Некорректные состояния `AggregateFunction(uniqTheta, ...)`, полученные из входных данных `RowBinary` или параметров запроса, теперь отклоняются с ошибкой `CORRUPTED_DATA` вместо аварийного завершения сервера. [#106260](https://github.com/ClickHouse/ClickHouse/pull/106260) ([groeneai](https://github.com/groeneai)).
* Исправлены сбой и возможная ошибка `NOT_FOUND_COLUMN_IN_BLOCK`, возникающие при использовании оптимизации на основе ограничений (`optimize_using_constraints`) с коррелированными подзапросами. [#106349](https://github.com/ClickHouse/ClickHouse/pull/106349) ([Algunenano](https://github.com/Algunenano)).
* Исправлено исключение `NUMBER_OF_COLUMNS_DOESNT_MATCH` при запросах к таблице `Distributed`, содержащей два или более столбца ALIAS, разворачивающихся в одно и то же выражение (например, оба определены как `toString(x)`), а также когда одно и то же выражение указано и как ссылка на столбец ALIAS, и непосредственно в списке SELECT при наличии предложения `ORDER BY`. [#106404](https://github.com/ClickHouse/ClickHouse/pull/106404) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* Исправлена ошибка `LOGICAL_ERROR` "Trying to get name of not a column: `ExpressionList`", возникавшая в запросах, передающих звёздочку внутри `multiIf` в качестве аргумента табличной функции, например `numbers(multiIf(*, ...), 2)`. Теперь запрос отклоняется с ошибкой `UNSUPPORTED_METHOD`, если сопоставитель не удаётся разрешить. [#106647](https://github.com/ClickHouse/ClickHouse/pull/106647) ([groeneai](https://github.com/groeneai)).
* Отклоняются некорректные glob-шаблоны `file`, которые могли вызвать неограниченную рекурсию при перечислении содержимого каталога. Теперь максимальная глубина рекурсии ограничена 1000; при её превышении запрос завершается ошибкой `TOO_DEEP_RECURSION` вместо аварийного завершения сервера из-за переполнения стека. [#106676](https://github.com/ClickHouse/ClickHouse/pull/106676) ([groeneai](https://github.com/groeneai)).
* Исправлено исключение `'Trying to read from input() twice.'`, возникавшее, когда табличная функция `input` обёрнута в нематериализованный CTE, на который ссылаются из нескольких мест запроса. Теперь на этапе планирования запрос отклоняется с понятной ошибкой `INVALID_USAGE_OF_INPUT`. `input` — однократно читаемый клиентский поток, который может использоваться только одним источником в плане запроса. [#106682](https://github.com/ClickHouse/ClickHouse/pull/106682) ([groeneai](https://github.com/groeneai)).
* Исправлена несогласованность столбцов при возникновении исключения (например, MEMORY\_LIMIT\_EXCEEDED) во время парсинга, которая позднее приводила к LOGICAL\_ERROR. [#106802](https://github.com/ClickHouse/ClickHouse/pull/106802) ([azat](https://github.com/azat)).
* Исправлен сбой сервера (SIGSEGV) при чтении усечённых данных Protobuf с `input_format_allow_errors_num > 0`. [#106905](https://github.com/ClickHouse/ClickHouse/pull/106905) ([atsarevskiy](https://github.com/atsarevskiy)).
* Исправлен сбой сервера (разыменование нулевого указателя) при выполнении `TRUNCATE` или `DROP` для таблицы `EmbeddedRocksDB`, дескриптор RocksDB которой был освобождён, например таблицы `read_only`, каталог данных которой был очищен предыдущим `TRUNCATE`. [#106940](https://github.com/ClickHouse/ClickHouse/pull/106940) ([groeneai](https://github.com/groeneai)).
* Исправлено исключение (`std::length_error`, сообщаемое как `LOGICAL_ERROR`) при чтении из табличной функции `*Cluster`, такой как `urlCluster`, при очень большом значении настройки `max_streams_for_files_processing_in_cluster_functions`. Количество потоков теперь ограничено разумным значением. [#106946](https://github.com/ClickHouse/ClickHouse/pull/106946) ([groeneai](https://github.com/groeneai)).
* Исправлено аварийное завершение сервера, когда распределённый запрос отменялся непосредственно перед отправкой на шард. [#106950](https://github.com/ClickHouse/ClickHouse/pull/106950) ([groeneai](https://github.com/groeneai)).
* Исправлено исключение сервера (логическая ошибка `this->visited_views == right->visited_views`) при выполнении `INSERT`, когда два materialized view одной исходной таблицы записывают данные в одну целевую таблицу, а зависимое представление читает эту целевую таблицу при включенной настройке `materialized_views_squash_parallel_inserts`. [#107027](https://github.com/ClickHouse/ClickHouse/pull/107027) ([groeneai](https://github.com/groeneai)).
* Исправлено исключение `LOGICAL_ERROR` при вставке в таблицу DeltaLake со столбцами, не соответствующими её схеме записи (например, столбец `Nested`, разворачивающийся в подстолбцы, или табличная функция с явно заданным подмножеством столбцов). Теперь такие вставки завершаются ошибкой `INCOMPATIBLE_COLUMNS`, понятной пользователю. [#107058](https://github.com/ClickHouse/ClickHouse/pull/107058) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка `LOGICAL_ERROR` ("Table expression ... data must be initialized"), возникавшая, когда квалифицированный сопоставитель со звёздочкой (например, `x.*`) ссылался по имени на рекурсивное CTE внутри собственного рекурсивного члена. Теперь такие сопоставители разворачивают столбцы рекурсивной таблицы, как уже делают в этой позиции квалифицированный столбец (`x.a`) или неквалифицированный сопоставитель (`*`). [#107144](https://github.com/ClickHouse/ClickHouse/pull/107144) ([groeneai](https://github.com/groeneai)).
* Исправлено исключение `LOGICAL_ERROR` ("Unexpected exception in refresh scheduling"), которое могло приводить к циклическим сбоям сервера при перезапуске, если refreshable materialized view имеет зависимость `REFRESH ... DEPENDS ON <name>`, неквалифицированное имя которой совпадает с именем временной таблицы или CTE. [#107156](https://github.com/ClickHouse/ClickHouse/pull/107156) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка `LOGICAL_ERROR` (`Variant N (T) has size X, but expected Y`), возникавшая, когда функция, например `toString` или `concat`, применяется к столбцу `Variant` или `Dynamic`, содержащему один непустой вариант и значения NULL, а функция возвращает входной столбец без изменений. [#107374](https://github.com/ClickHouse/ClickHouse/pull/107374) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка `LOGICAL_ERROR` (`block.rows() == getRows()`), возникавшая при асинхронном `INSERT` в таблицу `Alias`, если была включена настройка `use_strict_insert_block_limits`. [#107400](https://github.com/ClickHouse/ClickHouse/pull/107400) ([groeneai](https://github.com/groeneai)).
* Исправлено исключение сервера (`Logical error: Not-ready Set is passed as the second argument for function 'in'`), возникавшее, когда ключевое выражение (`ORDER BY`, `PRIMARY KEY`, `PARTITION BY` или пропускающий `INDEX`) содержало оператор `IN` с таблицей в правой части, например `ORDER BY (x IN some_table)`. Такие ключевые выражения теперь отклоняются при создании таблицы. [#107424](https://github.com/ClickHouse/ClickHouse/pull/107424) ([groeneai](https://github.com/groeneai)).
* Исправлен редкий сбой сервера при обработке `DISTINCT`, который мог возникать при ошибке выделения памяти (например, при достижении лимита памяти) во время инициализации набора уникальных ключей. [#107467](https://github.com/ClickHouse/ClickHouse/pull/107467) ([groeneai](https://github.com/groeneai)).
* Исправлены сбои операций `DeltaLake` после истечения срока действия временных учётных данных S3: перед следующей операцией теперь обновляются кэшированные учётные данные. Учётные данные STS для assume-role также обновляются после сбоев аутентификации. [#107480](https://github.com/ClickHouse/ClickHouse/pull/107480) ([ahmadov](https://github.com/ahmadov)).
* Исправлена ошибка `Not-ready Set is passed as the second argument for function 'in'` (`LOGICAL_ERROR`), возникавшая при выполнении запроса к таблице с ключом `PARTITION BY` и подзапросом `IN`/`NOT IN`, заключённым в более крупное выражение, например `WHERE (c0 IN (SELECT ...)) != 0`. [#107515](https://github.com/ClickHouse/ClickHouse/pull/107515) ([groeneai](https://github.com/groeneai)).
* Исправлено падение (разыменование нулевого указателя), которое могло произойти при локальном выполнении распределённого плана запроса (`make_distributed_plan` + `distributed_plan_execute_locally`) с `log_formatted_queries = 1`. [#107570](https://github.com/ClickHouse/ClickHouse/pull/107570) ([groeneai](https://github.com/groeneai)).
* Исправлено падение сервера при чтении materialized view, целевой таблицей которой является `Distributed`, если запрос выполняется с `enable_analyzer = 0`. [#107653](https://github.com/ClickHouse/ClickHouse/pull/107653) ([groeneai](https://github.com/groeneai)).
* Исправлено падение сервера (SIGSEGV) при чтении данных Protobuf с `input_format_allow_errors_num > 0`, когда в том же блоке корректное сообщение предшествует некорректному, которое можно пропустить. [#107739](https://github.com/ClickHouse/ClickHouse/pull/107739) ([atsarevskiy](https://github.com/atsarevskiy)).
* Исправлено зависание табличных функций `odbc` и `jdbc` на несколько минут и игнорирование отмены запроса (`KILL QUERY`, `max_execution_time`), если bridge перестаёт отвечать при определении структуры удалённой таблицы. [#107809](https://github.com/ClickHouse/ClickHouse/pull/107809) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлено возможное падение (разыменование нулевого указателя), когда переопределение `database`/`db` именованной коллекции, переданной в `remote()`/`remoteSecure()`, не является константным именем базы данных, например `remote(nc, database = (SELECT 1))`. Теперь вместо падения запрос завершается с понятной ошибкой. [#108271](https://github.com/ClickHouse/ClickHouse/pull/108271) ([groeneai](https://github.com/groeneai)).
* Запросы векторного поиска, выбирающие данные из столбца `_distance`, теперь возвращают корректную ошибку вместо сбоя с `LOGICAL_ERROR`. [#108423](https://github.com/ClickHouse/ClickHouse/pull/108423) ([rschu1ze](https://github.com/rschu1ze)).
* Исправлено возможное падение (переполнение буфера кучи), когда столбец состояния агрегатной функции семейства `quantileTDigest` использовался в качестве ключа `GROUP BY` и одновременно сериализовался несколькими потоками. [#110263](https://github.com/ClickHouse/ClickHouse/pull/110263) ([groeneai](https://github.com/groeneai)).
* Исправлено некорректное отсечение данных при анализе индекса первичного ключа в таблицах с обратным (убывающим) ключом сортировки (`ORDER BY (g, r DESC)`). Гранула, охватывающая изменение ведущего ключевого столбца, за которым следует убывающий ключевой столбец, могла быть ошибочно отсечена, из-за чего исключались совпадающие строки. [#111059](https://github.com/ClickHouse/ClickHouse/pull/111059) ([nihalzp](https://github.com/nihalzp)).
* Исправлена логическая ошибка `block.rows() == getRows()` (чтение за пределами массива и нарушение дедупликации вставок в release-сборках), возникавшая, когда `INSERT` проходит через зависимое materialized view, целевой таблицей которого является `Alias`, а его внутренний запрос изменяет количество строк, при этом за псевдонимом доступна таблица с дедупликацией. [#111103](https://github.com/ClickHouse/ClickHouse/pull/111103) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлен segfault из-за обращения к памяти за пределами массива при десериализации некорректного состояния агрегатной функции, содержащего значение `String`. Теперь такие состояния проверяются и отклоняются, а не приводят к segfault. [#111606](https://github.com/ClickHouse/ClickHouse/pull/111606) ([mstetsyuk](https://github.com/mstetsyuk)).
* Исправлено падение при чтении файла Parquet с несогласованными метаданными bloom filter. Такие файлы также могли незаметно возвращать меньше строк, чем должны. [#112498](https://github.com/ClickHouse/ClickHouse/pull/112498) ([tiandiwonder](https://github.com/tiandiwonder)).
* Исправлены segfault и скрытое повреждение данных при добавлении данных командой `INSERT` в непустой файл через движок `File` или табличную функцию `file` в формате, не поддерживающем добавление, например `Avro`. Запись через файловый дескриптор или путь с партициями обходила существующую проверку: префикс формата не записывался, а после уже существующих байтов записывался второй заголовок, из-за чего файл становился нечитаемым. Теперь такой `INSERT` отклоняется с ошибкой `CANNOT_APPEND_TO_FILE`, как и при использовании обычного пути. [#112839](https://github.com/ClickHouse/ClickHouse/pull/112839) ([groeneai](https://github.com/groeneai)).
* Исправлено зависание `DROP TABLE` и `SYSTEM STOP VIEW`, если refreshable materialized view блокировалось при планировании запроса на обновление. [#113188](https://github.com/ClickHouse/ClickHouse/pull/113188) ([evillique](https://github.com/evillique)).
* Исправлено редкое аварийное завершение сервера, возникавшее, когда элементы очереди асинхронной вставки имели одинаковые дедлайны. [#113363](https://github.com/ClickHouse/ClickHouse/pull/113363) ([mstetsyuk](https://github.com/mstetsyuk)).
* Исправлено повреждение памяти кучи при чтении Parquet через входной формат, владеющий собственным буфером чтения, например через словарь с `SOURCE(FILE(... format 'Parquet'))`. Фоновые задачи предвыборки и декодирования могли продолжать читать и записывать через буфер после его освобождения конвейером, что могло привести к аварийному завершению сервера. [#114668](https://github.com/ClickHouse/ClickHouse/pull/114668) ([groeneai](https://github.com/groeneai)).
* Исправлено зависание при удалении таблицы `TimeSeries`, имя которой лексикографически предшествует именам её внутренних таблиц, например таблицы с именем `-ts`, а также при удалении materialized view, объявленного с `ENGINE = TimeSeries`. Операция удаления приводила к взаимоблокировке с самой собой на DDL-защите, и её нельзя было отменить с помощью `KILL QUERY`. [#114953](https://github.com/ClickHouse/ClickHouse/pull/114953) ([groeneai](https://github.com/groeneai)).

<h3 id="other-bug-fixes">
  Другие исправления ошибок
</h3>

* Функции `like`, `ilike`, `notLike`, `notILike` и `match` теперь поддерживают постоянную строку поиска с непостоянным шаблоном (например, `'foo' LIKE pattern_column`), что ранее приводило к ошибке `ILLEGAL_COLUMN`. [#100479](https://github.com/ClickHouse/ClickHouse/pull/100479) ([Onyx2406](https://github.com/Onyx2406)).
* Исправлена ошибка `NOT_FOUND_COLUMN_IN_BLOCK` при выборке из VIEW над таблицей с обычной проекцией. [#101218](https://github.com/ClickHouse/ClickHouse/pull/101218) ([amosbird](https://github.com/amosbird)).
* Теперь отклоняются отрицательные значения Float64 (например, `-100.5`) в настройках рабочей нагрузки, таких как `max_bytes_per_second`, `max_cpus` и т. д. Ранее проверялись только отрицательные целые числа, поэтому отрицательные числа с плавающей запятой могли незаметно создавать неисправные узлы планировщика. [#101842](https://github.com/ClickHouse/ClickHouse/pull/101842) ([groeneai](https://github.com/groeneai)).
* Чтение из объектного хранилища теперь оперативно реагирует на отмену запроса. [#103016](https://github.com/ClickHouse/ClickHouse/pull/103016) ([SmitaRKulkarni](https://github.com/SmitaRKulkarni)).
* Исправлено незаметное игнорирование `input_format_max_block_size_bytes` при разборе `INSERT`, когда `max_insert_block_size_bytes` равен `0` (значение по умолчанию). Теперь эта настройка корректно ограничивает размер блоков, создаваемых входными форматами строк. [#103068](https://github.com/ClickHouse/ClickHouse/pull/103068) ([Fgrtue](https://github.com/Fgrtue)).
* Исправлена периодическая генерация ClickHouse недопустимых токенов GSSAPI из-за некорректного удаления завершающих null-байтов. [#103114](https://github.com/ClickHouse/ClickHouse/pull/103114) ([EmeraldShift](https://github.com/EmeraldShift)).
* EXPLAIN SYNTAX разворачивает параметризованные представления. [#103263](https://github.com/ClickHouse/ClickHouse/pull/103263) ([jrdi](https://github.com/jrdi)).
* Исправлено повреждение данных при записи Parquet (и других форматов с трейлером, таких как ORC и Arrow) в HDFS через `INSERT INTO FUNCTION hdfs(...)`. Начиная с версии 26.1, `WriteBufferFromHDFS` не сбрасывал рабочий буфер при `finalize()`, из-за чего последние до `DBMS_DEFAULT_BUFFER_SIZE` байтов каждого файла незаметно терялись, включая нижний колонтитул Parquet `PAR1`. При чтении таких файлов возвращалась ошибка `Not a Parquet file (wrong magic bytes at the end of file)`. [#103268](https://github.com/ClickHouse/ClickHouse/pull/103268) ([groeneai](https://github.com/groeneai)).
* Исправлены неверные результаты и возможная логическая ошибка в коррелированных подзапросах, когда ограничение размера JOIN (`max_rows_in_join` / `max_bytes_in_join`) задано вместе с `join_overflow_mode = 'break'`. JOIN, внутренне создаваемый для вычисления коррелированного подзапроса, теперь игнорирует эти пользовательские ограничения и больше не может преждевременно остановиться и отбросить строки. [#103322](https://github.com/ClickHouse/ClickHouse/pull/103322) ([groeneai](https://github.com/groeneai)).
* Исправлены неверные результаты или неиспользование проекции, когда агрегатная проекция содержит несколько агрегатов `sumIf` с разными условиями `IN (...)`. [#104765](https://github.com/ClickHouse/ClickHouse/pull/104765) ([Ergus](https://github.com/Ergus)).
* Исправлено, что `deltaSumTimestamp` возвращала неверные результаты для знаковых целочисленных типов при переходе через ноль. [#104830](https://github.com/ClickHouse/ClickHouse/pull/104830) ([thevar1able](https://github.com/thevar1able)).
* Исправлена ошибка `Logical error: 'Metadata is not initialized'`, возникавшая при `DELETE FROM` для только что подключённой таблицы `Iceberg`, `DeltaLake` или `Hudi`, файл метаданных которой повреждён или не может быть загружен. Вместо неё теперь возвращается обычное пользовательское исключение, а сервер продолжает работу. [#104917](https://github.com/ClickHouse/ClickHouse/pull/104917) ([groeneai](https://github.com/groeneai)).
* Запросы `ATTACH TABLE name <clauses>;`, содержащие секции хранения (`ORDER BY`, `PARTITION BY`, `PRIMARY KEY`, `SAMPLE BY`, `TTL`, `UNIQUE KEY` или `SETTINGS` движка), но без `ENGINE`, теперь завершаются ошибкой `BAD_ARGUMENTS` вместо того, чтобы молча повторно подключать таблицу с сохранённым определением и игнорировать указанные пользователем секции. Сессионные `SETTINGS` уровня запроса (например, `log_comment`) по-прежнему применяются. Используйте `ATTACH TABLE t;` для повторного подключения с сохранёнными метаданными или `ALTER TABLE t MODIFY SETTING ...` после `ATTACH`, чтобы изменить настройки. [#105068](https://github.com/ClickHouse/ClickHouse/pull/105068) ([groeneai](https://github.com/groeneai)).
* Исправлены переполнение буфера кучи при чтении файлов Arrow или ArrowStream с повреждёнными промежуточными смещениями в двоичном или строковом столбце, а также разыменование нулевого указателя при чтении геотегированных столбцов Arrow. [#105449](https://github.com/ClickHouse/ClickHouse/pull/105449) ([Algunenano](https://github.com/Algunenano)).
* Исправлено аварийное завершение работы сервера при чтении подстолбцов `Dynamic` из сжатой таблицы `Memory` после `ALTER`. [#105464](https://github.com/ClickHouse/ClickHouse/pull/105464) ([Avogar](https://github.com/Avogar)).
* `skip_first_lines` добавлен в ключ кеша схемы для форматов `WithNames`. [#105469](https://github.com/ClickHouse/ClickHouse/pull/105469) ([Avogar](https://github.com/Avogar)).
* Исправлена функция `histogram`, возвращавшая неверные результаты для небольших неотсортированных входных данных. [#105548](https://github.com/ClickHouse/ClickHouse/pull/105548) ([Avogar](https://github.com/Avogar)).
* Исправлено использование таблицы вставки в табличных функциях при включённом `optimize_trivial_insert_select`. [#105555](https://github.com/ClickHouse/ClickHouse/pull/105555) ([Avogar](https://github.com/Avogar)).
* Исправлена оконная функция `estimateCompressionRatio`, терявшая накопленные данные между строками. [#105581](https://github.com/ClickHouse/ClickHouse/pull/105581) ([Avogar](https://github.com/Avogar)).
* Извлечение значений Hive-партиций теперь учитывает настройку `cast_string_to_date_time_mode` и по умолчанию принимает в ключах партиционирования временные метки ISO 8601 с суффиксами часового пояса (например, `+0000`, `+00:00`, `Z`). [#105584](https://github.com/ClickHouse/ClickHouse/pull/105584) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлено восстановление после ошибок во входном формате `Template` при обработке некорректных строк. [#105735](https://github.com/ClickHouse/ClickHouse/pull/105735) ([niyue](https://github.com/niyue)).
* Исправлено форматирование `SYSTEM INSTRUMENT ADD`: аргументы обработчика теперь разделяются одним пробелом. Также теперь отклоняются недопустимые списки аргументов инструментации `SLEEP`, содержащие более двух значений или диапазон, в котором минимум больше максимума. [#105984](https://github.com/ClickHouse/ClickHouse/pull/105984) ([pamarcos](https://github.com/pamarcos)).
* Исправлено молчаливое завершение сбоем операций ALTER TABLE с партициями при ключах партиционирования типа Bool. [#106004](https://github.com/ClickHouse/ClickHouse/pull/106004) ([Avogar](https://github.com/Avogar)).
* Исправлены `JSONExtractRaw` и `JSONHas` для типизированных JSON-путей со значениями по умолчанию. [#106005](https://github.com/ClickHouse/ClickHouse/pull/106005) ([Avogar](https://github.com/Avogar)).
* Исправлен лишний префикс `/` для пустых базовых путей в конфигурациях озёр данных. [#106013](https://github.com/ClickHouse/ClickHouse/pull/106013) ([thewisenerd](https://github.com/thewisenerd)).
* Исправлена ситуация, когда `system.dictionaries` возвращала 0 строк при частичном отзыве права `SHOW DICTIONARIES`. [#106105](https://github.com/ClickHouse/ClickHouse/pull/106105) ([Avogar](https://github.com/Avogar)).
* Исправлены некорректные результаты запросов к таблицам, в `ORDER BY` которых используется монотонно убывающая функция, например `(c0 / -42)` или `intDiv(c0, -42)`. Предикаты по исходному столбцу (например, `c0 < 0`) могли ошибочно отбрасывать гранулы с подходящими строками, что приводило к отсутствию части результатов. [#106136](https://github.com/ClickHouse/ClickHouse/pull/106136) ([nihalzp](https://github.com/nihalzp)).
* Добавлена валидация некорректных состояний агрегатной функции `DDSketch` при вставке. [#106236](https://github.com/ClickHouse/ClickHouse/pull/106236) ([yariks5s](https://github.com/yariks5s)).
* Исправлена согласованность кэша файловой системы после неудачного понижения версии `SLRU`, предотвращающая зависание записей в состоянии вытеснения. Также исправлены изменение размера разделённого кэша `System`/`Data` и очистка свободного пространства: теперь лимиты обновляются атомарно, а пространство может быть освобождено в обоих сегментах кэша. [#106286](https://github.com/ClickHouse/ClickHouse/pull/106286) ([kssenii](https://github.com/kssenii)).
* Исправлено некорректное преобразование субнормальных значений `Float16` в `Float32` (например, при чтении из файлов Numpy `.npy`), вызванное сдвигом мантиссы на единицу. [#106343](https://github.com/ClickHouse/ClickHouse/pull/106343) ([jh0x](https://github.com/jh0x)).
* Исправлена функция `regexpExtract(haystack, pattern)`: шаблоны без захватывающей группы теперь возвращают полное совпадение вместо генерации ошибки `INDEX_OF_POSITIONAL_ARGUMENT_IS_OUT_OF_RANGE`. [#106374](https://github.com/ClickHouse/ClickHouse/pull/106374) ([groeneai](https://github.com/groeneai)).
* Исправлена логическая ошибка при построении словаря полигонов из исходных данных, содержащих `NaN` или бесконечные координаты точек. Такие координаты теперь отклоняются с понятным сообщением об ошибке. [#106423](https://github.com/ClickHouse/ClickHouse/pull/106423) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* HTTP-словари теперь могут указывать заголовки запросов через именованные коллекции. [#106459](https://github.com/ClickHouse/ClickHouse/pull/106459) ([ZelvaMan](https://github.com/ZelvaMan)).
* Некорректные значения перечислений `Avro` теперь проверяются и отклоняются с исключением вместо того, чтобы вызывать чтение памяти за пределами допустимой области и завершение работы сервера. [#106476](https://github.com/ClickHouse/ClickHouse/pull/106476) ([mstetsyuk](https://github.com/mstetsyuk)).
* Исправлено поведение `LIMIT WITH TIES` и дробного `LIMIT WITH TIES`, которые не учитывали collation из `ORDER BY ... COLLATE` при определении совпадающих строк. Строки, равные согласно collation (например, `'1'` и `'01'` при числовой collation), сравнивались побайтно, поэтому некоторые совпадающие строки ошибочно исключались из результата. [#106539](https://github.com/ClickHouse/ClickHouse/pull/106539) ([nihalzp](https://github.com/nihalzp)).
* Исправлены оптимизации `DISTINCT` по порядку и `LIMIT BY` по порядку (включая отрицательный `LIMIT BY`), которые возвращали неверные результаты, если входные данные были отсортированы с collation (`ORDER BY ... COLLATE`). Строки, равные согласно collation (например, `'a'` и `'A'` при регистронезависимой collation), упорядочиваются по ключу collation и не располагаются рядом по значению, поэтому оптимизация по порядку теперь пропускается при использовании collator. [#106564](https://github.com/ClickHouse/ClickHouse/pull/106564) ([nihalzp](https://github.com/nihalzp)).
* Исправлено состояние гонки при завершении работы consumer NATS, которое могло привести к завершению работы сервера. [#106692](https://github.com/ClickHouse/ClickHouse/pull/106692) ([mstetsyuk](https://github.com/mstetsyuk)).
* Исправлены многочисленные проблемы с безопасностью памяти и исчерпанием ресурсов в ридерах форматов, доступных через недоверенный ввод: чтение за границами кучи при обработке длины уровней определения и повторения `DataPageV2` в нативном ридере Parquet, переполнение стека в файлах Parquet с глубоко вложенными схемами, а также выделения памяти, игнорировавшие `max_memory_usage` при разборе геометрии GeoParquet WKB/WKT и строк/байтов Avro. [#106739](https://github.com/ClickHouse/ClickHouse/pull/106739) ([Algunenano](https://github.com/Algunenano)).
* Исправлена отправка незашифрованных HTTP-ответов HTTPS-клиентам через `keeper_server.http_control.secure_port`. Теперь защищённый порт корректно обслуживает HTTPS. [#106822](https://github.com/ClickHouse/ClickHouse/pull/106822) ([linjiayu1025-collab](https://github.com/linjiayu1025-collab)).
* Исправлен вывод `restrictive`/`permissive` в нижнем регистре вместо верхнего в `SHOW CREATE ROW POLICY`, не согласованный с другими ключевыми словами. [#106865](https://github.com/ClickHouse/ClickHouse/pull/106865) ([valerypetrov](https://github.com/valerypetrov)).
* Исправлена ошибочная пометка частей как повреждённых и их отключение при любой перезагрузке частей (перезапуске сервера, `DETACH` или `ATTACH`) в таблицах со столбцом `LowCardinality(Nullable(...))` в ключе партиционирования. Начиная с версии 26.5, файл индекса minmax для каждой части не записывался, если минимум и максимум такого столбца были `NULL`, хотя проверка целостности части по-прежнему требовала наличия этого файла. В частях, записанных затронутыми версиями, отсутствует файл индекса minmax, поэтому их всё ещё необходимо повторно подключать вручную. [#106945](https://github.com/ClickHouse/ClickHouse/pull/106945) ([PedroTadim](https://github.com/PedroTadim)).
* Исправлено: `elapsed_us` всегда был равен нулю, а значения `read_rows`/`read_bytes` занижались в `system.processors_profile_log` и `system.query_log` для запросов сброса буфера асинхронной вставки (`AsyncInsertFlush`). [#106982](https://github.com/ClickHouse/ClickHouse/pull/106982) ([cwurm](https://github.com/cwurm)).
* Исправлена логическая ошибка `Block structure mismatch in UnionStep stream` (аварийное завершение сервера в отладочных сборках и сборках с санитайзерами, `Code: 49` в релизных сборках), возникавшая, когда одна ветвь `UNION`/`INTERSECT`/`EXCEPT` читала столбец с сериализацией `Sparse`, а другая — тот же столбец в полной сериализации (например, при записи в materialized view). [#107041](https://github.com/ClickHouse/ClickHouse/pull/107041) ([groeneai](https://github.com/groeneai)).
* Исправлен некорректный порядок строк в запросах с `ORDER BY` к `UNION ALL` при включённых `optimize_read_in_order` и `read_in_order_use_virtual_row`. [#107053](https://github.com/ClickHouse/ClickHouse/pull/107053) ([vdimir](https://github.com/vdimir)).
* Исправлена синтаксическая ошибка, возникавшая, когда предложение `FORMAT`, `SETTINGS` или `INTO OUTFILE` следовало за `SHOW ROW POLICIES` или `SHOW MASKING POLICIES` (например, `SHOW ROW POLICIES FORMAT TabSeparated`). [#107061](https://github.com/ClickHouse/ClickHouse/pull/107061) ([groeneai](https://github.com/groeneai)).
* Исправлено возникновение `TOO_LARGE_STRING_SIZE` в `trimLeft`, `trimRight` и `trimBoth` (а также в псевдонимах `ltrim`, `rtrim`, `trim`), когда пользовательский набор символов для обрезки содержал более 16 символов. Наборы символов для обрезки любой длины теперь снова поддерживаются. [#107071](https://github.com/ClickHouse/ClickHouse/pull/107071) ([fm4v](https://github.com/fm4v)).
* Исправлено переполнение знакового целого числа в `quantileExactExclusive`, `quantilesExactExclusive`, `quantileExactInclusive` и `quantilesExactInclusive`, которое могло приводить к неверному результату для значений `Int64` из большого диапазона. [#107154](https://github.com/ClickHouse/ClickHouse/pull/107154) ([groeneai](https://github.com/groeneai)).
* Перезагрузка конфигурации больше не запускает стартовые скрипты повторно, предотвращая повторное выполнение однократных действий при запуске. [#107187](https://github.com/ClickHouse/ClickHouse/pull/107187) ([mstetsyuk](https://github.com/mstetsyuk)).
* Исправлен некорректный порядок результатов для `ORDER BY` с `UNION ALL` при включённом `optimize_read_in_order`, когда конвейер UNION сужался из-за настройки `max_streams_for_union_step`; теперь сужение не выполняется, если план использует отсортированные выходные потоки UNION. [#107208](https://github.com/ClickHouse/ClickHouse/pull/107208) ([vdimir](https://github.com/vdimir)).
* Исправлено возможное разыменование нулевого указателя при разрешении конфигурации прокси на позднем этапе остановки сервера. [#107231](https://github.com/ClickHouse/ClickHouse/pull/107231) ([PedroTadim](https://github.com/PedroTadim)).
* Исправлено появление лишних строк при использовании `ORDER BY ... WITH FILL`, если столбец ORDER BY перед заполняемым столбцом использует collation `COLLATE`. Теперь строки группируются по префиксу сортировки с учётом этой collation, в соответствии с порядком сортировки. [#107365](https://github.com/ClickHouse/ClickHouse/pull/107365) ([groeneai](https://github.com/groeneai)).
* Исправлено неопределённое поведение при передаче неконечного значения с плавающей точкой (например, `nan` или `inf`) в качестве аргумента временной метки или длительности табличных функций `prometheusQuery` / `prometheusQueryRange`. Теперь такой аргумент вызывает ошибку `BAD_ARGUMENTS`, а не приводит к некорректной временной метке. [#107417](https://github.com/ClickHouse/ClickHouse/pull/107417) ([groeneai](https://github.com/groeneai)).
* Исправлены неверные результаты оптимизации `optimize_rewrite_aggregate_function_with_if` для агрегатных функций, сохраняющих значения `NULL` (семейство `*_respect_nulls`: `anyRespectNulls`, `first_value_respect_nulls`, `anyLast_respect_nulls`, `last_value_respect_nulls`). Оптимизация больше не преобразует `f(if(cond, x, NULL))` в форму `-If` для таких функций. [#107430](https://github.com/ClickHouse/ClickHouse/pull/107430) ([groeneai](https://github.com/groeneai)).
* Добавлена проверка некорректно сформированных границ во входных данных ORC. [#107580](https://github.com/ClickHouse/ClickHouse/pull/107580) ([al13n321](https://github.com/al13n321)).
* Устранена возможность неаутентифицированной атаки типа «отказ в обслуживании» с исчерпанием памяти через порт протокола MySQL. [#107599](https://github.com/ClickHouse/ClickHouse/pull/107599) ([tiandiwonder](https://github.com/tiandiwonder)).
* Исправлена невозможность использования интерфейса MySQL с `MySQL Connector/J` 8.2.0 и более новыми версиями, включая 9.x. Поле `info` пакета `OK` теперь кодируется с указанием длины, как на сервере MySQL, поэтому JDBC-драйвер может подключаться. [#107693](https://github.com/ClickHouse/ClickHouse/pull/107693) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлена логическая ошибка `Block structure mismatch in UnionStep stream` (аварийное завершение сервера в отладочных сборках и сборках с sanitizer, `Code: 49` в релизных сборках), возникавшая, когда соседние ветви `UNION`/`INTERSECT`/`EXCEPT` различались только предикатом `WHERE`, а предикат одной из ветвей сворачивался в константный столбец `Const`. [#107719](https://github.com/ClickHouse/ClickHouse/pull/107719) ([groeneai](https://github.com/groeneai)).
* Чтение данных `Arrow` и `ArrowStream` с пустыми столбцами `String` или `Binary`, созданными Apache Arrow Java до версии 19.0.0, включая Apache Spark, больше не вызывает ошибку `INCORRECT_DATA`. [#107764](https://github.com/ClickHouse/ClickHouse/pull/107764) ([Algunenano](https://github.com/Algunenano)).
* Некорректно сформированные блоки Native, в которых дискриминатор `Variant` ссылается на несуществующий вариант, теперь безопасно отклоняются. [#107991](https://github.com/ClickHouse/ClickHouse/pull/107991) ([uwezkhan](https://github.com/uwezkhan)).
* Исправлена регрессия производительности при чтении столбцов `Dynamic` несколькими потоками. [#107997](https://github.com/ClickHouse/ClickHouse/pull/107997) ([Avogar](https://github.com/Avogar)).
* Устаревшая настройка озера данных `storage_catalog_url` теперь корректно отклоняется проверкой каталога (ранее проверялись только `storage_catalog_type` и `storage_aws_access_key_id`), а сообщение об ошибке содержит список всех устаревших настроек. [#108040](https://github.com/ClickHouse/ClickHouse/pull/108040) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлена ошибка, из-за которой табличная функция/движок `ArrowFlight` отклоняла именованную коллекцию без необязательного ключа `dataset` с сообщением `No such key 'dataset'`. [#108041](https://github.com/ClickHouse/ClickHouse/pull/108041) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Секреты и учетные данные теперь маскируются в `system.query_views_log.view_query`, а не отображаются в SQL представления, записанном в журнал. [#108214](https://github.com/ClickHouse/ClickHouse/pull/108214) ([Fidelaggio](https://github.com/Fidelaggio)).
* Исправлена ошибка, из-за которой `type_json_allow_duplicated_key_with_literal_and_nested_object` не работала с типизированными путями в JSON. [#108218](https://github.com/ClickHouse/ClickHouse/pull/108218) ([Avogar](https://github.com/Avogar)).
* Исправлено неопределенное поведение (нулевой указатель передавался в `memcpy`) в функциях `detectCharset` и `detectLanguageUnknown`, когда входная строка превышает 32768 байт и определить кодировку невозможно. [#108250](https://github.com/ClickHouse/ClickHouse/pull/108250) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка `NOT_FOUND_COLUMN_IN_BLOCK` в запросах, использующих виртуальные столбцы `_part_starting_offset/_part_offset` в WHERE вместе с отложенной материализацией. [#108287](https://github.com/ClickHouse/ClickHouse/pull/108287) ([vdimir](https://github.com/vdimir)).
* Скрыты секретные аргументы таких функций, как `encrypt`, `decrypt` и `HMAC`, в выводе `EXPLAIN actions`, `EXPLAIN header` и `EXPLAIN PIPELINE`, если параметр `format_display_secrets_in_show_and_select` отключен (по умолчанию). [#108386](https://github.com/ClickHouse/ClickHouse/pull/108386) ([Algunenano](https://github.com/Algunenano)).
* `CREATE OR REPLACE` теперь успешно выполняется для refreshable materialized view, если целевой объект `TO` уже принадлежит этому же представлению. Целевые объекты, принадлежащие другому представлению, по-прежнему отклоняются. [#108392](https://github.com/ClickHouse/ClickHouse/pull/108392) ([evillique](https://github.com/evillique)).
* Путь к модели для `catboostEvaluate` ограничен каталогом `user_files`, как и для `file()` и источников словарей. Ранее функция принимала произвольный путь в файловой системе без проверки нахождения в этом каталоге, что позволяло проверять существование файлов за пределами `user_files` и инициировать их чтение. Теперь модели должны находиться в `user_files`. [#108463](https://github.com/ClickHouse/ClickHouse/pull/108463) ([groeneai](https://github.com/groeneai)).
* Исправлена ошибка, из-за которой `CREATE OR REPLACE MATERIALIZED VIEW ... POPULATE` не подписывал новое представление на исходную таблицу, что приводило к незаметному отбрасыванию всех строк, вставленных после замены. [#108728](https://github.com/ClickHouse/ClickHouse/pull/108728) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Исправлена ошибка сегментации при слиянии состояний агрегатной функции `uniqExact` с `GROUPING SETS`, `ROLLUP` или `CUBE` при `max_threads > 1`. [#108928](https://github.com/ClickHouse/ClickHouse/pull/108928) ([Algunenano](https://github.com/Algunenano)).
* Исправлена возможная логическая ошибка "Unexpected substream ... for column ..." при обновлении настройки compatibility. [#109496](https://github.com/ClickHouse/ClickHouse/pull/109496) ([Avogar](https://github.com/Avogar)).
* Функция `getClientHTTPHeader` теперь обрабатывает имена заголовков регистронезависимо в соответствии с [RFC 9110](https://www.rfc-editor.org/info/rfc9110/#section-5.1); в частности, заголовок `authorization` теперь отфильтровывается независимо от регистра. [#109791](https://github.com/ClickHouse/ClickHouse/pull/109791) ([Felixoid](https://github.com/Felixoid)).
* Исправлена незаметная потеря данных при асинхронных вставках и дедупликации (`async_insert=1`, `async_insert_deduplicate=1`). Когда несколько записей асинхронной вставки с разными значениями `insert_deduplication_token` объединялись в один flush, записывающий данные в непересекающиеся партиции, каждый токен регистрировался в журнале дедупликации всех затронутых flush партиций, а не только той партиции, в которую попадали соответствующие строки. В результате последующая вставка, повторно использующая один из этих токенов в партиции, в которую он никогда не записывался, незаметно дедуплицировалась. Теперь токены регистрируются только для партиции, в которую фактически попали их строки. [#111049](https://github.com/ClickHouse/ClickHouse/pull/111049) ([groeneai](https://github.com/groeneai)).
* Исправлена асинхронная вставка в формате Native: теперь одна буферизованная запись, ставшая несовместимой после `ALTER ... MODIFY COLUMN`, не приводит к сбою всего пакета. [#111108](https://github.com/ClickHouse/ClickHouse/pull/111108) ([Felixoid](https://github.com/Felixoid)).
* Исправлено выполнение `CREATE OR REPLACE` для словаря с объектом другого типа: ранее оно завершалось ошибкой `CANNOT_DETACH_DICTIONARY_AS_TABLE` уже после фиксации замены, оставляя временную таблицу `_tmp_replace_*` без связей. [#111142](https://github.com/ClickHouse/ClickHouse/pull/111142) ([evillique](https://github.com/evillique)).
* Исправлена утечка памяти сертификата удалённого узла при TLS-рукопожатиях с включённой проверкой сертификатов. [#111425](https://github.com/ClickHouse/ClickHouse/pull/111425) ([thevar1able](https://github.com/thevar1able)).
* Исправлена логическая ошибка `Block structure mismatch in IntersectOrExceptStep stream: different number of columns`, которая могла возникать, когда оптимизация разделения фильтра (`query_plan_split_filter`) применялась к условию `WHERE`, в котором имя столбца фильтра совпадало с именем входного столбца. Оптимизация оставляла внутренний столбец `__split_filter` в заголовке выходных данных ветви, из-за чего он отличался от заголовка соседней ветви операции над множествами, например `INTERSECT` или `UNION`. [#111930](https://github.com/ClickHouse/ClickHouse/pull/111930) ([groeneai](https://github.com/groeneai)).
* Исправлены некорректные результаты для фильтров или выражений `ORDER BY`, использующих `toString` со значениями `Time`, `Time64` или `DateTime` в часовых поясах с переходом на летнее время. Также восстановлена оптимизация чтения в порядке сортировки для `ORDER BY` по префиксу ключа сортировки таблицы и для преобразований из `String` в `Nullable(String)`. [#113291](https://github.com/ClickHouse/ClickHouse/pull/113291) ([vdimir](https://github.com/vdimir)).
* Исправлено выполнение `ATTACH` таблицы `Kafka`, когда `kafka_num_consumers` превышает ограничение, рассчитанное на основе количества ядер CPU. [#113390](https://github.com/ClickHouse/ClickHouse/pull/113390) ([evillique](https://github.com/evillique)).
* Отключён распределённый анализ индекса при использовании проекций, чтобы предотвратить некорректные результаты запроса. [#115132](https://github.com/ClickHouse/ClickHouse/pull/115132) ([azat](https://github.com/azat)).
* Исправлена ошибка в функции `formatRowNoNewline`, которая могла приводить к некорректным результатам или логической ошибке при форматировании строки в пустой результат. [#115669](https://github.com/ClickHouse/ClickHouse/pull/115669) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Устранён возврат неинициализированной памяти в результате двоичного строкового литерала, длина которого не кратна восьми, а также декомпрессором LZ4, когда сжатый блок не содержит тела. [#115704](https://github.com/ClickHouse/ClickHouse/pull/115704) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Пути объектов включены в хеши дедупликации, чтобы предотвратить ошибочную дедупликацию значений разных объектов. [#115866](https://github.com/ClickHouse/ClickHouse/pull/115866) ([Felixoid](https://github.com/Felixoid)).
