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