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