Список изменений 2025
Оглавление
Релиз ClickHouse v25.11, 2025-11-25
Релиз ClickHouse v25.10, 2025-10-30
Релиз ClickHouse v25.9, 2025-09-25
Релиз ClickHouse v25.8 LTS, 2025-08-28
Релиз ClickHouse v25.7, 2025-07-24
Релиз ClickHouse v25.6, 2025-06-26
Релиз ClickHouse v25.5, 2025-05-22
Релиз ClickHouse v25.4, 2025-04-22
Релиз ClickHouse v25.3 LTS, 2025-03-20
Релиз ClickHouse v25.2, 2025-02-27
Релиз ClickHouse v25.1, 2025-01-28
Журнал изменений за 2024 год
Журнал изменений за 2023 год
Журнал изменений за 2022 год
Журнал изменений за 2021 год
Журнал изменений за 2020 год
Журнал изменений за 2019 год
Журнал изменений за 2018 год
Журнал изменений за 2017 год
Релиз ClickHouse 25.11, 2025-11-25
Несовместимое изменение
- Удалён устаревший тип данных
Object. #85718 (Pavel Kruglov). - Удалена устаревшая возможность
LIVE VIEW. Если вы используетеLIVE VIEW, обновление до новой версии будет невозможно. #88706 (Alexey Milovidov). - В предыдущих версиях тип
Geometryбыл алиасом типаString, но теперь это полноценный тип. #83344 (scanhex12). - Добавлено экранирование имён файлов, создаваемых для подстолбцов типа
Variantв широких партах данных (Wide) таблиц MergeTree. Это изменение нарушает совместимость со старыми таблицами с типами данных Variant/Dynamic/JSON. Исправляет хранение типов со специальными символами внутри Variant (например, DateTime с определённым часовым поясом, который содержит\). Экранирование можно отключить, изменив настройку MergeTreeescape_variant_subcolumn_filenames(для сохранения совместимости отключите эту настройку в конфигурации для MergeTree или установите настройкуcompatibilityна предыдущую версию перед обновлением). Решает #69590. #87300 (Pavel Kruglov). - По умолчанию включён формат сериализации
with_size_streamдля типа данныхString. Это изменение обратно совместимо, но новый формат сериализации поддерживается только начиная с версии 25.10, что означает невозможность отката до версий ранее 25.10. Если вы хотите сохранить возможность отката до версий 25.9 и более ранних, настройтеserialization_info_versionкакbasicиstring_serialization_versionкакsingle_streamв разделеmerge_treeконфигурации сервера. #89329 (Alexey Milovidov). - Добавлена поддержка пометки исключений тегами в HTTP-ответах, чтобы клиенты могли более надёжно анализировать исключения. Исправляет #75175. Настройка
http_write_exception_in_output_formatпо умолчанию отключена для обеспечения единообразия между форматами. #88818 (Kaviraj Kanagaraj). Хотя не предполагается, что это нарушит какое-либо существующее поведение (в худшем случае к сообщению об исключении будет добавлена странная строка), всё же имеет смысл использовать «Изменение, нарушающее обратную совместимость» как категорию в changelog просто для информирования (потому что неизвестно, как какие-нибудь грязные скрипты могут разбирать сообщение об исключении). - TODO, @Michicosun — уточнить или удалить. Диски
PlainRewritableхранят дерево своей файловой системы в памяти. Если другой диск изменит структуру объектного хранилища, структура в памяти не будет обновлена, что приведёт к некорректным операциям файловой системы и возможным ошибкам вида no such key. #89038 (Mikhail Artemenko). - Исправлен приоритет настроек SASL для хранилища Kafka. Табличные настройки SASL, заданные в запросах CREATE TABLE, теперь корректно переопределяют настройки consumer/producer из конфигурационных файлов. #89401 (János Benjamin Antal).
- Временные метки Parquet без часового пояса (isAdjustedToUTC=false) теперь читаются как DateTime64(..., 'UTC') вместо DateTime64(...). Это менее ошибочно, так как преобразование такой временной метки в UTC в строку даёт корректное локальное время. Используйте
input_format_parquet_local_time_as_utc = 0, чтобы вернуть старое поведение. Решает проблему #87469. #87872 (Michael Kolupaev). - Небольшое улучшение кодека
T64: он больше не принимает типы данных, не выровненные по размеру элемента сжатия, что иначе приводило бы к ошибке. Исправляет #89282. #89432 (yanglongwei).
Новая функция
- Добавлен тип
Geometry. Для него поддерживается чтение форматовWKBиWKT. В предыдущих версиях типGeometryбыл псевдонимом типаString, но теперь это полноценный тип. #83344 (scanhex12). - Добавлен новый оператор SQL
EXECUTE ASдля поддержки выполнения от имени других пользователей. Исправляет #39048. #70775 (Shankar). - Добавлена функция
naiveBayesClassifierдля классификации текста с использованием метода наивного Байеса на основе n-грамм. #88677 (Nihal Z. Miaji). - Добавлена поддержка дробных значений параметров
LIMITиOFFSETдля выборки доли таблицы. Закрывает #81892. #88755 (Ahmed Gouda). - Подсистема ClickHouse для каталога Microsoft OneLake. #89366 (scanhex12).
- Добавлена функция
flipCoordinates, которая распаковывает заданное количество измерений массива и переставляет указатели местами внутри столбца Tuple. Исправляет #79469. #79634 (Sachin Kumar Singh). - Добавлена таблица
system.unicode, содержащая список символов Юникода и их свойств. Закрывает #80055. #80857 (wxybear). - Добавлена новая настройка MergeTree
merge_max_dynamic_subcolumns_in_wide_part, позволяющая ограничивать число динамических подстолбцов в широкой парте после слияния независимо от параметров, заданных в типе данных. #87646 (Pavel Kruglov). - Добавлена поддержка оконной функции
cume_dist. Исправлена проблема #86920. #88102 (Manuel). - Теперь пользователь может добавить новый аргумент
preprocessorпри построении текстового индекса. Этот аргумент — произвольное выражение, которое преобразует каждый документ перед токенизацией. #88272 (Jimmy Aguilar Mena). - Добавляет поле
memory_usageвX-ClickHouse-ProgressиX-ClickHouse-Summary. Его можно использовать для сбора данных об использовании памяти запросами в режиме реального времени на стороне клиента. #88393 (Christoph Wurm). - Добавлена настройка
into_outfile_create_parent_directoriesдля автоматического создания родительских директорий дляINTO OUTFILE, что предотвращает ошибки, когда путь вывода не существует. Это упрощает процессы, в которых запросы записывают результаты во вложенные директории. Исправляет #88610. #88795 (Saksham). - Добавлена поддержка синтаксиса
CREATE OR REPLACEдля временных таблиц. Закрывает #35888. #89450 (Aleksandr Musorin). - Поддержка функции
arrayRemoveдля удаления всех элементов, равныхelem, из массиваarr. Она нужна только для совместимости с Postgres, поскольку в ClickHouse уже есть гораздо более мощная функцияarrayFilter. Исправляет #52099. #89585 (tiwarysaurav). - Добавлена скалярная функция
midpointдля вычисления среднего значения. Исправлена задача #89029. #89679 (simonmichal). - В веб-интерфейсе теперь доступна кнопка загрузки. Она позволяет скачать полный результат, даже если в интерфейсе отображается только его часть. #89768 (Alexey Milovidov).
- Добавлена настройка
arrow_flight_request_descriptor_typeдля поддержки Dremio и других серверов Arrow Flight, которым требуются дескрипторы командного типа. Реализует #89523. #89826 (Shreyas Ganesh). - Новые агрегатные функции
argAndMinиargAndMax, которые возвращают аргумент и соответствующее минимальное/максимальное значение. В предыдущих версиях это также можно было сделать с использованием кортежа в качестве аргумента. #89884 (AbdAlRahman Gad). - Настройки записи и проверки контрольных сумм Parquet. #79012 (Michael Kolupaev).
- Добавлена настройка
kafka_schema_registry_skip_bytesв табличный движок Kafka для пропуска байт заголовка оболочки (например, 19-байтного префикса AWS Glue Schema Registry) перед разбором полезной нагрузки сообщения. Это позволяет ClickHouse читать сообщения из реестров схем, которые добавляют метаданные в заголовки. #89621 (Taras Polishchuk). - Добавлена функция
h3PolygonToCells, которая заполняет геометрию h3‑шестиугольниками. Решает проблему #33991. #66262 (Zacharias Knudsen). - Добавлен новый виртуальный столбец
_tags(Map(String, String)) со всеми тегами, связанными с объектом в S3 (обратите внимание, что если у объекта нет тегов, дополнительный запрос выполняться не будет). Решает #72945. #77773 (Zicong Qu). - TODO, @vdimir — объяснить разницу и перенести в другую категорию. Добавлены NULL-безопасные операторы сравнения
<=>(псевдонимIS NOT DISTINCT FROM) иIS DISTINCT FROMдля выполнения проверок на равенство с корректной обработкой значенийNULL. Исправляет #86763. #87581 (yanglongwei).
Экспериментальные возможности
- Поддержка получения TLS-сертификатов от ACME-провайдеров, RFC 8555, таких как Let's Encrypt. Это позволяет автоматически настраивать TLS в распределённых кластерах. #66315 (Konstantin Bogdanov).
- Поддержка части Prometheus HTTP Query API. Чтобы включить её, добавьте правило с типом
query_apiв раздел<prometheus>конфигурационного файла. Поддерживаемые обработчики:/api/v1/query_rangeи/api/v1/query. #86132 (Nikita Mikhaylov). - Полнотекстовый поиск теперь в статусе бета (ранее был экспериментальной возможностью). #88928 (Robert Schulze).
Aliasпереведён в разряд экспериментальных возможностей, может быть включён параметромallow_experimental_alias_table_engine = 1. #89712 (Kai Zhu).
Повышение производительности
- Parquet reader v3 включен по умолчанию. #88827 (Michael Kolupaev).
- Распределённое выполнение: лучше разбивать задачи по идентификаторам групп строк, а не по файлам. #87508 (scanhex12).
RIGHTиFULLJOIN теперь используют ConcurrentHashJoin; это означает, что эти типы соединений выполняются с более высокой степенью параллелизма. В различных сценарияхRIGHTиFULLJOIN работают до двух раз быстрее. Устраняет #78027. #78462 (Yarik Briukhovetskyi).- Оптимизация обработки больших значений константных выражений в запросах. Закрывает #72880. #81104 (Yakov Olkhovskiy).
- Запросы
SELECTдо 8 раз быстрее при интенсивном отсечении партиций на таблицах с более чем 10 000 частями. #85535 (James Morrison). - Когда запрос использует фиксированную хеш-таблицу для состояния агрегации (GROUP BY по небольшому целочисленному значению), ClickHouse параллельно объединяет состояние агрегации, чтобы ускорить выполнение запроса. #87366 (Jianfei Hu).
- Разрешить использование проекций (которые выполняют SELECT
_part_offsetи используют иной ORDER BY) в качестве вторичного индекса. При включении параметра некоторые предикаты запроса могут использоваться для чтения из частей проекций и генерации битовых карт для эффективной фильтрации строк на этапе PREWHERE. Это третий шаг в реализации индекса проекций, следующий за #80343. #81021 (Amos Bird). - Исправлен VDSO для редких систем на базе Aarch64 и, возможно, других сочетаний архитектур и версий ядра. #86096 (Tomas Hulata).
- Ускорена декомпрессия LZ4 за счёт упрощения кода и оптимизации алгоритма выбора. #88360 (Raúl Marín).
- S3 внутренне распределяет объекты по разделам в зависимости от префиксов имён ключей и автоматически масштабируется до высокой интенсивности запросов на каждый раздел. Это изменение добавляет два новых параметра BACKUP: data_file_name_generator и data_file_name_prefix_length. Когда data_file_name_generator=checksum, файлы резервной копии данных получают имена на основе хэша их содержимого. Пример: для checksum =
abcd1234ef567890abcd1234ef567890иdata_file_name_prefix_length = 3результирующий путь будет:abc/d1234ef567890abcd1234ef567890. Получившееся распределение ключей улучшает балансировку нагрузки между разделами S3 и снижает риск ограничения пропускной способности (throttling). #88418 (Julia Kartseva). - Повышена производительность текстового индекса за счёт кэширования блоков словаря и использования хеш-таблиц для поиска токенов вместо бинарного поиска. #88786 (Elmi Ahmadov).
- Запросы теперь могут одновременно использовать
optimize_read_in_orderиquery_plan_optimize_lazy_materialization. Решает #88767. #88866 (Manuel). - Использовать агрегирующую проекцию для запросов с оператором
DISTINCT. Закрывает #86925. #88894 (Nihal Z. Miaji). - Кэширование списков постинга для повышения производительности при последующих запусках. #88912 (Elmi Ahmadov).
- Выполнять потоковую трансформацию LIMIT BY при совпадении порядка сортировки входных данных с ключами LIMIT BY. #88969 (Eduard Karacharov).
- Добавлена возможность в некоторых случаях переписывать
ANY LEFT JOINилиANY RIGHT JOINвALL INNER JOIN. #89403 (Dmitry Novik). - Снизить накладные расходы на логирование: использовать меньше атомарных операций на запись. #89651 (Sergei Trifonov).
- При включённых runtime-фильтрах в запросе с несколькими JOIN и несколькими runtime-фильтрами реализовано проталкивание (pushdown) заново добавленных шагов фильтрации с приоритетом над остальными. #89725 (Alexander Gololobov).
- Незначительно ускорены некоторые операции
uniqExactза счёт уменьшения накладных расходов на слияние хеш-таблиц. #89727 (Raúl Marín). - Увеличен лимит количества строк ленивой материализации с 10 до 100. #89772 (Alexey Milovidov).
- По умолчанию включена настройка
allow_special_serialization_kinds_in_output_formats. Это приведет к меньшему потреблению памяти и ускорит вывод результатов запросов для столбцов типов Sparse/Replicated в некоторых строковых форматах вывода. #89402 (Pavel Kruglov). - Добавлен параллельный режим выполнения запросов
ALTER TABLE ... FREEZE. #71743 (Kirill). - Добавлен кэш для аутентификации с помощью bcrypt. #87115 (Nikolay Degterinsky).
- Если пропускающий индекс, используемый в запросе с оператором
FINAL, находится на столбце, который является частью первичного ключа, дополнительный шаг по проверке пересечения по первичному ключу в других частях запроса больше не требуется и теперь не выполняется. Исправлена #85897. #88368 (Shankar Iyer). - Оптимизация
enable_lazy_columns_replicationтеперь включена по умолчанию, что позволит сократить потребление памяти при операциях JOIN. #89316 (Alexey Milovidov). - Ввести кэш
ColumnsDescriptionна уровне таблицы для частей, чтобы сократить использование памяти, когда таблицы содержат много частей и много столбцов. #89352 (Azat Khuzhin). - Добавлен кэш для десериализованного заголовка текстового индекса для снижения объёма операций ввода-вывода и улучшения производительности запросов. Кэш можно настроить с помощью новых серверных настроек: -
text_index_header_cache_policy-text_index_header_cache_size-text_index_header_cache_max_entries-text_index_header_cache_size_ratio. #89513 (Elmi Ahmadov).
Улучшение
- UNION при необходимости должен приводить типы к
Variant, если включёнuse_variant_as_common_type. Устраняет проблему #82772. #83246 (Mithun p). - Роли, заданные в SQL, теперь можно назначать пользователям, заданным в
users.xml. #88139 (c-end). - Логировать внутренние запросы (выполняемые словарями, обновляемыми материализованными представлениями и т. д.) и добавить новый столбец
is_internalвsystem.query_log. #83277 (Miсhael Stetsyuk). clickhouse-clientиclickhouse-localв интерактивном режиме будут подсвечивать в командной строке идентификаторы, которые имеют то же имя, что и текущий идентификатор под курсором. #89689 (Alexey Milovidov).- Настройки, связанные с форматом вывода, теперь не влияют на кэширование запросов. Кроме того, кэширование запросов игнорирует настройку
http_response_headers. Это необходимо для реализации функций, например загрузки результата из кэша в веб‑интерфейсе. #89756 (Alexey Milovidov). - HTTP-интерфейс будет передавать заголовки
AgeиExpiresпри использовании кэша результатов запроса. Наличие заголовкаAgeпоказывает, что результат получен из кэша, аExpiresтакже устанавливается при первой записи. Добавлены новые события профилирования:QueryCacheAgeSeconds,QueryCacheReadRows,QueryCacheReadBytes,QueryCacheWrittenRows,QueryCacheWrittenBytes. #89759 (Alexey Milovidov). - Разрешена вставка в удалённые таблицы и таблицы в data lake, когда включён параметр
disable_insertion_and_mutation(что соответствует режиму только для чтения в ClickHouse Cloud). #88549 (Alexander Tokmakov). - Добавлен запрос
SYSTEM DROP TEXT INDEX CACHES. #90287 (Anton Popov). - По умолчанию включена настройка
enable_shared_storage_snapshot_in_queryдля обеспечения более строгих гарантий согласованности. Это изменение не должно иметь побочных эффектов. #82634 (Alexey Milovidov). - Добавлена настройка
send_profile_events, которая позволяет клиентам уменьшить сетевой трафик, когда события профилирования не используются. #89588 (Kaviraj Kanagaraj). - Добавлена возможность отключать фоновую загрузку соседних сегментов на уровне отдельных запросов. Исправляет #89524. #89668 (tanner-bruce).
- Разрешена операция
FETCH PARTITIONпри наличии повреждённых дисков в реплицированных таблицах MergeTree. #58663 (Duc Canh Le). - Исправлено необработанное исключение при получении схемы таблицы MySQL в движке базы данных MySQL. #69358 (Duc Canh Le).
- Все DDL-запросы
ON CLUSTERтеперь выполняются в контексте исходного пользователя запроса для более корректной проверки прав доступа. #71334 (pufit). - Добавлена поддержка типа
UUIDвParquet, если он представлен какFixedString(16)с логическим типомUUID. #74484 (alekseev-maksim). - Отключить ThreadFuzzer по умолчанию в несерверных исполняемых файлах. #89115 (Raúl Marín).
- Сделать оптимизации плана запроса видимыми для входного подплана коррелированного подзапроса за счёт откладывания его материализации. Часть #79890. #85455 (Dmitry Novik).
- Вы можете наблюдать индикатор выполнения, логи и статистику производительности для запросов
CREATE OR REPLACE TABLEсSELECTв clickhouse-client. Такой запрос больше не будет приводить к истечению времени ожидания, даже еслиSELECTтребует довольно много времени на выполнение. Исправляет #38416. #87247 (Diskein). - Добавлена поддержка типов
JSONиDynamicв хеш-функциях. Исправляет #87734. #87791 (Pavel Kruglov). - Реализованы недостающие части сервера ArrowFlight. #88013 (Vitaly Baranov).
- Добавлены несколько гистограммных метрик для сервера и Keeper для измерения длительностей этапов выполнения запросов Keeper. Для сервера добавлены следующие метрики:
keeper_client_queue_duration_milliseconds,keeper_client_send_duration_milliseconds,keeper_client_roundtrip_duration_milliseconds. Для Keeper добавлены следующие метрики:keeper_server_preprocess_request_duration_milliseconds,keeper_server_process_request_duration_milliseconds,keeper_server_queue_duration_milliseconds,keeper_server_send_duration_milliseconds. #88158 (Miсhael Stetsyuk). - В запрос
EXPLAINдобавлена опцияinput_headersдля добавления входных заголовков к шагам. #88311 (János Benjamin Antal). - Добавлены профильные события для подсчёта количества запросов к S3 и AzureBlobStorage, задержанных троттлерами. Исправлена несогласованность между профильными событиями ThrottlerCount, связанными с дисками и не связанными с ними. Теперь HTTP‑запросы DELETE к AzureBlobStorage не подвергаются троттлингу. #88535 (Sergei Trifonov).
- Кэшировать статистику на уровне таблиц: добавлены два параметра. Настройка MergeTree
refresh_statistics_intervalзадаёт интервал обновления кэша статистики, значение 0 означает, что кэш создаваться не будет. Параметр сессииuse_statistics_cacheопределяет, использовать ли статистику на уровне таблиц в запросе. Иногда нам нужна более точная статистика, поэтому мы можем отключить использование кэша. #88670 (Han Fei). - Исправлена бинарная десериализация
ArrayиMap, чтобы при проверке ограничений размера использовать параметрmax_binary_array_sizeвместоmax_binary_string_size. Это гарантирует применение корректных лимитов при чтении в форматеRowBinary. #88744 (Raufs Dunamalijevs). - Добавлен класс
LockGuardWithStopWatch, который используется в фоновом пуле для выполнения слияний. Если мьютекс удерживается дольше секунды или какому‑то потоку не удаётся получить его в течение секунды, выводится предупреждающее сообщение. Ресурсоёмкий код из деструктораMergeMutateSelectedEntryперенесён в методfinalize, чтобы избежать слишком долгого удержания блокировки в исполнителеMergeTreeBackground. #88898 (Nikita Mikhaylov). - Разрешить автоматическое использование подключаемых регионов AWS для S3, если регион не указан в endpoint. См. также: opt-in AWS regions. #88930 (Andrey Zvonov).
- Теперь в clickhouse-client можно отменить запрос, нажав Ctrl+C во время работы пейджера. Устраняет проблему #80778. #88935 (Grigorii).
- Веб-интерфейс будет отображать столбики в таблице даже при отрицательных значениях. Таким образом, он может отображать двустороннюю столбчатую диаграмму с разными цветами столбиков для отрицательной и положительной сторон. #89016 (Alexey Milovidov).
- Отключите
shared_merge_tree_create_per_replica_metadata_nodes, чтобы сократить объем метаданных, которыеSharedMergeTreeхранит в Keeper. #89036 (Alexander Tokmakov). - Обеспечить, чтобы
S3Queueучитывал серверный параметрdisable_insertion_and_mutation. #89048 (Raúl Marín). - По умолчанию значение
s3_retry_attemptsустановлено равным 500 в версии 25.6, чтобы обеспечить успешное выполнение резервного копирования при репартиционировании S3, когда S3 в течение более 10 минут отвечает ошибками замедления. #89051 (Nikita Mikhaylov). - Параметры
kafka_compression_codecиkafka_compression_levelтеперь можно использовать для задания сжатия продюсеров Kafka в обоих движках Kafka. #89073 (János Benjamin Antal). - Добавлен новый столбец
statisticsвsystem.columns, который указывает типы статистики, построенных для этой таблицы. Если тип статистики создаётся автоматически, к нему в суффиксе добавляется пометка (auto). #89086 (Han Fei). - Улучшено сообщение об ошибке при передаче обобщённой подстановки вместо имени кластера в табличную функцию
*Cluster. #89093 (Konstantin Bogdanov). - YTsaurus: разрешено использование replicated_table как источника данных. #89107 (MikhailBurdukov).
- Запросы, начинающиеся с пробельных символов, больше не сохраняются в историю CLI. #89116 (Konstantin Bogdanov).
- Добавлена поддержка массива строк в качестве аргумента функций
hasAnyTokensиhasAllTokens. #89124 (Elmi Ahmadov). - Изменён способ хранения метаданных в памяти для дисков типа plain-rewritable, что исправляет множество ошибок, связанных с вложенностью каталогов и аналогичными ситуациями. #89125 (Mikhail Artemenko).
- Подзапросы, которые используются внутри выражений IN при запросе к таблице Iceberg, будут корректно предварительно вычисляться перед анализом отсечения партиций. #89177 (Daniil Ivanik).
- Включена настройка
create_table_empty_primary_key_by_defaultпо умолчанию. Это повышает удобство использования. #89333 (Alexey Milovidov). - Исправлен некорректный код в движке базы данных
Backup, из-за которого мог быть сгенерирован неверный запрос при использованииSHOW CREATE DATABASEили при запросеengine_fullизsystem.databases. Закрывает #89477. #89341 (Alexey Milovidov). - В предыдущих версиях настройка
create_table_empty_primary_key_by_defaultне работала, если вы не указывали движок таблицы в запросе CREATE TABLE. #89342 (Alexey Milovidov). - Обновить
chdigдо v25.11.1 — содержит значительные улучшения логирования и ряд других доработок (примечания к выпуску 25.11). #89957 (Azat Khuzhin). (примечания к выпуску 25.10). #89452 (Azat Khuzhin). - Ресайзер текстового поля запроса в веб-интерфейсе сделан во всю ширину, что делает работу с ним немного удобнее. Кроме того, встроенный в браузер ресайзер был недоступен в Safari на iPad, а после этого изменения вы хотя бы можете перетаскивать нижнюю границу текстового поля, если знаете об этой возможности. #89457 (Alexey Milovidov).
- Улучшено отслеживание памяти при формировании результата хеш-соединений. Ранее временные выделения памяти при формировании результата соединения отслеживались некорректно, что могло приводить к превышению лимита памяти. #89560 (Azat Khuzhin).
- Асинхронный серверный лог: более ранний сброс и увеличенный размер очереди по умолчанию. #89597 (Raúl Marín).
- Исправлены некорректные значения
FilesystemCacheBytes(и других) вsystem.asynchronous_metrics. ЗапросыSYSTEMк файловым кэшем выполняются только один раз. Добавлено атомарное представление для кэшей, указывающее на тот же путь вsystem.filesystem_caches. #89640 (Azat Khuzhin). - Уточнены описания некоторых столбцов в
system.view_refreshes. #89701 (Tuan Pham Anh). - Кэшировать учетные данные S3 при взаимодействии с конечной точкой STS для их повторного использования в разных вызовах функций. Количество закэшированных учетных данных можно контролировать с помощью
s3_credentials_provider_max_cache_size. #89734 (Antonio Andelic). - Исправлено проталкивание runtime-фильтра при наличии нескольких нижележащих шагов выражения. #89741 (Alexander Gololobov).
- Если объём оперативной памяти системы меньше 5 ГБ, по умолчанию не выполнять mlock для исполняемого файла. #89751 (Alexey Milovidov).
- Подсказки типов в веб-интерфейсе больше не выходят за границы заголовка таблицы. Также исправлено отображение всплывающих подсказок — теперь они не скрываются за заголовком таблицы. #89753 (Alexey Milovidov).
- Отображать свойства таблиц в веб-интерфейсе. При нажатии на число строк или байт открывается запрос к
system.tables. При нажатии на движок таблицы выполняетсяSHOW TABLES. #89771 (Alexey Milovidov). - Добавлена поддержка
non_replicated_deduplication_windowдля таблиц с диском, который не поддерживает дозапись (append). Исправляет #87281. #89796 (Tuan Pham Anh). - Добавлена возможность указывать список таблиц для сброса в команде
SYSTEM FLUSH ASYNC INSERT QUEUE. #89915 (Sema Checherinda). - Идентификаторы блоков дедупликации сохраняются в
system.part_log. #89928 (Sema Checherinda). - Изменено значение по умолчанию настройки файлового кэша
keep_free_space_remove_batchс 10 до 100, так как это оптимальнее. #90030 (Kseniia Sumarokova). - Введён тип слияния TTL DROP; после таких слияний расписание следующего удаления по TTL больше не обновляется. #90077 (Mikhail Artemenko).
- Использовать меньший лимит числа узлов в запросе RemoveRecursive Keeper при очистке S3Queue. #90201 (Antonio Andelic).
- Сделать так, чтобы запрос
SYSTEM FLUSH LOGSожидал создание таблицы, даже если журналы пусты. #89408 (János Benjamin Antal). - Исправлена некорректная величина
rows_before_limit_at_least, возникающая, когда в агрегирующей операции с распределённым слиянием задействовано несколько удалённых шардов или присутствуют подзапросы типа IN. Это исправляет #63280. #63511 (Amos Bird). - Исправлено появление сообщения
0 rows in setпосле запросаINSERT INTO ... SELECT. Закрывает #47800. #79462 (Engel Danila).
Исправление ошибки (некорректная работа, заметная пользователю, в официальном стабильном релизе)
- Исправлена работа
multiIfс константными аргументами и укороченным вычислением. Закрывает #72714. #84546 (Yakov Olkhovskiy). - Исправлена логическая ошибка при выполнении выбора данных из таблицы с ограничением, использующим подзапрос. Устраняет #84190. #85575 (Pervakov Grigorii).
- Исправлена ошибка для специальных запросов, использующих URI с вопросительными знаками. #85663 (Yarik Briukhovetskyi).
- Исправлено периодическое отсутствие некоторых столбцов в выводе
EXPLAIN indexes = 1. Решает #86696. #87083 (Michael Kolupaev). - Исправлена возможная ошибка «Cannot add subcolumn with parallel replicas». Закрывает #84888. #87514 (Pavel Kruglov).
- В parquet writer добавлен вывод строки
created_byв корректном формате, напримерClickHouse version 25.10.1 (build 5b1dfb14925db8901a4e9202cd5d63c11ecfbb9f)вместоClickHouse v25.9.1.1-testing. Исправлена совместимость parquet reader с файлами некорректного формата, записанными старой версией parquet-mr. #87735 (Michael Kolupaev). - Исправлено вычисление phi-squared, приводившее к неверным результатам в
cramersV,cramersVBiasCorrected,theilsUиcontingency. #87831 (Nihal Z. Miaji). - Исправлено чтение массивов в JSON, одновременно содержащих значения типов Float и Bool. Ранее вставка таких данных приводила к исключению. #88008 (Pavel Kruglov).
- Использование
shared_ptrдляQueryStateвTCPHandlerдля обнаружения, если состояние стало невалидным, вsetProgressCallback,setFileProgressCallbackиsetBlockMarshallingCallback. #88201 (Tuan Pham Anh). - Исправлена логическая ошибка при перестановке операций CROSS JOIN, когда query_plan_optimize_join_order_limit > 1. Закрыта #89409. #88286 (Vladimir Cherkasov).
- Исправление #88426: 1. Запретить явное задание столбцов в таблицах типа Alias, столбцы автоматически подгружаются из целевой таблицы. Это гарантирует, что Alias всегда соответствует схеме целевой таблицы. 2. Проксировать больше методов из IStorage. #88552 (Kai Zhu).
- После восстановления реплика базы данных Replicated могла надолго «застрять», постоянно выводя сообщения вида
Failed to marked query-0004647339 as finished (finished=No node, synced=No node), теперь это исправлено. #88671 (Alexander Tokmakov). - Исправлена возможная ошибка "Context has expired" при использовании нового анализатора запросов с подзапросами. #88694 (Azat Khuzhin).
- Исправлена ошибка сегментации в считывателе Parquet, возникавшая, когда input_format_parquet_local_file_min_bytes_for_seek установлен в 0. Исправляет #78456. #88784 (Animesh).
- Исправлен некорректный результат min(PK)/max(PK) при обратном порядке сортировки PK. Это исправляет #83619. #88796 (Amos Bird).
- Исправлена передача ограничений на размер через настройки max_table_size_to_drop и max_partition_size_to_drop при выполнении операции DROP для внутренних таблиц. #88812 (Nikolay Degterinsky).
- Исправлено поведение функции
top_k, чтобы она учитывала параметр threshold при вызове с одним аргументом. Закрывает #88757. #88867 (Manuel). - Источники, использующие конечные точки ArrowFlight и требующие SSL‑соединения (например, за AWS ALB), теперь могут корректно запрашивать конкретный набор данных. #88868 (alex-shchetkov).
- Исправлена обработка нематериализованных Nested(Tuple(...)), добавленных через ALTER. Исправляет #83133. #88879 (Azat Khuzhin).
- Исправлена ошибка в функции
reverseUTF8. В предыдущих версиях она ошибочно обращала порядок байт у четырёхбайтовых кодовых точек UTF-8. Это закрывает #88913. #88914 (Alexey Milovidov). - Исправлен протокол icebergS3Cluster. Добавлена поддержка эволюции схемы, позиционных удалений и удалений по равенству в функции icebergCluster. Устранена ошибка #88287. #88919 (Yang Jiang).
- Отключена проекция parallel_replicas_support для запросов с параллельными репликами по распределённым таблицам. Закрывает #88899. #88922 (zoomxi).
- Передача контекста во внутренних приведениях типов. Исправлены несколько проблем, из-за которых настройки приведения типов не передавались. Закрывает #88873. Закрывает #78025. #88929 (Manuel).
- Исправлено определение формата файла по шаблонам (globs) в функции file(). Исправлена ошибка #88920. #88947 (Vitaly Baranov).
- Не выполнять проверку доступа
SET DEFINER <current_user>:definerпри создании представления с SQL SECURITY DEFINER. #88968 (pufit). - Исправлена ошибка
LOGICAL_ERRORвL2DistanceTransposed(vec1, vec2, p), из-за которой оптимизация частичного чтенияQBitнекорректно удалялаNullableиз возвращаемого типа, когдаpбылNullable. #88974 (Raufs Dunamalijevs). - Исправлено падение при использовании неизвестного типа каталога. Исправляет #88819. #88987 (scanhex12).
- Закрывает #88081. #88988 (scanhex12).
- Исправлено снижение производительности при анализе пропускающих индексов. #89004 (Anton Popov).
- Устранена ошибка ACCESS_ENTITY_NOT_FOUND при попытке выполнить clusterAllReplicas от имени пользователя с несуществующей ролью. Устраняет #87670. #89068 (pufit).
- Исправлена обработка разреженных столбцов с помощью ограничения CHECK. Закрывает #88637. #89076 (Eduard Karacharov).
- Исправлен некорректный подсчёт количества строк при заполнении виртуальных столбцов в MergeTreeReaderTextIndex, приводивший к сбою с LOGICAL_ERROR. #89095 (Peng Jian).
- Предотвращены утечки счетчика слияний по TTL при возникновении исключений во время подготовки слияния. Устраняет проблему #89019. #89127 (save-my-heart).
- Исправлен расчёт размера буфера, необходимого для операций кодирования и декодирования в base32/base58. #89133 (Antonio Andelic).
- Исправлено использование освобождённой памяти (use-after-free) в движке
Distributedиз-за гонки состояний между остановкой и фоновыми операциямиINSERT. Решает проблему #88640. #89136 (Azat Khuzhin). - Предотвращены возможные гонки данных из‑за изменяемых исключений при разборе Parquet. Исправляет #88385. #89174 (Azat Khuzhin).
- Обновляемое материализованное представление: исправлен редкий сбой сервера, возникавший при полном удалении исходной таблицы во время обновления. #89203 (Michael Kolupaev).
- Сбрасывать буферы при отправке ошибки в середине сжатого потока в HTTP-интерфейсе. #89256 (Alexander Tokmakov).
- Исправлена ошибка, из-за которой правила маскирования запросов некорректно применялись к DDL-операторам. #89272 (MikhailBurdukov).
- Исправлено неверное количество строк при заполнении виртуальных столбцов в MergeTreeReaderTextIndex, что приводило к аварийному завершению с LOGICAL_ERROR. Переоткрыта задача #89095. #89303 (Jimmy Aguilar Mena).
- Исправлена ошибка LOGICAL_ERROR в Statistics countmin: не поддерживался тип данных estimate LowCardinality(Nullable(String)). #89343 (Han Fei).
- Возможен сбой или неопределённое поведение в операторе IN, когда типы столбцов первичного ключа отличаются от типов столбцов в правой части оператора IN. Пример: SELECT string_column, int_column FROM test_table WHERE (string_column, int_column) IN (SELECT '5', 'not a number'). Проявляется, если выбирается много строк и среди них есть строки со значениями несовместимых типов. #89367 (Ilya Golshtein).
- Исправлено усечение аргументов функции
countIf(*). Закрывает #89372. #89373 (Manuel). - Предотвращена потеря несжатых контрольных сумм для статистики по мутациям. #89381 (Azat Khuzhin).
- Исправлена LOGICAL_ERROR в L2DistanceTransposed(vec1, vec2, p), из-за которой при оптимизации частичного чтения QBit из типа возвращаемого значения ошибочно удалялся Nullable, когда p имел тип LowCardinality(Nullable(T)). Устраняет #88362. #89397 (Raufs Dunamalijevs).
- Исправлена загрузка таблиц с некорректной разреженной сериализацией самого
tuple, записанного старыми версиями ClickHouse. #89405 (Azat Khuzhin). - Исправлена некорректная обработка слияний частей, очищенных по TTL, с непустыми проекциями при использовании
deduplicate_merge_projection_mode='ignore'. Решает #89430. #89458 (Amos Bird). - Исправлена логическая ошибка в соединении
full_sorting_mergeс дублирующимися столбцами. Устраняет #86957. #89495 (Vladimir Cherkasov). - Исправлено чтение журнала изменений при запуске Keeper в случае, если changelog не был корректно переименован при ротации. #89496 (Antonio Andelic).
- Исправлены некорректные результаты JOIN при использовании условий OR с уникальными ключами правой таблицы. Решает проблему #89391. #89512 (Vladimir Cherkasov).
- Исправлена возможная ошибка "Context has expired" при использовании анализатора и выражения PK IN (подзапрос) (v2). Исправляет #89433. #89527 (Azat Khuzhin).
- Исправлена репликация MaterializedPostgreSQL для таблиц с именами столбцов, заданными в верхнем регистре. Решает проблему #72363. #89530 (Danylo Osipchuk).
- Исправлена ошибка, приводившая к падению в случае, когда состояние агрегатной функции содержит сериализованное значение столбца типа LowCardinality(String). #89550 (Pavel Kruglov).
- Исправлен сбой при использовании
ARRAY JOINна правой стороне JOIN при включённой настройкеenable_lazy_columns_replication. #89551 (Pavel Kruglov). - Устранена логическая ошибка в query_plan_convert_join_to_in. Устраняет #89066. #89554 (Vladimir Cherkasov).
- Исправлено исключение в оценщике статистики при попытке оценить условия с несовпадающими типами столбца и константы, которые нельзя преобразовать. #89596 (Han Fei).
- Добавлять runtime-фильтры только для поддерживаемых алгоритмов соединения, то есть хеш-соединений. Фильтр может быть создан только тогда, когда алгоритм соединения сначала полностью читает правую сторону, а затем левую, но, например, FullSortingMergeJoin читает обе стороны одновременно. Исправляет #89220. #89652 (Alexander Gololobov).
- Исправлено конкурентное выполнение функций
hasAnyTokens,hasAllTokensиtokensс токенизаторомsparseGrams. Устраняет проблему #89605. #89665 (Elmi Ahmadov). - Исправлена логическая ошибка, приводившая к сбоям при использовании runtime-фильтра JOIN в некоторых случаях. Исправляет #89062. #89666 (Alexander Gololobov).
- Исправлена возможная логическая ошибка при выполнении ARRAY JOIN над столбцом Map при включённом
enable_lazy_columns_replication. Закрывает #89705. #89717 (Pavel Kruglov). - Исправлена ошибка, вызывавшая сбой при чтении с удалённого сервера после отключения соединения в удалённых запросах при их отмене. Исправляет #89468. #89740 (Azat Khuzhin).
- Исправлена гонка при чтении индекса проекций. Устраняет #89497. #89762 (Peng Jian).
- Исправлена ошибка при чтении проекционного индекса, которая могла приводить к состояниям гонки. Решает проблему #89497. #89775 (Amos Bird).
- Исправлена обработка табличной функции Paimon для таблиц без партиций. Устраняет проблему #89690. #89793 (JIaQi).
- Исправлена возможная логическая ошибка при чтении путей и их подстолбцов в расширенной общей сериализации данных JSON. Закрывает #89805. #89819 (Pavel Kruglov).
- Исправлено возможное переполнение стека при бинарной десериализации типов данных. Закрывает #88710. #89822 (Pavel Kruglov).
- Исправлена логическая ошибка при использовании пустого кортежа в функции
IN. Закрывает #88343. #89850 (Nihал Z. Miaji). - Удалены инъективные функции из
GROUP BYв старом анализаторе вне зависимости от настройкиoptimize_injective_functions_in_group_byдля обеспечения совместимости. Исправлена проблема #89854. #89870 (Raufs Dunamalijevs). - Если объединение было прервано, например, из‑за ограничения по памяти, фоновый исполнитель merge mutate вызовет
cancelдля задачи объединения без блокировки, но в этом случае частично созданная результирующая часть не будет удалена (поскольку она не была завершена и на этом этапе ещё не была видна). После этого задача объединения будет уничтожена, что приведёт к уничтожению результирующей части. Это откатит транзакцию на диске и приведёт к удалению данных из S3. В итоге эта очистка мусора была выполнена под блокировкой фонового исполнителя merge mutate. #89875 (Mikhail Artemenko). - Исправлена логическая ошибка при обработке пустого кортежа в функциях
reverseиCAST. Закрывает #89137. #89908 (Nihал Z. Miaji). - Теперь ClickHouse по умолчанию будет показывать базу данных каталога Data Lake в результате запроса
SHOW DATABASES. #89914 (alesapin). - Исправлено использование нативного копирования на GCS для создания резервных копий. Из-за некорректного клонирования клиента нативное копирование GCS всегда завершалось с ошибкой, и поэтому применялся менее оптимальный подход с ручным чтением и записью данных. #89923 (Antonio Andelic).
- Исправлен расчёт размера буфера в base32Encode. Вычисление base32Encode для столбца строк длиной менее 5 символов могло приводить к сбоям. Устраняет проблему #89911. #89929 (Antonio Andelic).
- Исправлено некорректное экранирование для запросов
SHOW COLUMNSиSHOW FUNCTIONS. #89942 (alesapin). - Исправлена валидация URL в движке MongoDB для случаев, когда имя пользователя содержит символ '@'. Ранее такие имена пользователей вызывали ошибку из-за некорректного кодирования. #89970 (Kai Zhu).
- Бэкпортировано в #90592: исправлено возможное аварийное завершение при выполнении удалённого запроса с
ARRAY JOINвнутриINпри включённой настройкеenable_lazy_columns_replication. Исправляет #90361. #89997 (Pavel Kruglov). - Бэкпортировано в #90448: исправлена интерпретация некорректных значений DateTime64 при разборе строк в текстовых форматах в ряде случаев. Закрывает #89368. #90013 (Pavel Kruglov).
- Исправлена логическая ошибка, вызванная пустым столбцом типа Tuple в
BSONEachRowиMsgPack. Закрывает #89814. Закрывает #71536. #90018 (Nihal Z. Miaji). - Бэкпортировано в #90457: выполнять проверку размера при десериализации данных из агрегатных состояний и других источников. #90031 (Raúl Marín).
- Исправлена потенциальная ошибка 'Invalid number of rows in Chunk' при выполнении JOIN с повторяющимися столбцами. Исправляет #89411. #90053 (Vladimir Cherkasov).
- Бэкпортировано в #90588: исправлена возможная ошибка
Column with Array type is not represented by ColumnArray column: Replicatedпри вставке с использованиемARRAY JOINи при включённой настройкеenable_lazy_columns_replication. #90066 (Pavel Kruglov). - Разрешены файлы в
user_files, имена которых начинаются с точки. Закрывает #89662. #90079 (Raúl Marín). - Бэкпортировано в #90647: исправлены логическая ошибка и ошибка вычисления остатка от деления (modulo) в системной таблице
numbersпри использовании большого шага. Закрывает #83398. #90123 (Nihал Z. Miaji). - Исправлено переполнение целого числа при разборе аргументов словаря. Закрывает #78506. #90171 (Raúl Marín).
- Бэкпортировано в #90468: Исправлена несовместимость с Hive-партиционированием, препятствовавшая корректному обновлению до версии 25.8 (исправляет ошибку
All hive partitioning columns must be present in the schemaво время обновления). #90202 (Kseniia Sumarokova). - Исправлены возможные некорректные результаты запросов после выполнения легковесных обновлений в запросах
SELECTпри включённом кэше условий запроса. Исправлена проблема #90176. Исправлена проблема #90054. #90204 (Anton Popov). - Исправлен сбой в StorageDistributed при разборе некорректных имён каталогов шардов. #90243 (Aleksandr Musorin).
- Реализована обработка неявного преобразования строк в целые числа и логические значения в
LogicalExpressionOptimizerPass. Исправляет #89803. #90245 (Elmi Ahmadov). - Исправлено некорректное форматирование некоторых skip-индексов в определении таблицы, приводившее к ошибке
METADATA_MISMATCHи мешавшее созданию новых реплик в реплицируемой базе данных. #90251 (Nikolay Degterinsky). - Бэкпортировано в #90381: исправлено несоответствие количества строк в MergeTreeReaderIndex, когда part содержит меньше строк, чем index_granularity. Устраняет #89691. #90254 (Peng Jian).
- Бэкпортировано в #90608: Исправлена ошибка при чтении подстолбцов из JSON в компактных частях, которая могла приводить к ошибке
CANNOT_READ_ALL_DATA. Закрывает #90264. #90302 (Pavel Kruglov). - Исправлена проблема, из-за которой функции
trim,ltrim,rtrimне работали с двумя аргументами. Закрывает #90170. #90305 (Nihал Z. Miaji). - Бэкпортировано в #90625: исправлена возможная логическая ошибка в PREWHERE при обращении к несуществующему JSON-пути при index_granularity_bytes=0. Исправляет #86924. #90375 (Pavel Kruglov).
- Бэкпортировано в #90484: исправлена ошибка в
L2DistanceTransposed, приводившая к сбоям при выходе значения аргумента precision за допустимый диапазон. Закрывает #90401. #90405 (Raufs Dunamalijevs). - Бэкпортировано в #90577: исправлены некорректные вычисления расстояния в
L2DistanceTransposedпри использовании массивов опорных векторов (по умолчаниюArray(Float64)) со столбцамиQBitс элементами типов, отличных отFloat64(Float32,BFloat16). Функция теперь автоматически приводит тип опорного вектора к типу элементаQBit. Закрывает #89976. #90485 (Raufs Dunamalijevs). - Бэкпортировано в #90601: исправлена логическая ошибка, возникающая в редком случае в функции
equals. Закрывает #88142. #90557 (Nihal Z. Miaji). - Исправлен
CoalescingMergeTreeдля типовTuple. #88828 (scanhex12).
Улучшения сборки/тестирования/упаковки
- Исправлена ошибка Connection refused при запуске ClickHouse в Docker с initdb SQL-скриптами и переопределённым TCP-портом. #88042 (Grigorii).
- Экспериментально добавлена поддержка e2k как новой платформы для ClickHouse. #90159 (Ramil Sattarov).
- Убрано оставшееся использование
FindPackageв CMake. Сборка не должна зависеть от системных пакетов. #89380 (Alexey Milovidov). - Включено использование кэша компилятора при сборке на этапе конфигурации CMake (например, для
protoc). #89613 (Konstantin Bogdanov). - Переведена сборка на использование sysroot FreeBSD 13.4. #89617 (Konstantin Bogdanov).
Релиз ClickHouse 25.10, 2025-10-31
Несовместимое изменение
- Изменена настройка по умолчанию
schema_inference_make_columns_nullable: теперь она учитывает признакNullableдля столбцов по метаданным Parquet/ORC/Arrow вместо того, чтобы делать все столбцы Nullable. Для текстовых форматов изменений нет. #71499 (Michael Kolupaev). - Кэш результатов запросов будет игнорировать настройку
log_comment, так что изменение толькоlog_commentв запросе больше не будет приводить к промаху по кэшу. Существует небольшая вероятность, что пользователи намеренно сегментировали свой кэш, варьируяlog_comment. Это изменение меняет такое поведение и, следовательно, не является обратно совместимым. Пожалуйста, используйте настройкуquery_cache_tagдля этой цели. #79878 (filimonov). - В предыдущих версиях запросы с табличными функциями, названными так же, как функции реализации операторов, форматировались непоследовательно. Закрывает #81601. Закрывает #81977. Закрывает #82834. Закрывает #82835. Запросы EXPLAIN SYNTAX больше не всегда будут форматировать операторы — новое поведение лучше отражает цель объяснения синтаксиса.
clickhouse-format,formatQueryи подобные инструменты не будут форматировать функции как операторы, если в запросе они используются в функциональной форме. #82825 (Alexey Milovidov). - Запрещено использовать тип
Dynamicв ключахJOIN. Это может приводить к неожиданным результатам при сравнении значения типаDynamicсо значением типа, отличного отDynamic. Лучше приводить столбецDynamicк требуемому типу. #86358 (Pavel Kruglov). - Опция сервера
storage_metadata_write_full_object_keyпо умолчанию включена, сейчас её нельзя отключить. Это обратно совместимое изменение. Приводится только для вашего сведения. Это изменение совместимо по направлению вперёд только с релизами 25.x. Это означает, что вы сможете выполнить откат только до любого релиза 25.x в случае, если потребуется вернуть новый релиз. #87335 (Sema Checherinda). - Уменьшите значение
replicated_deduplication_window_secondsс одной недели до одного часа, чтобы сократить число znode в ZooKeeper при низкой скорости вставки. #87414 (Sema Checherinda). - Переименована настройка
query_plan_use_new_logical_join_stepвquery_plan_use_logical_join_step. #87679 (Vladimir Cherkasov). - Новый синтаксис позволяет более гибко задавать параметр tokenizer для текстового индекса. #87997 (Elmi Ahmadov).
- Функции
searchAnyиsearchAllпереименованы вhasAnyTokensиhasAllTokensдля лучшей согласованности с существующей функциейhasToken. #88109 (Robert Schulze). - Удалён параметр
cache_hits_thresholdиз кеша файловой системы. Этот параметр был добавлен внешним участником до появления политики кеширования SLRU, и теперь, когда она есть, нет смысла поддерживать обе. #88344 (Kseniia Sumarokova). - Два небольших изменения в работе настроек
min_free_disk_ratio_to_perform_insertиmin_free_disk_bytes_to_perform_insert: - использовать незарезервированные, а не доступные байты для определения, должна ли операция вставки быть отклонена. Это, вероятно, не критично, если резервы для фоновых слияний и мутаций малы по сравнению с настроенными порогами, но так считается более корректным. - Не применять эти настройки к системным таблицам. Обоснование в том, что мы по‑прежнему хотим, чтобы такие таблицы, какquery_log, обновлялись. Это сильно помогает при отладке. Данные, записываемые в системные таблицы, обычно невелики по сравнению с основными данными, поэтому они смогут продолжать работу значительно дольше при разумном порогеmin_free_disk_ratio_to_perform_insert. #88468 (c-end). - Включите асинхронный режим для внутренней репликации Keeper. Keeper сохранит прежнее поведение с возможным улучшением производительности. Если вы обновляетесь с версии старее 23.9, вам нужно сначала обновиться до 23.9+ и затем до 25.10+. Вы также можете установить
keeper_server.coordination_settings.async_replicationв значение 0 перед обновлением и включить его после завершения обновления. #88515 (Antonio Andelic).
Новая функция
- Добавлена поддержка отрицательных значений для
LIMITиOFFSET. Закрывает #28913. #88411 (Nihal Z. Miaji). - Движок
Aliasсоздаёт прокси для другой таблицы. Все операции чтения и записи перенаправляются в целевую таблицу, при этом псевдоним сам по себе не хранит данные и только содержит ссылку на целевую таблицу. #87965 (Kai Zhu). - Полная поддержка оператора
IS NOT DISTINCT FROM(<=>). #88155 (simonmichal). - Добавлена возможность автоматически создавать статистику по всем подходящим столбцам в таблицах
MergeTree. Добавлена настройка на уровне таблицыauto_statistics_types, которая хранит через запятую список типов статистики, которые будут создаваться (например,auto_statistics_types = 'minmax, uniq, countmin'). #87241 (Anton Popov). - Новый индекс блум-фильтра для текстовых данных,
sparse_gram. #79985 (scanhex12). - Новая функция
convдля преобразования чисел между системами счисления, которая на данный момент поддерживает основания систем счисления от2до36. #83058 (hp). - Добавлена поддержка синтаксиса
LIMIT BY ALL. АналогичноGROUP BY ALLиORDER BY ALL,LIMIT BY ALLавтоматически расширяется до использования всех неагрегатных выражений из предложения SELECT в качестве ключей LIMIT BY. Например,SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALLэквивалентенSELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, name. Эта возможность упрощает запросы, когда требуется ограничить выборку по всем выбранным неагрегатным столбцам без их явного перечисления. Закрывает #59152. #84079 (Surya Kant Ranjan). - Добавлена поддержка выполнения запросов к Apache Paimon из ClickHouse. Эта интеграция позволяет пользователям ClickHouse напрямую работать с хранилищем Paimon в формате data lake. #84423 (JIaQi).
- Добавлена агрегатная функция
studentTTestOneSample. #85436 (Dylan). - Агрегатная функция
quantilePrometheusHistogram, которая принимает в качестве аргументов верхние границы и накопленные значения бакетов гистограммы и выполняет линейную интерполяцию между верхней и нижней границами того бакета, в котором находится позиция квантиля. Ведёт себя аналогично функции PromQLhistogram_quantileдля классических гистограмм. #86294 (Stephen Chi). - Новая системная таблица для файлов метаданных Delta Lake. #87263 (scanhex12).
- Добавлена команда
ALTER TABLE REWRITE PARTS— переписывает части таблицы заново, с учётом всех новых настроек (поскольку некоторые из них, напримерuse_const_adaptive_granularity, применяются только к новым частям). #87774 (Azat Khuzhin). - Добавлена команда
SYSTEM RECONNECT ZOOKEEPERдля принудительного разрыва соединения и повторного подключения к Zookeeper (https://github.com/ClickHouse/ClickHouse/issues/87317). #87318 (Pradeep Chhetri). - Ограничено количество именованных коллекций посредством настроек
max_named_collection_num_to_warnиmax_named_collection_num_to_throw. Добавлена новая метрикаNamedCollectionи ошибкаTOO_MANY_NAMED_COLLECTIONS. #87343 (Pablo Marcos). - Добавлены оптимизированные регистронезависимые версии функций
startsWithиendsWith:startsWithCaseInsensitive,endsWithCaseInsensitive,startsWithCaseInsensitiveUTF8иendsWithCaseInsensitiveUTF8. #87374 (Guang Zhao). - Добавляет возможность задавать определения
WORKLOADиRESOURCEв SQL через раздел конфигурации сервера "resources_and_workloads". #87430 (Sergei Trifonov). - Добавлена новая настройка таблицы
min_level_for_wide_part, которая позволяет задать минимальный уровень части, начиная с которого она будет создаваться как wide-часть. #88179 (Christoph Wurm). - Добавлены рекурсивные варианты команд
cp-cprиmv-mvrв клиенте Keeper. #88570 (Mikhail Artemenko). - Добавлена сеансовая настройка для исключения из материализации списка пропускающих индексов при вставках (
exclude_materialize_skip_indexes_on_insert). Добавлена настройка таблицы MergeTree для исключения из материализации списка пропускающих индексов при слиянии (exclude_materialize_skip_indexes_on_merge). #87252 (George Larionov).
Экспериментальная возможность
- Реализован тип данных
QBit, который хранит векторы в побитово-расслоённом формате, и функцияL2DistanceTransposed, позволяющая выполнять приближённый векторный поиск, в котором соотношение точности и скорости управляется параметром. #87922 (Raufs Dunamalijevs). - Функции
searchAllиsearchAnyтеперь могут работать со столбцами, не содержащими текстовых данных. В таких случаях используется токенайзер по умолчанию. #87722 (Jimmy Aguilar Mena).
Повышение производительности
- Реализована ленивая репликация столбцов в JOIN и ARRAY JOIN. Избегается преобразование специальных представлений столбцов, таких как Sparse и Replicated, в полные столбцы в некоторых выходных форматах. Это предотвращает ненужное копирование данных в памяти. #88752 (Pavel Kruglov).
- Добавлена возможность необязательной сериализации подстолбца
.sizeдля строковых столбцов верхнего уровня в таблицах MergeTree для улучшения сжатия и обеспечения эффективного доступа к подстолбцам. Введены новые настройки MergeTree для управления версией сериализации и оптимизации выражений с пустыми строками. #82850 (Amos Bird). - Поддержка упорядоченного чтения для Iceberg. #88454 (scanhex12).
- Ускорено выполнение некоторых запросов с операцией JOIN за счёт построения bloom-фильтра по правому поддереву во время выполнения и передачи этого фильтра в операцию сканирования в левом поддереве. Это может быть полезно для запросов вида
SELECT avg(o_totalprice) FROM orders, customer, nation WHERE c_custkey = o_custkey AND c_nationkey=n_nationkey AND n_name = 'FRANCE'. #84772 (Alexander Gololobov). - Повышена производительность запросов за счет рефакторинга порядка выполнения и интеграции Query Condition Cache (QCC) с анализом индексов. Фильтрация с помощью QCC теперь выполняется до анализа по первичному ключу и skip-индексам, что сокращает лишние вычисления по индексам. Анализ индексов был расширен для поддержки нескольких диапазонных фильтров, а его результаты фильтрации теперь сохраняются обратно в QCC. Это существенно ускоряет запросы, в которых анализ индексов доминирует во времени выполнения — особенно те, что опираются на skip-индексы (например, векторные или инвертированные индексы). #82380 (Amos Bird).
- Серия микрооптимизаций для ускорения небольших запросов. #83096 (Raúl Marín).
- Добавлено сжатие логов и событий профилирования в нативном протоколе. На кластерах со 100+ репликами несжатые события профилирования создают трафик 1–10 МБ/с, и индикатор выполнения работает медленно при медленном подключении к интернету. Это исправляет #82533. #83586 (Alexey Milovidov).
- Улучшена производительность поиска по строкам с учётом регистра (для операций, таких как фильтрация, например
WHERE URL LIKE '%google%') за счёт использования библиотеки StringZilla, применяющей SIMD-инструкции процессора, когда они доступны. #84161 (Raúl Marín). - Сокращено количество операций выделения и копирования памяти при выполнении запроса
SELECTс модификаторомFINALиз таблицы AggregatingMergeTree, если в таблице есть столбцы типаSimpleAggregateFunction(anyLast). #84428 (Duc Canh Le). - Реализует логику проталкивания дизъюнктивных предикатов JOIN. Пример: в TPC-H Q7 для условия над двумя таблицами n1 и n2 вида
(n1.n_name = 'FRANCE' AND n2.n_name = 'GERMANY') OR (n1.n_name = 'GERMANY' AND n2.n_name = 'FRANCE')мы извлекаем отдельные частичные фильтры для каждой таблицы:n1.n_name = 'FRANCE' OR n1.n_name = 'GERMANY'для n1 иn2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE'для n2. #84735 (Yarik Briukhovetskyi). - Повышает производительность операций
LIKEс префиксом или суффиксом за счёт использования новой настройки по умолчаниюoptimize_rewrite_like_perfect_affix. #85920 (Guang Zhao). - Исправлено снижение производительности, вызванное большим сериализованным ключом при группировке по нескольким строковым и числовым столбцам. Это продолжение #83884. #85924 (李扬).
- Добавлена новая настройка
joined_block_split_single_rowдля снижения потребления памяти при хеш-соединениях с большим числом совпадений на ключ. Она позволяет разбивать результаты хеш-соединения на блоки даже внутри множества совпадений для одной строки левой таблицы, что особенно полезно, когда одна строка из левой таблицы сопоставляется с тысячами или миллионами строк из правой таблицы. Ранее все совпадения должны были материализоваться в памяти одновременно. Это снижает пиковое потребление памяти, но может увеличить нагрузку на CPU. #87913 (Vladimir Cherkasov). - Улучшения SharedMutex (улучшена производительность при большом числе параллельных запросов). #87491 (Raúl Marín).
- Улучшена производительность построения текстового индекса для документов, содержащих в основном редкие токены. #87546 (Anton Popov).
- Ускорена работа деструктора
Fieldв типичном случае (повышена производительность при большом количестве небольших запросов). #87631 (Raúl Marín). - Пропуск перерасчёта статистики хеш-таблиц при оптимизации JOIN (повышает производительность всех запросов с JOIN). Добавлены новые профильные события
JoinOptimizeMicrosecondsиQueryPlanOptimizeMicroseconds. #87683 (Vladimir Cherkasov). - Включено сохранение меток в кэше и исключён прямой ввод-вывод (direct I/O) для ридера MergeTreeLazy. Это повышает производительность запросов с ORDER BY и небольшим LIMIT. #87989 (Nikita Taranov).
- Запрос SELECT с оператором
FINALпо таблицеReplacingMergeTreeс колонкойis_deletedтеперь выполняется быстрее за счёт улучшенной параллелизации на базе двух существующих оптимизаций: 1. оптимизацияdo_not_merge_across_partitions_select_finalдля разделов (partitions) таблицы, которые содержат только одну часть (part); 2. разделение остальных выбранных диапазонов таблицы на пересекающиеся / непересекающиеся (intersecting / non-intersecting), при этом через преобразование финального слияния (FINAL) должны проходить только пересекающиеся диапазоны. #88090 (Shankar Iyer). - Уменьшено влияние неиспользования fail points (штатного пути выполнения кода, когда отладка не активна). #88196 (Raúl Marín).
- Избегайте полного сканирования
system.tablesпри фильтрации поuuid(может быть полезно, если у вас есть только UUID из логов или пути в ZooKeeper). #88379 (Azat Khuzhin). - Улучшена производительность функций
tokens,hasAllTokens,hasAnyTokens. #88416 (Anton Popov). - Сделан inline
AddedColumns::appendFromBlockдля небольшого улучшения производительности JOIN в некоторых случаях. #88455 (Nikita Taranov). - Автодополнение на стороне клиента работает быстрее и более последовательно при использовании
system.completions, чем при выполнении нескольких запросов к системным таблицам. #84694 (|2ustam). - Добавлен новый параметр текстового индекса
dictionary_block_frontcoding_compression, управляющий сжатием словаря. По умолчанию он включен и использует сжатиеfront-coding. #87175 (Elmi Ahmadov). - Объединяет данные из всех потоков перед вставкой в материализованные представления в зависимости от настроек
min_insert_block_size_rows_for_materialized_viewsиmin_insert_block_size_bytes_for_materialized_views. Ранее, еслиparallel_view_processingбыл включен, каждый поток, выполняющий вставку в конкретное материализованное представление, выполнял объединение данных при вставке независимо, что могло приводить к увеличению количества генерируемых частей. #87280 (Antonio Andelic). - Добавлена настройка
temporary_files_buffer_sizeдля управления размером буфера при записи временных файлов. * Оптимизировано потребление памяти операциейscatter(используется, например, в grace hash join) для столбцов типаLowCardinality. #88237 (Vladimir Cherkasov). - Добавлена поддержка прямого чтения из текстовых индексов при использовании параллельных реплик. Улучшена производительность чтения текстовых индексов из объектного хранилища. #88262 (Anton Popov).
- Запросы, использующие таблицы из каталогов Data Lakes, будут применять параллельные реплики для распределённой обработки. #88273 (scanhex12).
- Внутренняя эвристика настройки алгоритма фоновых слияний с именем «to_remove_small_parts_at_right» теперь выполняется перед вычислением оценки диапазона слияния. Ранее селектор слияний выбирал широкое слияние, а затем отфильтровывал его суффикс. Исправления: #85374. #88736 (Mikhail Artemenko).
Улучшения
- Теперь функция
generateSerialIDподдерживает неконстантный аргумент с именем серии. Закрыта задача #83750. #88270 (Alexey Milovidov). - Добавлен необязательный параметр
start_valueв функциюgenerateSerialIDдля задания пользовательских начальных значений для новых последовательностей. #88085 (Manuel). - Добавлена опция
--semicolons_inlineвclickhouse-formatдля форматирования запросов так, чтобы точки с запятой ставились в конце последней строки, а не на новой строке. #88018 (Jan Rada). - Добавлена возможность настройки ограничения нагрузки на уровне сервера при переопределении конфигурации в Keeper. Закрывает #73964. #74066 (JIaQi).
mannWhitneyUTestбольше не выбрасывает исключение, когда обе выборки содержат только идентичные значения. Теперь он возвращает корректный результат, соответствующий SciPy. Закрывает: #79814. #80009 (DeanNeaht).- Транзакция переписывания для объектного хранилища диска удаляет предыдущие блобы в удалённом хранилище, если транзакция метаданных зафиксирована. #81787 (Sema Checherinda).
- Исправлен этап оптимизации для избыточного выражения сравнения на равенство, когда
LowCardinalityрезультирующего типа отличается до и после оптимизации. #82651 (Yakov Olkhovskiy). - Когда HTTP‑клиенты устанавливают заголовок
X-ClickHouse-100-Continue: deferв дополнение кExpect: 100-continue, ClickHouse не отправляет клиенту ответ100 Continueдо прохождения проверки квоты, что предотвращает лишний расход сетевой пропускной способности на передачу тел запросов, которые всё равно будут отброшены. Это актуально для запросов INSERT, где сам запрос может передаваться в строке запроса URL, а данные — в теле запроса. Прерывание запроса без отправки полного тела препятствует повторному использованию соединения по HTTP/1.1, но дополнительная задержка, связанная с установкой новых соединений, обычно несущественна по сравнению с общей длительностью выполнения INSERT при работе с большими объёмами данных. #84304 (c-end). - Маскировать учетные данные S3 в журналах при использовании DATABASE ENGINE = Backup с хранилищем S3. #85336 (Kenny Sun).
- Сделать оптимизации плана запроса видимыми для входного подплана коррелированного подзапроса за счёт отсрочки его материализации. Часть #79890. #85455 (Dmitry Novik).
- Изменение для SYSTEM DROP DATABASE REPLICA: - When dropping with database or drop the whole replica: it also drops replica for each table of the database - If 'WITH TABLES' is provided, drop replica for each storage - Otherwise, the logic is unchanged, only drop replica on the databases - When dropping a database replica with the keeper path: - If 'WITH TABLES' is provided: - Restore the database as Atomic - Restore RMT tables from statement in Keeper - Drop the database (restored tables are also dropped) - Otherwise, only drop replica on the provided keeper path. #85637 (Tuan Pham Anh).
- Исправлено непоследовательное форматирование TTL, когда в нём используется функция
materialize. Закрывает #82828. #85749 (Alexey Milovidov). - Состояние таблицы Iceberg больше не хранится в объекте хранилища. Это должно позволить использовать Iceberg в ClickHouse с конкурентными запросами. #86062 (Daniil Ivanik).
- Сделать блокировку бакета в упорядоченном режиме S3Queue постоянной, аналогично обрабатывающим узлам при
use_persistent_processing_nodes = 1. Добавить инъекцию отказов Keeper в тестах. #86628 (Kseniia Sumarokova). - Выводить подсказки при опечатках в названии формата. Закрывает #86761. #87092 (flynn).
- Удалённые реплики будут пропускать анализ индексов, если нет проекций. #87096 (zoomxi).
- Добавлена возможность отключать кодировку UTF-8 для таблицы ytsaurus. #87150 (MikhailBurdukov).
- Отключить параметр
s3_slow_all_threads_after_retryable_errorпо умолчанию. #87198 (Nikita Mikhaylov). - Переименована табличная функция
arrowflightвarrowFlight. #87249 (Vitaly Baranov). - Обновлён
clickhouse-benchmark, чтобы принимать-вместо_в своих CLI-флагах. #87251 (Ahmed Gouda). - Сделан синхронным сброс в
system.crash_logпри обработке сигналов. #87253 (Miсhael Stetsyuk). - Добавлена настройка
inject_random_order_for_select_without_order_by, которая автоматически добавляетORDER BY rand()в запросыSELECTна верхнем уровне без предложенияORDER BY. #87261 (Rui Zhang). - Улучшено сообщение об ошибке в
joinGet, чтобы оно корректно указывало, что количествоjoin_keysне совпадает с количествомright_table_keys. #87279 (Isak Ellmer). - Добавлена возможность проверять статистику произвольного узла Keeper во время транзакции записи. Это может помочь в обнаружении проблемы типа ABA. #87282 (Mikhail Artemenko).
- Перенаправлять ресурсоёмкие запросы ytsaurus на тяжёлые прокси. #87342 (MikhailBurdukov).
- Исправлены откаты операций unlink/rename/removeRecursive/removeDirectory и т. п., а также подсчёт количества жёстких ссылок при любых вариантах нагрузки на метаданные в дисковых транзакциях, и упрощены интерфейсы, сделав их более универсальными, чтобы их можно было повторно использовать в других хранилищах метаданных. #87358 (Mikhail Artemenko).
- Добавлен параметр конфигурации
keeper_server.tcp_nodelay, который позволяет отключитьTCP_NODELAYдля Keeper. #87363 (Copilot). - Добавлена поддержка
--connectionвclickhouse-benchmarks. Он работает так же, как вclickhouse-client: вы можете указать предопределённые подключения в клиентскомconfig.xml/config.yamlв разделеconnections_credentials, чтобы не указывать явно пользователя и пароль через аргументы командной строки. Добавлена поддержка--accept-invalid-certificateвclickhouse-benchmark. #87370 (Azat Khuzhin). - Теперь параметр
max_insert_threadsбудет применяться и к таблицам Iceberg. #87407 (alesapin). - Добавлены гистограммы и метрики с измерениями в
PrometheusMetricsWriter. Таким образом, обработчикPrometheusRequestHandlerбудет обладать всеми необходимыми метриками и сможет использоваться для надежного сбора метрик в облаке с низкими накладными расходами. #87521 (Miсhael Stetsyuk). - Функция
hasTokenтеперь возвращает 0 совпадений для пустого токена (тогда как раньше в этом случае генерировалось исключение). #87564 (Jimmy Aguilar Mena). - Добавлена поддержка текстовых индексов для значений
ArrayиMap(mapKeysиmapValues). Теперь поддерживаются функцииmapContainsKeyиhas. #87602 (Elmi Ahmadov). - Добавлена новая метрика
ZooKeeperSessionExpired, показывающая число истекших глобальных сессий ZooKeeper. #87613 (Miсhael Stetsyuk). - Используйте клиент хранилища S3 с настройками, специфичными для резервного копирования (например, backup_slow_all_threads_after_retryable_s3_error), для серверного (нативного) копирования в целевое размещение резервной копии. Настройка s3_slow_all_threads_after_retryable_error объявлена устаревшей. #87660 (Julia Kartseva).
- Исправлена некорректная обработка настроек
max_joined_block_size_rowsиmax_joined_block_size_bytesпри сериализации плана запроса с экспериментальной настройкойmake_distributed_plan. #87675 (Vladimir Cherkasov). - Настройка
enable_http_compressionтеперь включена по умолчанию. Это означает, что если клиент поддерживает HTTP‑сжатие, сервер будет его использовать. Однако у этого изменения есть определённые недостатки. Клиент может запросить «тяжёлый» метод сжатия, такой какbzip2, что нецелесообразно и приведёт к увеличению потребления ресурсов сервера (но это будет заметно только при передаче больших результатов). Клиент может запроситьgzip, что не так уж плохо, но неоптимально по сравнению сzstd. Закрывает #71591. #87703 (Alexey Milovidov). - В таблицу
system.server_settingsдобавлен новый параметрkeeper_hosts, который содержит список хостов [Zoo]Keeper, к которым ClickHouse может подключаться. #87718 (Nikita Mikhaylov). - Добавлены значения
fromиtoв системные дашборды для упрощения анализа исторических данных. #87823 (Mikhail f. Shiryaev). - Добавлена дополнительная информация для мониторинга производительности в запросах Iceberg SELECT. #87903 (Daniil Ivanik).
- Улучшение файлового кэша: повторное использование итератора приоритета кэша между потоками, одновременно резервирующими место в кэше. #87914 (Kseniia Sumarokova).
- Добавлена возможность ограничивать размер запросов для
Keeper(настройкаmax_request_size, аналогичнаjute.maxbufferдляZooKeeper, по умолчанию отключена для сохранения обратной совместимости, будет включена в следующих релизах). #87952 (Azat Khuzhin). - Изменить
clickhouse-benchmark, чтобы по умолчанию он не добавлял трассировки стека в сообщения об ошибках. #87954 (Ahmed Gouda). - Избегайте использования асинхронной загрузки меток через пул потоков (
load_marks_asynchronously=1), когда метки находятся в кэше (поскольку пул может быть перегружен, и запросы понесут накладные расходы даже в случае, если метки уже есть в кэше). #87967 (Azat Khuzhin). - Ytsaurus: добавлена возможность создавать таблицы/табличные функции/словари с подмножеством столбцов. #87982 (MikhailBurdukov).
- Теперь таблица
system.zookeeper_connection_logвключена по умолчанию, и её можно использовать для получения информации о сессиях Keeper. #88011 (János Benjamin Antal). - Согласовать поведение TCP и HTTP при передаче дублирующихся внешних таблиц. HTTP позволяет передавать временную таблицу несколько раз. #88032 (Sema Checherinda).
- Удалены пользовательские MemoryPools для чтения Arrow/ORC/Parquet. Этот компонент, по-видимому, стал ненужен после #84082, так как теперь мы в любом случае отслеживаем все выделения памяти. #88035 (Nikita Mikhaylov).
- Добавлена возможность создавать базу данных
Replicatedбез аргументов. #88044 (Pervakov Grigorii). clickhouse-keeper-client: Добавлена поддержка подключения к TLS-порту clickhouse-keeper, имена флагов оставлены такими же, как в clickhouse-client. #88065 (Pradeep Chhetri).- Добавлено новое событие профилирования для отслеживания количества отказов в выполнении фонового слияния из-за превышения лимита памяти. #88084 (Grant Holly).
- Включает анализатор для проверки выражений значений по умолчанию столбцов в операторах CREATE/ALTER TABLE. #88087 (Max Justus Spransy).
- Внутреннее улучшение планировщика запросов: использование JoinStepLogical для
CROSS JOIN. #88151 (Vladimir Cherkasov). - Добавлены псевдонимы для функций
hasAnyTokens(hasAnyToken) иhasAllTokens(hasAllToken). #88162 (George Larionov). - Включен глобальный профилировщик с выборочным отслеживанием (то есть он работает даже для серверных потоков, не связанных с запросами) по умолчанию: он собирает трассировки стека всех потоков каждые 10 секунд процессорного и реального времени. #88209 (Alexander Tokmakov).
- Обновлён Azure SDK, чтобы включить исправление для
Content-Length, затрагивающее операции копирования и создания контейнеров. #88278 (Smita Kulkarni). - Сделана функция
lagнечувствительной к регистру для совместимости с MySQL. #88322 (Lonny Kapelushnik). - Разрешен запуск
clickhouse-localиз директорииclickhouse-server. В предыдущих версиях это приводило к ошибкеCannot parse UUID: .Теперь можно запускатьclickhouse-localи работать с базами данных сервера без запуска самого сервера. #88383 (Alexey Milovidov). - Добавлен конфигурационный параметр
keeper_server.coordination_settings.check_node_acl_on_remove. Если он включён, перед каждым удалением узла будут проверяться ACL как самого узла, так и родительского узла. В противном случае будет проверяться только ACL родительского узла. #88513 (Antonio Andelic). - Столбцы
JSONтеперь выводятся в удобочитаемом виде при использовании форматаVertical. Закрывает #81794. #88524 (Frank Rosner). - Хранить файлы
clickhouse-client(например, историю запросов) в расположениях, определённых спецификацией XDG Base Directories, вместо корня домашнего каталога.~/.clickhouse-client-historyпо‑прежнему будет использоваться, если этот файл уже существует. #88538 (Konstantin Bogdanov). - Исправлена утечка памяти, обусловленная оператором
GLOBAL IN(https://github.com/ClickHouse/ClickHouse/issues/88615). #88617 (pranavmehta94). - Добавлена перегрузка функций hasAny/hasAllTokens, принимающая строковый аргумент. #88679 (George Larionov).
- Добавлен шаг в postinstall-скрипт для
clickhouse-keeper, который включает его автозапуск при загрузке системы. #88746 (YenchangChan). - Проверка учетных данных в веб-интерфейсе теперь выполняется только при вставке, а не при каждом нажатии клавиши. Это позволяет избежать проблем с некорректно настроенными LDAP-серверами. Исправляет #85777. #88769 (Alexey Milovidov).
- Ограничена длина сообщения об исключении при нарушении ограничения. В предыдущих версиях при вставке слишком длинной строки вы могли получить очень длинное сообщение об исключении, которое в итоге записывалось в
query_log. Закрывает #87032. #88801 (Alexey Milovidov). - Исправлено получение структуры набора данных от сервера ArrowFlight при создании таблицы. #87542 (Vitaly Baranov).
Исправление ошибки (ошибка, заметная пользователю, в официальном стабильном релизе)
- Исправлена ошибка в GeoParquet, приводившая к ошибкам клиентского протокола. #84020 (Michael Kolupaev).
- Исправлено вычисление зависящих от хоста функций, таких как shardNum(), в подзапросах на инициирующем узле. #84409 (Eduard Karacharov).
- Исправлена некорректная обработка дат до эпохи Unix с дробными секундами в различных функциях, связанных с датой и временем, таких как
parseDateTime64BestEffort,change{Year,Month,Day}иmakeDateTime64. Ранее дробная часть секунд вычиталась из целых секунд, а не прибавлялась к ним. Например,parseDateTime64BestEffort('1969-01-01 00:00:00.468')возвращала1968-12-31 23:59:59.532вместо1969-01-01 00:00:00.468. #85396 (xiaohuanlin). - Исправлена ошибка, из-за которой команды
ALTER COLUMN IF EXISTSзавершались сбоем при изменении состояния столбца в рамках одного и того же запросаALTER. Теперь командыDROP COLUMN IF EXISTS,MODIFY COLUMN IF EXISTS,COMMENT COLUMN IF EXISTSиRENAME COLUMN IF EXISTSкорректно обрабатывают случаи, когда столбец был удалён предыдущей командой в том же запросе. #86046 (xiaohuanlin). - Исправлен вывод типов Date/DateTime/DateTime64 для дат, выходящих за поддерживаемый диапазон. #86184 (Pavel Kruglov).
- Исправлена ошибка, из-за которой некоторые корректные данные, отправленные пользователем в столбец
AggregateFunction(quantileDD), могли приводить к бесконечной рекурсии при выполнении слияний. #86560 (Raphaël Thériault). - Добавлена поддержка типов JSON/Dynamic в таблицах, создаваемых табличной функцией
cluster. #86821 (Pavel Kruglov). - Исправлена проблема, из-за которой результат функции, вычисляемой в CTE, оказывался недетерминированным в запросе. #86967 (Yakov Olkhovskiy).
- Исправлена ошибка LOGICAL_ERROR в EXPLAIN при использовании pointInPolygon для столбцов первичного ключа. #86971 (Michael Kolupaev).
- Исправлены таблицы озера данных с процентно-кодированной последовательностью в имени. Закрывает #86626. #87020 (Anton Ivashkin).
- Исправлено некорректное поведение
IS NULLдля столбцов, допускающих NULL, вOUTER JOINпри включённой настройкеoptimize_functions_to_subcolumns, закрыта задача #78625. #87058 (Vladimir Cherkasov). - Исправлен некорректный учет освобождения временных данных при отслеживании лимита
max_temporary_data_on_disk_size, закрывает #87118. #87140 (JIaQi). - Функция checkHeaders теперь корректно проверяет переданные заголовки и отклоняет недопустимые заголовки. Автор исходной реализации: Michael Anastasakis (@michael-anastasakis). #87172 (Raúl Marín).
- Унифицирует поведение функций
toDateиtoDate32для всех числовых типов. Исправляет проверку на выход за нижнюю границу диапазона (underflow) для Date32 при приведении из int16. #87176 (Pervakov Grigorii). - Исправлена логическая ошибка в работе параллельных реплик для запросов с несколькими операциями JOIN, в частности — с RIGHT JOIN, идущим после LEFT/INNER JOIN. #87178 (Igor Nikonov).
- Учитывать настройку
input_format_try_infer_variantsв кэше определения схемы. #87180 (Pavel Kruglov). - Сделать так, чтобы pathStartsWith сопоставлял только пути, начинающиеся с указанного префикса. #87181 (Raúl Marín).
- Исправлены логические ошибки в виртуальном столбце
_row_numberи в позиционных удалениях Iceberg. #87220 (Michael Kolupaev). - Исправлена ошибка
LOGICAL_ERROR«Too large size passed to allocator» вJOIN, возникавшая из-за смешения константных и неконстантных блоков. #87231 (Azat Khuzhin). - Исправлены легковесные обновления с подзапросами, читающими из других таблиц
MergeTree. #87285 (Anton Popov). - Исправлена оптимизация move-to-prewhere, которая не работала при наличии политики строк (row policy). Продолжение #85118. Закрывает #69777. Закрывает #83748. #87303 (Nikolai Kochetov).
- Исправлено применение патчей к отсутствующим в частях данных столбцам с выражением по умолчанию. #87347 (Anton Popov).
- Исправлена ошибка сегментации при использовании дублирующихся имён полей партиционирования в таблицах MergeTree. #87365 (xiaohuanlin).
- Исправлена проблема с обновлением EmbeddedRocksDB. #87392 (Raúl Marín).
- Исправлено прямое чтение текстового индекса в объектном хранилище. #87399 (Anton Popov).
- Предотвращено создание привилегий для несуществующего движка. #87419 (Jitendra).
- Игнорировать только ошибки «not found» для
s3_plain_rewritable(что может приводить к различным проблемам). #87426 (Azat Khuzhin). - Исправлены словари с источником данных YTSaurus и макетами *range_hashed. #87490 (MikhailBurdukov).
- Исправлена ошибка при создании массива пустых кортежей. #87520 (Pavel Kruglov).
- Проверка недопустимых столбцов при создании временной таблицы. #87524 (Pavel Kruglov).
- Никогда не помещайте столбцы партиционирования Hive в заголовок формата. Исправляет #87515. #87528 (Arthur Passos).
- Исправлена подготовка чтения из формата в DeltaLake при работе с текстовым форматом. #87529 (Pavel Kruglov).
- Исправлена проверка прав доступа при выполнении
SELECTиINSERTдля таблиц типаBuffer. #87545 (pufit). - Запрещено создание индекса пропуска данных для таблицы S3. #87554 (Bharat Nallan).
- Предотвращена утечка отслеживаемой памяти при асинхронном логировании (за 10 часов мог накапливаться значительный дрейф, до ~100GiB) и в text_log (аналогичный дрейф также был возможен). #87584 (Azat Khuzhin).
- Исправлена ошибка, которая могла приводить к перезаписи глобальных настроек сервера настройками
SELECTпредставления или материализованного представления, если это представление было удалено асинхронно, а сервер был перезапущен до завершения фоновой очистки. #87603 (Alexander Tokmakov). - Исключить байты кэша страниц в пространстве пользователя (если возможно) при вычислении предупреждения о перегрузке памяти. #87610 (Bharat Nallan).
- Исправлена ошибка, из-за которой при десериализации CSV неверный порядок типов приводил к
LOGICAL_ERROR. #87622 (Yarik Briukhovetskyi). - Исправлена некорректная обработка
command_read_timeoutдля исполняемых словарей. #87627 (Azat Khuzhin). - Исправлено некорректное поведение
SELECT * REPLACEв условииWHEREпри использовании нового анализатора для фильтрации по заменённым столбцам. #87630 (xiaohuanlin). - Исправлена работа двухуровневой агрегации при использовании
MergeповерхDistributed. #87687 (c-end). - Исправлена генерация выходного блока в алгоритме HashJoin, когда список строк правой таблицы не используется. Исправляет проблему #87401. #87699 (Dmitry Novik).
- Режим чтения с параллельными репликами мог быть выбран неверно, если после анализа индексов не оставалось данных для чтения. Закрывает #87653. #87700 (zoomxi).
- Исправлена обработка столбцов
timestamp/timestamptzв Glue. #87733 (Andrey Zvonov). - Закрывает #86587. #87761 (scanhex12).
- Исправлена запись булевых значений через интерфейс PostgreSQL. #87762 (Artem Yurov).
- Исправлена ошибка «Unknown table» в запросе
INSERT SELECTс CTE, #85368. #87789 (Guang Zhao). - Исправлено чтение подстолбца Map со значением NULL из Variants, которые не могут быть Nullable. #87798 (Pavel Kruglov).
- Исправлена обработка ошибки при неудачной попытке полного удаления базы данных в кластере на вторичном узле. #87802 (Tuan Pham Anh).
- Исправлено несколько ошибок в индексах пропуска. #87817 (Raúl Marín).
- В AzureBlobStorage обновлено поведение: сначала выполняется попытка нативного копирования, а при ошибке 'Unauthroized' выполняются чтение и запись (в AzureBlobStorage, если для источника и назначения используются разные учетные записи хранилища, возникает ошибка 'Unauthorized'). Также исправлено применение параметра "use_native_copy" при заданном endpoint в конфигурации. #87826 (Smita Kulkarni).
- ClickHouse аварийно завершает работу, если в файле ArrowStream используется неуникальный словарь. #87863 (Ilya Golshtein).
- Исправлена фатальная ошибка при использовании approx_top_k и finalizeAggregation. #87892 (Jitendra).
- Исправлено слияние с проекциями при пустом последнем блоке. #87928 (Raúl Marín).
- Не удалять инъективные функции из GROUP BY, если типы их аргументов не могут использоваться в GROUP BY. #87958 (Pavel Kruglov).
- Исправлено некорректное исключение гранул/партиций для datetime-ключей при использовании параметра
session_timezoneв запросах. #87987 (Eduard Karacharov). - Возвращает количество затронутых строк после выполнения запроса в интерфейсе PostgreSQL. #87990 (Artem Yurov).
- Ограничивает использование проталкивания фильтров (filter pushdown) для PASTE JOIN, так как это может привести к некорректным результатам. #88078 (Yarik Briukhovetskyi).
- Применяет нормализацию URI перед выполнением проверки прав доступа, добавленной в https://github.com/ClickHouse/ClickHouse/pull/84503. #88089 (pufit).
- Исправлена логическая ошибка, возникавшая, когда
ARRAY JOIN COLUMNS()не находил ни одного столбца в новом анализаторе. #88091 (xiaohuanlin). - Исправлено предупреждение «Высокое использование памяти ClickHouse» (исключая кэш страниц). #88092 (Azat Khuzhin).
- Исправлено возможное повреждение данных в таблицах
MergeTreeс установленным для столбцаTTL. #88095 (Anton Popov). - Исправлено возможное необработанное исключение при чтении из
system.tablesпри наличии некорректных таблиц во внешних базах данных (PostgreSQL/SQLite/...), подключённых к системе. #88105 (Azat Khuzhin). - Исправлен сбой в функциях
mortonEncodeиhilbertEncodeпри вызове с пустым кортежем в качестве аргумента. #88110 (xiaohuanlin). - Теперь запросы с
ON CLUSTERбудут выполняться быстрее при наличии неактивных реплик в кластере. #88153 (alesapin). - Теперь DDL-воркер очищает набор реплик от устаревших хостов. Это уменьшает объём хранимых метаданных в ZooKeeper. #88154 (alesapin).
- Исправлена проблема с запуском ClickHouse без cgroups (случайно использование cgroups стало обязательным условием для асинхронных метрик). #88164 (Azat Khuzhin).
- Выполнять корректный откат операции перемещения каталога в случае ошибки. Необходимо перезаписывать все объекты
prefix.path, изменённые в ходе выполнения, а не только корневой. #88198 (Mikhail Artemenko). - Исправлено распространение флага
is_sharedвColumnLowCardinality. Это могло приводить к некорректному результату операции GROUP BY, если в столбец вставлялось новое значение после того, как хеш-значения уже были предварительно вычислены и закэшированы вReverseIndex. #88213 (Nikita Taranov). - Исправлена настройка рабочей нагрузки
max_cpu_share. Теперь её можно использовать без указания настройки рабочей нагрузкиmax_cpus. #88217 (Neerav). - Исправлена ошибка, из-за которой очень ресурсоёмкие мутации с подзапросами могли застревать на стадии подготовки. Теперь такие мутации можно остановить командой
SYSTEM STOP MERGES. #88241 (alesapin). - Теперь коррелированные подзапросы будут работать с объектными хранилищами. #88290 (alesapin).
- Не выполняйте инициализацию баз данных DataLake во время доступа к
system.projectionsиsystem.data_skipping_indices. #88330 (Azat Khuzhin). - Теперь каталоги data lake будут отображаться в системных таблицах интроспекции только при явном включении параметра
show_data_lake_catalogs_in_system_tables. #88341 (alesapin). - Скорректирована работа DatabaseReplicated с учётом конфигурации
interserver_http_host. #88378 (xiaohuanlin). - Позиционные аргументы теперь явно запрещены в контексте определения проекций, поскольку они не имеют смысла на этом внутреннем этапе обработки запроса. Это исправляет #48604. #88380 (Amos Bird).
- Исправлена квадратичная сложность функции
countMatches. Закрывает #88400. #88401 (Alexey Milovidov). - Команды
ALTER COLUMN ... COMMENTдля таблиц KeeperMap сделаны реплицируемыми, чтобы они фиксировались в метаданных реплицируемой базы данных и распространялись на все её реплики. Закрывает #88077. #88408 (Eduard Karacharov). - Исправлена ситуация с ложной циклической зависимостью у материализованных представлений в базе данных DatabaseReplicated, которая предотвращала добавление новых реплик в базу. #88423 (Nikolay Degterinsky).
- Исправлена агрегация разреженных столбцов при установленном значении
group_by_overflow_mode=any. #88440 (Eduard Karacharov). - Исправлена ошибка «column not found» при использовании параметра
query_plan_use_logical_join_step=0с несколькими предложениями FULL JOIN USING. Закрывает #88103. #88473 (Vladimir Cherkasov). - Большие кластеры с числом узлов > 10 имеют высокую вероятность того, что восстановление завершится с ошибкой
[941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 <Trace>: RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try again. Узелnum_hostsодновременно перезаписывается многими хостами. Исправление делает настройку, управляющую количеством попыток, динамической. Закрывает #87721. #88484 (Mikhail f. Shiryaev). - Этот PR предназначен только для обеспечения совместимости с версиями 23.8 и более ранними. Проблема совместимости была внесена этим PR: https://github.com/ClickHouse/ClickHouse/pull/54240. Этот SQL-запрос завершится с ошибкой при
enable_analyzer=0(до 23.8 он выполнялся корректно). #88491 (JIaQi). - Исправлено переполнение целого числа, выявляемое UBSAN, в сообщении об ошибке
accurateCastпри преобразовании больших значений в DateTime. #88520 (xiaohuanlin). - Исправлен движок CoalescingMergeTree для кортежных типов. Это закрывает #88469. #88526 (scanhex12).
- Запретить операции удаления для
iceberg_format_version=1. Закрывает задачу #88444. #88532 (scanhex12). - Этот патч исправляет операцию перемещения на дисках
plain-rewritableдля каталогов произвольной глубины. #88586 (Mikhail Artemenko). - Исправлена поддержка SQL SECURITY DEFINER для функций *cluster. #88588 (Julian Maicher).
- Исправлен потенциальный сбой, вызванный конкурентной мутацией подлежащих константных столбцов PREWHERE. #88605 (Azat Khuzhin).
- Исправлено чтение из текстового индекса и включён кэш условий запроса (при включённых настройках
use_skip_indexes_on_data_readиuse_query_condition_cache). #88660 (Anton Popov). - Исключение
Poco::TimeoutException, выброшенное изPoco::Net::HTTPChunkedStreamBuf::readFromDevice, приводит к аварийному завершению процесса с сигналом SIGABRT. #88668 (Miсhael Stetsyuk). - Бэкпортировано в #88910: после восстановления реплика базы данных Replicated могла надолго «зависать», выводя сообщения вида
Failed to marked query-0004647339 as finished (finished=No node, synced=No node), теперь это исправлено. #88671 (Alexander Tokmakov). - Исправлено добавление записей в
system.zookeeper_connection_log, если ClickHouse впервые подключается к ZooKeeper после перезагрузки конфигурации. #88728 (Antonio Andelic). - Исправлена ошибка, при которой преобразование значения типа DateTime64 в Date с
date_time_overflow_behavior = 'saturate'могло приводить к некорректным результатам для значений, выходящих за допустимый диапазон, при работе с часовыми поясами. #88737 (Manuel). - Очередная попытка исправить ошибку «having zero bytes» в движке таблиц S3 с включённым кэшем. #88740 (Kseniia Sumarokova).
- Исправлена проверка прав доступа на выполнение
SELECTдля табличной функцииloop. #88802 (pufit). - Перехватывать исключения при ошибках асинхронного логирования, чтобы предотвратить аварийное завершение программы. #88814 (Raúl Marín).
- Бэкпортировано в #89060: исправлен
top_k, чтобы он учитывал пороговый параметр при вызове с одним аргументом. Закрывает #88757. #88867 (Manuel). - Бэкпортировано в #88944: исправлена ошибка в функции
reverseUTF8. В предыдущих версиях она по ошибке инвертировала порядок байт у четырёхбайтовых кодовых точек UTF-8. Это закрывает #88913. #88914 (Alexey Milovidov). - Бэкпортировано в #88980: не выполнять проверку прав доступа
SET DEFINER <current_user>:definerпри создании представления с SQL SECURITY DEFINER. #88968 (pufit). - Бэкпортировано в #89058: исправлена ошибка
LOGICAL_ERRORвL2DistanceTransposed(vec1, vec2, p), когда оптимизация частичного чтенияQBitприводила к некорректному удалениюNullableиз возвращаемого типа, еслиpбылNullable. #88974 (Raufs Dunamalijevs). - Бэкпортировано в #89167: исправлена ошибка, приводившая к аварийному завершению работы при неизвестном типе каталога. Закрывает #88819. #88987 (scanhex12).
- Бэкпортировано в #89028: исправлено ухудшение производительности при анализе skipping-индексов. #89004 (Anton Popov).
Улучшения сборки/тестирования/упаковки
- Использовать библиотеку
postgresверсии 18.0. #87647 (Konstantin Bogdanov). - Включить ICU для FreeBSD. #87891 (Raúl Marín).
- Использовать SSE 4.2, когда применяется динамическая диспетчеризация на SSE 4.2, а не SSE 4. #88029 (Raúl Marín).
- Не требовать флаг
NO_ARMV81_OR_HIGHER, еслиSpeculative Store Bypass Safeнедоступен. #88051 (Konstantin Bogdanov). - Когда ClickHouse собирается с
ENABLE_LIBFIU=OFF, функции, связанные с failpoint, становятся no-op и больше не влияют на производительность. В этом случае запросыSYSTEM ENABLE/DISABLE FAILPOINTвозвращают ошибкуSUPPORT_IS_DISABLED. #88184 (c-end).
Релиз ClickHouse 25.9 от 2025-09-25
Изменения, нарушающие обратную совместимость
- Отключены бессмысленные бинарные операции с IPv4/IPv6: операции сложения/вычитания IPv4/IPv6 с типом, не являющимся целочисленным, теперь запрещены. Ранее допускались операции с числовыми типами с плавающей запятой, а для некоторых других типов (таких как
DateTime) возникали логические ошибки. #86336 (Raúl Marín). - Настройка
allow_dynamic_metadata_for_data_lakesпомечена как устаревшая. Теперь все таблицы Iceberg перед выполнением каждого запроса пытаются получить актуальную схему таблицы из хранилища. #86366 (Daniil Ivanik). - Изменено разрешение объединённого (coalesced) столбца из предложения
OUTER JOIN ... USINGдля большей согласованности: ранее при одновременном выборе столбца из USING и квалифицированных столбцов (a, t1.a, t2.a) вOUTER JOINстолбец из USING некорректно разрешался вt1.a, показывая 0/NULL для строк из правой таблицы без соответствия в левой. Теперь идентификаторы из предложения USING всегда разрешаются в объединённый столбец, тогда как квалифицированные идентификаторы разрешаются в необъединённые столбцы, независимо от того, какие другие идентификаторы присутствуют в запросе. Например: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) -- Before: a=0, t1.a=0, t2.a=2 (incorrect - 'a' resolved to t1.a) -- After: a=2, t1.a=0, t2.a=2 (correct - 'a' is coalesced). #80848 (Vladimir Cherkasov). - Увеличено окно дедупликации в реплицируемых таблицах до 10000. Это полностью совместимое изменение, но можно представить сценарии, когда оно может привести к высокому потреблению ресурсов при наличии большого количества таблиц. #86820 (Sema Checherinda).
Новая возможность
- Теперь пользователи могут использовать NATS JetStream для потребления сообщений, указывая новые параметры
nats_streamиnats_consumerдля движка NATS. #84799 (Dmitry Novikov). - Добавлена поддержка аутентификации и SSL в табличной функции
arrowFlight. #87120 (Vitaly Baranov). - Добавлен новый параметр
storage_class_nameдля движка таблицS3и табличной функцииs3, который позволяет указывать режим Intelligent-Tiering, поддерживаемый AWS. Поддерживается как в формате ключ-значение, так и в позиционном (устаревшем) формате. #87122 (alesapin). ALTER UPDATEдля движка таблиц Iceberg. #86059 (scanhex12).- Добавлена системная таблица
iceberg_metadata_logдля получения файлов метаданных Iceberg во время выполнения операторов SELECT. #86152 (scanhex12). - Таблицы
IcebergиDeltaLakeподдерживают пользовательскую конфигурацию диска с помощью настройки хранилищаdisk. #86778 (scanhex12). - Добавлена поддержка Azure для дисков Data Lake. #87173 (scanhex12).
- Поддержка каталога
Unityна базе хранилища Azure Blob Storage. #80013 (Smita Kulkarni). - Добавлена поддержка дополнительных форматов (
ORC,Avro) при записи вIceberg. Это закрывает #86179. #87277 (scanhex12). - Добавлена новая системная таблица
database_replicasс информацией о репликах баз данных. #83408 (Konstantin Morozov). - Добавлена функция
arrayExcept, которая вычитает элементы одного массива из другого, рассматривая их как множества. #82368 (Joanna Hulboj). - Добавлена новая таблица
system.aggregated_zookeeper_log. Таблица содержит статистику (например, количество операций, среднюю задержку, ошибки) операций ZooKeeper, сгруппированных по идентификатору сессии, родительскому пути и типу операции, а её содержимое периодически сбрасывается на диск. #85102 #87208 (Miсhael Stetsyuk). - Новая функция
isValidASCII. Возвращает 1, если входная строка или FixedString содержит только ASCII-байты (0x00–0x7F), иначе — 0. Закрывает #85377. ... #85786 (rajat mohan). - Булевы настройки можно задавать без аргументов, например:
SET use_query_cache;, что равнозначно установке значения true. #85800 (thraeka). - Новые параметры конфигурации
logger.startupLevelиlogger.shutdownLevelпозволяют переопределять уровень логирования на время запуска и завершения работы ClickHouse соответственно. #85967 (Lennard Eijsackers). - Агрегатные функции
timeSeriesChangesToGridиtimeSeriesResetsToGrid. Ведут себя аналогичноtimeSeriesRateToGrid, принимая параметры начальной и конечной меток времени, шага и окна ретроспективного просмотра (look back window), а также два аргумента — для меток времени и значений, но требуя как минимум один сэмпл на окно вместо двух. Вычисляют PromQLchanges/resets, подсчитывая количество раз, когда значение сэмпла изменяется или уменьшается в указанном окне для каждой метки времени во временной сетке, определённой параметрами. Тип возвращаемого значения —Array(Nullable(Float64)). #86010 (Stephen Chi). - Позволяет пользователям создавать временные представления с синтаксисом, похожим на синтаксис временных таблиц (
CREATE TEMPORARY VIEW). #86432 (Aly Kafoury). - В таблицу
system.warningsдобавлены предупреждения о потреблении CPU и памяти. #86838 (Bharat Nallan). - Поддержка индикатора
oneofво входных данныхProtobuf. Для указания того, какой вариант oneof присутствует, может использоваться специальный столбец. Если сообщение содержит oneof и установленinput_format_protobuf_oneof_presence, ClickHouse заполняет столбец, который указывает, какое поле oneof было найдено. #82885 (Ilya Golshtein). - Улучшено профилирование выделения памяти на основе внутренних инструментов jemalloc. Глобальный профилировщик jemalloc теперь можно включить с помощью конфигурации
jemalloc_enable_global_profiler. Выборочно отобранные глобальные операции выделения и освобождения памяти могут сохраняться вsystem.trace_logс типомJemallocSampleпри включении конфигурацииjemalloc_collect_global_profile_samples_in_trace_log. Профилирование jemalloc теперь можно включать независимо для каждого запроса с помощью настройкиjemalloc_enable_profiler. Сохранением выборок вsystem.trace_logможно управлять для каждого запроса с помощью настройкиjemalloc_collect_profile_samples_in_trace_log. Обновлён jemalloc до новой версии. #85438 (Antonio Andelic). - Новая настройка для удаления файлов при удалении (DROP) таблиц Iceberg. Это закрывает проблему #86211. #86501 (scanhex12).
Экспериментальная функциональность
- Инвертированный текстовый индекс был полностью переработан и теперь масштабируется на наборы данных, которые не помещаются в ОЗУ. #86485 (Anton Popov).
- Переупорядочивание
JOINтеперь использует статистику. Функцию можно включить, установивallow_statistics_optimize = 1иquery_plan_optimize_join_order_limit = 10. #86822 (Han Fei). - Поддержка
alter table ... materialize statistics allпозволяет материализовать всю статистику таблицы. #87197 (Han Fei).
Повышение производительности
- Добавлена поддержка фильтрации частей данных с использованием skip-индексов при чтении для сокращения лишних чтений индексов. Управляется новым параметром настройки
use_skip_indexes_on_data_read(по умолчанию отключён). Это решает задачу #75774. Включает общую подготовительную работу, используемую также в #81021. #81526 (Amos Bird). - Добавлена оптимизация порядка JOIN, которая может автоматически переставлять JOINы для повышения производительности (управляется настройкой
query_plan_optimize_join_order_limit). Note that the join order optimization currently has limited statistics support and primarily relies on row count estimates from storage engines - more sophisticated statistics collection and cardinality estimation will be added in future releases. If you encounter issues with JOIN queries after upgrading, you can temporarily disable the new implementation by settingSET query_plan_use_new_logical_join_step = 0and report the issue for investigation. Note about resolution of identifiers from USING clause: Changed resolving of the coalesced column fromOUTER JOIN ... USINGclause to be more consistent: previously, when selecting both the USING column and qualified columns (a, t1.a, t2.a) in a OUTER JOIN, the USING column would incorrectly be resolved tot1.a, showing 0/NULL for rows from the right table with no left match. Now identifiers from USING clause are always resolved to the coalesced column, while qualified identifiers resolve to the non-coalesced columns, regardless of which other identifiers are present in the query. For example: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) -- Before: a=0, t1.a=0, t2.a=2 (incorrect - 'a' resolved to t1.a) -- After: a=2, t1.a=0, t2.a=2 (correct - 'a' is coalesced). #80848 (Vladimir Cherkasov). - Распределённый
INSERT SELECTдля озёр данных. #86783 (scanhex12). - Улучшена оптимизация PREWHERE для условий вида
func(primary_column) = 'xx'иcolumn in (xxx). #85529 (李扬). - Реализовано переписывание операций JOIN: 1. Преобразование
LEFT ANY JOINиRIGHT ANY JOINвSEMI/ANTIJOIN, если условие фильтрации всегда ложно для совпавших или несовпавших строк. Эта оптимизация управляется новой настройкойquery_plan_convert_any_join_to_semi_or_anti_join. 2. ПреобразованиеFULL ALL JOINвLEFT ALLилиRIGHT ALLJOIN, если условие фильтрации всегда ложно для несовпавших строк с одной из сторон. #86028 (Dmitry Novik). - Улучшена производительность вертикальных слияний после выполнения операции LIGHTWEIGHT DELETE. #86169 (Anton Popov).
- Производительность
HashJoinнемного улучшена в случае, когда операцияLEFT/RIGHT JOINвозвращает большое количество строк без соответствия. #86312 (Nikita Taranov). - Поразрядная сортировка (radix sort): помогает компилятору использовать SIMD и эффективнее выполнять предвыборку данных. Использует динамическую диспетчеризацию, чтобы применять программную предвыборку только на процессорах Intel. Продолжение работы @taiyang-li в https://github.com/ClickHouse/ClickHouse/pull/77029. #86378 (Raúl Marín).
- Улучшена производительность коротких запросов к таблицам с большим количеством частей (за счет оптимизации
MarkRangesс использованиемdevectorвместоdeque). #86933 (Azat Khuzhin). - Улучшена производительность применения частей патча в режиме join. #87094 (Anton Popov).
- Добавлена настройка
query_condition_cache_selectivity_threshold(значение по умолчанию: 1.0), которая не помещает в кэш условий запроса результаты сканирования предикатов с низкой селективностью. Это позволяет уменьшить потребление памяти кэшем условий запроса ценой ухудшения коэффициента попаданий в кэш. #86076 (zhongyuankai). - Снижено использование памяти при записи в Iceberg. #86544 (scanhex12).
Улучшения
- Реализована поддержка записи нескольких файлов данных в Iceberg за одну вставку. Добавлены новые настройки
iceberg_insert_max_rows_in_data_fileиiceberg_insert_max_bytes_in_data_fileдля задания ограничений. #86275 (scanhex12). - Добавлено ограничение на количество строк/байт в файлах данных, вставляемых в Delta Lake. Параметры задаются настройками
delta_lake_insert_max_rows_in_data_fileиdelta_lake_insert_max_bytes_in_data_file. #86357 (Kseniia Sumarokova). - Добавлена поддержка большего числа типов партиционирования при записи в Iceberg. Это закрывает #86206. #86298 (scanhex12).
- Сделана настраиваемой стратегия повторных попыток для S3 и обеспечена возможность горячей перезагрузки настроек S3-диска при изменении XML-файла конфигурации. #82642 (RinChanNOW).
- Улучшен движок таблицы S3(Azure)Queue, чтобы он мог переживать потерю соединения с ZooKeeper без возникновения дубликатов. Требуется включить настройку S3Queue
use_persistent_processing_nodes(можно изменить черезALTER TABLE MODIFY SETTING). #85995 (Kseniia Sumarokova). - Вы можете использовать параметры запроса после
TOпри создании материализованного представления, например:CREATE MATERIALIZED VIEW mv TO {to_table:Identifier} AS SELECT * FROM src_table. #84899 (Diskein). - Выводить более понятные инструкции для пользователей при указании некорректных настроек для движка таблицы
Kafka2. #83701 (János Benjamin Antal). - Теперь нельзя указывать часовые пояса для типа
Time(что и не имело смысла). #84689 (Yarik Briukhovetskyi). - Упростили (и избежали некоторых ошибок) логику, связанную с парсингом Time/Time64 в режиме
best_effort. #84730 (Yarik Briukhovetskyi). - Добавлены функции
deltaLakeAzureCluster(аналогичнаяdeltaLakeAzureдля кластерного режима) иdeltaLakeS3Cluster(синонимdeltaLakeCluster). Исправлена проблема #85358. #85547 (Smita Kulkarni). - Применять настройку
azure_max_single_part_copy_sizeдля обычных операций копирования так же, как для резервного копирования. #85767 (Ilya Golshtein). - Замедлять потоки клиента S3 при повторяемых ошибках в S3 Object Storage. Это расширяет действие предыдущей настройки
backup_slow_all_threads_after_retryable_s3_errorна диски S3 и переименовывает её в более общуюs3_slow_all_threads_after_retryable_error. #85918 (Julia Kartseva). - Настройки allow_experimental_variant/dynamic/json и enable_variant/dynamic/json помечены как устаревшие. Теперь все три типа всегда включены. #85934 (Pavel Kruglov).
- Добавлена поддержка фильтрации по полному URL (директива
full_url) вhttp_handlers(включая схему и host:port). #86155 (Azat Khuzhin). - Добавлена новая настройка
allow_experimental_delta_lake_writes. #86180 (Kseniia Sumarokova). - Исправлено определение systemd в скрипте init.d (исправлена проверка «Install packages»). #86187 (Azat Khuzhin).
- Добавлена новая метрика с размерностью
startup_scripts_failure_reason. Эта метрика нужна, чтобы различать типы ошибок, приводящих к сбоям стартовых скриптов. В частности, для целей настройки оповещений необходимо различать временные (например,MEMORY_LIMIT_EXCEEDEDилиKEEPER_EXCEPTION) и постоянные ошибки. #86202 (Miсhael Stetsyuk). - Разрешено опускать функцию
identityв определении партиции таблицы Iceberg. #86314 (scanhex12). - Добавлена возможность включать JSON‑логирование только для конкретного канала: для этого установите
logger.formatting.channelв одно из следующих значений:syslog/console/errorlog/log. #86331 (Azat Khuzhin). - Теперь можно использовать нативные числа в
WHERE. Они уже допускаются в качестве аргументов логических функций. Это упрощает оптимизации filter-push-down и move-to-prewhere. #86390 (Nikolai Kochetov). - Исправлена ошибка при выполнении команды
SYSTEM DROP REPLICAдля каталога с повреждёнными метаданными. #86391 (Nikita Mikhaylov). - Добавлены дополнительные попытки проверки доступа к диску (
skip_access_check = 0) в Azure, поскольку предоставление доступа может занимать довольно много времени. #86419 (Alexander Tokmakov). - Окно устаревания в функциях
timeSeries*()сделано левооткрытым и правозакрытым. #86588 (Vitaly Baranov). - Добавлены события профилирования
FailedInternal*Query. #86627 (Shane Andrade). - Исправлена обработка пользователей, имя которых содержит точку, при добавлении через конфигурационный файл. #86633 (Mikhail Koviazin).
- Добавлена асинхронная метрика для отслеживания использования памяти в запросах (
QueriesMemoryUsageиQueriesPeakMemoryUsage). #86669 (Azat Khuzhin). - Вы можете использовать флаг
clickhouse-benchmark --preciseдля более точной отчётности по QPS и другим метрикам, вычисляемым по интервалам. Это помогает получать стабильные значения QPS в случае, если длительности запросов сопоставимы с интервалом отчётности--delay D. #86684 (Sergei Trifonov). - Сделать значения nice для потоков Linux настраиваемыми, чтобы можно было назначать отдельным потокам (merge/mutate, query, материализованное представление, клиент ZooKeeper) более высокий или низкий приоритет. #86703 (Miсhael Stetsyuk).
- Исправлена вводящая в заблуждение ошибка с сообщением «specified upload does not exist», которая возникает, когда исходное исключение теряется при multipart-загрузке из-за состояния гонки. #86725 (Julia Kartseva).
- Ограничена длина описания плана запроса в запросе
EXPLAIN. Описание больше не вычисляется для запросов, отличных отEXPLAIN. Добавлена настройкаquery_plan_max_step_description_length. #86741 (Nikolai Kochetov). - Добавлена возможность настраивать параметры ожидающих сигналов, чтобы обойти CANNOT_CREATE_TIMER (для профилировщиков запросов,
query_profiler_real_time_period_ns/query_profiler_cpu_time_period_ns). Также добавлен сборSigQиз/proc/self/statusдля интроспекции (еслиProcessSignalQueueSizeблизко кProcessSignalQueueLimit, то вы, скорее всего, получите ошибкиCANNOT_CREATE_TIMER). #86760 (Azat Khuzhin). - Улучшена производительность запроса
RemoveRecursiveв Keeper. #86789 (Antonio Andelic). - Удалены лишние пробелы в
PrettyJSONEachRowпри выводе значений типа JSON. #86819 (Pavel Kruglov). - Теперь мы записываем размеры блобов для
prefix.pathпри удалении каталога на обычном перезаписываемом диске. #86908 (alesapin). - Добавлена поддержка нагрузочного тестирования удалённых экземпляров ClickHouse, включая ClickHouse Cloud. Пример использования:
tests/performance/scripts/perf.py tests/performance/math.xml --runs 10 --user <username> --password <password> --host <hostname> --port <port> --secure. #86995 (Raufs Dunamalijevs). - Соблюдать ограничения по памяти в местах, где происходят значительные (>16MiB) выделения памяти (сортировка, асинхронные вставки, лог файлов). #87035 (Azat Khuzhin).
- Выбрасывать исключение, если при установке
network_compression_methodуказан неподдерживаемый универсальный кодек. #87097 (Robert Schulze). - Системная таблица
system.query_cacheтеперь возвращает все записи кэша результатов запросов, тогда как ранее она возвращала только разделяемые записи или неразделяемые записи для того же пользователя и роли. Это корректно, поскольку неразделяемые записи не должны раскрывать результаты запросов, тогда какsystem.query_cacheвозвращает строки запросов. Это делает поведение системной таблицы более похожим наsystem.query_log. #87104 (Robert Schulze). - Включена короткая (short-circuit) оценка для функции
parseDateTime. #87184 (Pavel Kruglov). - Добавлен новый столбец
statisticsв таблицуsystem.parts_columns. #87259 (Han Fei).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Результаты запросов
ALTERтеперь проверяются только на инициирующем узле для реплицируемых баз данных и таблиц с внутренней репликацией. Это устраняет ситуации, когда уже зафиксированный запросALTERмог застревать на других узлах. #83849 (János Benjamin Antal). - Ограничено число задач каждого типа в
BackgroundSchedulePool. Это позволяет избегать ситуаций, когда все слоты заняты задачами одного типа, в то время как другие задачи голодают. Также предотвращаются взаимные блокировки, когда задачи ожидают друг друга. Поведение контролируется серверной настройкойbackground_schedule_pool_max_parallel_tasks_per_type_ratio. #84008 (Alexander Tokmakov). - Обеспечивает корректное завершение работы таблиц при восстановлении реплики базы данных. Некорректное завершение могло приводить к LOGICAL_ERROR для некоторых движков таблиц во время восстановления реплики базы данных. #84744 (Antonio Andelic).
- Проверять права доступа при формировании подсказок по исправлению опечаток в имени базы данных. #85371 (Dmitry Novik).
-
- LowCardinality для столбцов Hive 2. Заполнять столбцы Hive перед виртуальными столбцами (требуется для https://github.com/ClickHouse/ClickHouse/pull/81040) 3. LOGICAL_ERROR при пустом формате для Hive #85528 4. Исправлена проверка, что партиционные столбцы Hive являются единственными столбцами 5. Добавлена проверка, что все столбцы Hive указаны в схеме 6. Частичное исправление для parallel_replicas_cluster с Hive 7. Использовать упорядоченный контейнер в extractkeyValuePairs в утилитах Hive (требуется для https://github.com/ClickHouse/ClickHouse/pull/81040). #85538 (Arthur Passos).
- Предотвращена ненужная оптимизация первого аргумента функций
IN, иногда приводившая к ошибке при использовании сопоставления массивов. #85546 (Yakov Olkhovskiy). - Соответствие между идентификаторами источников Iceberg и именами файлов Parquet не было скорректировано с учётом схемы, действовавшей на момент записи файла Parquet. В этом PR для каждого файла данных Iceberg используется его собственная схема, а не текущая. #85829 (Daniil Ivanik).
- Исправлена ситуация, когда размер файла считывался отдельно от его открытия. Относится к https://github.com/ClickHouse/ClickHouse/pull/33372, который был добавлен в ответ на ошибку в ядрах Linux до релиза
5.10. #85837 (Konstantin Bogdanov). - ClickHouse Keeper больше не завершается с ошибкой при запуске на системах, где IPv6 отключён на уровне ядра (например, RHEL с ipv6.disable=1). Теперь он пытается переключиться на IPv4‑слушатель, если не удаётся запустить основной IPv6‑слушатель. #85901 (jskong1124).
- Этот PR закрывает #77990. Добавлена поддержка TableFunctionRemote для параллельных реплик в globalJoin. #85929 (zoomxi).
- Исправлена ошибка с нулевым указателем в orcschemareader::initializeifneeded(). Этот PR устраняет следующую проблему: #85292 ### Запись в документации об изменениях, затрагивающих пользователей. #85951 (yanglongwei).
- Добавлена проверка, которая разрешает коррелированные подзапросы в предложении FROM только в том случае, если они используют столбцы из внешнего запроса. Исправляет #85469. Исправляет #85402. #85966 (Dmitry Novik).
- Исправлена работа
ALTER UPDATEпри изменении столбца, подстолбец которого используется в материализованном выражении другого столбца. Ранее материализованный столбец, в выражении которого использовался подстолбец, обновлялся некорректно. #85985 (Pavel Kruglov). - Запрещено изменять столбцы, подстолбцы которых используются в PK или в выражении партиционирования. #86005 (Pavel Kruglov).
- Исправлено чтение подколонок с нестандартным режимом сопоставления столбцов в хранилище DeltaLake. #86064 (Kseniia Sumarokova).
- Исправлена ошибка, из-за которой для
pathс подсказкойEnumвнутри JSON использовались неверные значения по умолчанию. #86065 (Pavel Kruglov). - Разбор URL каталога Hive в DataLake с очисткой входных данных. Закрывает #86018. #86092 (rajat mohan).
- Исправлена логическая ошибка при динамическом изменении размера файлового кэша. Закрывает #86122. Закрывает https://github.com/ClickHouse/clickhouse-core-incidents/issues/473. #86130 (Kseniia Sumarokova).
- Используйте
NonZeroUInt64для параметраlogs_to_keepв настройках DatabaseReplicatedSettings. #86142 (Tuan Pham Anh). - Исключение выбрасывалось запросом
FINALсо skip-индексом, если таблица (например,ReplacingMergeTree) была создана с настройкойindex_granularity_bytes = 0. Эта ошибка теперь исправлена. #86147 (Shankar Iyer). - Устраняет неопределённое поведение и исправляет проблемы с разбором выражения секционирования Iceberg. #86166 (Daniil Ivanik).
- Исправлено падение при одновременном использовании константных и неконстантных блоков в одном INSERT. #86230 (Azat Khuzhin).
- Процесс по умолчанию использует
include-директивы из/etc/metrika.xmlпри создании дисков из SQL. #86232 (alekar). - Исправлены функции accurateCastOrNull/accurateCastOrDefault при приведении типа String к JSON. #86240 (Pavel Kruglov).
- Поддержка каталогов без '/' в движке Iceberg. #86249 (scanhex12).
- Исправлен сбой при использовании replaceRegex со строкой типа FixedString и пустой подстрокой. #86270 (Raúl Marín).
- Исправлен сбой при выполнении ALTER UPDATE Nullable(JSON). #86281 (Pavel Kruglov).
- Исправлено отсутствие определения столбца в system.tables. #86295 (Raúl Marín).
- Исправлено приведение типов из LowCardinality(Nullable(T)) к типу Dynamic. #86365 (Pavel Kruglov).
- Исправлена логическая ошибка при записи в Delta Lake. Закрывает #86175. #86367 (Kseniia Sumarokova).
- Исправлена ошибка
416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resourceпри чтении пустых BLOB-объектов из Azure Blob Storage для диска plain_rewritable. #86400 (Julia Kartseva). - Исправлена обработка GROUP BY для Nullable(JSON). #86410 (Pavel Kruglov).
- Исправлена ошибка в материализованных представлениях: материализованное представление могло не работать, если его создавали, удаляли, а затем снова создавали с тем же именем. #86413 (Alexander Tokmakov).
- Выдавать ошибку, если все реплики недоступны при чтении из функций *cluster. #86414 (Julian Maicher).
- Исправлена утечка
MergesMutationsMemoryTrackingиз‑за таблиц типаBufferи исправленquery_views_logдля потоковой загрузки изKafka(и других источников). #86422 (Azat Khузhin). - Исправлена работа оператора
SHOW TABLESпосле удаления опорной таблицы хранилища Alias. #86433 (RinChanNOW). - Исправлено отсутствие заголовка чанка, когда включен send_chunk_header и UDF вызывается по протоколу HTTP. #86469 (Vladimir Cherkasov).
- Исправлена возможная взаимоблокировка при включённой функции сброса профиля jemalloc. #86473 (Azat Khuzhin).
- Исправлено чтение подстолбцов в движке таблицы DeltaLake. Закрывает #86204. #86477 (Kseniia Sumarokova).
- Корректная обработка идентификатора хоста loopback для предотвращения коллизий при обработке DDL-задач. #86479 (Tuan Pham Anh).
- Исправлена работа операций DETACH/ATTACH для таблиц движка базы данных postgres с числовыми и десятичными (DECIMAL) столбцами. #86480 (Julian Maicher).
- Исправлено использование неинициализированной памяти в getSubcolumnType. #86498 (Raúl Marín).
- Функции
searchAnyиsearchAllпри вызове с пустым списком строк (needles) теперь возвращаютtrue(то есть «совпадает со всем»). Ранее они возвращалиfalse(issue #86300). #86500 (Elmi Ahmadov). - Исправлена функция
timeSeriesResampleToGridWithStaleness()при отсутствии значения в первом бакете. #86507 (Vitaly Baranov). - Исправлен сбой, возникавший при установке
merge_tree_min_read_task_sizeв значение 0. #86527 (yanglongwei). - При чтении формат для каждого файла данных теперь берётся из метаданных Iceberg (ранее он брался из аргументов таблицы). #86529 (Daniil Ivanik).
- Игнорировать исключения при сбросе журнала при завершении работы и сделать завершение работы более безопасным (чтобы избежать SIGSEGV). #86546 (Azat Khuzhin).
- Исправлена ошибка в движке базы данных Backup, приводившая к выбросу исключения при запросе с файловыми частями нулевого размера. #86563 (Max Justus Spransy).
- Исправлена проблема с отсутствующим заголовком чанка, если
send_chunk_headerвключён и UDF вызывается по протоколу HTTP. #86606 (Vladimir Cherkasov). - Исправлена логическая ошибка S3Queue «Expected current processor to be equal to », которая возникала из-за истечения сессии Keeper. #86615 (Kseniia Sumarokova).
- Ошибки обработки
Nullableпри вставке и отсечении данных. Эта правка закрывает #86407. #86630 (scanhex12). - Не отключайте кэш файловой системы, если отключён кэш метаданных Iceberg. #86635 (Daniil Ivanik).
- Исправлена ошибка «Deadlock in Parquet::ReadManager (single-threaded)» в компоненте parquet reader v3. #86644 (Michael Kolupaev).
- Исправлена работа IPv6 в
listen_hostдля ArrowFlight. #86664 (Vitaly Baranov). - Исправлено завершение работы обработчика
ArrowFlight. Этот PR исправляет #86596. #86665 (Vitaly Baranov). - Исправлены проблемы с распределёнными запросами при
describe_compact_output=1. #86676 (Azat Khuzhin). - Исправлены разбор определения окна и применение параметров запроса. #86720 (Azat Khuzhin).
- Исправлено исключение
Partition strategy wildcard can not be used without a '_partition_id' wildcard., возникавшее при создании таблицы сPARTITION BY, но без подстановочного шаблона для партиционирования, что ранее работало в версиях до 25.8. Закрывает https://github.com/ClickHouse/clickhouse-private/issues/37567. #86748 (Kseniia Sumarokova). - Исправлена ошибка LogicalError, возникающая при попытке параллельных запросов захватить одну и ту же блокировку. #86751 (Pervakov Grigorii).
- Исправлена запись NULL в разделяемые JSON‑данные во входном формате RowBinary и добавлены дополнительные проверки в ColumnObject. #86812 (Pavel Kruglov).
- Исправлена ошибка перестановки пустого Tuple с LIMIT. #86828 (Pavel Kruglov).
- Не используйте отдельный узел Keeper для узлов persistent processing. Исправление для https://github.com/ClickHouse/ClickHouse/pull/85995. Закрывает #86406. #86841 (Kseniia Sumarokova).
- Исправлено поведение таблицы с движком TimeSeries, из‑за которого возникали сбои при создании новой реплики в Replicated Database. #86845 (Nikolay Degterinsky).
- Исправлена проблема с выполнением запросов к
system.distributed_ddl_queueв случаях, когда в задачах отсутствуют некоторые узлы Keeper. #86848 (Antonio Andelic). - Исправлено позиционирование при переходе в конец разжатого блока. #86906 (Pavel Kruglov).
- Обрабатывается исключение, выбрасываемое при асинхронном выполнении итератора Iceberg. #86932 (Daniil Ivanik).
- Исправлено сохранение больших предварительно обработанных XML-конфигураций. #86934 (c-end).
- Исправлено заполнение поля date в таблице system.iceberg_metadata_log. #86961 (Daniil Ivanik).
- Исправлен бесконечный перерасчёт
TTLпри использованииWHERE. #86965 (Anton Popov). - Исправлен возможный некорректный результат работы функции
uniqExactс модификаторамиROLLUPиCUBE. #87014 (Nikita Taranov). - Исправлена проблема с определением схемы таблицы с помощью табличной функции
url()при значении настройкиparallel_replicas_for_cluster_functions, равном 1. #87029 (Konstantin Bogdanov). - Корректно приводить тип результата PREWHERE после разбиения его на несколько шагов. #87040 (Antonio Andelic).
- Исправлены облегчённые обновления с клаузой
ON CLUSTER. #87043 (Anton Popov). - Исправлена совместимость некоторых состояний агрегатных функций с аргументом типа String. #87049 (Pavel Kruglov).
- Исправлена проблема, при которой имя модели OpenAI не передавалось. #87100 (Kaushik Iska).
- EmbeddedRocksDB: путь должен находиться внутри каталога user_files. #87109 (Raúl Marín).
- Исправлена проблема с таблицами KeeperMap, созданными до 25.1, которые оставляли данные в ZooKeeper после выполнения запроса DROP. #87112 (Nikolay Degterinsky).
- Исправлено чтение идентификаторов полей типов map и array из Parquet. #87136 (scanhex12).
- Исправлено чтение массивов с подстолбцом размеров при ленивой материализации. #87139 (Pavel Kruglov).
- Исправлена работа функции CASE с аргументами типа Dynamic. #87177 (Pavel Kruglov).
- Исправлена обработка чтения пустого массива из пустой строки в CSV. #87182 (Pavel Kruglov).
- Исправлена возможная неверная обработка некоррелированного
EXISTS. Ошибка проявлялась приexecute_exists_as_scalar_subquery=1, который был добавлен в https://github.com/ClickHouse/ClickHouse/pull/85481 и затрагивает версию25.8. Исправляет #86415. #87207 (Nikolai Kochetov). - Вызывает ошибку, если
iceberg_metadata_logне настроен, но пользователь пытается получить отладочную информацию о метаданных Iceberg. Устраняет обращение к nullptr. #87250 (Daniil Ivanik).
Улучшения сборки, тестирования и упаковки
- Исправлена совместимость с abseil-cpp 20250814.0, https://github.com/abseil/abseil-cpp/issues/1923. #85970 (Yuriy Chernyshov).
- Сборка автономного WASM-лексера вынесена под управляющий флаг. #86505 (Konstantin Bogdanov).
- Исправлена сборка crc32c на старых ARM CPU без поддержки инструкции
vmull_p64. #86521 (Pablo Marcos). - Обновление
openldapдо версии 2.6.10. #86623 (Konstantin Bogdanov). - Отключена попытка перехвата
memalignна darwin. #86769 (Konstantin Bogdanov). - Обновление
krb5до версии 1.22.1-final. #86836 (Konstantin Bogdanov). - Исправлена распаковка имён crate Rust в
list-licenses.sh. #87305 (Konstantin Bogdanov).
Релиз ClickHouse 25.8 LTS, 2025-08-28
Обратное несовместимое изменение
- Выводить
Array(Dynamic)вместо безымянногоTupleдля массивов значений с разными типами в JSON. Чтобы использовать прежнее поведение, отключите настройкуinput_format_json_infer_array_of_dynamic_from_array_of_different_types. #80859 (Pavel Kruglov). - Перенести метрики задержки S3 в гистограммы для однородности и упрощения. #82305 (Miсhael Stetsyuk).
- Требовать использования обратных кавычек вокруг идентификаторов с точками в DEFAULT-выражениях, чтобы предотвратить их разбор как составных идентификаторов. #83162 (Pervakov Grigorii).
- Отложенная материализация включена только при использовании анализатора (который используется по умолчанию), чтобы избежать необходимости поддерживать режим без анализатора, который, по нашему опыту, имеет некоторые проблемы (например, при использовании
indexHint()в условиях). #83791 (Igor Nikonov). - По умолчанию записывать значения типа
EnumкакBYTE_ARRAYс логическим типомENUMв формате вывода Parquet. #84169 (Pavel Kruglov). - Включить настройку MergeTree
write_marks_for_substreams_in_compact_partsпо умолчанию. Она существенно улучшает производительность чтения подколонок из недавно созданных Compact‑частей. Серверы с версией менее 25.5 не смогут читать новые Compact‑части. #84171 (Pavel Kruglov). - Предыдущее значение по умолчанию для
concurrent_threads_schedulerбылоround_robin, что оказалось несправедливым при большом количестве однопоточных запросов (например, INSERT). Это изменение делает более безопасный планировщикfair_round_robinзначением по умолчанию. #84747 (Sergei Trifonov). - ClickHouse поддерживает синтаксис heredoc в стиле PostgreSQL:
$tag$ string contents... $tag$, также известный как строковые литералы с долларовым кавычкованием. В предыдущих версиях на теги накладывалось меньше ограничений: они могли содержать произвольные символы, включая пунктуацию и пробелы. Это создаёт неоднозначность при разборе с идентификаторами, которые также могут начинаться с символа доллара. В то же время PostgreSQL разрешает в тегах только буквенно-цифровые символы и подчёркивание. Для решения проблемы теперь мы разрешаем в тегах heredoc только символы слова (буквенно-цифровые символы и подчёркивание). Закрывает #84731. #84846 (Alexey Milovidov). - Функции
azureBlobStorage,deltaLakeAzureиicebergAzureбыли обновлены для корректной проверки разрешенийAZURE. Все кластерные варианты функций (функции с суффиксом-Cluster) теперь сверяют разрешения с соответствующими некластерными аналогами. Дополнительно функцииicebergLocalиdeltaLakeLocalтеперь применяют проверки разрешенийFILE. #84938 (Nikita Mikhaylov). - Включить настройку
allow_dynamic_metadata_for_data_lakes(настройка уровня Table Engine) по умолчанию. #85044 (Daniil Ivanik). - По умолчанию отключить заключение 64‑битных целых чисел в кавычки в форматах JSON. #74079 (Pavel Kruglov)
Новая функция
- Добавлена базовая поддержка диалекта PromQL. Чтобы использовать его, установите
dialect='promql'в clickhouse-client, укажите таблицу TimeSeries с помощью настройкиpromql_table_name='X'и выполняйте запросы видаrate(ClickHouseProfileEvents_ReadCompressedBytes[1m])[5m:1m]. Кроме того, вы можете обернуть запрос PromQL в SQL:SELECT * FROM prometheusQuery('up', ...);. Пока поддерживаются только функцииrate,deltaиincrease. Унарные/бинарные операторы не поддерживаются. HTTP API отсутствует. #75036 (Vitaly Baranov). - Функция генерации SQL на основе ИИ теперь при наличии может автоматически считывать из переменных окружения ключи ANTHROPIC_API_KEY и OPENAI_API_KEY, что позволяет использовать эту функцию без дополнительной конфигурации. #83787 (Kaushik Iska).
- Реализована поддержка протокола ArrowFlight RPC добавлением новой табличной функции
arrowflight. #74184 (zakr600). - Теперь все таблицы поддерживают виртуальный столбец
_table(не только таблицы с движкомMerge), что особенно полезно для запросов с оператором UNION ALL. #63665 (Xiaozhe Yu). - Добавлена возможность использовать любую политику хранения (например, объектное хранилище, такое как S3) для внешней агрегации и сортировки. #84734 (Azat Khuzhin).
- Реализована аутентификация в AWS S3 с явно заданной ролью IAM. Реализован OAuth для GCS. Эти возможности до недавнего времени были доступны только в ClickHouse Cloud и теперь открыты в составе open source. Синхронизированы некоторые интерфейсы, например, сериализация параметров подключения для объектных хранилищ. #84011 (Alexey Milovidov).
- Добавлена поддержка position deletes для Iceberg TableEngine. #83094 (Daniil Ivanik).
- Добавлена поддержка Iceberg Equality Deletes. #85843 (Han Fei).
- Поддержка записи в Iceberg при операции CREATE. Закрывает #83927. #83983 (Konstantin Vedernikov).
- Каталоги Glue для записи. #84136 (Konstantин Vedernikov).
- REST-каталоги Iceberg для записи. #84684 (Konstantin Vedernikov).
- Объединяет все файлы позиционных удалений Iceberg в файлы данных. Это уменьшает количество и размеры файлов Parquet в хранилище Iceberg. Синтаксис:
OPTIMIZE TABLE table_name. #85250 (Konstantin Vedernikov). - Поддержка команды
DROP TABLEдля Iceberg (удаление из каталогов REST/Glue и удаление метаданных таблицы). #85395 (Konstantin Vedernikov). - Добавлена поддержка мутаций
ALTER DELETEдля Iceberg в формате merge-on-read. #85549 (Konstantin Vedernikov). - Добавлена поддержка записи в DeltaLake. Закрывает #79603. #85564 (Kseniia Sumarokova).
- Добавлена настройка
delta_lake_snapshot_versionдля чтения снимка указанной версии в табличном движкеDeltaLake. #85295 (Kseniia Sumarokova). - Записывать расширенную статистику Iceberg (размеры столбцов, нижние и верхние границы) в метаданные (записи манифеста) для min-max‑отсечения. #85746 (Konstantin Vedernikov).
- Добавлена поддержка операций add/drop/modify над столбцами в формате Iceberg для простых типов. #85769 (Konstantin Vedernikov).
- Iceberg: добавлена поддержка записи файла version-hint. Это закрывает #85097. #85130 (Konstantin Vedernikov).
- Представления, создаваемые эфемерными пользователями, теперь будут хранить копию соответствующего пользователя и больше не будут становиться недействительными после удаления эфемерного пользователя. #84763 (pufit).
- Индекс векторного сходства теперь поддерживает бинарное квантование. Бинарное квантование существенно снижает потребление памяти и ускоряет процесс построения векторного индекса (за счет более быстрого вычисления расстояний). Также существующая настройка
vector_search_postfilter_multiplierбыла признана устаревшей и заменена более общей настройкой:vector_search_index_fetch_multiplier. #85024 (Shankar Iyer). - Разрешить использование аргументов в формате ключ-значение в табличном движке/функции
s3илиs3Cluster, например,s3('url', CSV, structure = 'a Int32', compression_method = 'gzip'). #85134 (Kseniia Sumarokova). - Новая системная таблица для хранения ошибочных входящих сообщений от движков, таких как Kafka («очередь мёртвых писем»). #68873 (Ilya Golshtein).
- Новая команда SYSTEM RESTORE DATABASE REPLICA для реплицируемых баз данных, аналогичная существующей функциональности восстановления для ReplicatedMergeTree. #73100 (Konstantин Morozov).
- Протокол PostgreSQL теперь поддерживает команду
COPY. #74344 (Konstantin Vedernikov). - Добавлена поддержка клиента C# для протокола MySQL. Закрывает #83992. #84397 (Konstantin Vedernikov).
- Добавлена поддержка чтения и записи в стиле секционирования Hive. #76802 (Arthur Passos).
- Добавлена системная таблица
zookeeper_connection_logдля хранения исторических сведений о соединениях с ZooKeeper. #79494 (János Benjamin Antal). - Серверная настройка
cpu_slot_preemptionвключает вытесняющее планирование CPU для рабочих нагрузок и обеспечивает max-min-справедливое распределение процессорного времени между рабочими нагрузками. Добавлены новые настройки рабочих нагрузок для ограничения использования CPU:max_cpus,max_cpu_shareиmax_burst_cpu_seconds. Подробности: https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling. #80879 (Sergei Trifonov). - Разрывать TCP‑подключение после заданного количества запросов или по достижении заданного порога по времени. Это полезно для более равномерного распределения подключений между узлами кластера за балансировщиком нагрузки. Решает проблему #68000. #81472 (Kenny Sun).
- Параллельные реплики теперь поддерживают использование проекций при выполнении запросов. #82659. #82807 (zoomxi).
- Добавлена поддержка DESCRIBE SELECT в дополнение к DESCRIBE (SELECT ...). #82947 (Yarik Briukhovetskyi).
- Принудительно использовать защищённое соединение для портов mysql_port и postgresql_port. #82962 (tiandiwonder).
- Теперь пользователи могут выполнять поиск по ключам JSON без учета регистра, используя
JSONExtractCaseInsensitive(и другие вариантыJSONExtract). #83770 (Alistair Evans). - Добавлена таблица
system.completions. Закрывает #81889. #83833 (|2ustam). - Добавлена новая функция
nowInBlock64. Пример использования:SELECT nowInBlock64(6)вернёт2025-07-29 17:09:37.775725. #84178 (Halersson Paris). - Добавлена поддержка параметра extra_credentials в AzureBlobStorage для аутентификации с использованием client_id и tenant_id. #84235 (Pablo Marcos).
- Добавлена функция
dateTimeToUUIDv7для преобразования значения типа DateTime в UUIDv7. Пример использования:SELECT dateTimeToUUIDv7(toDateTime('2025-08-15 18:57:56'))возвращает0198af18-8320-7a7d-abd3-358db23b9d5c. #84319 (samradovich). - Агрегатные функции
timeSeriesDerivToGridиtimeSeriesPredictLinearToGridдля ресемплирования данных по временной сетке, определяемой заданными начальной меткой времени, конечной меткой времени и шагом; соответственно вычисляют PromQL-подобные функцииderivиpredict_linear. #84328 (Stephen Chi). - Добавлены две новые функции TimeSeries: -
timeSeriesRange(start_timestamp, end_timestamp, step), -timeSeriesFromGrid(start_timestamp, end_timestamp, step, values). #85435 (Vitaly Baranov). - Добавлен новый синтаксис
GRANT READ ON S3('s3://foo/.*') TO user. #84503 (pufit). - Добавлен новый формат вывода
Hash. Он вычисляет одно хеш-значение для всех столбцов и строк результата. Это полезно для вычисления «отпечатка» результата, например, в случаях, когда узким местом является передача данных. Пример:SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hashвозвращаетe5f9e676db098fdb9530d2059d8c23ef. #84607 (Robert Schulze). - Добавлена возможность устанавливать произвольные наблюдения (watches) в запросах Keeper Multi. #84964 (Mikhail Artemenko).
- Добавлена опция
--max-concurrencyдля инструментаclickhouse-benchmark, которая включает режим с постепенным увеличением числа параллельных запросов. #85623 (Sergei Trifonov). - Добавлена поддержка частично агрегированных метрик. #85328 (Mikhail Artemenko).
Экспериментальные функции
- Включена поддержка коррелированных подзапросов по умолчанию; она больше не считается экспериментальной. #85107 (Dmitry Novik).
- Каталоги озера данных Unity, Glue, Rest и Hive Metastore переведены из экспериментального режима в бета-режим. #85848 (Melvyn Peignon).
- Лёгкие операции обновления и удаления переведены из экспериментального режима в бета-режим.
- Приблизительный векторный поиск с использованием индексов векторного сходства переведён в статус GA. #85888 (Robert Schulze).
- Добавлены движок таблиц Ytsaurus и табличная функция. #77606 (MikhailBurdukov).
- Ранее данные текстового индекса разделялись на несколько сегментов (размер каждого сегмента по умолчанию составлял 256 MiB). Это могло снизить потребление памяти при построении текстового индекса, однако увеличивало требуемый объём дискового пространства и время ответа на запросы. #84590 (Elmi Ahmadov).
Улучшение производительности
- Новая реализация считывателя Parquet. В целом она работает быстрее и поддерживает проталкивание фильтра на уровне страниц и PREWHERE. В настоящий момент является экспериментальной. Используйте настройку
input_format_parquet_use_native_reader_v3, чтобы включить её. #82789 (Michael Kolupaev). - Официальный HTTP-транспорт в библиотеке Azure был заменён на нашу собственную реализацию HTTP‑клиента для Azure Blob Storage. Добавлено несколько настроек для этих клиентов, аналогичных настройкам для S3. Введены агрессивные тайм-ауты установления соединения как для Azure, так и для S3. Улучшены возможности анализа событий и метрик профилирования Azure. Новый клиент включён по умолчанию и обеспечивает значительно более низкие задержки для «холодных» запросов к Azure Blob Storage. Старый клиент на основе
Curlможно вернуть, установивazure_sdk_use_native_client=false. #83294 (alesapin). Предыдущая, официальная реализация клиента Azure была непригодна для использования в продакшене из‑за ужасных всплесков задержек — от пяти секунд до нескольких минут. Мы отказались от этой ужасной реализации и очень этим гордимся. - Обрабатывает индексы в порядке возрастания размера файла. Итоговый порядок индексов отдает приоритет индексам minmax и vector (из-за простоты и селективности соответственно), а затем более компактным индексам. Среди индексов minmax/vector также предпочитаются индексы меньшего размера. #84094 (Maruth Goyal).
- По умолчанию включена настройка MergeTree
write_marks_for_substreams_in_compact_parts. Она значительно улучшает производительность чтения подколонок из вновь созданных Compact-частей. Серверы с версией ниже 25.5 не смогут читать новые Compact-части. #84171 (Pavel Kruglov). - Движок таблицы
azureBlobStorage: кэшировать и повторно использовать токены аутентификации управляемой идентичности, когда это возможно, чтобы избежать ограничения частоты запросов. #79860 (Nick Blakely). - Операции
ALLLEFT/INNERJOIN будут автоматически преобразовываться вRightAny, если правая сторона функционально определяется столбцами ключа соединения (все строки имеют уникальные значения ключа соединения). #84010 (Nikita Taranov). - Добавлен параметр
max_joined_block_size_bytesв дополнение кmax_joined_block_size_rowsдля ограничения потребления памяти при выполнении операций JOIN с «объёмными» столбцами. #83869 (Nikolai Kochetov). - Добавлена новая логика (управляется настройкой
enable_producing_buckets_out_of_order_in_aggregation, по умолчанию включена), которая позволяет отправлять некоторые бакеты в непорядке во время агрегации с экономным использованием памяти. Когда слияние некоторых бакетов агрегации занимает значительно больше времени, чем остальных, это повышает производительность, позволяя инициатору в это время сливать бакеты с более высокими идентификаторами. Недостаток — потенциально более высокое потребление памяти (не должно быть существенным). #80179 (Nikita Taranov). - Добавлена настройка
optimize_rewrite_regexp_functions(включена по умолчанию), которая позволяет оптимизатору преобразовывать некоторые вызовы функцийreplaceRegexpAll,replaceRegexpOneиextractв более простые и эффективные формы при обнаружении определённых шаблонов регулярных выражений. (issue #81981). #81992 (Amos Bird). - Обрабатывать
max_joined_block_rowsвне основного цикла hash JOIN. Незначительно улучшена производительность для ALL JOIN. #83216 (Nikolai Kochetov). - Сначала обрабатывать индексы min-max с более высокой детализацией. Закрывает #75381. #83798 (Maruth Goyal).
- Сделать так, чтобы оконные агрегатные функции с
DISTINCTработали за линейное время, и исправить ошибку вsumDistinct. Закрывает #79792. Закрывает #52253. #79859 (Nihal Z. Miaji). - Запросы векторного поиска с использованием индекса векторного сходства выполняются с меньшей задержкой за счет сокращения операций чтения из хранилища и снижения нагрузки на CPU. #83803 (Shankar Iyer).
- Rendezvous-хеширование для улучшения локальности кэша при распределении нагрузки между параллельными репликами. #82511 (Anton Ivashkin).
- Реализована функция
addManyDefaultsдля комбинаторовIf, благодаря чему агрегатные функции сIfтеперь работают быстрее. #83870 (Raúl Marín). - Вычислять сериализованный ключ в колоннарном формате при группировке по нескольким строковым или числовым столбцам. #83884 (李扬).
- Исключено полное сканирование в случаях, когда анализ индексов приводит к пустым диапазонам при параллельном чтении реплик. #84971 (Eduard Karacharov).
- Попробовать опцию -falign-functions=64 для повышения стабильности тестов производительности. #83920 (Azat Khuzhin).
- Индекс блум-фильтра теперь используется для условий вида
has([c1, c2, ...], column), гдеcolumnне относится к типуArray. Это улучшает производительность таких запросов, делая их по эффективности сопоставимыми с операторомIN. #83945 (Doron David). - Снижено число лишних вызовов memcpy в CompressedReadBufferBase::readCompressedData. #83986 (Raúl Marín).
- Оптимизирован
largestTriangleThreeBucketsза счёт удаления временных данных. #84479 (Alexey Milovidov). - Оптимизировать десериализацию строк за счёт упрощения кода. Закрывает #38564. #84561 (Alexey Milovidov).
- Исправлен расчёт минимального размера задачи для параллельных реплик. #84752 (Nikita Taranov).
- Повышена производительность применения патч‑частей в режиме
Join. #85040 (Anton Popov). - Удалён нулевой байт. Закрывает #85062. Исправлено несколько незначительных багов. Функции
structureToProtobufSchema,structureToCapnProtoSchemaнекорректно записывали нуль-терминирующий байт и использовали перевод строки вместо него. Это приводило к отсутствию перевода строки в выводе и могло приводить к переполнению буфера при использовании других функций, зависящих от нулевого байта (таких какlogTrace,demangle,extractURLParameter,toStringCutToZeroиencrypt/decrypt). Структура словаряregexp_treeне поддерживала обработку строк с нулевыми байтами. ФункцияformatRowNoNewline, вызываемая с форматомValuesили с любым другим форматом без перевода строки в конце строк, ошибочно обрезала последний символ вывода. Функцияstemсодержала ошибку в гарантиях безопасности исключений, которая в очень редком сценарии могла приводить к утечке памяти. Функцияinitcapработала неправильно для аргументов типаFixedString: она не распознавала начало слова в начале строки, если предыдущая строка в блоке заканчивалась на буквенно-цифровой символ. Исправлена уязвимость безопасности формата ApacheORC, которая могла приводить к раскрытию неинициализированной памяти. Изменено поведение функцииreplaceRegexpAllи соответствующего алиасаREGEXP_REPLACE: теперь она может выполнять пустое совпадение в конце строки, даже если предыдущее совпадение обработало всю строку, как в случае^a*|a*$или^|.*— это соответствует семантике JavaScript, Perl, Python, PHP, Ruby, но отличается от семантики PostgreSQL. Реализация многих функций была упрощена и оптимизирована. Документация для нескольких функций была неверной и теперь исправлена. Имейте в виду, что вывод функцииbyteSizeдля столбцов типа String и сложных типов, состоящих из столбцов типа String, изменился (с 9 байт на пустую строку на 8 байт на пустую строку), и это ожидаемое поведение. #85063 (Alexey Milovidov). - Оптимизирована материализация констант в случаях, когда она выполняется исключительно для возврата одной строки. #85071 (Alexey Milovidov).
- Улучшена параллельная обработка файлов с помощью бэкенда delta-kernel-rs. #85642 (Azat Khuzhin).
- Была введена новая настройка enable_add_distinct_to_in_subqueries. При её включении ClickHouse автоматически добавляет DISTINCT к подзапросам в выражениях IN для распределённых запросов. Это может значительно уменьшить размер временных таблиц, передаваемых между шардами, и повысить эффективность использования сети. Примечание: это компромисс — хотя объём сетевого трафика сокращается, на каждом узле требуется дополнительная работа по слиянию (удалению дубликатов). Включайте этот параметр, когда сетевой трафик является узким местом, а стоимость слияния приемлема. #81908 (fhw12345).
- Снижены накладные расходы на отслеживание потребления памяти запросами для выполняемых пользовательских функций. #83929 (Eduard Karacharov).
- Реализована внутренняя фильтрация в хранилище
DeltaLakeс использованиемdelta-kernel-rs(статистика и отсечение партиций). #84006 (Kseniia Sumarokova). - Более гибко настроено отключение пропускающих индексов, зависящих от столбцов, обновляемых «на лету» или с помощью
patch‑частей. Теперь пропускающие индексы не используются только в тех частях, которые затронуты мутациями «на лету» илиpatch‑частями; ранее такие индексы отключались для всех частей. #84241 (Anton Popov). - Выделять минимально необходимый объём памяти под encrypted_buffer для зашифрованных именованных коллекций. #84432 (Pablo Marcos).
- Улучшена поддержка индексов блум-фильтра (обычных,
ngramиtoken), которые теперь используются в случаях, когда первый аргумент — константный массив (множество), а второй — индексируемый столбец (подмножество), что обеспечивает более эффективное выполнение запросов. #84700 (Doron David). - Снижена конкуренция за блокировку хранилища в Keeper. #84732 (Antonio Andelic).
- Добавлена недостающая поддержка
read_in_order_use_virtual_rowдляWHERE. Это позволяет избегать чтения дополнительных кусков данных для запросов с фильтрами, которые не были полностью перенесены вPREWHERE. #84835 (Nikolai Kochetov). - Позволяет асинхронно перебирать объекты таблицы Iceberg без явного хранения объектов для каждого файла данных. #85369 (Daniil Ivanik).
- Выполнять некоррелированный
EXISTSкак скалярный подзапрос. Это позволяет использовать кэш скалярных подзапросов и выполнять свёртывание результата к константе, что полезно для индексов. Для совместимости добавлена новая настройкаexecute_exists_as_scalar_subquery=1. #85481 (Nikolai Kochetov).
Улучшения
- Добавлены настройки
database_replicated, задающие значения по умолчанию для параметров DatabaseReplicatedSettings. Если параметр не указан в запросе создания реплицируемой базы данных, используется значение изdatabase_replicated. #85127 (Tuan Pham Anh). - Добавлена возможность изменять размер столбцов таблицы в веб-интерфейсе (play). #84012 (Doron David).
- Добавлена поддержка сжатого файла
.metadata.jsonс помощью настройкиiceberg_metadata_compression_method. Поддерживаются все методы сжатия ClickHouse. Это закрывает #84895. #85196 (Konstantin Vedernikov). - Показывать в выводе
EXPLAIN indexes = 1количество диапазонов для чтения. #79938 (Christoph Wurm). - Добавлены настройки для задания размера блока сжатия ORC и изменено значение по умолчанию с 64 КБ до 256 КБ для соответствия Spark и Hive. #80602 (李扬).
- Добавлен файл
columns_substreams.txtв части формата Wide для отслеживания всех подпотоков, хранящихся в части. Это помогает отслеживать динамические потоки в типах JSON и Dynamic и таким образом избегать чтения образца данных этих столбцов для получения списка динамических потоков (например, для расчёта размеров столбцов). Также теперь все динамические потоки отражены вsystem.parts_columns. #81091 (Pavel Kruglov). - В команду clickhouse format добавлен флаг CLI --show_secrets, который по умолчанию скрывает конфиденциальные данные. #81524 (Nikolai Ryzhov).
- Запросы чтения и записи в S3 теперь ограничиваются по пропускной способности на уровне HTTP-сокета (а не целого запроса к S3), чтобы избежать проблем с ограничением, задаваемым параметрами
max_remote_read_network_bandwidth_for_serverиmax_remote_write_network_bandwidth_for_server. #81837 (Sergei Trifonov). - Разрешено использовать разные сопоставления строк (collation) для одного и того же столбца в разных окнах (для оконных функций). #82877 (Yakov Olkhovskiy).
- Добавлен инструмент для моделирования, визуализации и сравнения селекторов слияния. #71496 (Sergei Trifonov).
- Добавлена поддержка табличных функций
remote*для параллельных реплик, если кластер указан в аргументеaddress_expression. Также исправлена проблема #73295. #82904 (Igor Nikonov). - Установлен уровень TRACE для всех сообщений журнала, связанных с записью файлов резервных копий. #82907 (Hans Krutzer).
- Пользовательские функции с необычными именами и кодеками могут непоследовательно форматироваться SQL-форматтером. Исправление закрывает #83092. #83644 (Alexey Milovidov).
- Теперь пользователи могут использовать типы Time и Time64 внутри типа JSON. #83784 (Yarik Briukhovetskyi).
- Операции JOIN с параллельными репликами теперь используют логический шаг JOIN. В случае каких-либо проблем с запросами с JOIN, использующими параллельные реплики, попробуйте выполнить
SET query_plan_use_new_logical_join_step=0и сообщите об ошибке. #83801 (Vladimir Cherkasov). - Исправлена проблема совместимости функции cluster_function_process_archive_on_multiple_nodes. #83968 (Kseniia Sumarokova).
- Реализована возможность изменять настройки вставки для материализованных представлений (
mv) на уровне таблицыS3Queue. Добавлены новые настройки уровняS3Queue:min_insert_block_size_rows_for_materialized_viewsиmin_insert_block_size_bytes_for_materialized_views. По умолчанию используются настройки профиля, которые могут быть переопределены настройками уровняS3Queue. #83971 (Kseniia Sumarokova). - Добавлено профильное событие
MutationAffectedRowsUpperBound, которое показывает количество затронутых строк в мутации (например, общее число строк, удовлетворяющих условию запросаALTER UPDATEилиALTER DELETE). #83978 (Anton Popov). - Использовать информацию из cgroup (если применимо, то есть
memory_worker_use_cgroupи cgroups доступны) для корректировки трекера памяти (memory_worker_correct_memory_tracker). #83981 (Azat Khuzhin). - MongoDB: неявное преобразование строк в числовые типы. Ранее, если строковое значение получалось из источника MongoDB для числового столбца в таблице ClickHouse, выбрасывалось исключение. Теперь движок пытается автоматически преобразовать строку в числовое значение. Закрывает #81167. #84069 (Kirill Nikiforov).
- Выделять группы цифр в форматах
Prettyдля числовых типовNullable. #84070 (Alexey Milovidov). - Dashboard: всплывающая подсказка больше не будет выходить за верхнюю границу контейнера. #84072 (Alexey Milovidov).
- Немного улучшен внешний вид точек на дашборде. #84074 (Alexey Milovidov).
- У Dashboard теперь немного более удачный фавикон. #84076 (Alexey Milovidov).
- Web UI: Теперь браузеры могут сохранять пароль. Также запоминаются значения URL. #84087 (Alexey Milovidov).
- Добавлена поддержка применения дополнительного ACL на отдельных узлах Keeper с помощью конфигурации
apply_to_children. #84137 (Antonio Andelic). - Исправлено использование варианта сериализации дискриминаторов Variant «compact» в MergeTree. Ранее он не использовался в некоторых случаях, когда мог бы использоваться. #84141 (Pavel Kruglov).
- Добавлена серверная настройка
logs_to_keepв настройки реплицируемых баз данных, которая позволяет изменять значение параметраlogs_to_keepпо умолчанию. Более низкие значения уменьшают число ZNode (особенно при большом количестве баз данных), а более высокие значения позволяют отсутствующей реплике догнать остальные спустя более длительный период времени. #84183 (Alexey Khatskevich). - Добавлена настройка
json_type_escape_dots_in_keysдля экранирования точек в ключах JSON при разборе типов JSON. По умолчанию настройка отключена. #84207 (Pavel Kruglov). - Проверьте, не было ли соединение отменено, прежде чем проверять EOF, чтобы избежать чтения из закрытого соединения. Исправляет #83893. #84227 (Raufs Dunamalijevs).
- Немного улучшены цвета выделения текста в веб-интерфейсе. Существенная разница заметна только для выделенных ячеек таблиц в тёмной теме. В предыдущих версиях контраст между текстом и фоном выделения был недостаточным. #84258 (Alexey Milovidov).
- Улучшена обработка завершения работы сервера для клиентских подключений за счёт упрощения внутренних проверок. #84312 (Raufs Dunamalijevs).
- Добавлена настройка
delta_lake_enable_expression_visitor_loggingдля отключения логирования обходчика выражений, поскольку такие логи могут быть избыточно подробными даже на уровне логированияtestпри отладке. #84315 (Kseniia Sumarokova). - Метрики уровня cgroup и уровня всей системы теперь экспортируются вместе. Метрики уровня cgroup имеют имена
CGroup<Metric>, а метрики уровня ОС (собираемые из procfs) — именаOS<Metric>. #84317 (Nikita Taranov). - Графики в веб-интерфейсе стали немного лучше. Ненамного, но лучше. #84326 (Alexey Milovidov).
- Изменено значение по умолчанию для настройки реплицируемой базы данных
max_retries_before_automatic_recoveryна 10, что в некоторых случаях ускорит восстановление. #84369 (Alexander Tokmakov). - Исправлено форматирование оператора
CREATE USERпри использовании параметров запроса (например,CREATE USER {username:Identifier} IDENTIFIED WITH no_password). #84376 (Azat Khuzhin). - Добавлены параметры
backup_restore_s3_retry_initial_backoff_ms,backup_restore_s3_retry_max_backoff_ms,backup_restore_s3_retry_jitter_factorдля настройки стратегии задержки перед повторными попытками S3, используемой во время операций резервного копирования и восстановления. #84421 (Julia Kartseva). - Исправление упорядоченного режима S3Queue: завершать работу раньше при вызове shutdown. #84463 (Kseniia Sumarokova).
- Добавлена поддержка записи в Iceberg с возможностью чтения через pyiceberg. #84466 (Konstantin Vedernikov).
- Разрешено приведение типов значений множеств при проталкивании фильтров
IN/GLOBAL INк первичным ключам хранилищ KeyValue (например, EmbeddedRocksDB, KeeperMap). #84515 (Eduard Karacharov). - Обновлён chdig до версии 25.7.1. #84521 (Azat Khuzhin).
- Ошибки низкого уровня при выполнении UDF теперь приводят к возврату кода ошибки
UDF_EXECUTION_FAILED, тогда как ранее могли возвращаться различные коды ошибок. #84547 (Xu Jia). - Добавлена команда
get_aclв KeeperClient. #84641 (Antonio Andelic). - Добавлена возможность указания snapshot-версии для движков таблиц data lake. #84659 (Pete Hampton).
- Добавлена метрика размера для
ConcurrentBoundedQueueс метками по типу очереди (то есть для чего предназначена очередь) и идентификатору очереди (то есть случайно сгенерированному идентификатору текущего экземпляра очереди). #84675 (Miсhael Stetsyuk). - Таблица
system.columnsтеперь поддерживает псевдонимcolumnдля существующего столбцаname. #84695 (Yunchi Pang). - Новая настройка MergeTree
search_orphaned_parts_drivesдля ограничения области поиска частей, например по дискам с локальными метаданными. #84710 (Ilya Golshtein). - Добавлена 4LW-команда Keeper
lgrqдля включения и отключения логирования полученных запросов. #84719 (Antonio Andelic). - Сопоставлять заголовки external auth forward_headers без учета регистра. #84737 (ingodwerust).
- Инструмент
encrypt_decryptтеперь поддерживает шифрованные соединения с ZooKeeper. #84764 (Roman Vasin). - Добавлен столбец
format_stringв таблицуsystem.errors. Этот столбец необходим для группировки ошибок одного типа в правилах оповещений. #84776 (Miсhael Stetsyuk). - Обновлён
clickhouse-format: добавлена поддержка параметра--highlightкак псевдонима для--hilite. - Обновлёнclickhouse-client: добавлена поддержка параметра--hiliteкак псевдонима для--highlight. - Обновлена документация поclickhouse-formatс учётом этих изменений. #84806 (Rishabh Bhardwaj). - Исправлено чтение таблиц Iceberg по идентификаторам полей для сложных типов. #84821 (Konstantin Vedernikov).
- Добавлена новая настройка
backup_slow_all_threads_after_retryable_s3_error, чтобы уменьшить нагрузку на S3 во время массовых повторных попыток, вызванных ошибками типаSlowDown, за счет замедления работы всех потоков, как только обнаружена первая повторяемая ошибка. #84854 (Julia Kartseva). - Не создавать и не переименовывать старую временную таблицу non-append RMV DDL в реплицируемых БД. #84858 (Tuan Pham Anh).
- Ограничен размер кэша записей журнала Keeper по количеству записей с помощью параметров
keeper_server.coordination_settings.latest_logs_cache_entry_count_thresholdиkeeper_server.coordination_settings.commit_logs_cache_entry_count_threshold. #84877 (Antonio Andelic). - Теперь можно использовать
simdjsonна неподдерживаемых архитектурах (ранее это приводило к ошибкамCANNOT_ALLOCATE_MEMORY). #84966 (Azat Khuzhin). - Асинхронное логирование: сделать ограничения настраиваемыми и добавить средства интроспекции. #85105 (Raúl Marín).
- Собирать все удалённые объекты для выполнения одной операции удаления в объектном хранилище. #85316 (Mikhail Artemenko).
- Текущая реализация файлов позиционного удаления в Iceberg держит все данные в оперативной памяти. Это может быть достаточно затратно, если файлы позиционного удаления большие, что часто и бывает. Моя реализация хранит в оперативной памяти только последнюю группу строк файлов удаления в формате Parquet, что значительно дешевле. #85329 (Konstantin Vedernikov).
- chdig: исправлены артефакты, остающиеся на экране, устранён сбой после редактирования запроса в редакторе, поиск по
editorвpath, обновление до версии 25.8.1. #85341 (Azat Khuzhin). - Добавлен отсутствовавший параметр
partition_columns_in_data_fileв конфигурацию Azure. #85373 (Arthur Passos). - Разрешён нулевой шаг в функциях семейства
timeSeries*ToGrid. Это часть #75036. #85390 (Vitaly Baranov). - Добавлен флаг show_data_lake_catalogs_in_system_tables для управления добавлением в system.tables таблиц из data lake. Решает #85384. #85411 (Smita Kulkarni).
- Добавлена поддержка расширения макросов в
remote_fs_zero_copy_zookeeper_path. #85437 (Mikhail Koviazin). - ИИ в clickhouse-client станет выглядеть немного лучше. #85447 (Alexey Milovidov).
- Включить trace_log.symbolize по умолчанию для ранее созданных развёртываний. #85456 (Azat Khuzhin).
- Реализована поддержка большего числа случаев использования составных идентификаторов. В частности, улучшена совместимость
ARRAY JOINсо старым анализатором. Добавлена новая настройкаanalyzer_compatibility_allow_compound_identifiers_in_unflatten_nestedдля сохранения прежнего поведения. #85492 (Nikolai Kochetov). - Игнорировать UNKNOWN_DATABASE при получении размеров столбцов таблиц из system.columns. #85632 (Azat Khuzhin).
- Добавлено ограничение (настройка таблицы
max_uncompressed_bytes_in_patches) на суммарный объём несжатых данных в патчевых частях. Это предотвращает значительное замедление выполнения запросов SELECT после легковесных обновлений и возможное злоупотребление легковесными обновлениями. #85641 (Anton Popov). - Добавлен столбец
parameterвsystem.grants, чтобы определять тип источника дляGRANT READ/WRITEи движок таблицы дляGRANT TABLE ENGINE. #85643 (MikhailBurdukov). - Исправлена обработка висячей запятой в списке столбцов в запросе CREATE DICTIONARY после столбца с параметрами, например Decimal(8). Закрывает #85586. #85653 (Nikolay Degterinsky).
- Добавлена поддержка внутренних массивов для функции
nested. #85719 (Nikolai Kochetov). - Все выделения памяти, выполняемые внешними библиотеками, теперь видны трекеру памяти ClickHouse и корректно учитываются. Это может привести к «повышенному» сообщаемому объему потребляемой памяти для некоторых запросов или к ошибкам
MEMORY_LIMIT_EXCEEDED. #84082 (Nikita Mikhaylov).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Этот pull request исправляет обработку метаданных при выполнении запросов к таблицам Iceberg через REST‑каталог. ... #80562 (Saurabh Kumar Ojha).
- Исправлена логика markReplicasActive в DDLWorker и DatabaseReplicatedDDLWorker. #81395 (Tuan Pham Anh).
- Исправлен откат столбца типа Dynamic при ошибке парсинга. #82169 (Pavel Kruglov).
- Функция
trimпри вызове только с константными аргументами теперь возвращает константную результирующую строку. (Ошибка #78796). #82900 (Robert Schulze). - Исправлена логическая ошибка, приводившая к дублированию подзапросов при включённом
optimize_syntax_fuse_functions, закрыт тикет #75511. #83300 (Vladimir Cherkasov). - Исправлен некорректный результат запросов с условием
WHERE ... IN (<subquery>)и включённым кэшем условий запроса (настройкаuse_query_condition_cache). #83445 (LB7666). - Ранее функция
gcsне требовала каких‑либо прав доступа для использования. Теперь для её использования проверяется наличие привилегииGRANT READ ON S3. Закрывает #70567. #83503 (pufit). - Пропускать недоступные узлы при выполнении INSERT SELECT из s3Cluster() в реплицированную таблицу MergeTree. #83676 (Igor Nikonov).
- Исправлена обработка операций записи с добавлением (в MergeTree, используемом для экспериментальных транзакций) для типов метаданных
plain_rewritable/plain, которые ранее просто игнорировались. #83695 (Tuan Pham Anh). - Скрывать данные аутентификации в реестре схем Avro, чтобы они не отображались пользователю и не попадали в журналы. #83713 (János Benjamin Antal).
- Исправлена проблема, при которой при создании таблицы MergeTree с
add_minmax_index_for_numeric_columns=1илиadd_minmax_index_for_string_columns=1индекс впоследствии материализуется во время операции ALTER, что мешает корректной инициализации базы данных Replicated на новой реплике. #83751 (Nikolay Degterinsky). - Исправлен модуль записи Parquet, записывавший некорректные значения статистики min/max для типов Decimal. #83754 (Michael Kolupaev).
- Исправлена сортировка значений NaN для типа
LowCardinality(Float32|Float64|BFloat16). #83786 (Pervakov Grigorii). - При восстановлении из резервной копии пользователь-определитель (definer) может не быть сохранён в бэкапе, что приведёт к повреждению всей резервной копии. Чтобы это исправить, проверка прав при создании целевой таблицы во время восстановления откладывается и выполняется только во время выполнения запроса. #83818 (pufit).
- Исправлено падение клиента из-за соединения, оставшегося в отключённом состоянии после неудачного INSERT. #83842 (Azat Khuzhin).
- Теперь можно ссылаться на любую таблицу в аргументе
view(...)табличной функцииremoteпри включённом анализаторе запросов. Исправляет #78717. Исправляет #79377. #83844 (Dmitry Novik). - Вызов onprogress в jsoneachrowwithprogress теперь синхронизирован с финализацией. #83879 (Sema Checherinda).
- Закрывает #81303. #83892 (Konstantin Vedernikov).
- Исправлены функции colorSRGBToOKLCH/colorOKLCHToSRGB при одновременном использовании константных и неконстантных аргументов. #83906 (Azat Khuzhin).
- Исправлена запись JSON-путей со значениями NULL в формате RowBinary. #83923 (Pavel Kruglov).
- Исправлена проблема переполнения больших значений (>2106-02-07) при приведении типа Date к DateTime64. #83982 (Yarik Briukhovetskyi).
- Всегда применять параметр
filesystem_prefetches_limit(а не только изMergeTreePrefetchedReadPool). #83999 (Azat Khuzhin). - Исправлена редкая ошибка, из-за которой запрос
MATERIALIZE COLUMNмог приводить к появлению неожиданных файлов вchecksums.txtи в результате — к отсоединённым частям данных. #84007 (alesapin). - Исправлена логическая ошибка
Expected single dictionary argument for functionпри выполнении JOIN по условию неравенства, когда один из столбцов имеет типLowCardinality, а другой является константой. Закрывает #81779. #84019 (Alexey Milovidov). - Исправлена ошибка, приводившая к падению
clickhouse clientпри использовании в интерактивном режиме с подсветкой синтаксиса. #84025 (Bharat Nallan). - Исправлены ошибки, приводившие к некорректным результатам при совместном использовании кэша условий запроса и рекурсивных CTE (issue #81506). #84026 (zhongyuankai).
- Исправлена обработка исключений при периодическом обновлении партиций. #84083 (Azat Khuzhin).
- Исправлено объединение фильтра с условием JOIN в случаях, когда операнды сравнения на равенство имеют разные типы или ссылаются на константы. Устраняет #83432. #84145 (Dmitry Novik).
- Исправлен редкий сбой ClickHouse, возникавший в случае, когда в таблице есть projection, установлено
lightweight_mutation_projection_mode = 'rebuild', и пользователь выполняет операцию легковесного удаления, которая удаляет ВСЕ строки из любого блока таблицы. #84158 (alesapin). - Устранена взаимоблокировка, вызванная фоновым потоком проверки отмены. #84203 (Antonio Andelic).
- Исправлен бесконечный рекурсивный разбор некорректных определений
WINDOW. Устраняет #83131. #84242 (Dmitry Novik). - Исправлена ошибка, приводившая к некорректному кодированию и декодированию Bech32. Изначально ошибка не была обнаружена, поскольку онлайн-реализация алгоритма, использовавшаяся для тестирования, имела ту же проблему. #84257 (George Larionov).
- Исправлено некорректное построение пустых кортежей в функции
array(). Это устраняет #84202. #84297 (Amos Bird). - Устранена ошибка
LOGICAL_ERRORдля запросов с параллельными репликами и несколькими соединениями INNER JOIN, за которыми следует RIGHT JOIN. Не используйте параллельные реплики для таких запросов. #84299 (Vladimir Cherkasov). - Ранее индексы
setне учитывали столбцыNullableпри проверке того, проходят ли гранулы фильтр (issue #75485). #84305 (Elmi Ahmadov). - Теперь ClickHouse читает таблицы из каталога Glue, где тип таблицы указан строчными буквами. #84316 (alesapin).
- Не пытайтесь заменять табличные функции их кластерными аналогами при использовании JOIN или подзапросов. #84335 (Konstantin Bogdanov).
- Исправлено использование логгера в
IAccessStorage. #84365 (Konstantin Bogdanov). - Исправлена логическая ошибка в легковесных обновлениях, изменяющих все столбцы таблицы. #84380 (Anton Popov).
- Кодек
DoubleDeltaтеперь может применяться только к столбцам числового типа. В частности, столбцы типаFixedStringбольше нельзя сжимать с помощьюDoubleDelta. (исправляет #80220). #84383 (Jimmy Aguilar Mena). - Сравнение со значением NaN выполнялось с использованием некорректных диапазонов при оценке индекса
MinMax. #84386 (Elmi Ahmadov). - Исправлено чтение столбца типа Variant при ленивой материализации. #84400 (Pavel Kruglov).
- Рассматривать
zoutofmemoryкак аппаратную ошибку, иначе будет выброшено логическое исключение. См. https://github.com/clickhouse/clickhouse-core-incidents/issues/877. #84420 (Han Fei). - Исправлен сбой сервера, возникавший, когда пользователь, созданный с
no_password, пытался выполнить вход после изменения настройки сервераallow_no_passwordна 0. #84426 (Shankar Iyer). - Исправлены записи в журнале изменений Keeper, выполнявшиеся в неверном порядке. Ранее могли существовать незавершённые операции записи в журнал, но операция отката могла приводить к конкурентному изменению целевого файла. Это приводило к неконсистентным логам и возможной потере данных. #84434 (Antonio Andelic).
- Теперь, если все TTL удалены из таблицы, MergeTree не будет выполнять никаких операций, связанных с TTL. #84441 (alesapin).
- Параллельный распределённый INSERT SELECT с LIMIT был разрешён, что некорректно, так как это приводило к дублированию данных в целевой таблице. #84477 (Igor Nikonov).
- Исправлено отсечение файлов по виртуальному столбцу в дата-лейках. #84520 (Kseniia Sumarokova).
- Исправлены утечки памяти в Keeper при использовании хранилища на RocksDB (итераторы не уничтожались). #84523 (Azat Khuzhin).
- Исправлена проблема, из-за которой
ALTER MODIFY ORDER BYне проверял столбцы TTL в ключах сортировки. Столбцы TTL теперь корректно отклоняются при использовании в выражении ORDER BY во время операций ALTER, что предотвращает возможное повреждение таблиц. #84536 (xiaohuanlin). - Измените значение
allow_experimental_delta_kernel_rsдля версий до 25.5 наfalseдля обеспечения совместимости. #84587 (Kseniia Sumarokova). - Перестаёт считывать схему из manifest-файлов и вместо этого хранит соответствующие схемы для каждого snapshot независимо. Определяет соответствующую схему для каждого файла данных из его snapshot. Предыдущее поведение нарушало спецификацию Iceberg для записей manifest-файлов со статусом existing. #84588 (Daniil Ivanik).
- Исправлена проблема, при которой настройка Keeper
rotate_log_storage_interval = 0приводила к аварийному завершению работы ClickHouse. (issue #83975). #84637 (George Larionov). - Исправлена логическая ошибка S3Queue «Table is already registered». Закрывает #84433. Ошибка появилась после https://github.com/ClickHouse/ClickHouse/pull/83530. #84677 (Kseniia Sumarokova).
- Блокировать 'mutex' при получении zookeeper из 'view' в RefreshTask. #84699 (Tuan Pham Anh).
- Исправлена ошибка
CORRUPTED_DATA, возникающая при использовании ленивых столбцов с внешней сортировкой. #84738 (János Benjamin Antal). - Исправлено отсечение столбцов (column pruning) с использованием
delta-kernelв хранилищеDeltaLake. Закрывает #84543. #84745 (Kseniia Sumarokova). - Реализовано обновление учетных данных в delta-kernel хранилища DeltaLake. #84751 (Kseniia Sumarokova).
- Исправлен избыточный запуск внутренних резервных копий после проблем с подключением. #84755 (Vitaly Baranov).
- Исправлена проблема, из-за которой запрос к удалённому источнику с задержкой мог приводить к выходу за пределы вектора. #84820 (George Larionov).
- Токенизаторы
ngramиno_opбольше не приводят к сбою работы экспериментального текстового индекса для пустых входных токенов. #84849 (Robert Schulze). - Исправлены легковесные обновления для таблиц с движками
ReplacingMergeTreeиCollapsingMergeTree. #84851 (Anton Popov). - Корректно сохранять все настройки в метаданных таблицы для таблиц с движком object queue. #84860 (Antonio Andelic).
- Исправлено общее число
watches, возвращаемое Keeper. #84890 (Antonio Andelic). - Исправлены облегчённые обновления для таблиц с движком
ReplicatedMergeTree, созданных на серверах с версией ниже 25.7. #84933 (Anton Popov). - Исправлена работа облегчённых обновлений для таблиц с нереплицированным движком
MergeTreeпосле выполнения запросаALTER TABLE ... REPLACE PARTITION. #84941 (Anton Popov). - Исправлена генерация имен столбцов для логических литералов: теперь используются "true"/"false" вместо "1"/"0", что предотвращает конфликты имен столбцов между логическими и целочисленными литералами в запросах. #84945 (xiaohuanlin).
- Исправлена рассинхронизация учёта памяти в background schedule pool и executor. #84946 (Azat Khuzhin).
- Исправлены возможные проблемы с некорректной сортировкой в табличном движке Merge. #85025 (Xiaozhe Yu).
- Реализованы недостающие API для DiskEncrypted. #85028 (Azat Khuzhin).
- Добавлена проверка при использовании коррелированного подзапроса в распределённом контексте, чтобы избежать сбоя. Исправляет #82205. #85030 (Dmitry Novik).
- Теперь Iceberg не пытается кэшировать соответствующую версию снимка (snapshot) между запросами
SELECTи всегда пытается честно определять актуальный снимок. Предыдущая попытка кэшировать снимок Iceberg приводила к проблемам при использовании таблицы Iceberg с функцией путешествия во времени. #85038 (Daniil Ivanik). - Исправлен двойной вызов
freeвAzureIteratorAsync. #85064 (Nikita Taranov). - Улучшено сообщение об ошибке при попытке создать пользователя, идентифицируемого с помощью JWT. #85072 (Konstantin Bogdanov).
- Исправлена очистка патч-частей в
ReplicatedMergeTree. Ранее результат легковесного обновления мог временно не отображаться на реплике до тех пор, пока слитая или мутировавшая часть, материализующая патч-части, не будет загружена с другой реплики. #85121 (Anton Popov). - Исправлена ошибка illegal_type_of_argument в mv, когда типы различаются. #85135 (Sema Checherinda).
- Исправлен сбой сегментации в реализации delta-kernel. #85160 (Kseniia Sumarokova).
- Исправлена проблема с восстановлением реплицируемых баз данных в случаях, когда перемещение файла метаданных занимает много времени. #85177 (Tuan Pham Anh).
- Исправлена ошибка
Not-ready SetдляIN (subquery)в настройкеadditional_table_filters expression. #85210 (Nikolai Kochetov). - Убраны лишние вызовы
getStatus()при выполнении запросов SYSTEM DROP REPLICA. Исправлена ситуация, когда таблица удаляется в фоновом режиме и выбрасывается исключениеShutdown for storage is called. #85220 (Nikolay Degterinsky). - Исправлена гонка в реализации delta-kernel для движка
DeltaLake. #85221 (Kseniia Sumarokova). - Исправлено чтение партиционированных данных с отключённым delta-kernel в движке
DeltaLake. Ошибка появилась в версии 25.7 (https://github.com/ClickHouse/ClickHouse/pull/81136). #85223 (Kseniia Sumarokova). - Добавлены отсутствовавшие проверки длины имён таблиц в запросах CREATE OR REPLACE и RENAME. #85326 (Michael Kolupaev).
- Исправлено создание RMV на новой реплике реплицированной базы данных, если DEFINER был удалён. #85327 (Nikolay Degterinsky).
- Исправлена запись в Iceberg для сложных типов данных. #85330 (Konstantin Vedernikov).
- Для сложных типов запись нижних и верхних границ не поддерживается. #85332 (Konstantin Vedernikov).
- Исправлена логическая ошибка при чтении с помощью функций объектного хранилища через таблицу Distributed или функцию remote. Исправления: #84658, #85173, #52022. #85359 (alesapin).
- Исправлена проблема с резервным копированием частей с повреждёнными проекциями. #85362 (Antonio Andelic).
- Запрещено использовать столбец
_part_offsetв проекциях в релизах до его стабилизации. #85372 (Sema Checherinda). - Исправлено падение и повреждение данных при выполнении ALTER UPDATE для JSON. #85383 (Pavel Kruglov).
- Запросы с параллельными репликами, которые используют оптимизацию чтения в обратном порядке, могут выдавать некорректные результаты. #85406 (Igor Nikonov).
- Исправлено возможное неопределённое поведение (аварийное завершение) в случае MEMORY_LIMIT_EXCEEDED во время десериализации String. #85440 (Azat Khuzhin).
- Исправлены некорректные метрики KafkaAssignedPartitions и KafkaConsumersWithAssignment. #85494 (Ilya Golshtein).
- Исправлено занижение значения метрики processed_bytes при использовании PREWHERE (явного или автоматического). #85495 (Michael Kolupaev).
- Исправлено условие раннего выхода для замедления скорости запросов к S3: теперь для включения механизма замедления, когда все потоки приостановлены из‑за повторимой ошибки, достаточно, чтобы был истинным либо
s3_slow_all_threads_after_network_error, либоbackup_slow_all_threads_after_retryable_s3_error, вместо необходимости одновременной истинности обоих. #85505 (Julia Kartseva). - Этот PR исправляет получение метаданных при выполнении запросов к таблицам Iceberg через REST‑каталог. ... #85531 (Saurabh Kumar Ojha).
- Исправлен редкий сбой при асинхронных вставках, изменяющих настройки
log_commentилиinsert_deduplication_token. #85540 (Anton Popov). - Параметры, такие как date_time_input_format, не учитывались при использовании HTTP с multipart/form-data. #85570 (Sema Checherinda).
- Исправлена проблема с маскированием секретов в табличных функциях icebergS3Cluster и icebergAzureCluster. #85658 (MikhailBurdukov).
- Исправлена потеря точности в
JSONExtractпри преобразовании числовых значений JSON в типы Decimal. Теперь числовые значения JSON сохраняют своё точное десятичное представление, во избежание ошибок округления чисел с плавающей запятой. #85665 (ssive7b). - Исправлена ошибка
LOGICAL_ERRORпри использованииCOMMENT COLUMN IF EXISTSв том же запросеALTERпослеDROP COLUMN. Теперь предложениеIF EXISTSкорректно пропускает операцию добавления комментария, если столбец был удалён в рамках того же запроса. #85688 (xiaohuanlin). - Исправлено чтение значения счётчика из кэша для Delta Lake. #85704 (Kseniia Sumarokova).
- Исправлена ошибка сегментации в CoalescingMergeTree при работе с большими строками. Это закрывает #84582. #85709 (Konstantин Vedernikov).
- Обновлена временная метка метаданных при записях в Iceberg. #85711 (Konstantin Vedernikov).
- Использование
distributed_depthв качестве индикатора функции *cluster было некорректным и могло приводить к дублированию данных; вместо него используйтеclient_info.collaborate_with_initiator. #85734 (Konstantin Bogdanov). - Spark не может читать файлы position delete. #85762 (Konstantin Vedernikov).
- Исправлен параметр
send_logs_source_regexp(после рефакторинга асинхронного логирования в #85105). #85797 (Azat Khuzhin). - Исправлено возможное некорректное поведение словарей с
update_fieldпри ошибкеMEMORY_LIMIT_EXCEEDED. #85807 (Azat Khuzhin). - Добавлена поддержка глобальных констант из выражения
WITHдля параллельной распределённой операцииINSERT SELECTс целевой таблицейDistributed. Ранее запрос мог приводить к ошибкеUnknown expression identifier. #85811 (Nikolai Kochetov). - Скрывать учетные данные для
deltaLakeAzure,deltaLakeCluster,icebergS3ClusterиicebergAzureCluster. #85889 (Julian Maicher). - Исправлена логическая ошибка при попытке
CREATE ... AS (SELECT * FROM s3Cluster(...))при использованииDatabaseReplicated. #85904 (Konstantin Bogdanov). - Исправляет HTTP-запросы, выполняемые табличной функцией
url(), чтобы они корректно включали номер порта в заголовокHostпри доступе к нестандартным портам. Это устраняет ошибки аутентификации при использовании предварительно подписанных URL с S3-совместимыми сервисами, такими как MinIO, работающими на нестандартных портах, что распространено в средах разработки. (Исправляет #85898). #85921 (Tom Quist). - Теперь Unity Catalog будет игнорировать схемы с нестандартными типами данных для таблиц, которые не являются Delta-таблицами. Исправляет #85699. #85950 (alesapin).
- Исправлена поддержка nullable-полей в iceberg. #85977 (Konstantin Vedernikov).
- Исправлена ошибка в восстановлении базы данных
Replicated: если имя таблицы содержало символ%, во время восстановления таблица могла быть повторно создана под другим именем. #85987 (Alexander Tokmakov). - Исправлена проблема с восстановлением из резервной копии, приводившая к ошибке
BACKUP_ENTRY_NOT_FOUNDпри восстановлении пустой таблицыMemory. #86012 (Julia Kartseva). - Добавлены проверки для sharding_key при выполнении ALTER для распределённой таблицы. Ранее ошибочный ALTER мог приводить к нарушению определения таблицы и необходимости перезапуска сервера. #86015 (Nikolay Degterinsky).
- Не создавать пустой файл удалений Iceberg. #86061 (Konstantin Vedernikov).
- Исправлена проблема, из-за которой слишком большие значения параметров приводили к сбоям в работе таблиц S3Queue и мешали перезапуску реплик. #86074 (Nikolay Degterinsky).
Улучшения сборки/тестирования/упаковки
- По умолчанию использовать зашифрованные диски для тестов с S3. #59898 (Nikita Mikhaylov).
- Использовать бинарный файл
clickhouseв интеграционных тестах, чтобы получать полные отладочные символы (без strip). #83779 (Mikhail f. Shiryaev). - Обновлена внутренняя библиотека libxml2 с версии 2.14.4 до 2.14.5. #84230 (Robert Schulze).
- Обновлён внутренний curl с версии 8.14.0 до 8.15.0. #84231 (Robert Schulze).
- Теперь мы используем меньше памяти для кэшей в CI и имеем более качественные тесты на вытеснение. #84676 (alesapin).
Релиз ClickHouse 25.7, 2025-07-24
Обратное несовместимое изменение
- Изменения в функции
extractKeyValuePairs: добавлен новый аргументunexpected_quoting_character_strategy, который определяет, что происходит, когдаquoting_characterнеожиданно встречается при чтении неквотированного ключа или значения. Значение может быть одним из:invalid,acceptилиpromote. Значениеinvalidприведёт к отбрасыванию ключа и возврату в состояние ожидания ключа. Значениеacceptбудет трактовать символ как часть ключа. Значениеpromoteотбросит предыдущий символ и начнёт разбор как квотированного ключа. Кроме того, после разбора квотированного значения следующий ключ разбирается только в том случае, если найден разделитель пары. #80657 (Arthur Passos). - Поддержка совпадений нулевой длины в функции
countMatches. Пользователи, которые хотят сохранить старое поведение, могут включить настройкуcount_matches_stop_at_empty_match. #81676 (Elmi Ahmadov). - Использование серверных ограничителей (throttlers) для локальных (
max_local_read_bandwidth_for_serverиmax_local_write_bandwidth_for_server) и удалённых (max_remote_read_network_bandwidth_for_serverиmax_remote_write_network_bandwidth_for_server) операций при создании резервных копий (BACKUP), в дополнение к их специализированным серверным настройкам (max_backup_bandwidth_for_server,max_mutations_bandwidth_for_serverиmax_merges_bandwidth_for_server). #81753 (Sergei Trifonov). - Запрещено создание таблицы без столбцов, доступных для вставки данных. #81835 (Pervakov Grigorii).
- Параллелизация кластерных функций по файлам внутри архивов. В предыдущих версиях единицей работы был целый архив (например, zip, tar или 7z). Добавлена новая настройка
cluster_function_process_archive_on_multiple_nodes, по умолчанию равнаяtrue. Если установлена вtrue, повышает производительность обработки архивов в кластерных функциях. Должна быть установлена вfalseдля обеспечения совместимости и во избежание ошибок при обновлении до версии 25.7+ при использовании кластерных функций с архивами на более ранних версиях. #82355 (Kseniia Sumarokova). - Запрос
SYSTEM RESTART REPLICASвызывал пробуждение таблиц в базе данных Lazy, даже без доступа к этой базе данных, и это происходило в то время, когда эти таблицы одновременно удалялись. Примечание: теперьSYSTEM RESTART REPLICASбудет перезапускать реплики только в тех базах данных, где у вас есть право выполнятьSHOW TABLES, что является естественным поведением. #83321 (Alexey Milovidov).
Новая функция
- Добавлена поддержка легковесных обновлений для таблиц семейства
MergeTree. Легковесные обновления можно использовать с помощью нового синтаксиса:UPDATE <table> SET col1 = val1, col2 = val2, ... WHERE <condition>. Добавлена реализация легковесных удалений через легковесные обновления. Это можно включить, установивlightweight_delete_mode = 'lightweight_update'. #82004 (Anton Popov). - Добавлена поддержка сложных типов в рамках эволюции схемы Iceberg. #73714 (Konstantin Vedernikov).
- Добавлена поддержка вставки данных (INSERT) в таблицы Iceberg. #82692 (Konstantin Vedernikov).
- Чтение файлов данных Iceberg по идентификаторам полей. Это улучшает совместимость с Iceberg: поля можно переименовывать в метаданных, сопоставляя их с другими именами в базовых файлах Parquet. Устраняет проблему #83065. #83653 (Konstantin Vedernikov).
- Теперь ClickHouse поддерживает сжатые файлы
metadata.jsonдля Iceberg. Исправлена проблема #70874. #81451 (alesapin). - Добавлена поддержка
TimestampTZв каталоге Glue. Это закрывает #81654. #83132 (Konstantin Vedernikov). - Добавлена функция генерации SQL‑запросов с помощью ИИ в клиент ClickHouse. Пользователи теперь могут генерировать SQL‑запросы из описаний на естественном языке, добавляя к своему запросу префикс
??. Поддерживаются провайдеры OpenAI и Anthropic с автоматическим обнаружением схемы. #83314 (Kaushik Iska). - Добавлена функция записи Geo-типов в формат WKB. #82935 (Konstantin Vedernikov).
- Добавлены два новых типа доступа к источникам:
READиWRITE; все прежние типы доступа, связанные с источниками, объявлены устаревшими. ВместоGRANT S3 ON *.* TO userтеперь используется:GRANT READ, WRITE ON S3 TO user. Это также позволяет разделять праваREADиWRITEдля источников, например:GRANT READ ON * TO user,GRANT WRITE ON S3 TO user. Эта функциональность управляется настройкойaccess_control_improvements.enable_read_write_grantsи по умолчанию отключена. #73659 (pufit). - NumericIndexedVector: новая векторная структура данных на основе bit-sliced-сжатия и Roaring-bitmap, с более чем 20 функциями для построения, анализа и покомпонентной арифметики. Может сократить объем хранимых данных и ускорить операции соединения (JOIN), фильтрацию и агрегации на разреженных данных. Реализует #70582 и идеи статьи “Large-Scale Metric Computation in Online Controlled Experiment Platform” авторов T. Xiong и Y. Wang (VLDB 2024). #74193 (FriendLey).
- Настройка нагрузки
max_waiting_queriesтеперь поддерживается. Её можно использовать для ограничения длины очереди запросов. Если предел достигнут, все последующие запросы будут прерваны с ошибкойSERVER_OVERLOADED. #81250 (Oleg Doronin). - Добавлены финансовые функции:
financialInternalRateOfReturnExtended(XIRR),financialInternalRateOfReturn(IRR),financialNetPresentValueExtended(XNPV),financialNetPresentValue(NPV). #81599 (Joanna Hulboj). - Добавлены геопространственные функции
polygonsIntersectCartesianиpolygonsIntersectSphericalдля проверки пересечения двух полигонов. #81882 (Paul Lamb). - Добавлена поддержка виртуального столбца
_part_granule_offsetв таблицах семейства MergeTree. Этот столбец указывает индекс (с нуля) гранулы/метки, к которой относится каждая строка внутри соответствующей части данных. Это устраняет проблему #79572. #82341 (Amos Bird). #82341 (Amos Bird) - Добавлены SQL-функции
colorSRGBToOkLCHиcolorOkLCHToSRGBдля преобразования цветов между цветовыми пространствами sRGB и OkLCH. #83679 (Fgrtue). - Разрешено использование параметров в запросах
CREATE USERдля имён пользователей. #81387 (Diskein). - Таблица
system.formatsтеперь содержит расширенную информацию о форматах, например тип содержимого HTTP, возможности вывода схемы и т. д. #81505 (Alexey Milovidov).
Экспериментальные возможности
- Добавлены функции
searchAnyиsearchAll, которые являются универсальными инструментами для поиска по текстовым индексам. #80641 (Elmi Ahmadov). - Текстовый индекс теперь поддерживает новый токенизатор
split. #81752 (Elmi Ahmadov). - Изменено значение размера гранул индекса по умолчанию для индексов
textна 64. Это повышает ожидаемую производительность среднего тестового запроса во внутренних бенчмарках. #82162 (Jimmy Aguilar Mena). - 256-битная битовая карта хранит исходящие метки состояния в упорядоченном виде, но исходящие состояния сохраняются на диск в том порядке, в котором они появляются в хеш-таблице. Поэтому при чтении с диска метка будет указывать на некорректное следующее состояние. #82783 (Elmi Ahmadov).
- Включено сжатие zstd для блоба дерева FST в текстовых индексах. #83093 (Elmi Ahmadov).
- Переведён индекс векторного сходства в стадию beta. Добавлен параметр-псевдоним
enable_vector_similarity_index, который необходимо включить для использования индекса векторного сходства. #83459 (Robert Schulze). - Удалена экспериментальная логика
send_metadata, связанная с экспериментальной репликацией без копирования (zero-copy). Она никогда не использовалась, и этот код никто не поддерживал. Поскольку не было даже тестов, связанных с ней, велика вероятность, что она уже давно была сломана. #82508 (alesapin). - Интегрирован
StorageKafka2вsystem.kafka_consumers. #82652 (János Benjamin Antal). - Реализована оценка сложных CNF/DNF-выражений, например
(a < 1 and a > 0) or b = 3, по статистике. #82663 (Han Fei).
Повышение производительности
- Введено асинхронное логирование. Вывод логов на медленное устройство больше не замедляет выполнение запросов. #82516 (Raúl Marín). Ограничено максимальное количество записей, хранящихся в очереди. #83214 (Raúl Марин).
- Параллельный распределённый INSERT SELECT по умолчанию включён в режиме, при котором INSERT SELECT выполняется независимо на каждом шарде, см. настройку
parallel_distributed_insert_select. #83040 (Igor Nikonov). - Когда агрегирующий запрос содержит только одну функцию
count()по не-Nullableстолбцу, логика агрегации полностью встраивается на этапе обхода хеш-таблицы. Это позволяет избежать выделения и поддержания какого-либо агрегирующего состояния, что существенно снижает потребление памяти и накладные расходы на CPU. Это частично решает #81982. #82104 (Amos Bird). - Производительность
HashJoinоптимизирована за счёт удаления дополнительного прохода по хеш-таблицам в типичном случае, когда есть только один ключевой столбец, а также исключения проверокnull_mapиjoin_mask, когда они всегда равныtrue/false. #82308 (Nikita Taranov). - Небольшая оптимизация комбинатора
-If. #78454 (李扬). - Запросы векторного поиска с использованием индекса векторного сходства выполняются с меньшей задержкой за счет сокращения числа операций чтения из хранилища и снижения нагрузки на CPU. #79103 (Shankar Iyer).
- Учитывать
merge_tree_min_{rows,bytes}_for_seekвfilterPartsByQueryConditionCache, чтобы привести его в соответствие с другими методами, фильтрующими по индексам. #80312 (李扬). - Сделать конвейер после шага
TOTALSмногопоточным. #80331 (UnamedRus). - Исправлена фильтрация по ключу в хранилищах
RedisиKeeperMap. #81833 (Pervakov Grigorii). - Добавлена новая настройка
min_joined_block_size_rows(аналогичнаяmin_joined_block_size_bytes; по умолчанию 65409) для управления минимальным размером блока (в строках) для входных и выходных блоков операции JOIN (если алгоритм JOIN это поддерживает). Маленькие блоки будут укрупняться. #81886 (Nikita Taranov). ATTACH PARTITIONбольше не приводит к сбросу всех кэшей. #82377 (Alexey Milovidov).- Оптимизировано формирование плана для коррелированных подзапросов за счёт удаления избыточных операций JOIN с использованием классов эквивалентности. Если для всех коррелированных столбцов существуют эквивалентные выражения и включена настройка
query_plan_correlated_subqueries_use_substitution, операторCROSS JOINне генерируется. #82435 (Dmitry Novik). - Считывать в коррелированном подзапросе только требуемые столбцы, если он выступает аргументом функции
EXISTS. #82443 (Dmitry Novik). - Немного ускорено сравнение деревьев запросов при анализе запроса. #82617 (Nikolai Kochetov).
- Добавлено выравнивание в
CounterизProfileEventsдля уменьшения эффекта ложного совместного использования кэша. #82697 (Jiebin Sun). - Оптимизации для
null_mapиJoinMaskиз #82308 были применены к операциям JOIN с несколькими дизъюнктами. Также была оптимизирована структура данныхKnownRowsHolder. #83041 (Nikita Taranov). - Обычный
std::vector<std::atomic_bool>используется для join-флагов, чтобы избежать вычисления хэша при каждом доступе к флагам. #83043 (Nikita Taranov). - Не выделяйте память для результирующих столбцов заранее, когда
HashJoinиспользует режим отложенного (lazy) вывода. Это неэффективно, особенно когда количество совпадений невелико. Кроме того, после завершения операции соединения мы знаем точное количество совпадений, поэтому можем более точно предварительно выделить память. #83304 (Nikita Taranov). - Минимизировано копирование данных в памяти в заголовках портов при построении конвейера. Исходный PR от heymind. #83381 (Raúl Marín).
- Улучшен процесс запуска clickhouse-keeper при использовании хранилища RocksDB. #83390 (Antonio Andelic).
- Старайтесь не удерживать блокировку во время создания снимка данных хранилища, чтобы уменьшить конкуренцию за блокировку при высокой конкурентной нагрузке. #83510 (Duc Canh Le).
- Повышена производительность формата входных данных
ProtobufSingleза счёт повторного использования сериализатора при отсутствии ошибок парсинга. #83613 (Eduard Karacharov). - Улучшена производительность построения конвейера, что позволяет ускорить выполнение коротких запросов. #83631 (Raúl Marín).
- Оптимизирован
MergeTreeReadersChain::getSampleBlock, ускоряющий короткие запросы. #83875 (Raúl Marín). - Ускорен вывод списка таблиц в каталогах данных за счёт асинхронных запросов. #81084 (alesapin).
- Добавлен джиттер в механизм повторных попыток S3 при включённой настройке
s3_slow_all_threads_after_network_error. #81849 (zoomxi).
Улучшение
- Подсветка скобок разными цветами для лучшей читаемости. #82538 (Konstantin Bogdanov).
- Подсвечивать метасимволы в шаблонах LIKE/REGEXP по мере ввода. Это уже реализовано в
clickhouse-formatи в выводеclickhouse-client, но теперь работает и в приглашении командной строки. #82871 (Alexey Milovidov). - Подсветка в
clickhouse-formatи в выводе клиента будет работать так же, как подсветка в приглашении командной строки. #82874 (Alexey Milovidov). - Теперь диски
plain_rewritableможно использовать для метаданных баз данных. Реализованы методыmoveFileиreplaceFileвplain_rewritable, чтобы поддержать его использование в качестве диска базы данных. #79424 (Tuan Pham Anh). - Разрешено создание резервных копий для баз данных
PostgreSQL,MySQLиDataLake. Резервная копия такой базы данных будет сохранять только определение, но не данные, которые в ней хранятся. #79982 (Nikolay Degterinsky). - Настройка
allow_experimental_join_conditionпомечена как устаревшая, так как соответствующее поведение теперь всегда включено. #80566 (Vladimir Cherkasov). - Добавить метрики нагрузки к асинхронным метрикам ClickHouse. #80779 (Xander Garbett).
- Добавлены метрики
MarkCacheEvictedBytes,MarkCacheEvictedMarks,MarkCacheEvictedFilesдля отслеживания вытеснений из кэша меток. (issue #60989). #80799 (Shivji Kumar Jha). - Добавлена поддержка записи Parquet enum в виде массива байт, как предписывает спецификация. #81090 (Arthur Passos).
- Улучшение для движка таблиц
DeltaLake: в delta-kernel-rs появился APIExpressionVisitor, который реализован в этом PR и используется для преобразования выражений по столбцам партиционирования (он заменит старый, устаревший способ в delta-kernel-rs, который ранее использовался в нашем коде). В будущем этотExpressionVisitorтакже позволит реализовать отсечение (pruning) на основе статистики и некоторые проприетарные возможности Delta Lake. Дополнительно цель этого изменения — поддержать отсечение партиций в движке таблицDeltaLakeCluster(результат разобранного выражения — ActionsDAG — будет сериализован и отправлен от инициатора вместе с путём к данным, потому что такая информация, необходимая для отсечения, доступна только как метаинформация при получении списка файлов с данными, что выполняется только инициатором, но должна применяться к данным на каждом сервере чтения). #81136 (Kseniia Sumarokova). - Сохранять имена элементов при выводе супертипов для именованных кортежей. #81345 (lgbo).
- Подсчитывайте потреблённые сообщения вручную, чтобы не зависеть от ранее зафиксированного смещения в StorageKafka2. #81662 (János Benjamin Antal).
- Добавлен
clickhouse-keeper-utils— новый инструмент командной строки для управления и анализа данных ClickHouse Keeper. Инструмент поддерживает выгрузку состояния из снапшотов и журналов изменений (changelog), анализ файлов changelog и извлечение отдельных диапазонов логов. #81677 (Antonio Andelic). - Общие и помпользовательские ограничители сетевой пропускной способности никогда не сбрасываются, что исключает превышение лимитов
max_network_bandwidth_for_all_usersиmax_network_bandwidth_for_all_users. #81729 (Sergei Trifonov). - Добавлена поддержка записи в формат GeoParquet. #81784 (Konstantin Vedernikov).
- Запрещён запуск мутации ALTER
RENAME COLUMN, если она попытается переименовать столбец, на который в данный момент распространяется незавершённая мутация данных. #81823 (Mikhail Artemenko). - Заголовок Connection теперь отправляется в конце списка заголовков, когда уже известно, нужно ли сохранять соединение. #81951 (Sema Checherinda).
- Настройте очередь TCP-серверов (по умолчанию — 64) в соответствии со значением
listen_backlog(по умолчанию — 4096). #82045 (Azat Khuzhin). - Добавлена возможность перезагружать
max_local_read_bandwidth_for_serverиmax_local_write_bandwidth_for_serverна лету без перезапуска сервера. #82083 (Kai Zhu). - Добавлена возможность очистки всех предупреждений из таблицы
system.warningsс помощьюTRUNCATE TABLE system.warnings. #82087 (Vladimir Cherkasov). - Исправлено отсечение партиций в кластерных функциях дата-лейка. #82131 (Kseniia Sumarokova).
- Исправлено чтение секционированных данных в табличной функции DeltaLakeCluster. В этом PR версия протокола кластерных функций повышена, что позволяет передавать дополнительную информацию от инициатора к репликам. Эта дополнительная информация содержит выражение преобразования delta-kernel, которое необходимо для разбора столбцов секционирования (а также некоторых других элементов в будущем, например, генерируемых столбцов и т. д.). #82132 (Kseniia Sumarokova).
- Функция
reinterpretтеперь поддерживает преобразование вArray(T), гдеT— тип фиксированного размера (issue #82621). #83399 (Shankar Iyer). - Теперь база данных Datalake выбрасывает более понятное исключение. Исправлена #81211. #82304 (alesapin).
- Улучшена операция CROSS JOIN за счёт возврата false из
HashJoin::needUsedFlagsForPerRightTableRow. #82379 (lgbo). - Добавлена возможность записывать и читать столбцы типа Map как массив кортежей (Array(Tuple)). #82408 (MikhailBurdukov).
- Добавлен вывод лицензий Rust-крейтов в таблицу
system.licenses. Rust #82440 (Raúl Marín). - Теперь макросы, такие как
{uuid}, можно использовать в параметреkeeper_pathдвижка таблицы S3Queue. #82463 (Nikolay Degterinsky). - Улучшение в Keeper: перемещение файлов журнала изменений между дисками в фоновом потоке. Ранее при перемещении журнала изменений на другой диск Keeper глобально блокировался до завершения операции. Это приводило к ухудшению производительности, если перемещение занимало много времени (например, на диск S3). #82485 (Antonio Andelic).
- Улучшение в Keeper: добавлена новая настройка
keeper_server.cleanup_old_and_ignore_new_acl. Если она включена, у всех узлов будут очищены ACL, а ACL для новых запросов будет игнорироваться. Если цель — полностью удалить ACL с узлов, важно оставить эту настройку включённой до тех пор, пока не будет создан новый snapshot. #82496 (Antonio Andelic). - Добавлена новая настройка сервера
s3queue_disable_streaming, которая отключает стриминг в таблицах с движком S3Queue. Эту настройку можно изменять без перезапуска сервера. #82515 (Kseniia Sumarokova). - Рефакторинг механизма динамического изменения размера кеша файловой системы. Добавлено больше логирования для диагностики. #82556 (Kseniia Sumarokova).
clickhouse-serverбез файла конфигурации также будет слушать порт PostgreSQL 9005, как и с конфигурацией по умолчанию. #82633 (Alexey Milovidov).- В
ReplicatedMergeTree::executeMetadataAlterмы получаемStorageIDи, не используяDDLGuard, пытаемся вызватьIDatabase::alterTable. За это время мы технически могли заменить рассматриваемую таблицу другой, так что при получении определения таблицы мы получим неверное. Чтобы избежать этого, мы добавляем отдельную проверку совпадения UUID при попытке вызватьIDatabase::alterTable. #82666 (Nikolay Degterinsky). - При присоединении базы данных с удалённым диском только для чтения нужно вручную добавить UUID таблиц в DatabaseCatalog. #82670 (Tuan Pham Anh).
- Запрещено использование значений
nanиinfсNumericIndexedVector. Исправляет #82239 и немного больше. #82681 (Raufs Dunamalijevs). - Не пропускайте нулевые значения в форматах заголовков
X-ClickHouse-ProgressиX-ClickHouse-Summary. #82727 (Nikita Mikhaylov). - Улучшение в Keeper: поддержка отдельных прав доступа для ACL world:anyone. #82755 (Antonio Andelic).
- Не разрешать выполнение
RENAME COLUMNилиDROP COLUMNдля столбцов, явно указанных в списке столбцов для суммирования в SummingMergeTree. Закрывает #81836. #82821 (Alexey Milovidov). - Улучшена точность преобразования из
DecimalвFloat32. Реализовано преобразование изDecimalвBFloat16. Закрывает #82660. #82823 (Alexey Milovidov). - Полосы прокрутки в веб-интерфейсе станут выглядеть немного лучше. #82869 (Alexey Milovidov).
clickhouse-serverсо встроенной конфигурацией позволит использовать веб-интерфейс, отвечая на HTTP-запрос OPTIONS. #82870 (Alexey Milovidov).- Добавлена поддержка указания дополнительных ACL Keeper для путей в конфигурации. Если вы хотите добавить дополнительные ACL для конкретного пути, задайте их в конфигурации в секции
zookeeper.path_acls. #82898 (Antonio Andelic). - Теперь снимок мутаций будет формироваться на основе снимка видимых частей. Также счетчики мутаций, используемые в снимке, будут пересчитаны по включённым мутациям. #82945 (Mikhail Artemenko).
- Добавлен ProfileEvent, когда Keeper отклоняет запись из‑за мягкого ограничения памяти. #82963 (Xander Garbett).
- Добавлены столбцы
commit_time,commit_idв таблицуsystem.s3queue_log. #83016 (Kseniia Sumarokova). - В некоторых случаях нам нужно иметь несколько измерений в метриках. Например, считать неудавшиеся слияния или мутации по кодам ошибок, а не вести один общий счётчик. Представлена таблица
system.dimensional_metrics, которая как раз это и делает и добавляет первую многомерную метрикуfailed_merges. #83030 (Miсhael Stetsyuk). - Объединить предупреждения о неизвестных настройках в клиенте ClickHouse и логировать их в виде сводки. #83042 (Bharat Nallan).
- Клиент ClickHouse теперь указывает локальный порт при возникновении ошибки подключения. #83050 (Jianfei Hu).
- Немного улучшена обработка ошибок в
AsynchronousMetrics. Если каталог/sys/blockсуществует, но недоступен, сервер запустится без мониторинга блочных устройств. Закрывает #79229. #83115 (Alexey Milovidov). - Завершать работу SystemLogs после обычных таблиц (и перед системными таблицами, вместо того чтобы делать это перед обычными). #83134 (Kseniia Sumarokova).
- Добавлено логирование процесса завершения работы
S3Queue. #83163 (Kseniia Sumarokova). - Возможность интерпретировать
TimeиTime64какMM:SS,M:SS,SSилиS. #83299 (Yarik Briukhovetskyi). - Когда
distributed_ddl_output_mode='*_only_active', новые или восстановленные реплики с лагом репликации, превышающимmax_replication_lag_to_enqueue, не ожидаются. Это должно помочь избежать ошибкиDDL task is not finished on some hosts, когда новая реплика становится активной после завершения инициализации или восстановления, но за время инициализации накопила большой объём журнала репликации. Также реализован запросSYSTEM SYNC DATABASE REPLICA STRICT, который ожидает, пока журнал репликации не станет меньшеmax_replication_lag_to_enqueue. #83302 (Alexander Tokmakov). - Не выводить слишком длинные описания действий с выражениями в сообщениях об исключениях. Закрывает #83164. #83350 (Alexey Milovidov).
- Добавлена возможность анализировать префикс и суффикс части, а также проверять покрытие для неконстантных столбцов. #83377 (Mikhail Artemenko).
- Унифицированы имена параметров ODBC и JDBC при использовании именованных коллекций. #83410 (Andrey Zvonov).
- Когда хранилище останавливается,
getStatusгенерирует исключениеErrorCodes::ABORTED. Ранее это приводило к сбою запроса SELECT. Теперь мы перехватываем исключенияErrorCodes::ABORTEDи намеренно их игнорируем. #83435 (Miсhael Stetsyuk). - Добавлены метрики использования ресурсов процесса (такие, как
UserTimeMicroseconds,SystemTimeMicroseconds,RealTimeMicroseconds) к событиям профиля part_log для записейMergeParts. #83460 (Vladimir Cherkasov). - В Keeper по умолчанию включены флаги возможностей
create_if_not_exists,check_not_exists,remove_recursive, что позволяет использовать новые типы запросов. #83488 (Antonio Andelic). - Останавливает стриминг S3(Azure/etc)Queue перед остановкой любых таблиц при завершении работы сервера. #83530 (Kseniia Sumarokova).
- Включена поддержка
Date/Date32в виде целых чисел во входных форматахJSON. #83597 (MikhailBurdukov). - Сделали сообщения об исключениях в ряде ситуаций при загрузке и добавлении проекций более понятными. #83728 (Robert Schulze).
- Добавлена конфигурационная опция, позволяющая пропустить проверку целостности бинарного файла по контрольным суммам для
clickhouse-server. Решает #83637. #83749 (Rafael Roquetto).
Исправление ошибки (ошибка, приводящая к заметному пользователю некорректному поведению в официальном стабильном релизе)
- Исправлено неверное значение по умолчанию для параметра
--reconnectвclickhouse-benchmark. Оно было изменено по ошибке в #79465. #82677 (Alexey Milovidov). - Исправлено непоследовательное форматирование инструкции
CREATE DICTIONARY. Закрывает #82105. #82829 (Alexey Milovidov). - Исправлена непоследовательность форматирования TTL при наличии в нём функции
materialize. Закрывает #82828. #82831 (Alexey Milovidov). - Исправлено непоследовательное форматирование
EXPLAIN ASTв подзапросе, если он содержит опции вывода, такие какINTO OUTFILE. Закрывает #82826. #82840 (Alexey Milovidov). - Исправлено непоследовательное форматирование заключённых в скобки выражений с псевдонимами в контексте, где псевдонимы не допускаются. Закрывает #82836. Закрывает #82837. #82867 (Alexey Milovidov).
- Теперь используется корректный код ошибки при умножении состояния агрегатной функции на IPv4. Закрывает #82817. #82818 (Alexey Milovidov).
- Исправлена логическая ошибка в кэше файловой системы: «Having zero bytes but range is not finished». #81868 (Kseniia Sumarokova).
- Пересчитывать индекс min-max, когда TTL уменьшает число строк, чтобы обеспечить корректность алгоритмов, которые на нём основаны, таких как
minmax_count_projection. Это исправляет #77091. #77166 (Amos Bird). - Для запросов с сочетанием
ORDER BY ... LIMIT BY ... LIMIT N, когда ORDER BY выполняется как PartialSorting, счётчикrows_before_limit_at_leastтеперь отражает количество строк, обработанных предложением LIMIT, а не количество строк, обработанных преобразованием сортировки. #78999 (Eduard Karacharov). - Исправлено избыточное пропускание гранул при фильтрации по token/ngram-индексам с использованием регулярного выражения с альтернацией, в котором первая альтернатива не является литералом. #79373 (Eduard Karacharov).
- Исправлена логическая ошибка, связанная с оператором
<=>и таблицей Join, теперь при выполнении запроса возвращается корректный код ошибки. #80165 (Vladimir Cherkasov). - Исправлено аварийное завершение работы функции
loopпри использовании с семейством функцийremote. Обеспечено соблюдение предложения LIMIT вloop(remote(...)). #80299 (Julia Kartseva). - Исправлено некорректное поведение функций
to_utc_timestampиfrom_utc_timestampпри обработке дат до начала Unix-эпохи (1970-01-01) и после максимально допустимой даты (2106-02-07 06:28:15). Теперь эти функции корректно приводят значения к началу эпохи и максимально допустимой дате соответственно. #80498 (Surya Kant Ranjan). - Для некоторых запросов, выполняемых с параллельными репликами, оптимизация упорядоченного чтения может применяться на инициаторе, но не может применяться на удалённых узлах. Это приводит к использованию разных режимов чтения координатором параллельных реплик (на инициаторе) и на удалённых узлах, что является логической ошибкой. #80652 (Igor Nikonov).
- Исправлена логическая ошибка при материализации проекции, возникавшая при изменении типа столбца на Nullable. #80741 (Pavel Kruglov).
- Исправлен некорректный пересчёт TTL в
TTL GROUP BYпри обновлении TTL. #81222 (Evgeniy Ulasik). - Исправлена ошибка в блум-фильтре Parquet, из-за которой условие вида
WHERE function(key) IN (...)ошибочно применялось какWHERE key IN (...). #81255 (Michael Kolupaev). - Исправлен возможный сбой в
Aggregatorпри возникновении исключения при слиянии. #81450 (Nikita Taranov). - Исправлен
InterpreterInsertQuery::extendQueryLogElemImpl, чтобы при необходимости добавлять обратные кавычки к именам баз данных и таблиц (например, если имена содержат специальные символы, такие как-). #81528 (Ilia Shvyrialkin). - Исправлено выполнение оператора
INприtransform_null_in=1в случае NULL в левом аргументе и не допускающего NULL результата подзапроса. #81584 (Pavel Kruglov). - Не выполнять проверку экспериментальных/подозрительных типов при выполнении выражений DEFAULT/MATERIALIZE при чтении из существующей таблицы. #81618 (Pavel Kruglov).
- Исправлена ошибка «Context has expired» во время слияний, возникавшая при использовании dict в выражении TTL. #81690 (Azat Khuzhin).
- Исправлена монотонность функции cast. #81722 (zoomxi).
- Устранена проблема, из-за которой необходимые столбцы не считывались при обработке скалярного коррелированного подзапроса. Устраняет #81716. #81805 (Dmitry Novik).
- В предыдущих версиях сервер возвращал избыточный контент для запросов к
/js. Это исправляет #61890. #81895 (Alexey Milovidov). - Ранее определения движка таблиц
MongoDBмогли включать компонент пути в аргументеhost:port, который молча игнорировался. Интеграция с MongoDB отказывалась загружать такие таблицы. С этим исправлением мы допускаем загрузку таких таблиц и игнорируем компонент пути, если движокMongoDBимеет пять аргументов, используя имя базы данных из аргументов. Примечание: исправление не применяется к вновь создаваемым таблицам или к запросам с табличной функциейmongo, а также к источникам словарей и именованным коллекциям. #81942 (Vladimir Cherkasov). - Исправлено возможное аварийное завершение работы
Aggregatorпри возникновении исключения во время слияния. #82022 (Nikita Taranov). - Исправлен анализ фильтра, когда в запросе используется только столбец-псевдоним с константным значением. Исправляет #79448. #82037 (Dmitry Novik).
- Исправлена ошибка LOGICAL_ERROR и последующее падение при использовании одного и того же столбца в TTL одновременно в GROUP BY и SET. #82054 (Pablo Marcos).
- Исправлена проверка аргументов табличной функции S3 при маскировке секретов, что предотвращает возможную ошибку
LOGICAL_ERROR; закрыт #80620. #82056 (Vladimir Cherkasov). - Исправлены гонки данных в Iceberg. #82088 (Azat Khuzhin).
- Исправлен метод
DatabaseReplicated::getClusterImpl. Если первый элемент (или несколько первых элементов)hostsимеетid == DROPPED_MARKи нет других элементов для того же шарда, первый элементshardsбудет пустым вектором, что приведёт кstd::out_of_range. #82093 (Miсhael Stetsyuk). - Исправлена ошибка копипаста в
arraySimilarity, запрещено использование весов типовUInt32иInt32. Обновлены тесты и документация. #82103 (Mikhail f. Shiryaev). - Исправлена ошибка
Not found columnв запросах сarrayJoinв условииWHEREи сIndexSet. #82113 (Nikolai Kochetov). - Исправлена ошибка в интеграции с Glue Catalog. Теперь ClickHouse может читать таблицы с вложенными типами данных, где часть подстолбцов содержит десятичные числа (Decimal), например:
map<string, decimal(9, 2)>. Исправляет #81301. #82114 (alesapin). - Исправлено ухудшение производительности в SummingMergeTree, которое появилось в версии 25.5 в https://github.com/ClickHouse/ClickHouse/pull/79051. #82130 (Pavel Kruglov).
- При передаче настроек по URI используется последнее указанное значение. #82137 (Sema Checherinda).
- Исправлена ошибка «Context has expired» в Iceberg. #82146 (Azat Khuzhin).
- Исправлена возможная взаимоблокировка удалённых запросов при нехватке памяти на сервере. #82160 (Kirill).
- Исправлено переполнение в функциях
numericIndexedVectorPointwiseAdd,numericIndexedVectorPointwiseSubtract,numericIndexedVectorPointwiseMultiply,numericIndexedVectorPointwiseDivide, возникавшее при их применении к большим числам. #82165 (Raufs Dunamalijevs). - Исправлена ошибка в зависимостях таблиц, из-за которой материализованные представления пропускали операции INSERT. #82222 (Nikolay Degterinsky).
- Исправлена потенциальная гонка данных между потоком подсказок и основным клиентским потоком. #82233 (Azat Khuzhin).
- Теперь ClickHouse может читать таблицы Iceberg из каталога Glue после изменений схемы. Исправлена проблема #81272. #82301 (alesapin).
- Исправлена проверка настроек асинхронных метрик
asynchronous_metrics_update_period_sиasynchronous_heavy_metrics_update_period_s. #82310 (Bharat Nallan). - Исправлена логическая ошибка при определении сопоставителя в запросе с несколькими операторами JOIN, закрыт #81969. #82421 (Vladimir Cherkasov).
- Добавлен срок действия токена AWS ECS, чтобы его можно было обновлять. #82422 (Konstantin Bogdanov).
- Исправлена ошибка обработки аргументов
NULLв функцииCASE. #82436 (Yarik Briukhovetskyi). - Исправлены гонки данных в клиенте (путём отказа от использования глобального контекста) и переопределения
session_timezone(ранее, еслиsession_timezoneбыл установлен, например, вusers.xml/опциях клиента в непустое значение, а в контексте запроса — в пустое, то использовалось значение изusers.xml, что неверно; теперь контекст запроса всегда имеет приоритет над глобальным контекстом). #82444 (Azat Khuzhin). - Исправлена работа отключения выравнивания по границе для кэшированного буфера во внешних движках таблиц. Оно было сломано в https://github.com/ClickHouse/ClickHouse/pull/81868. #82493 (Kseniia Sumarokova).
- Исправлено падение при соединении key-value-хранилища с ключом с приведённым типом. #82497 (Pervakov Grigorii).
- Исправлена ошибка сокрытия значений именованных коллекций в логах и таблице query_log. Закрывает #82405. #82510 (Kseniia Sumarokova).
- Исправлено возможное падение при логировании при завершении сессии, так как
user_idиногда мог быть пустым. #82513 (Bharat Nallan). - Исправлены случаи, когда разбор Time мог приводить к проблемам msan. Это исправляет: #82477. #82514 (Yarik Briukhovetskyi).
- Запрещено устанавливать
threadpool_writer_pool_sizeв ноль, чтобы операции сервера не зависали. #82532 (Bharat Nallan). - Исправлен
LOGICAL_ERROR, возникавший при анализе выражения политики строк для коррелированных столбцов. #82618 (Dmitry Novik). - Исправлено некорректное использование метаданных родительской таблицы в табличной функции
mergeTreeProjection, когдаenable_shared_storage_snapshot_in_query = 1. Это исправление для #82634. #82638 (Amos Bird). - Функции
trim{Left,Right,Both}теперь поддерживают входные строки типа «FixedString(N)». Например,SELECT trimBoth(toFixedString('abc', 3), 'ac')теперь работает. #82691 (Robert Schulze). - В AzureBlobStorage для нативного копирования мы сравниваем методы аутентификации, и если при этом происходит исключение, теперь выполняется откат к чтению и копированию (т. е. не нативному копированию). #82693 (Smita Kulkarni).
- Исправлена десериализация
groupArraySample/groupArrayLastв случае пустых элементов (при десериализации могла пропускаться часть бинарных данных, если входные данные были пустыми, что могло приводить к повреждению данных при чтении и ошибке UNKNOWN_PACKET_FROM_SERVER в протоколе TCP). Это не затрагивает числовые типы и типы даты/времени. #82763 (Pedro Ferreira). - Исправлена проблема с резервным копированием пустой таблицы
Memory, из-за которой восстановление из резервной копии завершалось ошибкойBACKUP_ENTRY_NOT_FOUND. #82791 (Julia Kartseva). - Исправлена безопасность работы с исключениями при переписывании union/intersect/except_default_mode. Закрывает #82664. #82820 (Alexey Milovidov).
- Отслеживайте число заданий асинхронной загрузки таблиц. Если какие-либо задания выполняются, не обновляйте
tail_ptrвTransactionLog::removeOldEntries. #82824 (Tuan Pham Anh). - Исправлены гонки данных в Iceberg. #82841 (Azat Khuzhin).
- Включение оптимизации
use_skip_indexes_if_final_exact_mode(введённой в 25.6) могло приводить к тому, что в зависимости от настроек движкаMergeTreeи распределения данных выбирался некорректный диапазон-кандидат. Теперь это исправлено. #82879 (Shankar Iyer). - Устанавливать соль для данных аутентификации при разборе AST с типом SCRAM_SHA256_PASSWORD. #82888 (Tuan Pham Anh).
- При использовании некеширующей реализации Database метаданные соответствующей таблицы удаляются после возврата столбцов и утраты действительности ссылки. #82939 (buyval01).
- Исправлена модификация фильтра в запросах с выражением JOIN к таблице с хранилищем
Merge. Исправляет #82092. #82950 (Dmitry Novik). - Исправлена ошибка LOGICAL_ERROR в QueryMetricLog: Mutex не может быть NULL. #82979 (Pablo Marcos).
- Исправлен некорректный вывод функции
formatDateTimeпри использовании спецификатора формата%fвместе со спецификаторами переменного размера (например,%M). #83020 (Robert Schulze). - Исправлена проблема снижения производительности при включённом анализаторе, когда вторичные запросы всегда читали все столбцы из представлений (VIEW). Исправляет #81718. #83036 (Dmitry Novik).
- Исправлено некорректное сообщение об ошибке при восстановлении резервной копии на диск с доступом только для чтения. #83051 (Julia Kartseva).
- Не выполнять проверку циклических зависимостей при создании таблиц без зависимостей. Это исправляет деградацию производительности в сценариях создания тысяч таблиц, которая появилась в https://github.com/ClickHouse/ClickHouse/pull/65405. #83077 (Pavel Kruglov).
- Исправляет проблему с неявной интерпретацией отрицательных значений типа Time при чтении данных в таблицу и делает документацию более понятной. #83091 (Yarik Briukhovetskyi).
- Не используйте несвязанные части общего словаря в функции
lowCardinalityKeys. #83118 (Alexey Milovidov). - Исправлена регрессия при использовании подстолбцов в материализованных представлениях. Исправлены: #82784. #83221 (Nikita Mikhaylov).
- Исправлено падение клиента из-за соединения, оставленного в разорванном состоянии после ошибочного INSERT. #83253 (Azat Khuzhin).
- Исправлена ошибка, приводившая к падению при вычислении размера блока с пустыми столбцами. #83271 (Raúl Marín).
- Исправлена возможная ошибка, приводящая к аварийному завершению работы при использовании типа Variant в UNION. #83295 (Pavel Kruglov).
- Исправлена ошибка LOGICAL_ERROR в clickhouse-local при выполнении неподдерживаемых запросов SYSTEM. #83333 (Surya Kant Ranjan).
- Исправлен параметр
no_sign_requestдля клиента S3. Его можно использовать для явного отключения подписи запросов к S3. Его также можно задавать для конкретных endpoint-ов с помощью настроек на основе endpoint-ов. #83379 (Antonio Andelic). - Исправляет возможное аварийное завершение сервера при выполнении запроса с настройкой 'max_threads=1' под нагрузкой при включённом планировщике ЦП. #83387 (Fan Ziqi).
- Исправлено исключение
TOO_DEEP_SUBQUERIES, возникающее, когда определение CTE ссылается на другое табличное выражение с тем же именем. #83413 (Dmitry Novik). - Исправлено некорректное поведение, при котором выполнение
REVOKE S3 ON system.*приводило к отзыву прав S3 для*.*. Это исправляет #83417. #83420 (pufit). - Счётчики async_read_counters больше не разделяются между запросами. #83423 (Azat Khuzhin).
- Отключены параллельные реплики, если подзапрос содержит FINAL. #83455 (zoomxi).
- Исправлено незначительное переполнение целого числа в конфигурации параметра
role_cache_expiration_time_seconds(issue #83374). #83461 (wushap). - Исправлена ошибка, появившаяся в https://github.com/ClickHouse/ClickHouse/pull/79963. При вставке в MV с определяющим пользователем проверка прав должна выполняться с использованием грантов этого пользователя. Это исправляет #79951. #83502 (pufit).
- Отключена обрезка файлов по границам (bounds-based file pruning) для элементов массивов Iceberg и значений карт Iceberg, включая все их вложенные подполя. #83520 (Daniil Ivanik).
- Исправлены возможные ошибки
file cache not initialized, возникающие при использовании файлового кеша в качестве временного хранилища данных. #83539 (Bharat Nallan). - Исправление в Keeper: корректно обновлять общее количество наблюдений при закрытии сессии и удалении эфемерных узлов. #83583 (Antonio Andelic).
- Исправлен некорректный учёт памяти, связанный с max_untracked_memory. #83607 (Azat Khuzhin).
- INSERT SELECT с UNION ALL в редком пограничном случае мог приводить к разыменованию нулевого указателя. Это исправление закрывает #83618. #83643 (Alexey Milovidov).
- Запретить использование нулевого значения для max_insert_block_size, так как оно может вызвать логическую ошибку. #83688 (Bharat Nallan).
- Исправлен бесконечный цикл в estimateCompressionRatio() при значении block_size_bytes=0. #83704 (Azat Khuzhin).
- Исправлены метрики
IndexUncompressedCacheBytes/IndexUncompressedCacheCells/IndexMarkCacheBytes/IndexMarkCacheFiles(ранее они включались в метрику без префиксаCache). #83730 (Azat Khuzhin). - Исправлено возможное аварийное завершение (из-за присоединения потоков задачи) и, возможно, зависания (в модульных тестах) во время завершения работы
BackgroundSchedulePool. #83769 (Azat Khuzhin). - Добавлена настройка обратной совместимости, чтобы новый анализатор мог ссылаться на внешний алиас в предложении WITH при конфликте имён. Исправляет #82700. #83797 (Dmitry Novik).
- Исправлена взаимоблокировка при завершении работы из-за рекурсивной блокировки контекста при очистке компонента library bridge. #83824 (Azat Khuzhin).
Улучшения сборки/тестирования/упаковки
- Собрана минимальная C-библиотека (10 КБ) для лексера ClickHouse. Это требуется для #80977. #81347 (Alexey Milovidov). Добавлен тест для автономного лексера, добавлен тестовый тег
fasttest-only. #82472 (Yakov Olkhovskiy). - Добавлена проверка входных параметров сабмодулей Nix. #81691 (Konstantin Bogdanov).
- Исправлен набор проблем, которые могут возникать при попытке запустить интеграционные тесты на локальной машине (localhost). #82135 (Oleg Doronin).
- SymbolIndex компилируется на Mac и FreeBSD (но будет работать только на системах с ELF, таких как Linux и FreeBSD). #82347 (Alexey Milovidov).
- Обновлён Azure SDK до v1.15.0. #82747 (Smita Kulkarni).
- Добавлен модуль хранения из google-cloud-cpp в систему сборки. #82881 (Pablo Marcos).
- Изменён
Dockerfile.ubuntuдля clickhouse-server в соответствии с требованиями Docker Official Library. #83039 (Mikhail f. Shiryaev). - Продолжение для #83158 для исправления выкладки сборок для
curl clickhouse.com. #83463 (Mikhail f. Shiryaev). - Добавлены исполняемый файл
busyboxи инструменты установки в образыclickhouse/clickhouse-serverи официальный образclickhouse. #83735 (Mikhail f. Shiryaev). - Добавлена поддержка переменной окружения
CLICKHOUSE_HOSTдля указания хоста сервера ClickHouse, в соответствии с уже существующими переменными окруженияCLICKHOUSE_USERиCLICKHOUSE_PASSWORD. Это упрощает настройку без прямого изменения клиентских или конфигурационных файлов. #83659 (Doron David).
Релиз ClickHouse 25.6, 2025-06-26
Изменение, нарушающее обратную совместимость
- Ранее функция
countMatchesпрекращала подсчёт при первом пустом совпадении, даже если шаблон его допускает. Чтобы устранить эту проблему,countMatchesтеперь продолжает выполнение, продвигаясь на один символ вперёд при возникновении пустого совпадения. Пользователи, которые хотят сохранить старое поведение, могут включить настройкуcount_matches_stop_at_empty_match. #81676 (Elmi Ahmadov). - Незначительное: Настройки сервера
backup_threadsиrestore_threadsтеперь принудительно должны быть ненулевыми. #80224 (Raúl Marín). - Незначительное: Исправлено поведение
bitNotдляString, теперь во внутреннем представлении в памяти используется строка с нулевым терминатором. Это не должно влиять на какое-либо поведение, заметное пользователям, однако автор хотел подчеркнуть это изменение. #80791 (Azat Khuzhin).
Новая функция
- Новые типы данных:
Time([H]HH:MM:SS) иTime64([H]HH:MM.fractional), а также некоторые базовые функции приведения типов и функции для взаимодействия с другими типами данных. Добавлены настройки для совместимости с существующей функциейtoTime. Настройкаuse_legacy_to_timeустановлена так, чтобы пока сохранять прежнее поведение. #81217 (Yarik Briukhovetskyi). Добавлена поддержка операций сравнения для Time/Time64. #80327 (Yarik Briukhovetskyi). - Новый CLI-инструмент
chdig— TUI-интерфейс для ClickHouse (аналогtop), входящий в состав ClickHouse. #79666 (Azat Khuzhin). - Добавлена поддержка настройки
diskдля движков баз данныхAtomicиOrdinary, позволяющей указывать диск для хранения файлов метаданных таблиц. #80546 (Tuan Pham Anh). Это позволяет подключать базы данных из внешних источников. - Новый тип MergeTree,
CoalescingMergeTree— движок выбирает первое ненулевое (не Null) значение при фоновых слияниях. Это решает #78869. #79344 (scanhex12). - Добавлены функции для чтения WKB («Well-Known Binary» — это формат двоичного кодирования различных типов геометрии, используемый в GIS‑приложениях). См. #43941. #80139 (scanhex12).
- Добавлено планирование слотов запросов для рабочих нагрузок. Подробности см. в разделе workload scheduling. #78415 (Sergei Trifonov).
- Вспомогательные функции
timeSeries*для ускорения некоторых сценариев при работе с временными рядами: - ресемплирование данных по временной сетке с заданными начальной и конечной метками времени и шагом - вычисление PromQL-подобныхdelta,rate,ideltaиirate. #80590 (Alexander Gololobov). - Добавлены функции
mapContainsValuesLike/mapContainsValues/mapExtractValuesLikeдля фильтрации по значениям map и их поддержка в индексах на основе bloom-фильтров. #78171 (UnamedRus). - Теперь ограничения настроек могут задавать набор запрещённых значений. #78499 (Bharat Nallan).
- Добавлена настройка
enable_shared_storage_snapshot_in_query, которая позволяет всем подзапросам одного запроса использовать общий снимок хранилища. Это обеспечивает согласованное чтение из одной и той же таблицы, даже если таблица упоминается в запросе несколько раз. #79471 (Amos Bird). - Добавлена поддержка записи столбцов
JSONв форматParquetи прямого чтения столбцовJSONизParquet. #79649 (Nihal Z. Miaji). - Добавлена поддержка
MultiPolygonдляpointInPolygon. #79773 (Nihal Z. Miaji). - Добавлена поддержка запросов к Delta-таблицам, смонтированным из локальной файловой системы, через табличную функцию
deltaLakeLocal. #79781 (roykim98). - Добавлена новая настройка
cast_string_to_date_time_mode, которая позволяет выбирать режим разбораDateTimeпри приведении типа изString. #80210 (Pavel Kruglov). Например, вы можете установить её в режим «best effort». - Добавлены функции
bech32Encodeиbech32Decodeдля работы с алгоритмом Bech32 в Bitcoin (issue #40381). #80239 (George Larionov). - Добавлены SQL-функции для анализа имён частей MergeTree. #80573 (Mikhail Artemenko).
- Добавлена возможность фильтровать части, выбранные для запроса, по диску, на котором они находятся, благодаря введению нового виртуального столбца
_disk_name. #80650 (tanner-bruce). - Добавлена стартовая страница со списком встроенных веб-инструментов. Она будет открываться при запросе браузероподобным пользовательским агентом. #81129 (Alexey Milovidov).
- Функции
arrayFirst,arrayFirstIndex,arrayLastиarrayLastIndexотбрасывают значения NULL, возвращаемые выражением фильтра. В предыдущих версиях результаты фильтра типа Nullable не поддерживались. Исправляет #81113. #81197 (Lennard Eijsackers). - Теперь можно использовать
USE DATABASE nameвместоUSE name. #81307 (Yarik Briukhovetskyi). - Добавлена новая системная таблица
system.codecsдля просмотра доступных кодеков. (issue #81525). #81600 (Jimmy Aguilar Mena). - Добавлена поддержка оконных функций
lagиlead. Закрывает #9887. #82108 (Dmitry Novik). - Функция
tokensтеперь поддерживает новый токенизаторsplit, удобный для обработки логов. #80195 (Robert Schulze). - Добавлена поддержка аргумента
--databaseвclickhouse-local. Теперь можно переключаться на уже созданную базу данных. Это закрывает #44115. #81465 (Alexey Milovidov).
Экспериментальная возможность
- Реализована логика ребалансировки, аналогичная механизму Kafka rebalance, для
Kafka2с использованием ClickHouse Keeper. Для каждой реплики поддерживаются два типа блокировок партиций: постоянные и временные. Реплика старается удерживать постоянные блокировки как можно дольше; в любой момент времени на реплике не более чемall_topic_partitions / active_replicas_count(гдеall_topic_partitions— количество всех партиций,active_replicas_count— количество активных реплик) постоянных блокировок; если их больше, реплика освобождает некоторые партиции. Некоторые партиции временно удерживаются репликой. Максимальное количество временных блокировок на реплике динамически изменяется, чтобы дать другим репликам возможность взять часть партиций в постоянные блокировки. При обновлении временных блокировок реплика снимает их все и снова пытается захватить некоторые другие. #78726 (Daria Fomina). - Улучшение для экспериментального текстового индекса: поддерживаются явные параметры в виде пар ключ–значение. В настоящее время поддерживаются параметры: обязательный
tokenizerи два необязательных —max_rows_per_postings_listиngram_size. #80262 (Elmi Ahmadov). - Ранее хранилище
packedне поддерживалось для полнотекстового индекса, поскольку идентификатор сегмента обновлялся «на лету» путём чтения и записи файла (.gin_sid) на диске. В случаеpacked‑хранилища чтение значения из незакоммиченного файла не поддерживается, и это приводило к проблеме. Теперь это работает корректно. #80852 (Elmi Ahmadov). - Экспериментальные индексы типа
gin(которые мне не нравятся, потому что это внутренняя шутка хакеров PostgreSQL) были переименованы вtext. Существующие индексы типаginпо‑прежнему можно загрузить, но при попытке использовать их в поиске они будут выбрасывать исключение (предлагая вместо них использовать индексыtext). #80855 (Robert Schulze).
Повышение производительности
- Добавлена поддержка фильтрации по нескольким проекциям, что позволяет использовать более одной проекции при фильтрации на уровне частей. Это решает #55525. Это второй шаг на пути к реализации индекса проекций, после #78429. #80343 (Amos Bird).
- По умолчанию в файловом кэше используется политика кэширования
SLRU. #75072 (Kseniia Sumarokova). - Устранена конкуренция при выполнении шага Resize в конвейере запросов. #77562 (Zhiguo Zhou).
- Добавлена опция переноса (де)сжатия и (де)сериализации блоков в конвейерные потоки вместо использования одного потока, связанного с сетевым подключением. Управляется настройкой
enable_parallel_blocks_marshalling. Это должно ускорить распределённые запросы, которые передают значительные объёмы данных между инициатором и удалёнными узлами. #78694 (Nikita Taranov). - Улучшена производительность всех типов Bloom‑фильтров. Видео с конференции OpenHouse #79800 (Delyan Kratunov).
- Добавлен оптимизированный путь выполнения в
UniqExactSet::mergeдля случая, когда один из наборов пустой. Также теперь, если множество LHS двухуровневое, а RHS одноуровневое, не выполняется преобразование RHS в двухуровневое множество. #79971 (Nikita Taranov). - Повышена эффективность повторного использования памяти и уменьшено количество ошибок страничной памяти при использовании двухуровневых хеш-таблиц. Это позволяет ускорить выполнение GROUP BY. #80245 (Jiebin Sun).
- Исключены лишние обновления и снижена конкуренция за блокировки в кэше условий запросов. #80247 (Jiebin Sun).
- Тривиальная оптимизация для
concatenateBlocks. Скорее всего, она также полезна для параллельного hash join. #80328 (李扬). - При выборе диапазонов меток из диапазона первичного ключа двоичный поиск не может быть использован, если первичный ключ обернут функциями. В этом PR это ограничение смягчено: двоичный поиск по-прежнему может применяться, когда первичный ключ обернут цепочкой всегда монотонных функций или когда RPN содержит элемент, который всегда истиннен. Закрывает #45536. #80597 (zoomxi).
- Ускорено завершение работы движка
Kafka(удалена лишняя задержка в 3 секунды при наличии нескольких таблицKafka). #80796 (Azat Khuzhin). - Асинхронные вставки: снижают потребление памяти и повышают производительность запросов INSERT. #80972 (Raúl Marín).
- Если таблица логов отключена, не профилировать процессоры. #81256 (Raúl Marín). Это ускоряет очень короткие запросы.
- Ускорена работа
toFixedString, когда исходное значение уже имеет требуемый формат. #81257 (Raúl Marín). - Не обрабатывать значения квоты, если для пользователя не задана квота. #81549 (Raúl Marín). Это ускоряет очень короткие запросы.
- Исправлена регрессия по производительности в отслеживании использования памяти. #81694 (Michael Kolupaev).
- Улучшена оптимизация ключа шардирования в распределённых запросах. #78452 (fhw12345).
- Параллельные реплики: избегайте ожидания медленных, неиспользуемых реплик, если все задачи чтения уже распределены между другими репликами. #80199 (Igor Nikonov).
- Теперь для parallel replicas используется отдельный таймаут подключения, см. настройку
parallel_replicas_connect_timeout_ms. Ранее в качестве таймаута подключения для запросов с parallel replicas использовались настройкиconnect_timeout_with_failover_ms/connect_timeout_with_failover_secure_ms(по умолчанию 1 секунда). #80421 (Igor Nikonov). - В файловой системе с журналированием
mkdirзаписывается в журнал файловой системы, который затем сбрасывается на диск. В случае медленного диска это может занимать много времени. Переместите его за пределы области блокировки резерва. #81371 (Kseniia Sumarokova). - Отложить чтение файлов манифестов Iceberg до выполнения первого запроса на чтение. #81619 (Daniil Ivanik).
- Разрешить перенос предиката
GLOBAL [NOT] INв предложениеPREWHERE, если это возможно. #79996 (Eduard Karacharov).
Улучшения
EXPLAIN SYNTAXтеперь использует новый анализатор. Он возвращает AST, построенное из дерева запроса. Добавлен параметрquery_tree_passesдля управления количеством проходов, выполняемых перед преобразованием дерева запроса в AST. #74536 (Vladimir Cherkasov).- Реализована плоская сериализация для Dynamic и JSON в формате Native, которая позволяет сериализовать и десериализовать данные Dynamic и JSON без использования специальных структур, таких как shared variant для Dynamic и shared data для JSON. Эту сериализацию можно включить, установив параметр
output_format_native_use_flattened_dynamic_and_json_serialization. Её можно использовать для упрощения поддержки Dynamic и JSON в TCP-протоколе в клиентах на разных языках. #80499 (Pavel Kruglov). - Обновлять учетные данные для
S3после ошибкиAuthenticationRequired. #77353 (Vitaly Baranov). - Добавлены метрики для словарей в
system.asynchronous_metrics:DictionaryMaxUpdateDelay— максимальная задержка (в секундах) обновления словаря;DictionaryTotalFailedUpdates— количество ошибок при обновлении всех словарей с момента последней успешной загрузки. #78175 (Vlad). - Добавлено предупреждение о базах данных, которые могли быть созданы для сохранения повреждённых таблиц. #78841 (János Benjamin Antal).
- Добавлен виртуальный столбец
_timeв движкахS3QueueиAzureQueue. #78926 (Anton Ivashkin). - Настройки, управляющие разрывом соединения при перегрузке CPU, сделаны горячеперезагружаемыми. #79052 (Alexey Katsman).
- Добавлен префикс контейнера к путям данных, отображаемым в
system.tablesдля обычных дисков в хранилище Azure Blob, что делает представление данных единообразным с S3 и GCP. #79241 (Julia Kartseva). - Теперь clickhouse-client и local также принимают параметры запроса с именами вида
param-<name>(дефис) наряду сparam_<name>(подчёркивание). Тем самым закрывается #63093. #79429 (Engel Danila). - Подробное предупреждающее сообщение об экономии трафика при копировании данных из локального хранилища в удалённое S3 при включённой проверке контрольных сумм. #79464 (VicoWu).
- Ранее при
input_format_parquet_max_block_size = 0(некорректное значение) ClickHouse зависал. Теперь это поведение исправлено. Это закрывает #79394. #79601 (abashkeev). - Добавлена настройка
throw_on_errorдляstartup_scripts: еслиthrow_on_errorустановлена вtrue, сервер не запустится, пока все запросы не завершатся успешно. По умолчаниюthrow_on_errorимеет значениеfalse, что сохраняет прежнее поведение. #79732 (Aleksandr Musorin). - Разрешено добавлять
http_response_headersвhttp_handlersлюбого типа. #79975 (Andrey Zvonov). - Теперь функция
reverseподдерживает тип данныхTuple. Закрывает #80053. #80083 (flynn). - Решена задача #75817: теперь можно получать данные
auxiliary_zookeepersиз таблицыsystem.zookeeper. #80146 (Nikolay Govorov). - Добавлены асинхронные метрики для TCP-сокетов сервера. Это повышает наблюдаемость. Закрывает #80187. #80188 (Alexey Milovidov).
- Добавлена поддержка
anyLast_respect_nullsиany_respect_nullsв качествеSimpleAggregateFunction. #80219 (Diskein). - Удалён ненужный вызов
adjustCreateQueryForBackupдля реплицируемых баз данных. #80282 (Vitaly Baranov). - Разрешить использование дополнительных параметров (которые идут после
--, как-- --config.value='abc') вclickhouse-localбез знака равенства. Закрывает #80292. #80293 (Alexey Milovidov). - Подсветить метасимволы в запросах
SHOW ... LIKE. Закрывает задачу #80275. #80297 (Alexey Milovidov). - Сделать SQL UDF в
clickhouse-localпостоянной. Ранее созданная функция будет загружаться при запуске. Это закрывает #80085. #80300 (Alexey Milovidov). - Исправлено описание в плане выполнения запроса для предварительного шага DISTINCT. #80330 (UnamedRus).
- Разрешено использование именованных коллекций в ODBC/JDBC. #80334 (Andrey Zvonov).
- Метрики количества дисков только для чтения и повреждённых дисков. Индикатор логирует сообщение при запуске DiskLocalCheckThread. #80391 (VicoWu).
- Реализована поддержка хранилища
s3_plain_rewritableс проекциями. В предыдущих версиях объекты метаданных в S3, ссылающиеся на проекции, не обновлялись при их перемещении. Закрывает #70258. #80393 (Sav). - Команда
SYSTEM UNFREEZEбольше не пытается искать части данных на дисках только для чтения (readonly) и одноразовой записи (write-once). Это закрывает #80430. #80432 (Alexey Milovidov). - Уменьшен уровень логирования сообщений о слитых партах. #80476 (Hans Krutzer).
- Изменено поведение обрезки партиций (partition pruning) по умолчанию для таблиц Iceberg. #80583 (Melvyn Peignon).
- Добавлены два новых ProfileEvents для наблюдаемости алгоритмов поиска по индексу:
IndexBinarySearchAlgorithmиIndexGenericExclusionSearchAlgorithm. #80679 (Pablo Marcos). - Не выводить в логах предупреждения о неподдерживаемом
MADV_POPULATE_WRITEна более старых версиях ядра (чтобы не засорять логи). #80704 (Robert Schulze). - Добавлена поддержка
Date32иDateTime64в выраженияхTTL. #80710 (Andrey Zvonov). - Скорректированы значения совместимости для
max_merge_delayed_streams_for_parallel_write. #80760 (Azat Khuzhin). - Исправлен сбой: если при попытке удаления временного файла (они используются для сброса временных данных на диск) в деструкторе выбрасывалось исключение, программа могла аварийно завершиться. #80776 (Alexey Milovidov).
- Добавлен модификатор
IF EXISTSдля командыSYSTEM SYNC REPLICA. #80810 (Raúl Marín). - Сообщение об исключении «Having zero bytes, but read range is not finished...» расширено, в таблицу
system.filesystem_cacheдобавлен столбецfinished_download_time. #80849 (Kseniia Sumarokova). - Добавлен раздел с алгоритмом поиска в вывод
EXPLAINпри использовании с indexes = 1. В нём отображается либо «binary search», либо «generic exclusion search». #80881 (Pablo Marcos). - В начале 2024 года параметр
prefer_column_name_to_aliasбыл жёстко зафиксирован в значение true для обработчика MySQL, поскольку новый анализатор не был включён по умолчанию. Теперь это жёсткое задание убрано. #80916 (Yarik Briukhovetskyi). - Теперь
system.iceberg_historyпоказывает историю для баз данных каталогов, таких как glue или iceberg rest. Также для единообразия вsystem.iceberg_historyстолбцыtable_nameиdatabase_nameбыли переименованы вtableиdatabase. #80975 (alesapin). - Добавлен режим только для чтения для табличной функции
merge, поэтому для её использования больше не требуются праваCREATE TEMPORARY TABLE. #80981 (Miсhael Stetsyuk). - Улучшена интроспекция кешей в памяти (информация о кешах теперь экспортируется в
system.metricsвдобавок к неполномуsystem.asynchronouse_metrics). Вdashboard.htmlдобавлен размер кешей в памяти (в байтах).VectorSimilarityIndexCacheSize/IcebergMetadataFilesCacheSizeбыли переименованы вVectorSimilarityIndexCacheBytes/IcebergMetadataFilesCacheBytes. #81023 (Azat Khuzhin). - Игнорировать базы данных с движками баз данных, которые не могут содержать таблицы
RocksDBпри чтении изsystem.rocksdb. #81083 (Pervakov Grigorii). - Разрешено использование
filesystem_cachesиnamed_collectionsв конфигурационном файлеclickhouse-local. #81105 (Alexey Milovidov). - Исправлена подсветка синтаксиса для
PARTITION BYв запросахINSERT. В предыдущих версияхPARTITION BYне подсвечивалось как ключевое слово. #81106 (Alexey Milovidov). - Два небольших улучшения в веб-интерфейсе: — корректная обработка запросов без вывода, таких как
CREATE,INSERT(до недавнего времени эти запросы приводили к бесконечной анимации загрузки); — при двойном щелчке по таблице страница прокручивается к началу. #81131 (Alexey Milovidov). - Метрика
MemoryResidentWithoutPageCacheпоказывает объём физической памяти, используемой серверным процессом, за вычетом userspace page cache, в байтах. Это даёт более точное представление о фактическом использовании памяти при использовании userspace page cache. Когда userspace page cache отключён, это значение равноMemoryResident. #81233 (Jayme Bird). - Помечать исключения, вручную записанные в лог в client, local server, keeper client и приложении disks, как уже записанные, чтобы они не попадали в логи дважды. #81271 (Miсhael Stetsyuk).
- Параметры
use_skip_indexes_if_finalиuse_skip_indexes_if_final_exact_modeтеперь по умолчанию установлены вTrue. Запросы с операторомFINALтеперь будут использовать пропускающие индексы (если применимо) для предварительного отбора гранул, а также считывать любые дополнительные гранулы, соответствующие диапазонам первичных ключей, попадающим под условие. Пользователи, которым требуется прежнее поведение с приблизительными/неточными результатами, могут установитьuse_skip_indexes_if_final_exact_modeвFALSEпосле тщательной оценки последствий. #81331 (Shankar Iyer). - Когда в веб-интерфейсе открыто несколько запросов, выполняется тот, который находится под курсором. Продолжение #80977. #81354 (Alexey Milovidov).
- Этот PR устраняет проблемы с реализацией
is_strictв проверках монотонности для функций преобразования. В настоящее время некоторые функции преобразования, такие какtoFloat64(UInt32)иtoDate(UInt8), некорректно возвращаютis_strictсо значением false, когда должны возвращать true. #81359 (zoomxi). - При проверке того, соответствует ли
KeyConditionнепрерывному диапазону, и если ключ обёрнут цепочкой нестрогих функций, может потребоваться преобразованиеConstraint::POINTвConstraint::RANGE. Например, выражениеtoDate(event_time) = '2025-06-03'подразумевает дляevent_timeдиапазон ['2025-06-03 00:00:00', '2025-06-04 00:00:00'). Этот PR исправляет такое поведение. #81400 (zoomxi). - Псевдонимы
clickhouse/chбудут вызыватьclickhouse-clientвместоclickhouse-local, если указаны--hostили--port. Продолжение #79422. Закрывает #65252. #81509 (Alexey Milovidov). - Теперь, когда у нас есть данные о распределении времени отклика Keeper, мы можем настроить интервалы гистограммы для метрик. #81516 (Miсhael Stetsyuk).
- Добавлено событие профилирования
PageCacheReadBytes. #81742 (Kseniia Sumarokova). - Исправлена логическая ошибка в кэше файловой системы: «Having zero bytes but range is not finished». #81868 (Kseniia Sumarokova).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Исправлено параметризованное представление, использующее запрос SELECT EXCEPT. Закрывает #49447. #57380 (Nikolay Degterinsky).
- Analyzer: Исправлено имя проекции столбца после повышения типа столбца при выполнении JOIN. Закрывает #63345. #63519 (Dmitry Novik).
- Исправлена логическая ошибка при конфликте имён столбцов при включённой опции analyzer_compatibility_join_using_top_level_identifier. #75676 (Vladimir Cherkasov).
- Исправлено использование CTE в проталкиваемых предикатах при включённом параметре
allow_push_predicate_ast_for_distributed_subqueries. Исправлены #75647 и #79672. #77316 (Dmitry Novik). - Исправляет проблему, при которой команда SYSTEM SYNC REPLICA LIGHTWEIGHT 'foo' ошибочно сообщала об успешном выполнении, даже если указанная реплика не существовала. Теперь команда корректно проверяет наличие реплики в Keeper перед попыткой синхронизации. #78405 (Jayme Bird).
- Исправлена ошибка, приводившая к аварийному завершению в очень специфической ситуации, когда функция
currentDatabaseиспользовалась в секцияхCONSTRAINTдля запросовON CLUSTER. Закрывает #78100. #79070 (pufit). - Исправлена передача внешних ролей в межсерверных запросах. #79099 (Andrey Zvonov).
- Попробуйте использовать IColumn вместо Field в SingleValueDataGeneric. Это устраняет некорректные возвращаемые значения некоторых агрегатных функций, например
argMaxдля типовDynamic/Variant/JSON. #79166 (Pavel Kruglov). - Исправлено применение параметров use_native_copy и allow_azure_native_copy для Azure Blob Storage, а также обновлён механизм, который использует native copy только при совпадении учетных данных, что устраняет проблему #78964. #79561 (Smita Kulkarni).
- Исправлены логические ошибки, связанные с неопределённой областью происхождения столбца, возникавшие при проверке, коррелирован ли этот столбец. Исправлены #78183. Исправлены #79451. #79727 (Dmitry Novik).
- Исправлены некорректные результаты для grouping sets при использовании ColumnConst и Analyzer. #79743 (Andrey Zvonov).
- Исправлено дублирование результатов локального шарда при чтении из распределённой таблицы в случае устаревшей локальной реплики. #79761 (Eduard Karacharov).
- Исправлен порядок сортировки значений NaN с отрицательным знаковым битом. #79847 (Pervakov Grigorii).
- Теперь
GROUP BY ALLне учитывает конструкциюGROUPING. #79915 (Yarik Briukhovetskyi). - Исправлено некорректное слияние состояний для функций
TopK/TopKWeighted, из-за которого возникали чрезмерные значения ошибки даже при неиспользованной до конца ёмкости. #79939 (Joel Höner). - Теперь учитывается настройка
readonlyв объектном хранилищеazure_blob_storage. #79954 (Julia Kartseva). - Исправлены некорректные результаты запросов и аварийные завершения из-за нехватки памяти при использовании
match(column, '^…')с символами, экранированными обратной косой чертой. #79969 (filimonov). - Отключено секционирование в стиле Hive для озёр данных. Частично решает https://github.com/issues/assigned?issue=ClickHouse%7CClickHouse%7C79937. #80005 (Daniil Ivanik).
- Пропускающие индексы с lambda-выражениями не применялись. Исправлен случай, когда высокоуровневые функции в определении индекса в точности совпадают с функциями в запросе. #80025 (Nikolai Kochetov).
- Исправлена версия метаданных, используемая при присоединении части на реплике, выполняющей команду ATTACH_PART из журнала репликации. #80038 (Aleksei Filatov).
- Имена исполняемых пользовательских определяемых функций (eUDF) не добавляются в столбец
used_functionsтаблицыsystem.query_log, в отличие от других функций. В этом PR реализовано добавление имени eUDF в случае её использования в запросе. #80073 (Kyamran). - Исправлена логическая ошибка в формате Arrow при работе с LowCardinality(FixedString). #80156 (Pavel Kruglov).
- Исправлено чтение подколонок в движке Merge. #80158 (Pavel Kruglov).
- Исправлена ошибка в сравнении числовых типов в
KeyCondition. #80207 (Yarik Briukhovetskyi). - Исправлена ошибка AMBIGUOUS_COLUMN_NAME, возникавшая при применении ленивой материализации к таблице с проекциями. #80251 (Igor Nikonov).
- Исправлена некорректная оптимизация вычисления count() для фильтров по строковому префиксу вида LIKE 'ab_c%' при использовании неявных проекций. Это исправляет #80250. #80261 (Amos Bird).
- Исправлена некорректная сериализация вложенных числовых полей как строк в документах MongoDB. Удалено ограничение на максимальную глубину вложенности документов MongoDB. #80289 (Kirill Nikiforov).
- Ослаблены проверки метаданных для RMT в реплицируемой базе данных. Закрывает #80296. #80298 (Nikolay Degterinsky).
- Исправлено текстовое представление типов DateTime и DateTime64 при сохранении в PostgreSQL. #80301 (Yakov Olkhovskiy).
- Добавлена поддержка
DateTimeс часовым поясом в таблицахStripeLog. Это закрывает #44120. #80304 (Alexey Milovidov). - Отключён push-down фильтра для предиката с недетерминированной функцией, если шаг плана запроса изменяет количество строк. Исправлено #40273. #80329 (Nikolai Kochetov).
- Исправлены потенциальные логические ошибки и сбои в проекциях с подстолбцами. #80333 (Pavel Kruglov).
- Исправлена ошибка
NOT_FOUND_COLUMN_IN_BLOCK, вызванная оптимизацией проталкивания фильтра (filter-push-down) на этапе логического JOIN sep в случае, когда выражениеONне является тривиальным равенством. Исправляет #79647 и #77848. #80360 (Nikolai Kochetov). - Исправлен некорректный результат при чтении ключей в обратном порядке в секционированных таблицах. Это исправляет #79987. #80448 (Amos Bird).
- Исправлена некорректная сортировка в таблицах с ключом, допускающим NULL, и включённым optimize_read_in_order. #80515 (Pervakov Grigorii).
- Исправлена проблема, из‑за которой операция DROP для обновляемого материализованного представления зависала, если это представление было приостановлено с помощью SYSTEM STOP REPLICATED VIEW. #80543 (Michael Kolupaev).
- Исправлена ошибка 'Cannot find column' при использовании кортежа-константы в распределённом запросе. #80596 (Yakov Olkhovskiy).
- Исправлена функция
shardNumв таблицах типа Distributed при использованииjoin_use_nulls. #80612 (János Benjamin Antal). - Исправлен некорректный результат при чтении столбца, который присутствует только в части таблиц в движке Merge. #80643 (Pavel Kruglov).
- Исправлена потенциальная проблема протокола SSH (из-за зависания в replxx). #80688 (Azat Khuzhin).
- Временная метка в таблице iceberg_history теперь должна быть правильной. #80711 (Melvyn Peignon).
- Устранён потенциальный сбой при неудачной регистрации словаря (когда
CREATE DICTIONARYзавершался с ошибкойCANNOT_SCHEDULE_TASK, в реестре словарей мог оставаться висячий указатель, что впоследствии приводило к аварийному завершению). #80714 (Azат Khuzhin). - Исправлена обработка glob-шаблонов перечислений с одним элементом в табличных функциях для объектного хранилища. #80716 (Konstantин Bogdanov).
- Исправлен неверный тип результата функций сравнения с Tuple(Dynamic) и String, приводивший к логической ошибке. #80728 (Pavel Kruglov).
- Добавлена недостающая поддержка типа данных
timestamp_ntzдля Unity Catalog. Исправлены #79535 и #79875. #80740 (alesapin). - Исправлена ошибка
THERE_IS_NO_COLUMNдля распределённых запросов сIN cte. Устраняет #75032. #80757 (Nikolai Kochetov). - Исправлена проблема с чрезмерным количеством файлов (что приводило к чрезмерному использованию памяти) для внешнего ORDER BY. #80777 (Azat Khuzhin).
- Этот PR может закрыть #80742. #80783 (zoomxi).
- Исправлен сбой в Kafka из‑за того, что функция get_member_id() создавала std::string из NULL (ошибка, вероятно, проявлялась только в случае неудачного подключения к брокеру). #80793 (Azat Khuzhin).
- Корректно дожидаться завершения потребителей перед остановкой движка Kafka (активные потребители после остановки могут приводить к срабатыванию различных отладочных assert'ов, а также продолжать считывать данные от брокеров в фоновом режиме после удаления или отсоединения таблицы). #80795 (Azat Khuzhin).
- Исправлена ошибка
NOT_FOUND_COLUMN_IN_BLOCK, вызванная оптимизациейpredicate-push-down. Исправляет #80443. #80834 (Nikolai Kochetov). - Исправлена логическая ошибка при разрешении звёздочного шаблона (*) в табличной функции в JOIN с USING. #80894 (Vladimir Cherkasov).
- Исправлен учет памяти для кэша файлов метаданных Iceberg. #80904 (Azat Khuzhin).
- Исправлено некорректное секционирование с ключом секционирования типа Nullable. #80913 (Pervakov Grigorii).
- Исправлена ошибка
Table does not existдля распределённых запросов с проталкиванием предиката (allow_push_predicate_ast_for_distributed_subqueries=1), когда исходная таблица отсутствует на инициаторе запроса. Исправляет #77281. #80915 (Nikolai Kochetov). - Исправлена логическая ошибка во вложенных функциях с именованными окнами. #80926 (Pervakov Grigorii).
- Исправлены экстремумы для столбцов Nullable и с плавающей запятой. #80970 (Pervakov Grigorii).
- Исправлен возможный сбой при выполнении запросов к
system.tables(вероятно возникающий при недостатке памяти). #80976 (Azat Khuzhin). - Исправлена работа атомарного переименования с усечением для файлов, сжатие которых определяется по их расширению. #80979 (Pablo Marcos).
- Исправлен метод
ErrorCodes::getName. #81032 (RinChanNOW). - Исправлена ошибка, из-за которой пользователь не мог получить список таблиц в Unity Catalog без прав на все таблицы. Теперь все таблицы корректно перечисляются, а попытка чтения из таблицы с ограниченным доступом вызовет исключение. #81044 (alesapin).
- Теперь ClickHouse игнорирует ошибки и неожиданные ответы от каталогов data lake в запросе
SHOW TABLES. Исправляет #79725. #81046 (alesapin). - Исправлен разбор значений
DateTime64из целых чисел вJSONExtractи при разборе типаJSON. #81050 (Pavel Kruglov). - Учесть параметр date_time_input_format в кэше определения схемы. #81052 (Pavel Kruglov).
- Исправлен сбой при INSERT, если таблица была удалена (DROP) после начала запроса, но до отправки столбцов. #81053 (Azat Khuzhin).
- Исправлено использование неинициализированного значения в quantileDeterministic. #81062 (Azat Khuzhin).
- Исправлено управление счётчиком жёстких ссылок для транзакций диска metadatastoragefromdisk. Добавлены тесты. #81066 (Sema Checherinda).
- Имена пользовательских функций (UDF) не добавляются в таблицу
system.query_logв отличие от других функций. Этот pull request добавляет запись имени UDF в один из двух столбцов —used_executable_user_defined_functionsилиused_sql_user_defined_functions, если UDF использовалась в запросе. #81101 (Kyamran). - Исправлены ошибки
Too large size ... passed to allocatorи возможные сбои при вставке данных по протоколу HTTP с использованием текстовых форматов (JSON,Values, ...) и пропущенных полей типаEnum. #81145 (Anton Popov). - Исправлена ошибка LOGICAL_ERROR при наличии разрежённого столбца (Sparse column) в блоке INSERT, отправляемом в не многопоточное материализованное представление (non-MT MV). #81161 (Azat Khuzhin).
- Исправлена ошибка
Unknown table expression identifierпри использованииdistributed_product_mode_local=localпри кросс-репликации. #81162 (Nikolai Kochetov). - Исправлено некорректное кэширование количества строк в файлах Parquet после фильтрации. #81184 (Michael Kolupaev).
- Исправлен параметр fs cache max_size_to_total_space при использовании с относительным путём к кэшу. #81237 (Kseniia Sumarokova).
- Исправлено падение clickhouse-local при выводе в формате Parquet константных кортежей или отображений. #81249 (Michael Kolupaev).
- Проверка смещений массивов, полученных по сети. #81269 (Azat Khuzhin).
- Исправлен граничный случай в запросе, выполняющем
JOINнад пустыми таблицами и использующем оконные функции. Ошибка приводила к взрывному росту числа параллельных потоков, что вызывало OOM. #81299 (Alexander Gololobov). - Исправления для кластерных функций data lake (
deltaLakeCluster,icebergClusterи т. д.): (1) исправлен потенциальный сегфолт вDataLakeConfigurationпри использовании функцииClusterсо старым анализатором; (2) удалены дублирующие обновления метаданных data lake (лишние запросы к объектному хранилищу); (3) исправлен избыточный листинг в объектном хранилище, когда формат явно не указан (что уже было реализовано для некластерных движков data lake). #81300 (Kseniia Sumarokova). - Флаг force_restore_data восстанавливает потерянные метаданные Keeper. #81324 (Raúl Marín).
- Исправлена ошибка региона в delta-kernel. Исправляет проблему #79914. #81353 (Kseniia Sumarokova).
- Отключена некорректная JIT-компиляция для divideOrNull. #81370 (Raúl Marín).
- Исправлена ошибка вставки данных, возникавшая, когда таблица MergeTree имела слишком длинное имя столбца партиционирования. #81390 (hy123q).
- Бэкпортировано в #81957: исправлена возможная аварийная остановка
Aggregatorпри возникновении исключения во время слияния. #81450 (Nikita Taranov). - Не хранить в памяти содержимое нескольких файлов манифестов. #81470 (Daniil Ivanik).
- Исправлено возможное аварийное завершение при остановке фоновых пулов (
background_.*pool_size). #81473 (Azat Khuzhin). - Исправлено чтение за пределами допустимого диапазона памяти в формате
Npy, возникавшее при записи в таблицу с движкомURL. Это закрывает #81356. #81502 (Alexey Milovidov). - Есть вероятность, что веб-интерфейс будет отображать
NaN%(типичная проблема JavaScript). #81507 (Alexey Milovidov). - Исправлена проблема с
DatabaseReplicatedприdatabase_replicated_enforce_synchronous_settings=1. #81564 (Azat Khuzhin). - Исправлен порядок сортировки для типов LowCardinality(Nullable(...)). #81583 (Pervakov Grigorii).
- Сервер не должен удерживать HTTP‑соединение, если запрос не был полностью прочитан из сокета. #81595 (Sema Checherinda).
- Скалярные коррелированные подзапросы теперь возвращают результат проекционного выражения типа Nullable. Исправлен случай, когда коррелированный подзапрос возвращает пустое результирующее множество. #81632 (Dmitry Novik).
- Исправлена ошибка
Unexpected relative path for a deduplicated partво время операцииATTACHкReplicatedMergeTree. #81647 (Azat Khuzhin). - Настройка запроса
use_iceberg_partition_pruningне будет применяться для хранилища Iceberg, потому что оно использует глобальный контекст, а не контекст запроса. Это не критично, так как значение по умолчанию — true. Этот pull request исправляет это. #81673 (Han Fei). - Перенесено в #82128: исправлена ошибка «Context has expired» при слияниях, когда в выражении TTL используется словарь. #81690 (Azat Khuzhin).
- Добавлена проверка настройки MergeTree
merge_max_block_size, чтобы гарантировать, что она не равна нулю. #81693 (Bharat Nallan). - Исправлены проблемы с
clickhouse-local, связанные с зависанием запросовDROP VIEW. #81705 (Bharat Nallan). - Исправлен JOIN с хранилищем StorageRedis в ряде случаев. #81736 (Pervakov Grigorii).
- Исправлено падение
ConcurrentHashJoinпри пустомUSING ()и включённом старом анализаторе. #81754 (Nikita Taranov). - Исправление в Keeper: блокировать фиксацию (коммит) новых логов, если в логах есть некорректная запись. Ранее, если лидер некорректно применял некоторые логи, он продолжал фиксировать новые логи, хотя фолловер обнаруживал несоответствие дайджеста и прерывал операцию. #81780 (Antonio Andelic).
- Исправлена проблема, из-за которой обязательные столбцы не читались при обработке скалярного коррелированного подзапроса. Исправляет #81716. #81805 (Dmitry Novik).
- Кто-то засорил наш код Kusto. Почистили. Это закрывает #81643. #81885 (Alexey Milovidov).
- В предыдущих версиях сервер возвращал избыточное содержимое для запросов к
/js. Это изменение закрывает #61890. #81895 (Alexey Milovidov). - Ранее определения движка таблицы
MongoDBмогли включать компонент пути в аргументеhost:port, который при этом тихо игнорировался. Интеграция сMongoDBотказывалась загружать такие таблицы. С этим исправлением загрузка таких таблиц разрешена, а компонент пути игнорируется, если движокMongoDBимеет пять аргументов; при этом используется имя базы данных из аргументов. Примечание: Исправление не применяется к вновь созданным таблицам или запросам с табличной функциейmongo, а также к источникам словарей и именованным коллекциям. #81942 (Vladimir Cherkasov). - Исправлено возможное аварийное завершение работы
Aggregatorпри возникновении исключения во время слияния. #82022 (Nikita Taranov). - Исправлена ошибка копирования и вставки в
arraySimilarity, запрещено использование весов с типамиUInt32иInt32. Обновлены тесты и документация. #82103 (Mikhail f. Shiryaev). - Исправлена возможная гонка данных между потоком подсказок и основным клиентским потоком. #82233 (Azat Khuzhin).
Улучшения в сборке, тестировании и упаковке
- Используется
postgres16.9. #81437 (Konstantin Bogdanov). - Используйте
openssl3.2.4. #81438 (Konstantin Bogdanov). - Использовать
abseil-cppверсии от 2025-01-27. #81440 (Konstantin Bogdanov). - Используйте
mongo-c-driver1.30.4. #81449 (Konstantин Богданов). - Используйте
krb51.21.3-final. #81453 (Konstantin Bogdanov). - Используйте
orc2.1.2. #81455 (Konstantin Bogdanov). - Используйте
grpc1.73.0. #81629 (Konstantin Bogdanov). - Используйте
delta-kernel-rsверсии 0.12.1. #81707 (Konstantin Bogdanov). - Обновлён
c-aresдоv1.34.5. #81159 (Konstantin Bogdanov). - Обновите
curlдо версии 8.14, чтобы устранить уязвимости CVE-2025-5025 и CVE-2025-4947. #81171 (larryluogit). - Обновить
libarchiveдо версии 3.7.9 для устранения следующих уязвимостей: CVE-2024-20696 CVE-2025-25724 CVE-2024-48958 CVE-2024-57970 CVE-2025-1632 CVE-2024-48957 CVE-2024-48615. #81174 (larryluogit). - Обновить
libxml2до версии 2.14.3. #81187 (larryluogit). - Исключено копирование вендорных исходников Rust в
CARGO_HOME. #79560 (Konstantин Bogdanов). - Удалена зависимость от библиотеки Sentry путём замены её на собственный endpoint. #80236 (Alexey Milovidov).
- Обновлены зависимости Python в CI-образах для устранения предупреждений Dependabot. #80658 (Raúl Marín).
- Повторить чтение флага остановки реплицируемого DDL из Keeper при запуске, чтобы сделать тесты более надёжными, когда для Keeper включена инъекция сбоев. #80964 (Alexander Gololobov).
- Использовать HTTPS для URL-адреса архива Ubuntu. #81016 (Raúl Marín).
- Обновлены зависимости Python в тестовых образах. #81042 (dependabot[bot]).
- Добавлен файл
flake.nixдля сборок Nix. #81463 (Konstantin Bogdanov). - Исправлена проблема, из-за которой
delta-kernel-rsтребовал доступа к сети во время сборки. Закрыта задача #80609. #81602 (Konstantin Bogdanov). Прочитайте статью «Год Rust в ClickHouse».
Релиз ClickHouse 25.5, 2025-05-22
Обратное несовместимое изменение
- Функция
geoToH3теперь принимает аргументы в порядке (lat, lon, res) (что соответствует другим геометрическим функциям). Пользователи, которые хотят сохранить прежний порядок аргументов (lon, lat, res), могут установить настройкуgeotoh3_argument_order = 'lon_lat'. #78852 (Pratima Patel). - Добавлена настройка файлового кэша
allow_dynamic_cache_resize(по умолчаниюfalse), позволяющая динамически изменять размер файлового кэша. Причина: в некоторых средах (ClickHouse Cloud) все события масштабирования происходят через перезапуск процесса, и мы хотим, чтобы эта возможность была явно отключена для более точного контроля поведения, а также в качестве предохранительной меры. Этот PR помечен как обратно несовместимый, потому что в старых версиях динамическое изменение размера кэша работало по умолчанию без специальной настройки. #79148 (Kseniia Sumarokova). - Удалена поддержка устаревших типов индексов
annoyиusearch. Оба уже давно являлись заглушками, то есть любая попытка использовать эти устаревшие индексы всё равно возвращала ошибку. Если у вас всё ещё есть индексыannoyиusearch, удалите их. #79802 (Robert Schulze). - Удалена серверная настройка
format_alter_commands_with_parentheses. Эта настройка была добавлена и по умолчанию отключена в версии 24.2. В версии 25.2 она была включена по умолчанию. Так как теперь нет LTS-версий, которые не поддерживают новый формат, мы можем удалить эту настройку. #79970 (János Benjamin Antal). - Реализация хранилища
DeltaLakeна основеdelta-kernel-rsтеперь включена по умолчанию. #79541 (Kseniia Sumarokova). - Если чтение из
URLвключает несколько перенаправлений, настройкаenable_url_encodingкорректно применяется ко всем перенаправлениям в цепочке. #79563 (Shankar Iyer). Значение по умолчанию для настройкиenble_url_encodingтеперь установлено вfalse. #80088 (Shankar Iyer).
Новая функция
- Добавлена поддержка скалярных коррелированных подзапросов в предложении WHERE. Закрывает #6697. #79600 (Dmitry Novik). Добавлена поддержка коррелированных подзапросов в списке проекций в простых случаях. #79925 (Dmitry Novik). #76078 (Dmitry Novik). Теперь покрывается 100 % тестового набора TPC-H.
- Векторный поиск на основе индекса векторного сходства теперь имеет статус beta (ранее — experimental). #80164 (Robert Schulze).
- Добавлена поддержка геопространственных типов данных в формате
Parquet. Это закрывает #75317. #79777 (scanhex12). - Новые функции
sparseGrams,sparseGramsHashes,sparseGramsHashesUTF8,sparseGramsUTF8для вычисления «разрежённых n‑грамм» (sparse-ngrams) — надёжного алгоритма извлечения подстрок для индексации и поиска. #79517 (scanhex12). clickhouse-local(и его сокращённый псевдонимch) теперь неявно добавляютFROM table, если есть входные данные для обработки. Это закрывает #65023. Также в clickhouse-local включено автоопределение формата, если--input-formatне указан и обрабатывается обычный файл. #79085 (Alexey Milovidov).- Добавлены функции
stringBytesUniqиstringBytesEntropyдля поиска возможных случайных или зашифрованных данных. #79350 (Sachin Kumar Singh). - Добавлены функции кодирования и декодирования Base32. #79809 (Joanna Hulboj).
- Добавлены функции
getServerSettingиgetMergeTreeSetting. Закрывает #78318. #78439 (NamNguyenHoai). - Добавлена новая настройка
iceberg_enable_version_hintдля использования файлаversion-hint.text. #78594 (Arnaud Briche). - Добавляет возможность выполнять операцию TRUNCATE для отдельных таблиц базы данных, отфильтрованных по шаблону с помощью ключевого слова
LIKE. #78597 (Yarik Briukhovetskyi). - Добавлена поддержка виртуального столбца
_part_starting_offsetв таблицах семействаMergeTree. Этот столбец представляет собой суммарное количество строк во всех предшествующих частях, вычисляемое во время выполнения запроса на основе текущего списка частей. Суммарные значения сохраняются на протяжении всего выполнения запроса и остаются корректными даже после отсечения частей. Связанная внутренняя логика была переработана для поддержки такого поведения. #79417 (Amos Bird). - Добавлены функции
divideOrNull,moduloOrNull,intDivOrNull,positiveModuloOrNull, возвращающие NULL, если правый аргумент равен нулю. #78276 (kevinyhzou). - Векторный поиск в ClickHouse теперь поддерживает как предварительную фильтрацию, так и постфильтрацию и предоставляет соответствующие параметры для более точного управления. (issue #78161). #79854 (Shankar Iyer).
- Добавлены функции
icebergHashиicebergBucket. Добавлена поддержка отсечения файлов данных в таблицахIceberg, разбитых на партиции с помощьюbucket transfom. #79262 (Daniil Ivanik).
Экспериментальная возможность
- Новые типы данных
Time/Time64:Time(HHH:MM:SS) иTime64(HHH:MM:SS.<fractional>), а также несколько базовых функций приведения типов и функций для взаимодействия с другими типами данных. Также было изменено имя существующей функции с toTime на toTimeWithFixedDate, потому что функция toTime требуется для реализации приведения типов. #75735 (Yarik Briukhovetskyi). - Каталог Hive metastore для озера данных Iceberg. #77677 (scanhex12).
- Индексы типа
full_textбыли переименованы вgin. Это соответствует более привычной терминологии PostgreSQL и других баз данных. Существующие индексы типаfull_textпо‑прежнему можно загружать, но при попытке использовать их в поиске они будут генерировать исключение (с предложением использовать индексыgin). #79024 (Robert Schulze).
Повышение производительности
- Изменён формат компактных частей для сохранения меток для каждого подпотока, чтобы можно было читать отдельные подстолбцы. Старый компактный формат по-прежнему поддерживается для чтения и может быть включён для записи с помощью настройки MergeTree
write_marks_for_substreams_in_compact_parts. По умолчанию она отключена для более безопасного обновления, так как изменяет хранение компактных частей. По умолчанию будет включена в одном из следующих релизов. #77940 (Pavel Kruglov). - Разрешено перемещение условий с подстолбцами в PREWHERE. #79489 (Pavel Kruglov).
- Ускорена обработка вторичных индексов за счёт вычисления их выражений одновременно на нескольких гранулах. #64109 (Alexey Milovidov).
- Включена настройка
compile_expressions(JIT-компилятор для фрагментов обычных выражений) по умолчанию. Это закрывает #51264, #56386 и #66486. #79907 (Alexey Milovidov). - Добавлена новая настройка:
use_skip_indexes_in_final_exact_mode. Если в запросе к таблицеReplacingMergeTreeиспользуется ключевое слово FINAL, чтение только тех диапазонов таблицы, которые выбраны на основе skip-индексов, может привести к некорректному результату. Эта настройка позволяет гарантировать корректные результаты за счет сканирования более новых частей, которые пересекаются с диапазонами первичного ключа, возвращенными skip-индексом. Установите 0, чтобы отключить, 1, чтобы включить. #78350 (Shankar Iyer). - Табличные функции для кластеров объектного хранилища (например,
s3Cluster) теперь распределяют файлы по репликам для чтения на основе консистентного хеширования, чтобы улучшить локальность кэша. #77326 (Andrej Hoos). - Улучшена производительность
S3Queue/AzureQueueза счёт возможности параллельного выполнения вставок данных (INSERT, включается с помощью настройки очередиparallel_inserts=true). РанееS3Queue/AzureQueueмогли выполнять параллельно только первую часть конвейера (загрузка, парсинг), аINSERTвыполнялся однопоточно. При этомINSERTпочти всегда является узким местом. Теперь производительность будет масштабироваться почти линейно в зависимости отprocessing_threads_num. #77671 (Azat Khuzhin). Более справедливое значениеmax_processed_files_before_commitвS3Queue/AzureQueue. #79363 (Azat Khuzhin). - Введён порог (управляется настройкой
parallel_hash_join_threshold), ниже которого выполняется возврат к алгоритмуhash, если размер правой таблицы меньше этого порога. #76185 (Nikita Taranov). - Теперь мы используем количество реплик для определения размера задачи чтения при включённых параллельных репликах. Это обеспечивает более равномерное распределение работы между репликами, когда объём читаемых данных невелик. #78695 (Nikita Taranov).
- Добавлена возможность параллельного слияния состояний
uniqExactна финальном этапе распределённой агрегации. #78703 (Nikita Taranov). - Исправлено возможное снижение производительности при параллельном слиянии состояний агрегатной функции
uniqExactпри агрегации с ключом. #78724 (Nikita Taranov). - Уменьшено количество вызовов к API List Blobs хранилища Azure. #78860 (Julia Kartseva).
- Улучшена производительность операции распределённого INSERT SELECT с параллельными репликами. #79441 (Azat Khuzhin).
- При создании
LogSeriesLimiterбольше не выполняется очистка, что позволяет избежать конкуренции за блокировки и деградации производительности в сценариях с высокой степенью параллелизма. #79864 (filimonov). - Ускорено выполнение запросов за счёт оптимизации тривиальных операций подсчёта. #79945 (Raúl Marín).
- Улучшен инлайнинг некоторых операций с
Decimal. #79999 (Konstantin Bogdanov). - По умолчанию установить для
input_format_parquet_bloom_filter_push_downзначениеtrue. Также исправлена ошибка в истории изменений настроек. #80058 (Alexey Milovidov). - Оптимизированы мутации
ALTER ... DELETEдля частей, в которых должны быть удалены все строки. Теперь в таких случаях вместо исходной части создаётся пустая, причём мутация не выполняется. #79307 (Anton Popov). - Избегать дополнительного копирования блока при вставке в часть Compact, когда это возможно. #79536 (Pavel Kruglov).
- Добавлена настройка
input_format_max_block_size_bytesдля ограничения в байтах размера блоков, создаваемых во входных форматах. Это может помочь избежать высокого потребления памяти при импорте данных, когда строки содержат большие значения. #79495 (Pavel Kruglov). - Удалены защитные страницы для потоков и async_socket_for_remote/use_hedge_requests. Изменён метод выделения памяти в
FiberStackсmmapнаaligned_alloc, так как это приводит к дроблению VMA и под высокой нагрузкой может быть достигнут предел vm.max_map_count. #79147 (Sema Checherinda). - Ленивая материализация с параллельными репликами. #79401 (Igor Nikonov).
Улучшение
- Добавлена возможность выполнять легковесные удаления на лету (с настройками
lightweight_deletes_sync = 0,apply_mutations_on_fly = 1). #79281 (Anton Popov). - Если данные в формате
prettyотображаются в терминале и следующий блок имеет те же ширины столбцов, вывод может быть продолжен, «склеив» его с предыдущим блоком путём перемещения курсора вверх. Тем самым закрывается задача #79333. Поведение управляется новым параметромoutput_format_pretty_glue_chunks. #79339 (Alexey Milovidov). - Функция
isIPAddressInRangeтеперь поддерживает типы данныхString,IPv4,IPv6,Nullable(String),Nullable(IPv4)иNullable(IPv6). #78364 (YjyJeff). - Добавлена возможность динамически изменять настройки пула соединений движка
PostgreSQL. #78414 (Samay Sharma). - Разрешить задавать
_part_offsetв обычной проекции. Это первый шаг к построению индекса проекции. Его можно использовать вместе с #58224, что может помочь улучшить #63207. #78429 (Amos Bird). - Добавлены новые столбцы (
create_queryиsource) вsystem.named_collections. Закрыта задача #78179. #78582 (MikhailBurdukov). - В системную таблицу
system.query_condition_cacheдобавлено новое полеcondition. Оно хранит условие в открытом виде, хэш которого используется в качестве ключа в кэше условий запросов. #78671 (Robert Schulze). - Теперь векторные индексы сходства можно создавать для столбцов типа
BFloat16. #78850 (Robert Schulze). - Поддержка Unix-меток времени с дробной частью при разборе
DateTime64в режиме best effort. #78908 (Pavel Kruglov). - В хранилище
DeltaLakeв реализации delta-kernel исправлен режим сопоставления столбцов и добавлены тесты для эволюции схемы. #78921 (Kseniia Sumarokova). - Улучшена вставка в столбец
Variantв формате VALUES за счёт более корректного преобразования значений. #78923 (Pavel Kruglov). - Функция
tokensбыла расширена: теперь она принимает дополнительный аргумент «tokenizer», а также другие аргументы, специфичные для токенизатора. #79001 (Elmi Ahmadov). - Оператор
SHOW CLUSTERтеперь раскрывает макросы (если они есть) в своём аргументе. #79006 (arf42). - Функции хеширования теперь поддерживают значения
NULLвнутри массивов, кортежей и отображений (issues #48365 и #48623). #79008 (Michael Kolupaev). - Обновлён cctz до версии 2025a. #79043 (Raúl Marín).
- Изменили обработку stderr по умолчанию для UDF на "log_last". Это повышает удобство использования. #79066 (Alexey Milovidov).
- Сделать закрытие вкладок в Web UI обратимым. Закрывает #71284. #79084 (Alexey Milovidov).
- Удалить настройки при выполнении
recoverLostReplicaтак же, как это было сделано в: https://github.com/ClickHouse/ClickHouse/pull/78637. #79113 (Nikita Mikhaylov). - Добавлены события профилирования:
ParquetReadRowGroupsиParquetPrunedRowGroupsдля профилирования отсечения по индексу Parquet. #79180 (flynn). - Добавлена поддержка выполнения
ALTERнад базой данных на кластере. #79242 (Tuan Pham Anh). - Явно пропускать пропущенные запуски сбора статистики в журнале QueryMetricLog, иначе журналу потребуется много времени, чтобы догнать текущее время. #79257 (Mikhail Artemenko).
- Небольшие оптимизации чтения форматов на основе
Arrow. #79308 (Bharat Nallan). - Настройка
allow_archive_path_syntaxпо ошибке была помечена как экспериментальная. Добавлен тест, чтобы предотвратить включение экспериментальных настроек по умолчанию. #79320 (Alexey Milovidov). - Настройки кэша страниц теперь можно задавать на уровне отдельного запроса. Это необходимо для более быстрого экспериментирования и возможности тонкой настройки запросов с высокой пропускной способностью и низкой задержкой. #79337 (Alexey Milovidov).
- Не выводить числовые подсказки в удобочитаемом формате для чисел, которые выглядят как большинство 64-битных хэшей. Это закрывает #79334. #79338 (Alexey Milovidov).
- Цвета графиков на расширенных дашбордах будут вычисляться на основе хеша соответствующего запроса. Это упрощает запоминание и поиск графика при прокрутке дашборда. #79341 (Alexey Milovidov).
- Добавлена асинхронная метрика
FilesystemCacheCapacity— общая ёмкость виртуальной файловой системыcache. Полезна для глобального мониторинга инфраструктуры. #79348 (Alexey Milovidov). - Оптимизирован доступ к system.parts (размер столбцов и индексов читается только по запросу). #79352 (Azat Khuzhin).
- Вычислять только соответствующие поля для запроса
'SHOW CLUSTER <name>'вместо всех полей. #79368 (Tuan Pham Anh). - Добавлена возможность указывать настройки хранилища для
DatabaseCatalog. #79407 (Kseniia Sumarokova). - Добавлена поддержка локального хранилища в
DeltaLake. #79416 (Kseniia Sumarokova). - Добавлена настройка на уровне запроса для включения поддержки delta-kernel-rs:
allow_experimental_delta_kernel_rs. #79418 (Kseniia Sumarokova). - Исправлен возможный бесконечный цикл при получении списка BLOB-объектов из хранилищ Azure/S3. #79425 (Alexander Gololobov).
- Добавлена настройка кэша файловой системы
max_size_ratio_to_total_space. #79460 (Kseniia Sumarokova). - Для
clickhouse-benchmarkперенастроен параметрreconnect, чтобы он принимал значения 0, 1 или N, задающие соответствующее поведение переподключения. #79465 (Sachin Kumar Singh). - Разрешить использование
ALTER TABLE ... MOVE|REPLACE PARTITIONдля таблиц на разных дискахplain_rewritable. #79566 (Julia Kartseva). - Индекс сходства векторов теперь также используется, если опорный вектор имеет тип
Array(BFloat16). #79745 (Shankar Iyer). - Добавлены last_error_message, last_error_trace и query_id в таблицу system.error_log. Связанный тикет #75816. #79836 (Andrei Tinikov).
- По умолчанию включена отправка отчетов о сбоях. Это можно отключить в конфигурационном файле сервера. #79838 (Alexey Milovidov).
- Системная таблица
system.functionsтеперь показывает, в какой версии ClickHouse функции впервые появились. #79839 (Robert Schulze). - Добавлена настройка
access_control_improvements.enable_user_name_access_type. Эта настройка позволяет включать или отключать точное назначение прав доступа пользователям и ролям, добавленное в https://github.com/ClickHouse/ClickHouse/pull/72246. Имеет смысл отключить эту настройку, если в вашем кластере есть реплики версий ранее 25.1. #79842 (pufit). - Теперь в корректной реализации метода
ASTSelectWithUnionQuery::clone()также учитывается полеis_normalized. Это может помочь с #77569. #79909 (Nikita Mikhaylov). - Исправлено непоследовательное форматирование некоторых запросов с оператором EXCEPT. Если левая часть оператора EXCEPT заканчивается символом
*, отформатированный запрос теряет скобки и затем разбирается как*с модификаторомEXCEPT. Эти запросы обнаруживаются фаззером и вряд ли будут встречаться на практике. Это закрывает #79950. #79952 (Alexey Milovidov). - Незначительное улучшение разбора типа
JSONза счёт использования кэша порядка десериализации вариантов. #79984 (Pavel Kruglov). - Добавлена настройка
s3_slow_all_threads_after_network_error. #80035 (Vitaly Baranov). - Уровень логирования сообщений о выбранных частях для слияния был неверным (Information). Закрывает #80061. #80062 (Alexey Milovidov).
- trace-visualizer: добавлено отображение runtime/share во всплывающих подсказках и статусных сообщениях. #79040 (Sergei Trifonov).
- trace-visualizer: загрузка данных с сервера ClickHouse. #79042 (Sergei Trifonov).
- Добавлены метрики для неуспешных слияний. #79228 (Miсhael Stetsyuk).
clickhouse-benchmarkбудет отображать процент выполнения на основе максимального числа итераций, если оно задано. #79346 (Alexey Milovidov).- Добавлен визуализатор для таблицы system.parts. #79437 (Sergei Trifonov).
- Добавлен инструмент для анализа задержек запросов. #79978 (Sergei Trifonov).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Исправлены ошибки при переименовании столбцов, отсутствующих в части. #76346 (Anton Popov).
- Материализованное представление могло запускаться слишком поздно, например после таблицы Kafka, которая передаёт в него поток данных. #72123 (Ilya Golshtein).
- Исправлена проблема с перезаписью запроса
SELECTпри созданииVIEWс включённым анализатором. Закрывает #75956. #76356 (Dmitry Novik). - Исправлена проблема с применением
async_insertс сервера (черезapply_settings_from_server), которая ранее приводила к ошибкамUnknown packet 11 from serverна стороне клиента. #77578 (Azat Khuzhin). - Исправлена проблема, из-за которой обновляемое материализованное представление в реплицируемой базе данных не работало на вновь добавленных репликах. #77774 (Michael Kolupaev).
- Исправлена проблема, из-за которой обновляемые материализованные представления приводили к сбоям резервного копирования. #77893 (Michael Kolupaev).
- Исправлена старая логическая ошибка, возникавшая в
transform. #78247 (Yarik Briukhovetskyi). - Исправлены некоторые случаи, когда вторичный индекс не использовался анализатором. Тем самым исправлены #65607 и #69373. #78485 (Nikolai Kochetov).
- Исправлен дамп профилирующих событий (
NetworkSendElapsedMicroseconds/NetworkSendBytes) для протокола HTTP с включённым сжатием (расхождение не должно превышать размер буфера, обычно около 1MiB). #78516 (Azat Khuzhin). - Исправлен анализатор, приводивший к LOGICAL_ERROR при использовании JOIN ... USING со столбцом ALIAS; теперь он выдаёт корректную ошибку. #78618 (Yakov Olkhovskiy).
- Исправлена ошибка анализатора:
CREATE VIEW ... ON CLUSTERзавершался с ошибкой, еслиSELECTсодержал позиционные аргументы. #78663 (Yakov Olkhovskiy). - Исправлена ошибка
Block structure mismatchв случаеINSERT SELECTв табличную функцию с автоматическим выводом схемы, еслиSELECTсодержит скалярные подзапросы. #78677 (Pervakov Grigorii). - Исправлен анализатор: при prefer_global_in_and_join=1 для Distributed-таблицы функция
inв запросе SELECT должна заменяться наglobalIn. #78749 (Yakov Olkhovskiy). - Исправлено несколько типов запросов
SELECT, которые читают из таблиц с движкомMongoDBили табличной функциейmongodb: запросы с неявным преобразованием константного значения в предложенииWHERE(например,WHERE datetime = '2025-03-10 00:00:00'); запросы сLIMITиGROUP BY. Ранее они могли возвращать неверный результат. #78777 (Anton Popov). - Исправлено преобразование между разными типами JSON. Теперь оно выполняется простым приведением типов через преобразование к/от типа String. Это менее эффективно, но на 100% корректно. #78807 (Pavel Kruglov).
- Исправлена логическая ошибка при преобразовании типа Dynamic в Interval. #78813 (Pavel Kruglov).
- Исправлен откат столбца при ошибке парсинга JSON. #78836 (Pavel Kruglov).
- Исправлена ошибка 'bad cast' при выполнении операции JOIN с использованием константного столбца-алиаса. #78848 (Vladimir Cherkasov).
- Запрещено использовать
PREWHEREв материализованном представлении для столбцов с разными типами данных в представлении и целевой таблице. #78889 (Pavel Kruglov). - Исправлена логическая ошибка при разборе некорректных бинарных данных столбца типа Variant. #78982 (Pavel Kruglov).
- Теперь выбрасывается исключение, если размер пакета Parquet установлен в 0. Ранее при
output_format_parquet_batch_size = 0ClickHouse зависал. Теперь это поведение исправлено. #78991 (daryawessely). - Исправлена десериализация дискриминаторов variant с базовым форматом в компактных партах. Регрессия появилась в https://github.com/ClickHouse/ClickHouse/pull/55518. #79000 (Pavel Kruglov).
- Словари типа
complex_key_ssd_cacheтеперь отклоняют значения параметровblock_sizeиwrite_buffer_size, равные нулю или отрицательные (issue #78314). #79028 (Elmi Ahmadov). - Избегайте использования Field для неагрегированных столбцов в SummingMergeTree. Это может привести к неожиданным ошибкам с типами Dynamic/Variant, используемыми в SummingMergeTree. #79051 (Pavel Kruglov).
- Исправлено чтение из материализованного представления с распределённой целевой таблицей и отличающимся заголовком в анализаторе. #79059 (Pavel Kruglov).
- Исправляет ошибку, из-за которой
arrayUnion()возвращал лишние (некорректные) значения в таблицах, в которые выполнялись пакетные вставки. Исправляет ошибку #75057. #79079 (Peter Nguyen). - Исправлена ошибка сегментации в
OpenSSLInitializer. Закрывает #79092. #79097 (Konstantin Bogdanov). - Всегда задавайте префикс при использовании S3 ListObject. #79114 (Azat Khuzhin).
- Исправлена ошибка, из-за которой
arrayUnion()возвращала лишние (некорректные) значения в таблицах с пакетной вставкой данных. Исправляет #79157. #79158 (Peter Nguyen). - Исправлена логическая ошибка после применения оптимизации проталкивания фильтра (filter pushdown). #79164 (Pervakov Grigorii).
- Исправлен движок таблиц DeltaLake с реализацией delta-kernel при работе с HTTP-эндпоинтами, исправлен NOSIGN. Закрывает #78124. #79203 (Kseniia Sumarokova).
- Исправление в Keeper: предотвращено срабатывание наблюдателей при неудачных мультизапросах. #79247 (Antonio Andelic).
- Запрещены типы Dynamic и JSON в операторе
IN. При текущей реализацииINэто может приводить к некорректным результатам. Правильная поддержка этих типов вINсложна и может быть реализована в будущем. #79282 (Pavel Kruglov). - Исправлена проверка на дублирующиеся пути при разборе типа JSON. #79317 (Pavel Kruglov).
- Исправлены проблемы с подключением SecureStreamSocket. #79383 (Konstantin Bogdanov).
- Исправлена загрузка дисков plain_rewritable, содержащих данные. #79439 (Julia Kartseva).
- Исправлена ошибка, приводившая к аварийному завершению при динамическом определении подстолбцов в широких партах MergeTree. #79466 (Pavel Kruglov).
- Проверяйте длину имени таблицы только для первоначальных запросов CREATE. Не выполняйте эту проверку для последующих CREATE, чтобы избежать проблем с обратной совместимостью. #79488 (Miсhael Stetsyuk).
- Исправлена ошибка
Block structure mismatchв ряде случаев при работе с таблицами с разрежёнными столбцами. #79491 (Anton Popov). - Исправлены два случая ошибки "Logical error: Can't set alias of * of Asterisk on alias". #79505 (Raúl Marín).
- Исправлена ошибка использования некорректных путей при переименовании базы данных Atomic. #79569 (Tuan Pham Anh).
- Исправлена работа ORDER BY по JSON-столбцу в сочетании с другими столбцами. #79591 (Pavel Kruglov).
- Исправлено дублирование результатов при чтении из
remote, когда оба параметраuse_hedged_requestsиallow_experimental_parallel_reading_from_replicasотключены. #79599 (Eduard Karacharov). - Исправлен сбой в реализации delta-kernel при использовании Unity Catalog. #79677 (Kseniia Sumarokova).
- Реализована подстановка макросов для кластеров автообнаружения. #79696 (Anton Ivashkin).
- Корректно обрабатывать некорректно настроенный параметр
page_cache_limits. #79805 (Bharat Nallan). - Исправляет результат SQL-функции
formatDateTime, если за спецификатором формата переменной длины (например,%W, т.е. день неделиMondayTuesdayи т.д.) следует составной спецификатор формата (который выводит сразу несколько компонентов, например,%D, т.е. американский формат даты05/04/25). #79835 (Robert Schulze). - IcebergS3 поддерживает оптимизацию операции count(), а IcebergS3Cluster — нет. В результате в кластерном режиме возвращаемый результат count() может быть кратен количеству реплик. #79844 (wxybear).
- Исправлена ошибка AMBIGUOUS_COLUMN_NAME при ленивой материализации, когда до применения проекции при выполнении запроса не используется ни один столбец. Например, SELECT * FROM t ORDER BY rand() LIMIT 5. #79926 (Igor Nikonov).
- Пароль в запросе
CREATE DATABASE datalake ENGINE = DataLakeCatalog(\'http://catalog:8181\', \'admin\', \'password\')скрывается. #79941 (Han Fei). - Добавлена возможность указывать псевдоним в JOIN USING. Указывайте этот псевдоним, если столбец был переименован (например, из-за ARRAY JOIN). Исправляет #73707. #79942 (Nikolai Kochetov).
- Обеспечена корректная работа материализованных представлений с операторами UNION на новых репликах. #80037 (Samay Sharma).
- Спецификатор формата
%eв SQL-функцииparseDateTimeтеперь распознаёт однозначные номера дней (например,3), тогда как ранее требовалось добавление пробела слева (например,3). Это делает его поведение совместимым с MySQL. Чтобы сохранить прежнее поведение, установите настройкуparsedatetime_e_requires_space_padding = 1. (issue #78243). #80057 (Robert Schulze). - Исправлены предупреждения
Cannot find 'kernel' in '[...]/memory.stat'в журнале ClickHouse (issue #77410). #80129 (Robert Schulze). - Добавлена проверка размера стека в FunctionComparison, чтобы избежать сбоя из-за переполнения стека. #78208 (Julia Kartseva).
- Устранена гонка при выполнении SELECT из
system.workloads. #78743 (Sergei Trifonov). - Исправлена ленивая материализация в распределённых запросах. #78815 (Igor Nikonov).
- Исправлена проблема с преобразованием
Array(Bool)вArray(FixedString). #78863 (Nikita Taranov). - Выбор версии формата Parquet сделан менее запутанным. #78818 (Michael Kolupaev).
- Исправлена проблема с самослиянием
ReservoirSampler. #79031 (Nikita Taranov). - Исправлено хранение таблицы для вставки в клиентском контексте. #79046 (Pervakov Grigorii).
- Исправлен порядок уничтожения членов данных классов
AggregatingSortedAlgorithmиSummingSortedAlgorithm. #79056 (Nikita Taranov). enable_user_name_access_typeне должен влиять на тип доступаDEFINER. #80026 (pufit).- Запрос к системной базе данных может зависнуть, если её метаданные размещены в Keeper. #79304 (Mikhail Artemenko).
Улучшения сборки/тестирования/упаковки
- Добавлена возможность повторно использовать уже собранный бинарный файл
chcacheвместо его постоянной пересборки. #78851 (János Benjamin Antal). - Добавлено ожидание паузы в NATS. #78987 (Dmitry Novikov).
- Исправлена некорректная публикация ARM-сборки как amd64compat. #79122 (Alexander Gololobov).
- Используется предварительно сгенерированный ассемблерный код для OpenSSL. #79386 (Konstantin Bogdanov).
- Исправления, позволяющие собирать с
clang20. #79588 (Konstantin Bogdanov). chcache: поддержка кэширования в Rust. #78691 (Konstantin Bogdanov).- Добавлена информация о раскрутке стека (unwind) для ассемблерных файлов
zstd. #79288 (Michael Kolupaev).
Релиз ClickHouse 25.4, 2025-04-22
Изменения, нарушающие обратную совместимость
- При значении
allow_materialized_view_with_bad_selectравномfalseтеперь проверяется, что все столбцы в материализованном представлении соответствуют целевой таблице. #74481 (Christoph Wurm). - Исправлены случаи, когда
dateTruncвызывалась с отрицательными аргументами типов Date/DateTime. #77622 (Yarik Briukhovetskyi). - Устаревшая интеграция с
MongoDBбыла удалена. Настройка сервераuse_legacy_mongodb_integrationстала неактуальной и теперь ни на что не влияет. #77895 (Robert Schulze). - Улучшена проверка в
SummingMergeTree: агрегация теперь пропускается для столбцов, используемых в ключах партиционирования или сортировки. #78022 (Pervakov Grigorii).
Новая функция
- Добавлено планирование слотов CPU для рабочих нагрузок, подробности см. в документации. #77595 (Sergei Trifonov).
clickhouse-localбудет сохранять свои базы данных после перезапуска при указании параметра командной строки--path. Это закрывает #50647. Это закрывает #49947. #71722 (Alexey Milovidov).- Отклонять запросы, когда сервер перегружен. Решение принимается на основе отношения времени ожидания (
OSCPUWaitMicroseconds) к времени занятости (OSCPUVirtualTimeMicroseconds). Запрос с некоторой вероятностью отбрасывается, когда это отношение находится междуmin_os_cpu_wait_time_ratio_to_throwиmax_os_cpu_wait_time_ratio_to_throw(это параметры на уровне запроса). #63206 (Alexey Katsman). - Путешествие во времени в
Iceberg: добавлена настройка для запроса таблицIcebergпо состоянию на указанный момент времени. #71072 (Brett Hoerner). #77439 (Daniil Ivanik). - Кэш в памяти для метаданных
Iceberg, который хранит файлы манифестов иmetadata.jsonдля ускорения выполнения запросов. #77156 (Han Fei). - Добавлена поддержка табличного движка
DeltaLakeдля Azure Blob Storage. Устраняет проблему #68043. #74541 (Smita Kulkarni). - Добавлен кэш в оперативной памяти для десериализованных индексов векторного сходства. Это должно ускорить повторяющиеся запросы приблизительного поиска ближайших соседей (ANN). Размер нового кэша контролируется серверными настройками
vector_similarity_index_cache_sizeиvector_similarity_index_cache_max_entries. Эта возможность заменяет функцию кэширования индексов-пропусков из более ранних версий. #77905 (Shankar Iyer). - Добавлена поддержка отсечения партиций в DeltaLake. #78486 (Kseniia Sumarokova).
- Поддержка фонового обновления для таблиц
MergeTreeв режиме только для чтения, что позволяет выполнять запросы к обновляемым таблицам с неограниченным числом распределённых читателей (нативное озеро данных ClickHouse). #76467 (Alexey Milovidov). - Добавлена поддержка использования пользовательских дисков для хранения файлов метаданных баз данных. Сейчас это можно настроить только на глобальном уровне сервера. #77365 (Tuan Pham Anh).
- Добавлена поддержка
ALTER TABLE ... ATTACH|DETACH|MOVE|REPLACE PARTITIONдля дискаplain_rewritable. #77406 (Julia Kartseva). - Добавлены параметры таблицы для настройки
SASLи учетных данных в движке таблицыKafka. Это позволяет настраивать аутентификацию на основе SASL для Kafka и Kafka-совместимых систем непосредственно в операторе CREATE TABLE, а не использовать файлы конфигурации или именованные коллекции. #78810 (Christoph Wurm). - Добавлена возможность задавать
default_compression_codecдля таблиц MergeTree: он используется, если в запросе CREATE явно не задан кодек сжатия для соответствующих столбцов. Это закрывает #42005. #66394 (gvoelfin). - Добавьте параметр
bind_hostв конфигурацию кластеров, чтобы ClickHouse мог использовать конкретную сеть для распределённых соединений. #74741 (Todd Yocum). - Добавлен новый столбец
parametrized_view_parametersв системную таблицуsystem.tables. Закрывает https://github.com/clickhouse/clickhouse/issues/66756. #75112 (NamNguyenHoai). - Разрешить изменение комментария базы данных. Closes #73351 ### Запись в документации об изменениях, затрагивающих пользователей. #75622 (NamNguyenHoai).
- Добавлена поддержка аутентификации
SCRAM-SHA-256в протоколе совместимости с PostgreSQL. #76839 (scanhex12). - Добавлены функции
arrayLevenshteinDistance,arrayLevenshteinDistanceWeightedиarraySimilarity. #77187 (Mikhail f. Shiryaev). - Настройка
parallel_distributed_insert_selectтеперь действует дляINSERT SELECTв таблицахReplicatedMergeTree(ранее для этого требовались таблицыDistributed). #78041 (Igor Nikonov). - Добавлена функция
toInterval. Эта функция принимает два аргумента (значение и единицу измерения) и преобразует значение в соответствующий типInterval. #78723 (Andrew Davis). - Добавлено несколько удобных вариантов указания корневого файла
metadata.jsonв табличной функции и движке Iceberg. Закрывает #78455. #78475 (Daniil Ivanik). - Добавлена поддержка аутентификации по паролю в протоколе SSH в ClickHouse. #78586 (Nikita Mikhaylov).
Экспериментальная возможность
- Поддержка коррелированных подзапросов в качестве аргумента для выражения
EXISTSв предложенииWHERE. Закрывает #72459. #76078 (Dmitry Novik). - Добавлены функции
sparseGramsиsparseGramsHashesс вариантами для ASCII и UTF-8. Автор: scanhex12. #78176 (Pervakov Grigorii). Не используйте их: реализация будет изменена в следующих версиях.
Повышение производительности
- Оптимизирована производительность за счет использования ленивых столбцов, считывающих данные после ORDER BY и LIMIT. #55518 (Xiaozhe Yu).
- По умолчанию включён кэш условий запросов. #79080 (Alexey Milovidov).
- Ускорено построение результата JOIN за счёт девиртуализации вызовов
col->insertFrom(). #77350 (Alexander Gololobov). - Теперь условия равенства из шага плана запроса с фильтрацией объединяются с условием JOIN, когда это возможно, чтобы их можно было использовать в качестве ключей хеш-таблицы. #78877 (Dmitry Novik).
- Используйте динамический шардинг для JOIN, если ключ JOIN является префиксом PK для обеих частей. Эта оптимизация включается с помощью настройки
query_plan_join_shard_by_pk_ranges(по умолчанию отключена). #74733 (Nikolai Kochetov). - Добавлена поддержка отсечения данных в
Icebergна основе нижних и верхних граничных значений столбцов. Исправляет #77638. #78242 (alesapin). - Реализована простая оптимизация подсчёта для
Iceberg. Теперь запросы сcount()и без каких-либо фильтров должны выполняться быстрее. Закрывает #77639. #78090 (alesapin). - Добавлена возможность настраивать количество столбцов, которые могут сбрасываться параллельно при слияниях, с помощью
max_merge_delayed_streams_for_parallel_write(это должно снизить потребление памяти при вертикальных слияниях в S3 примерно в 25 раз). #77922 (Azat Khuzhin). - Отключайте
filesystem_cache_prefer_bigger_buffer_size, когда кэш используется пассивно, например при слияниях. Это снижает потребление памяти во время слияний. #77898 (Kseniia Sumarokova). - Теперь для определения размера задачи при чтении с включёнными параллельными репликами используется количество реплик. Это обеспечивает более равномерное распределение нагрузки между репликами, когда объём данных для чтения не слишком велик. #78695 (Nikita Taranov).
- Добавлена поддержка асинхронного предварительного чтения (I/O prefetch) для формата
ORC, что улучшает общую производительность за счёт скрытия задержок удалённого ввода-вывода. #70534 (李扬). - Предварительно выделять память, используемую асинхронными вставками, для повышения производительности. #74945 (Ilya Golshtein).
- Уменьшено количество запросов к Keeper за счёт отказа от использования одиночных запросов
getв пользуmultiReadтам, где он доступен, поскольку при увеличении числа реплик такие одиночные запросы могли создавать существенную нагрузку на Keeper. #56862 (Nikolay Degterinsky). - Незначительная оптимизация выполнения функций при работе с аргументами типа Nullable. #76489 (李扬).
- Оптимизирована функция
arraySort. #76850 (李扬). - Объединять метки одной и той же части и записывать их в кэш условий запроса за один раз, чтобы уменьшить накладные расходы на блокировки. #77377 (zhongyuankai).
- Оптимизирована производительность
s3Clusterдля запросов с одиночным раскрытием скобок. #77686 (Tomáš Hromada). - Оптимизация ORDER BY по отдельным столбцам типа Nullable или LowCardinality. #77789 (李扬).
- Оптимизировано использование памяти формата
Native. #78442 (Azat Khuzhin). - Тривиальная оптимизация: не переписывать выражение
count(if(...))вcountIf, если требуется приведение типов. Закрыта задача #78564. #78565 (李扬). - Функция
hasAllтеперь может использовать полнотекстовые пропускающие индексыtokenbf_v1иngrambf_v1. #77662 (UnamedRus). - Индекс векторного сходства мог выделять оперативную память с избыточным запасом — до 2 раз больше необходимого. В этом исправлении переработана стратегия распределения памяти, что снизило её потребление и повысило эффективность кэша индекса векторного сходства. (issue #78056). #78394 (Shankar Iyer).
- Добавлена настройка
schema_typeдля таблицыsystem.metric_log, задающая тип схемы. Допускаются три варианта схемы:wide— текущая схема, каждая метрика/событие в отдельном столбце (наиболее эффективна при чтении отдельных столбцов),transposed— аналогичноsystem.asynchronous_metric_log, метрики/события хранятся по строкам, и самая интереснаяtransposed_with_wide_view— создаётся базовая таблица со схемойtransposed, но также добавляется представление со схемойwide, которое транслирует запросы в базовую таблицу. В схемеtransposed_with_wide_viewсубсекундная точность во view не поддерживается,event_time_microseconds— это лишь псевдоним для обеспечения обратной совместимости. #78412 (alesapin).
Улучшение
- Сериализация плана запроса для запросов к таблицам
Distributed. Добавлена новая настройкаserialize_query_plan. При её включении запросы из таблицDistributedбудут использовать сериализованный план запроса для удалённого выполнения. Это добавляет новый тип пакета в протокол TCP; в конфигурацию сервера следует добавить<process_query_plan_packet>true</process_query_plan_packet>, чтобы разрешить обработку этого пакета. #69652 (Nikolai Kochetov). - Поддержка чтения столбцов типа
JSONи подстолбцов из представлений. #76903 (Pavel Kruglov). - Добавлена поддержка ALTER DATABASE ... ON CLUSTER. #79242 (Tuan Pham Anh).
- Операции обновления обновляемых материализованных представлений теперь отображаются в
system.query_log. #71333 (Michael Kolupaev). - Пользовательские функции (UDF) теперь можно помечать как детерминированные с помощью нового параметра конфигурации. Кроме того, кэш запросов теперь проверяет, являются ли вызываемые в запросе UDF детерминированными. Если да, результат запроса кэшируется. (Issue #59988). #77769 (Jimmy Aguilar Mena).
- Включён механизм экспоненциальной задержки (backoff) для всех типов реплицированных задач. Это позволит снизить потребление CPU и памяти, а также размер файлов журналов. Добавлены новые настройки
max_postpone_time_for_failed_replicated_fetches_ms,max_postpone_time_for_failed_replicated_merges_msиmax_postpone_time_for_failed_replicated_tasks_ms, которые аналогичныmax_postpone_time_for_failed_mutations_ms. #74576 (MikhailBurdukov). - Добавлен
query_idв таблицуsystem.errors. Закрывает #75815. #76581 (Vladimir Baikov). - Добавлена поддержка преобразования
UInt128вIPv6. Это позволяет выполнять операциюbitAndи арифметические операции надIPv6, а также преобразовывать результат обратно вIPv6. Закрывает #76752. Это также позволяет конвертировать результат операцииbitAndнадIPv6обратно вIPv6. См. также #57707. #76928 (Muzammil Abdul Rehman). - По умолчанию не парсить специальные значения
Boolв текстовых форматах внутри типаVariant. Это можно включить с помощью настройкиallow_special_bool_values_inside_variant. #76974 (Pavel Kruglov). - Поддерживается настройка времени ожидания по задаче для низкоприоритетного запроса (
priority) на уровне сессии и сервера. #77013 (VicoWu). - Реализовано сравнение значений типа данных JSON. Теперь JSON-объекты можно сравнивать аналогично типу Map. #77397 (Pavel Kruglov).
- Улучшена поддержка прав доступа в
system.kafka_consumers. Теперь пробрасываются внутренние ошибкиlibrdkafka(стоит отметить, что эта библиотека, мягко говоря, так себе). #77700 (Ilya Golshtein). - Добавлена проверка настроек движка таблицы Buffer. #77840 (Pervakov Grigorii).
- Добавлен параметр конфигурации
enable_hdfs_preadдля включения или отключения операцииpreadвHDFS. #77885 (kevinyhzou). - Добавлены profile events для количества запросов чтения и записи
multiв ZooKeeper. #77888 (JackyWoo). - Разрешено создавать и вставлять данные во временные таблицы при включённом параметре
disable_insertion_and_mutation. #77901 (Xu Jia). - Уменьшено значение параметра
max_insert_delayed_streams_for_parallel_write(до 100). #77919 (Azat Khuzhin). - Исправлен разбор года в синтаксисе Joda (если вам интересно, это из мира Java) для шаблонов вида
yyy. #77973 (李扬). - Присоединение частей таблиц
MergeTreeбудет выполняться в их блочном порядке, что важно для специальных алгоритмов слияния, таких какReplacingMergeTree. Это закрывает #71009. #77976 (Alexey Milovidov). - Правила маскировки запросов теперь могут выбрасывать
LOGICAL_ERRORв случае, если найдено совпадение. Это поможет проверить, не утек ли заранее заданный пароль в какие-либо логи. #78094 (Nikita Mikhaylov). - Добавлен столбец
index_length_columnвinformation_schema.tablesдля улучшения совместимости с MySQL. #78119 (Paweł Zakrzewski). - Добавлены две новые метрики:
TotalMergeFailuresиNonAbortedMergeFailures. Эти метрики необходимы для обнаружения случаев, когда за короткий промежуток времени происходит слишком много неудачных слияний. #78150 (Miсhael Stetsyuk). - Исправлен некорректный разбор URL S3 при использовании path-style, когда ключ не указан. #78185 (Arthur Passos).
- Исправлены некорректные значения асинхронных метрик
BlockActiveTime,BlockDiscardTime,BlockWriteTime,BlockQueueTimeиBlockReadTime(до изменения одна секунда ошибочно отображалась как 0,001 секунды). #78211 (filimonov). - Теперь учитывается ограничение
loading_retriesдля ошибок при отправке данных в материализованное представление для StorageS3(Azure)Queue. Ранее такие ошибки повторялись бесконечно. #78313 (Kseniia Sumarokova). - В DeltaLake с реализацией
delta-kernel-rsисправлены проблемы с производительностью и индикатором прогресса. #78368 (Kseniia Sumarokova). - Реализована поддержка
include,from_env,from_zkдля runtime-дисков. Закрывает #78177. #78470 (Kseniia Sumarokova). - Добавлено динамическое предупреждение в таблицу
system.warningsдля длительно выполняющихся мутаций. #78658 (Bharat Nallan). - Добавлено поле
conditionв системную таблицуsystem.query_condition_cache. Оно хранит условие в открытом виде, хеш которого используется как ключ в кэше условий запросов. #78671 (Robert Schulze). - Разрешено использование пустого значения при партиционировании Hive. #78816 (Arthur Passos).
- Исправлено приведение типов в операторе
INдляBFloat16(т. е. теперьSELECT toBFloat16(1) IN [1, 2, 3];возвращает1). Закрывает #78754. #78839 (Raufs Dunamalijevs). - Не проверять части на других дисках для
MergeTree, если установленdisk = .... #78855 (Azat Khuzhin). - Теперь типы данных в
used_data_type_familiesвsystem.query_logзаписываются с каноническими именами. #78972 (Kseniia Sumarokova). - Настройки очистки при
recoverLostReplicaвыполнены аналогично тому, как это сделано в #78637. #79113 (Nikita Mikhaylov). - Используйте столбцы вставки для определения схемы INFILE. #78490 (Pervakov Grigorii).
Исправление ошибки (ошибка, проявляющаяся для пользователя как некорректное поведение в официальном стабильном релизе)
- Исправлен некорректный анализ проекций при использовании
count(Nullable)в агрегатных проекциях. Тем самым исправляется #74495. В этом PR также добавлено дополнительное логирование анализа проекций, чтобы было понятно, почему проекция используется или нет. #74498 (Amos Bird). - Исправлена ошибка
Part <...> does not contain in snapshot of previous virtual parts. (PART_IS_TEMPORARILY_LOCKED)при выполненииDETACH PART. #76039 (Aleksei Filatov). - Исправлена некорректная работа пропускающих индексов с выражениями, содержащими литералы, в анализаторе, а также удалены тривиальные приведения типов во время анализа индексов. #77229 (Pavel Kruglov).
- Исправлена ошибка, из-за которой параметр запроса
close_sessionне действовал, и именованные сессии закрывались только послеsession_timeout. #77336 (Alexey Katsman). - Исправлено получение сообщений от сервера NATS без связанных материализованных представлений. #77392 (Dmitry Novikov).
- Исправлена логическая ошибка при чтении из пустого
FileLogс использованием табличной функцииmerge, закрыто #75575. #77441 (Vladimir Cherkasov). - Использовать настройки формата по умолчанию в сериализации
Dynamicиз разделяемого варианта. #77572 (Pavel Kruglov). - Исправлена проверка наличия пути к данным таблицы на локальном диске. #77608 (Tuan Pham Anh).
- Исправлена передача константных значений на удалённый сервер для некоторых типов данных. #77634 (Pavel Kruglov).
- Исправлено аварийное завершение работы из‑за истекшего контекста в S3/AzureQueue. #77720 (Kseniia Sumarokova).
- Скрыть учетные данные в табличных движках RabbitMQ, Nats, Redis и AzureQueue. #77755 (Kseniia Sumarokova).
- Исправлено неопределённое поведение при сравнении значений
NaNв функцияхargMinиargMax. #77756 (Raúl Marín). - Регулярно проверяйте, были ли слияния и мутации отменены, даже если операция не порождает блоков для записи. #77766 (János Benjamin Antal).
- Исправлена проблема, из-за которой обновляемое материализованное представление в реплицируемой базе данных не работало на вновь добавленных репликах. #77774 (Michael Kolupaev).
- Исправлен потенциальный краш при возникновении ошибки
NOT_FOUND_COLUMN_IN_BLOCK. #77854 (Vladimir Cherkasov). - Исправлена ошибка, приводившая к сбою в S3/AzureQueue во время заполнения данными. #77878 (Bharat Nallan).
- Отключён нечеткий поиск по истории в SSH-сервере (так как для него требуется библиотека skim). #78002 (Azat Khuzhin).
- Исправлена ошибка, из-за которой запрос векторного поиска по столбцу без индекса возвращал некорректные результаты, если в таблице был другой векторный столбец с определённым индексом векторного сходства. (Issue #77978). #78069 (Shankar Iyer).
- Исправлена незначительная ошибка в запросе подтверждения «Запрошенный формат вывода — двоичный... Всё равно вывести? [y/N]». #78095 (Azat Khuzhin).
- Исправлена ошибка при использовании
toStartOfIntervalс нулевым значением аргумента origin. #78096 (Yarik Briukhovetskyi). - Запрещена передача пустого параметра запроса
session_idв HTTP-интерфейсе. #78098 (Alexey Katsman). - Исправлена перезапись метаданных в базе данных
Replicated, которая могла произойти из‑за выполнения запросаRENAMEсразу после запросаALTER. #78107 (Nikolay Degterinsky). - Исправлена ошибка, приводившая к аварийному завершению работы движка
NATS. #78108 (Dmitry Novikov). - Не пытаться создавать файл
history_fileво встроенном SSH‑клиенте (в предыдущих версиях создание всегда завершалось неудачей, но всё же предпринималось). #78112 (Azat Khuzhin). - Исправлено некорректное отображение информации в
system.detached_tablesпосле выполнения запросовRENAME DATABASEилиDROP TABLE. #78126 (Nikolay Degterinsky). - Исправлена проверка на слишком большое количество таблиц в базе данных
Replicatedпосле #77274. Кроме того, проверка теперь выполняется перед созданием хранилища, чтобы избежать создания неучтённых узлов в Keeper в случаеReplicatedMergeTreeилиKeeperMap. #78127 (Nikolay Degterinsky). - Исправлено возможное аварийное завершение работы из-за одновременной инициализации метаданных
S3Queue. #78131 (Azat Khuzhin). - Функции
groupArray*теперь выдают ошибкуBAD_ARGUMENTSдля значения аргументаmax_size, равного 0 и имеющего тип Int (как это уже делается для значения типа UInt), вместо попытки выполнить операцию с таким значением. #78140 (Eduard Karacharov). - Предотвращён сбой при восстановлении потерянной реплики, если локальная таблица была удалена до её отключения. #78173 (Raúl Marín).
- Исправлена проблема, из-за которой столбец «alterable» в
system.s3_queue_settingsвсегда возвращалfalse. #78187 (Kseniia Sumarokova). - Маскировать подпись доступа Azure, чтобы она не отображалась пользователю и в логах. #78189 (Kseniia Sumarokova).
- Исправлена предвыборка подпотоков с префиксами в широких частях. #78205 (Pavel Kruglov).
- Исправлены сбои и некорректный результат для
mapFromArraysв случае, когда массив ключей имеет типLowCardinality(Nullable). #78240 (Eduard Karacharov). - Исправлены параметры аутентификации для delta-kernel-rs. #78255 (Kseniia Sumarokova).
- Не планировать задачу Refreshable Materialized Views, если у реплики параметр
disable_insertion_and_mutationимеет значение true. Задача представляет собой вставку и завершится с ошибкой, еслиdisable_insertion_and_mutationравно true. #78277 (Xu Jia). - Проверять права доступа к базовым таблицам движка
Merge. #78339 (Pervakov Grigorii). - Модификатор
FINALможно не использовать при запросах к таблицеDistributed. #78428 (Yakov Olkhovskiy). bitmapMinвозвращает uint32_max, когда битовая карта пуста (и uint64_max, когда разрядность входного типа больше), что соответствует поведению минимального значения пустого roaring_bitmap. #78444 (wxybear).- Отключена параллелизация обработки запроса сразу после чтения FROM при включённом параметре
distributed_aggregation_memory_efficient, так как это может приводить к логической ошибке. Закрывает #76934. #78500 (flynn). - Устанавливать минимум один поток для чтения на случай, если после применения настройки
max_streams_to_max_threads_ratioне остаётся ни одного запланированного потока. #78505 (Eduard Karacharov). - В хранилище
S3Queueисправлена логическая ошибка вида «Cannot unregister: table uuid is not registered». Закрывает #78285. #78541 (Kseniia Sumarokova). - ClickHouse теперь может корректно определять свою cgroup v2 на системах, где включены и cgroups v1, и v2. #78566 (Grigory Korolev).
- Табличные функции
-Clusterдавали сбой при использовании с настройками на уровне таблицы. #78587 (Daniil Ivanik). - Улучшены проверки на отсутствие поддержки транзакций в ReplicatedMergeTree при выполнении INSERT. #78633 (Azat Khuzhin).
- Очистка настроек запроса при выполнении ATTACH. #78637 (Raúl Marín).
- Исправлена ошибка, приводившая к аварийному завершению при указании недопустимого пути в
iceberg_metadata_file_path. #78688 (alesapin). - В движке таблиц
DeltaLakeс реализацией на delta-kernel-s исправлен случай, когда схема чтения отличается от схемы таблицы и одновременно заданы столбцы партиционирования, что приводило к ошибке «not found column». #78690 (Kseniia Sumarokova). - Исправлена проблема, при которой после планирования закрытия именованной сессии (но до истечения таймаута) создание новой именованной сессии с тем же именем приводило к её закрытию в то же время, что и первой сессии. #78698 (Alexey Katsman).
- Исправлено несколько типов запросов
SELECT, которые читают из таблиц с движкомMongoDBили табличной функциейmongodb: запросы с неявным преобразованием константы в условииWHERE(например,WHERE datetime = '2025-03-10 00:00:00'); запросы сLIMITиGROUP BY. Ранее они могли возвращать неверный результат. #78777 (Anton Popov). - Не блокировать завершение работы таблицы во время выполнения
CHECK TABLE. #78782 (Raúl Marín). - Исправление в Keeper: во всех случаях исправлен подсчёт эфемерных сущностей. #78799 (Antonio Andelic).
- Исправлено некорректное приведение типов в
StorageDistributedпри использовании табличных функций, кромеview. Закрывает #78464. #78828 (Konstantin Bogdanov). - Приведено к единому стилю форматирование для
tupleElement(*, 1). Закрывает #78639. #78832 (Konstantin Bogdanov). - Словари типа
ssd_cacheтеперь отклоняют нулевые или отрицательные значения параметровblock_sizeиwrite_buffer_size(issue #78314). #78854 (Elmi Ahmadov). - Исправлено падение Refreshable MATERIALIZED VIEW при выполнении ALTER после некорректного завершения работы. #78858 (Azat Khuzhin).
- Исправлена обработка некорректных значений
DateTimeв форматеCSV. #78919 (Pavel Kruglov). - Исправление в Keeper: предотвращает срабатывание наблюдателей (watches) при неуспешных multi‑запросах. #79247 (Antonio Andelic).
- Исправлена ошибка чтения таблиц Iceberg, возникавшая, когда значения min/max были явно заданы, но имели значение
NULL. Отмечено, что библиотека Go Iceberg генерировала как раз такие некорректные файлы. Закрывает #78740. #78764 (flynn).
Улучшения сборки/тестирования/упаковки
- Учитывать целевые особенности процессора в Rust и включать LTO во всех крейтах. #78590 (Raúl Marín).
Релиз ClickHouse 25.3 LTS, 2025-03-20
Обратимые несовместимые изменения
- Операция TRUNCATE для реплицируемых баз данных запрещена. #76651 (Bharat Nallan).
- Отменено изменение, из-за которого пропускался кэш индексов. #77447 (Nikita Mikhaylov).
Новая функция
- Тип данных
JSONготов для промышленной эксплуатации. См. https://jsonbench.com/. Типы данныхDynamicиVariantтакже готовы для промышленной эксплуатации. #77785 (Alexey Milovidov). - Появилась поддержка протокола SSH для clickhouse-server. Теперь можно подключаться к ClickHouse с помощью любого SSH‑клиента. Закрывает: #74340. #74989 (George Gamezardashvili).
- Заменяет табличные функции на их версии с суффиксом -Cluster, если включены параллельные реплики. Исправляет #65024. #70659 (Konstantin Bogdanov).
- Новая реализация кэша страниц в пространстве пользователя (Userspace Page Cache), которая позволяет кэшировать данные в памяти процесса вместо использования кэша страниц ОС, что полезно, когда данные хранятся на удалённой виртуальной файловой системе без опоры на локальный файловый кэш. #70509 (Michael Kolupaev).
- Добавлена настройка сервера
concurrent_threads_scheduler, которая управляет распределением CPU-слотов между одновременными запросами. Может принимать значенияround_robin(предыдущее поведение) илиfair_round_robinдля устранения проблемы несправедливого распределения CPU между INSERT и SELECT. #75949 (Sergei Trifonov). - Добавлена агрегатная функция
estimateCompressionRatio#70801. #76661 (Tariq Almawash). - Добавлена функция
arraySymmetricDifference. Она возвращает все элементы из нескольких массивов, переданных в качестве аргументов, которые не встречаются во всех аргументах одновременно. Пример:SELECT arraySymmetricDifference([1, 2], [2, 3])возвращает[1, 3]. (issue #61673). #76231 (Filipp Abapolov). - Добавлена возможность явно указывать файл метаданных для чтения таблиц Iceberg с помощью настройки функции хранилища/табличной функции
iceberg_metadata_file_path. Исправляет #47412. #77318 (alesapin). - Добавлена хеш-функция
keccak256, широко используемая в блокчейн-реализациях, особенно в системах на базе EVM. #76669 (Arnaud Briche). - Добавлены три новые функции:
icebergTruncateв соответствии со спецификацией https://iceberg.apache.org/spec/#truncate-transform-details,toYearNumSinceEpochиtoMonthNumSinceEpoch. Добавлена поддержка преобразованияtruncateпри отсечении партиций для движкаIceberg. #77403 (alesapin). - Добавлена поддержка типа данных
LowCardinality(Decimal)#72256. #72833 (zhanglistar). - Профилирующие события
FilterTransformPassedRowsиFilterTransformPassedBytesбудут показывать количество строк и объём данных в байтах, отфильтрованных во время выполнения запроса. #76662 (Onkar Deshpande). - Поддержка метрик типа «гистограмма». Интерфейс во многом повторяет клиент Prometheus: вы просто вызываете
observe(value), чтобы увеличить счётчик в бакете, соответствующем значению. Метрики-гистограммы доступны черезsystem.histogram_metrics. #75736 (Miсhael Stetsyuk). - Поддержка неконстантного оператора CASE для переключения по явным значениям. #77399 (Yarik Briukhovetskyi).
Экспериментальная функциональность
- Добавлена поддержка Unity Catalog для таблиц Delta Lake поверх AWS S3 и локальной файловой системы. #76988 (alesapin).
- Представлена экспериментальная интеграция с каталогом данных (Data Catalog) сервиса AWS Glue для таблиц Iceberg. #77257 (alesapin).
- Добавлена поддержка динамического автообнаружения кластеров. Это расширяет существующую функциональность автообнаружения узлов. Теперь ClickHouse может автоматически обнаруживать и регистрировать новые кластеры под общим путем в ZooKeeper, используя
<multicluster_root_path>. #76001 (Anton Ivashkin). - Добавлена возможность автоматической очистки слияниями целых партиций по истечении настраиваемого тайм-аута с помощью нового параметра
enable_replacing_merge_with_cleanup_for_min_age_to_force_merge. #76440 (Christoph Wurm).
Повышение производительности
- Реализован кэш условий запроса для улучшения производительности запросов с повторяющимися условиями. Диапазон области данных, не удовлетворяющей условию, запоминается в памяти как временный индекс. Последующие запросы используют этот индекс. Закрыты #67768 #69236 (zhongyuankai).
- Активное удаление данных из кэша при удалении кусков данных. Не допускать роста кэша до максимального размера, если объём данных меньше. #76641 (Alexey Milovidov).
- Заменены Int256 и UInt256 на встроенный тип clang i256 в арифметических вычислениях, что даёт прирост производительности #70502. #73658 (李扬).
- В некоторых случаях (например, пустой столбец-массив) части данных могут содержать пустые файлы. Можно пропускать запись пустых blob-объектов в ObjectStorage и хранить только метаданные для таких файлов, когда таблица размещена на диске с раздельным хранением метаданных и объектов. #75860 (Alexander Gololobov).
- Улучшена производительность вычислений min/max для Decimal32/Decimal64/DateTime64. #76570 (李扬).
- Компиляция запросов (параметр
compile_expressions) теперь учитывает тип машины. Это существенно ускоряет такие запросы. #76753 (ZhangLiStar). - Оптимизирован
arraySort. #76850 (李扬). - Отключён
filesystem_cache_prefer_bigger_buffer_size, когда кэш используется пассивно, например при слияниях. #77898 (Kseniia Sumarokova). - Атрибут
preserve_mostприменён в ряде мест в коде, что позволяет немного улучшить генерацию кода. #67778 (Nikita Taranov). - Ускорено завершение работы серверов ClickHouse (убрана задержка 2.5 секунды). #76550 (Azat Khuzhin).
- Исключено избыточное выделение памяти в ReadBufferFromS3 и других буферах удалённого чтения, их потребление памяти уменьшено вдвое. #76692 (Sema Checherinda).
- Обновлён zstd с версии 1.5.5 до 1.5.7, что может привести к улучшению производительности. #77137 (Pradeep Chhetri).
- Снижено потребление памяти при предварительной подзагрузке JSON-столбца в Wide-частях. Актуально, когда ClickHouse используется поверх разделяемого хранилища, например в ClickHouse Cloud. #77640 (Pavel Kruglov).
Улучшения
- Добавлена поддержка атомарного переименования при использовании
TRUNCATEсINTO OUTFILE. Исправлена проблема #70323. #77181 (Onkar Deshpande). - Больше нельзя использовать
NaNилиinfв качестве значений параметров с плавающей запятой. Впрочем, раньше в этом всё равно не было никакого смысла. #77546 (Yarik Briukhovetskyi). - Параллельные реплики теперь по умолчанию отключаются, если analyzer отключен, независимо от настройки
compatibility. Это поведение по-прежнему можно изменить, явно установивparallel_replicas_only_with_analyzerвfalse. #77115 (Igor Nikonov). - Добавлена возможность задавать список заголовков, которые передаются из заголовков клиентского запроса во внешний HTTP-аутентификатор. #77054 (inv2004).
- Учитывать регистронезависимое сопоставление имён столбцов для полей в столбцах-кортежах. Закрывает https://github.com/apache/incubator-gluten/issues/8324. #73780 (李扬).
- Параметры кодека Gorilla теперь всегда будут сохраняться в метаданных таблицы в файле .sql. Это исправляет: #70072. #74814 (Nikita Mikhaylov).
- Реализованы улучшения парсинга для некоторых озёр данных (парсинг Sequence ID: добавлена возможность разбора идентификаторов последовательностей в манифест-файлах и парсинг метаданных Avro: переработан парсер метаданных Avro, чтобы его было проще расширять в будущем). #75010 (Daniil Ivanik).
trace_idубран из ORDER BY по умолчанию дляsystem.opentelemetry_span_log. #75907 (Azat Khuzhin).- Шифрование (атрибут
encrypted_by) теперь может применяться к любому конфигурационному файлу (config.xml, users.xml, вложенные конфигурационные файлы). Ранее этот атрибут поддерживался только для файла config.xml верхнего уровня. #75911 (Mikhail Gorshkov). - Улучшена таблица
system.warningsи добавлены динамические сообщения-предупреждения, которые можно добавлять, обновлять или удалять. #76029 (Bharat Nallan). - Этот PR делает невозможным выполнение запроса
ALTER USER user1 ADD PROFILES a, DROP ALL PROFILES, поскольку все операцииDROPдолжны располагаться в запросе первыми. #76242 (pufit). - Различные улучшения механизма SYNC REPLICA (более информативные сообщения об ошибках, улучшенные тесты, проверки корректности). #76307 (Azat Khuzhin).
- Используется корректный резервный механизм при ошибке Access Denied во время многочастного копирования в S3 при создании резервной копии. Многочастное копирование может приводить к ошибке Access Denied, когда резервное копирование выполняется между бакетами с разными учетными данными. #76515 (Antonio Andelic).
- Обновлена librdkafka (которая представляет собой кучу мусора) до версии 2.8.0 (куча от этого лучше не стала) и улучшена процедура завершения работы для таблиц Kafka, что сократило задержки при удалении таблиц и перезапуске сервера.
engine=Kafkaбольше не выходит из группы потребителей (consumer group) при удалении таблицы. Вместо этого потребитель остаётся в группе, пока не будет автоматически удалён послеsession_timeout_ms(по умолчанию: 45 секунд) бездействия. #76621 (filimonov). - Исправлена валидация настроек запросов к S3. #76658 (Vitaly Baranov).
- Системные таблицы, такие как
server_settingsилиsettings, имеют столбец значений по умолчаниюdefault, что удобно. Теперь такой столбец есть и вmerge_tree_settingsиreplicated_merge_tree_settings. #76942 (Diego Nieto). - Добавлен
ProfileEvents::QueryPreemptedс логикой, аналогичнойCurrentMetrics::QueryPreempted. #77015 (VicoWu). - Ранее база данных Replicated могла выводить в логи учетные данные, указанные в запросе. Это поведение исправлено. Этим исправлением закрыт тикет: #77123. #77133 (Nikita Mikhaylov).
- Разрешён
ALTER TABLE DROP PARTITIONдля дискаplain_rewritable. #77138 (Julia Kartseva). - Параметр резервного копирования/восстановления
allow_s3_native_copyтеперь поддерживает три возможных значения: -False— S3 native copy использоваться не будет; -True(старое значение по умолчанию) — ClickHouse сначала попытается использовать S3 native copy, а при неудаче переключится на подход с чтением и записью; -'auto'(новое значение по умолчанию) — ClickHouse сначала сравнит учетные данные источника и приемника. Если они совпадают, ClickHouse попытается использовать S3 native copy и затем при необходимости может переключиться на подход с чтением и записью. Если они различаются, ClickHouse сразу перейдет к подходу с чтением и записью. #77401 (Vitaly Baranov). - Добавлена поддержка использования AWS session token и учетных данных, полученных из переменных окружения, в delta kernel для движка таблиц DeltaLake. #77661 (Kseniia Sumarokova).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Исправлена блокировка при обработке отложенной пачки данных для асинхронного распределённого INSERT (например, из‑за ошибки
No such file or directory). #72939 (Azat Khuzhin). - Улучшено преобразование DateTime при анализе индексов за счёт принудительного использования насыщающего поведения для неявных преобразований Date в DateTime. Это устраняет возможные неточности анализа индексов, вызванные ограничениями диапазона DateTime. Исправлена #73307. Также исправлено явное преобразование
toDateTime, когдаdate_time_overflow_behavior = 'ignore', что является значением по умолчанию. #73326 (Amos Bird). - Исправлены различные ошибки, возникавшие из‑за гонок между UUID и именами таблиц (например, устранена гонка между
RENAMEиRESTART REPLICA: при одновременном выполненииRENAMEиSYSTEM RESTART REPLICAможно было в итоге перезапустить не ту реплику и/или оставить одну из таблиц в состоянииTable X is being restarted). #76308 (Azat Khuzhin). - Исправлена потеря данных при включённой асинхронной вставке (async insert) и выполнении команды insert into ... from file ... с разным размером блоков: если размер первого блока < async_max_size, а второго блока > async_max_size, то второй блок не вставлялся. Эти данные оставались в
squashing. #76343 (Han Fei). - Поле 'marks' переименовано в 'marks_bytes' в
system.data_skipping_indices. #76374 (Robert Schulze). - Исправлена обработка неожиданных ошибок при изменении размера динамического кэша файловой системы во время вытеснения. #76466 (Kseniia Sumarokova).
- Исправлена инициализация
used_flagв параллельном хеше. Это могло приводить к падению сервера. #76580 (Nikita Taranov). - Исправлена логическая ошибка при вызове функции
defaultProfilesвнутри проекции. #76627 (pufit). - Не запрашивать интерактивную базовую аутентификацию в браузере для Web UI. Закрывает #76319. #76637 (Alexey Milovidov).
- Исправлено исключение THERE_IS_NO_COLUMN при выборке логического литерала из распределённых таблиц. #76656 (Yakov Olkhovskiy).
- Вложенный путь в каталоге таблицы выбирается более рациональным образом. #76681 (Daniil Ivanik).
- Исправлена ошибка
Not found column in block, возникавшая после изменения таблицы, в которой подстолбец используется в первичном ключе. После https://github.com/ClickHouse/ClickHouse/pull/72644 требуется https://github.com/ClickHouse/ClickHouse/pull/74403. #76686 (Nikolai Kochetov). - Добавлены тесты производительности для короткого замыкания для
NULLи исправлены ошибки. #76708 (李扬). - Буферы записи вывода теперь сбрасываются перед их финализацией. Исправлено возникновение
LOGICAL_ERRORво время финализации некоторых форматов вывода, напримерJSONEachRowWithProgressRowOutputFormat. #76726 (Antonio Andelic). - Добавлена поддержка двоичного UUID MongoDB (#74452) - Исправлено проталкивание условий WHERE в MongoDB при использовании табличной функции (#72210) - Изменено отображение типов MongoDB – ClickHouse таким образом, что двоичный UUID MongoDB может быть интерпретирован только как UUID ClickHouse. Это должно избежать двусмысленностей и неожиданных ситуаций в будущем. - Исправлено отображение OID с сохранением обратной совместимости. #76762 (Kirill Nikiforov).
- Исправлена обработка исключений при параллельной десериализации префиксов JSON-подколонок. #76809 (Pavel Kruglov).
- Исправлено поведение функции lgamma для отрицательных целых чисел. #76840 (Ilya Kataev).
- Исправлен анализ обратного ключа для явно заданных первичных ключей. Аналогично #76654. #76846 (Amos Bird).
- Исправлено форматирование (pretty print) значений типа Bool в формате JSON. #76905 (Pavel Kruglov).
- Исправлен возможный сбой из-за некорректного отката столбца JSON при ошибке во время асинхронных вставок. #76908 (Pavel Kruglov).
- Ранее
multiIfмог возвращать разные типы столбцов на этапе планирования и при основном выполнении. Это приводило к тому, что код проявлял неопределённое поведение с точки зрения языка C++. #76914 (Nikita Taranov). - Исправлена некорректная сериализация константных nullable-ключей в MergeTree. Это устраняет проблему #76939. #76985 (Amos Bird).
- Исправлена сортировка значений типа
BFloat16. Закрывает #75487. Закрывает #75669. #77000 (Alexey Milovidov). - Исправлена ошибка обработки JSON с подстолбцом типа Variant за счёт добавления проверки, пропускающей эфемерные подстолбцы при проверке согласованности парта. #72187. #77034 (Smita Kulkarni).
- Исправлен сбой при разборе шаблона формата Values при несовпадении типов. #77071 (Pavel Kruglov).
- Теперь не допускается создание таблицы EmbeddedRocksDB с подстолбцом в первичном ключе. Ранее такую таблицу можно было создать, но запросы SELECT завершались с ошибкой. #77074 (Pavel Kruglov).
- Исправлено некорректное сравнение в распределённых запросах, потому что проталкивание предикатов на удалённые узлы не учитывает типы литералов. #77093 (Duc Canh Le).
- Исправлен сбой при создании таблицы Kafka, приводивший к выбросу исключения. #77121 (Pavel Kruglov).
- Добавлена поддержка JSON и подстолбцов в движках Kafka и RabbitMQ. #77122 (Pavel Kruglov).
- Исправлено развёртывание стека исключений в macOS. #77126 (Eduard Karacharov).
- Исправлено чтение подстолбца 'null' в функции getSubcolumn. #77163 (Pavel Kruglov).
- Исправлена работа индекса Блума с
Arrayи неподдерживаемыми функциями. #77271 (Pavel Kruglov). - Следует проверять ограничение на количество таблиц только при выполнении исходного запроса CREATE. #77274 (Nikolay Degterinsky).
- Не баг:
SELECT toBFloat16(-0.0) == toBFloat16(0.0)теперь корректно возвращаетtrue(ранее возвращалfalse). Это делает поведение единообразным сFloat32иFloat64. #77290 (Shankar Iyer). - Исправлено возможное некорректное обращение к неинициализированной переменной key_index, которое могло приводить к аварийному завершению в debug-сборках (это неинициализированное обращение не вызывает проблем в release-сборках, так как последующий код, скорее всего, выбрасывает ошибки). ### Запись в документации об изменениях, заметных пользователю. #77305 (wxybear).
- Исправлено имя партиции со значением типа Bool. Ранее оно было нарушено в https://github.com/ClickHouse/ClickHouse/pull/74533. #77319 (Pavel Kruglov).
- Исправлено сравнение между кортежами с элементами типа Nullable и строками. Например, до изменения сравнение между кортежем
(1, null)и строкой'(1,null)'приводило к ошибке. Другой пример — сравнение между кортежем(1, a), гдеa— столбец типа Nullable, и строкой'(1, 2)'. Это изменение устраняет эти проблемы. #77323 (Alexey Katsman). - Исправлен сбой в ObjectStorageQueueSource. Он был внесён в https://github.com/ClickHouse/ClickHouse/pull/76358. #77325 (Pavel Kruglov).
- Исправлена проблема в работе
async_insertсinput. #77340 (Azat Khuzhin). - Исправление:
WITH FILLможет завершаться с ошибкой NOT_FOUND_COLUMN_IN_BLOCK, если сортируемый столбец был удалён планировщиком. Аналогичная проблема была связана с несогласованным DAG, вычисленным для выражения INTERPOLATE. #77343 (Yakov Olkhovskiy). - Исправлено несколько ошибок
LOGICAL_ERRORпри задании алиасов для недопустимых узлов AST. #77445 (Raúl Marín). - В реализации кеша файловой системы исправлена обработка ошибок при записи сегмента файла. #77471 (Kseniia Sumarokova).
- DatabaseIceberg теперь использует правильный файл метаданных, предоставленный каталогом. Закрывает #75187. #77486 (Kseniia Sumarokova).
- Кэш запросов теперь исходит из того, что UDF являются недетерминированными. Соответственно, результаты запросов с UDF больше не кэшируются. Ранее пользователи могли определять недетерминированные UDF, результаты которых ошибочно кэшировались (issue #77553). #77633 (Jimmy Aguilar Mena).
- Исправлена проблема, из-за которой
system.filesystem_cache_logработал только при включённой настройкеenable_filesystem_cache_log. #77650 (Kseniia Sumarokova). - Исправлена логическая ошибка при вызове функции
defaultRolesвнутри проекции. Доработка по задаче #76627. #77667 (pufit). - Вторые аргументы типа
Nullableдля функцииarrayResizeтеперь не допускаются. Ранее при использованииNullableв качестве второго аргумента могли возникать как ошибки, так и некорректные результаты. (issue #48398). #77724 (Manish Gill). - Регулярно проверяйте, не были ли слияния и мутации отменены, даже если операция не создает блоки для записи. #77766 (János Benjamin Antal).
Улучшения сборки/тестирования/упаковки
clickhouse-odbc-bridgeиclickhouse-library-bridgeперенесены в отдельный репозиторий: https://github.com/ClickHouse/odbc-bridge/. #76225 (Alexey Milovidov).- Исправлена кросс-компиляция Rust и добавлена возможность полностью отключать Rust. #76921 (Raúl Marín).
Релиз ClickHouse 25.2, 2025-02-27
Обратимо несовместимые изменения
- Полностью включён
async_load_databasesпо умолчанию (даже для тех установок, где не обновлёнconfig.xml). #74772 (Azat Khuzhin). - Добавлены форматы
JSONCompactEachRowWithProgressиJSONCompactStringsEachRowWithProgress. Продолжение #69989.JSONCompactWithNamesиJSONCompactWithNamesAndTypesбольше не выводят "totals" — по‑видимому, это было ошибкой в реализации. #75037 (Alexey Milovidov). - Значение по умолчанию настройки
format_alter_operations_with_parenthesesизменено на true, чтобы устранить неоднозначность списка команд ALTER (см. https://github.com/ClickHouse/ClickHouse/pull/59532). Это нарушает репликацию с кластерами версий до 24.3. Если вы обновляете кластер, использующий более старые релизы, отключите эту настройку в конфигурации сервера или сначала обновитесь до 24.3. #75302 (Raúl Marín). - Удалена возможность фильтрации сообщений журнала с использованием регулярных выражений. Реализация приводила к гонке данных, поэтому её пришлось удалить. #75577 (János Benjamin Antal).
- Настройка
min_chunk_bytes_for_parallel_parsingбольше не может быть равна нулю. Это исправляет проблему: #71110. #75239 (Nikita Mikhaylov). - Добавлена проверка настроек в конфигурации кэша. Ранее несуществующие настройки игнорировались, теперь они будут приводить к ошибке и их следует удалить. #75452 (Kseniia Sumarokova).
Новые возможности
- Поддержка типа
Nullable(JSON). #73556 (Pavel Kruglov). - Поддержка подстолбцов (subcolumns) в выражениях DEFAULT и MATERIALIZED. #74403 (Pavel Kruglov).
- Поддержка записи bloom-фильтров Parquet с помощью настройки
output_format_parquet_write_bloom_filter(включена по умолчанию). #71681 (Michael Kolupaev). - В веб-интерфейсе появилась интерактивная навигация по базам данных. #75777 (Alexey Milovidov).
- Разрешено комбинировать диски только для чтения и для чтения-записи в политике хранения (как несколько томов или несколько дисков). Это позволяет считывать данные со всего тома, в то время как вставка будет выполняться на доступный для записи диск (то есть политика хранения Copy-on-Write). #75862 (Azat Khuzhin).
- Добавлен новый движок базы данных
DatabaseBackup, который позволяет мгновенно подключать таблицу/базу данных из резервной копии. #75725 (Maksim Kita). - Добавлена поддержка подготовленных запросов (prepared statements) в протоколе обмена Postgres (Postgres wire protocol). #75035 (scanhex12).
- Добавлена возможность ATTACH таблиц без уровня базы данных, что полезно для таблиц MergeTree, расположенных в Web, S3 и аналогичных внешних виртуальных файловых системах. #75788 (Azat Khuzhin).
- Добавлена новая функция сравнения строк
compareSubstringsдля сравнения частей двух строк. Пример:SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS resultозначает «лексикографически сравнить 6 байт строк „Saxon“ и „Anglo-Saxon“, начиная со смещения 0 в первой строке и 5 во второй строке». #74070 (lgbo). - Добавлена новая функция
initialQueryStartTime. Она возвращает время начала текущего запроса. Значение одинаково на всех шардах при распределённом запросе. #75087 (Roman Lomonosov). - Добавлена поддержка SSL-аутентификации с именованными коллекциями для MySQL. Закрывает #59111. #59452 (Nikolay Degterinsky).
Экспериментальные возможности
- Добавлена новая настройка
enable_adaptive_memory_spill_scheduler, которая позволяет нескольким операциям Grace JOIN в одном запросе отслеживать их совокупное потребление памяти и адаптивно инициировать сброс во внешнее хранилище для предотвращения MEMORY_LIMIT_EXCEEDED. #72728 (lgbo). - Новый экспериментальный движок таблиц
Kafkaтеперь в полной мере учитывает feature flags Keeper. #76004 (János Benjamin Antal). - Восстановлен кодек (Intel) QPL, который был удалён в версии v24.10 из‑за лицензионных ограничений. #76021 (Konstantin Bogdanov).
- Для интеграции с HDFS добавлена поддержка опции конфигурации
dfs.client.use.datanode.hostname. #74635 (Mikhail Tiukavkin).
Повышение производительности
- Улучшена производительность чтения всего JSON‑столбца в Wide‑частях из S3. Это сделано за счет добавления предварительной выборки (prefetch) для десериализации префиксов подстолбцов, кеширования десериализованных префиксов и параллельной десериализации префиксов подстолбцов. Это ускоряет чтение JSON‑столбца из S3 в 4 раза в запросах вида
SELECT data FROM tableи примерно в 10 раз в запросах видаSELECT data FROM table LIMIT 10. #74827 (Pavel Kruglov). - Исправлен избыточный контеншн в
parallel_hash, когдаmax_rows_in_join = max_bytes_in_join = 0. #75155 (Nikita Taranov). - Исправлено двойное предварительное выделение памяти в
ConcurrentHashJoinв случае, когда стороны соединения меняются местами оптимизатором. #75149 (Nikita Taranov). - Небольшое улучшение в некоторых сценариях join: предварительный расчет числа выходных строк и резервирование памяти под них. #75376 (Alexander Gololobov).
- Для запросов вида
WHERE a < b AND b < c AND c < 5теперь можно выводить новые условия сравнения (a < 5 AND b < 5) для улучшения эффективности фильтрации. #73164 (Shichao Jin). - Улучшение в Keeper: отключено вычисление дайджеста при фиксации (commit) в in-memory хранилище для повышения производительности. Его можно включить с помощью настройки
keeper_server.digest_enabled_on_commit. Дайджест по‑прежнему вычисляется при предварительной обработке запросов. #75490 (Antonio Andelic). - Оптимизация: по возможности проталкивать выражение фильтра из секции JOIN ON. #75536 (Vladimir Cherkasov).
- Ленивый расчет размеров столбцов и индексов в MergeTree. #75938 (Pavel Kruglov).
- Настройка
ttl_only_drop_partsснова учитывается дляMATERIALIZE TTL; считываются только необходимые столбцы для перерасчета TTL, а части удаляются путем замены их на пустые. #72751 (Andrey Zvonov). - Уменьшен размер буфера записи для файлов метаданных plain_rewritable. #75758 (Julia Kartseva).
- Снижено потребление памяти некоторыми оконными функциями. #65647 (lgbo).
- Оценка parquet bloom‑фильтров и min/max‑индексов выполняется совместно. Это необходимо для корректной поддержки запросов вида
x = 3 or x > 5, где data = [1, 2, 4, 5]. #71383 (Arthur Passos). - Запросы, передаваемые в хранилище
Executable, больше не ограничены однопоточным выполнением. #70084 (yawnt). - Части в ALTER TABLE FETCH PARTITION загружаются параллельно (размер пула потоков задается настройкой
max_fetch_partition_thread_pool_size). #74978 (Azat Khuzhin). - Теперь можно перемещать предикаты с функцией
indexHintвPREWHERE. #74987 (Anton Popov).
Улучшения
- Исправлен расчет размера в памяти для столбцов
LowCardinality. #74688 (Nikita Taranov). - Таблица
processors_profile_logтеперь имеет конфигурацию по умолчанию с TTL в 30 дней. #66139 (Ilya Yatsishin). - Добавлена возможность задавать имена шардов в конфигурации кластера. #72276 (MikhailBurdukov).
- Изменён статус успешного ответа для Prometheus remote write с 200 OK на 204 No Content. #74170 (Michael Dempsey).
- Добавлена возможность изменять значения
max_remote_read_network_bandwidth_for_serveиmax_remote_write_network_bandwidth_for_serverна лету, без перезапуска сервера. #74206 (Kai Zhu). - Добавлена возможность использовать пути к BLOB-объектам для вычисления контрольных сумм при создании резервной копии. #74729 (Vitaly Baranov).
- В таблицу
system.query_cacheдобавлен столбец ID запроса (закрывает #68205). #74982 (NamHoaiNguyen). - Теперь можно отменять запросы
ALTER TABLE ... FREEZE ...с помощьюKILL QUERY, а также автоматически по тайм-ауту (max_execution_time). #75016 (Kirill). - Добавлена поддержка
groupUniqArrayArrayMapв качествеSimpleAggregateFunction. #75034 (Miel Donkers). - Скрыты параметры учетных данных каталога в движке базы данных
Iceberg. Закрывает #74559. #75080 (Kseniia Sumarokova). intExp2/intExp10: Определено поведение для ранее неопределённых случаев: возвращать 0 для слишком малого аргумента,18446744073709551615для слишком большого аргумента, выбрасывать исключение при значенииnan. #75312 (Vitaly Baranov).- Добавлена прямая поддержка
s3.endpointиз конфигурации каталога вDatabaseIceberg. Закрывает #74558. #75375 (Kseniia Sumarokova). - Не завершать выполнение без сообщения об ошибке, если у пользователя, выполняющего
SYSTEM DROP REPLICA, недостаточно прав. #75377 (Bharat Nallan). - Добавлен ProfileEvent, фиксирующий количество неудачных попыток сброса любого из системных логов. #75466 (Alexey Milovidov).
- Добавлена проверка и дополнительное логирование при расшифровке и декомпрессии. #75471 (Vitaly Baranov).
- Добавлена поддержка символа «micro» (U+00B5) в функции
parseTimeDelta. Теперь и символ «micro» (U+00B5), и греческая буква «mu» (U+03BC) распознаются как корректные обозначения микросекунд, что приводит поведение ClickHouse в соответствие с реализацией Go (см. time.go и time/format.go). #75472 (Vitaly Orlov). - Заменена серверная настройка (
send_settings_to_client) на клиентскую (apply_settings_from_server), которая определяет, нужно ли коду на стороне клиента (например, при разборе данных INSERT и форматировании вывода запроса) использовать настройки из серверногоusers.xmlи пользовательского профиля. В противном случае используются только настройки, заданные через командную строку клиента, сессию и сам запрос. Обратите внимание, что это относится только к нативному клиенту (а не, например, к HTTP) и не применяется к большей части обработки запросов (которая выполняется на сервере). #75478 (Michael Kolupaev). - Улучшены сообщения об ошибках синтаксиса. Ранее, если запрос был слишком большим, а токен, длина которого превышала предел, представлял собой очень длинный строковый литерал, сообщение о причине терялось где‑то посередине между двумя примерами этого очень длинного токена. Исправлена проблема, из‑за которой запрос с UTF-8 некорректно обрезался в сообщении об ошибке. Исправлено избыточное взятие фрагментов запроса в кавычки. Закрывает #75473. #75561 (Alexey Milovidov).
- Добавлены события профилирования в хранилище
S3(Azure)Queue. #75618 (Kseniia Sumarokova). - Отключена отправка настроек с сервера на клиент (
send_settings_to_client=false) для обеспечения совместимости (позднее эта функция будет реализована заново как клиентская настройка, чтобы повысить удобство использования). #75648 (Michael Kolupaev). - Добавлена настройка
memory_worker_correct_memory_tracker, которая включает исправление внутреннего счётчика памяти на основе информации из различных источников, периодически считываемой фоновым потоком. #75714 (Antonio Andelic). - Добавлен столбец
normalized_query_hashвsystem.processes. Примечание: хотя его можно легко вычислить на лету с помощью функцииnormalizedQueryHash, это необходимо для подготовки к последующим изменениям. #75756 (Alexey Milovidov). - Запрос к
system.tablesне будет приводить к ошибке, даже если существует таблицаMerge, созданная поверх уже не существующей базы данных. Из таблицHiveудалён методgetTotalRows, поскольку мы не допускаем выполнения ими сложных операций. #75772 (Alexey Milovidov). - Хранить start_time/end_time резервных копий с точностью до микросекунд. #75929 (Aleksandr Musorin).
- Добавлена метрика
MemoryTrackingUncorrected, показывающая значение внутреннего глобального трекера памяти, не скорректированное по RSS. #75935 (Antonio Andelic). - Разрешить разбор адресов конечных точек вида
localhost:1234/handleв табличных функцияхPostgreSQLилиMySQL. Это исправляет регрессию, внесённую в https://github.com/ClickHouse/ClickHouse/pull/52503. #75944 (Nikita Mikhaylov). - Добавлена серверная настройка
throw_on_unknown_workload, которая позволяет выбрать поведение при выполнении запроса с параметромworkloadс неизвестным значением: либо разрешать неограниченный доступ (по умолчанию), либо выбрасывать ошибкуRESOURCE_ACCESS_DENIED. Это полезно для принудительного использования планирования рабочих нагрузок всеми запросами. #75999 (Sergei Trifonov). - Не переписывать подколонки в вызовы
getSubcolumnвARRAY JOIN, если в этом нет необходимости. #76018 (Pavel Kruglov). - Повторять операции при ошибках координации при загрузке таблиц. #76020 (Alexander Tokmakov).
- Добавлена поддержка сброса отдельных логов с помощью команды
SYSTEM FLUSH LOGS. #76132 (Raúl Marín). - Улучшена страница сервера
/binary. Используется кривая Гильберта вместо кривой Мортона. В квадрате отображаются адреса объёмом до 512 МБ, что лучше заполняет квадрат (в предыдущих версиях адреса заполняли только половину квадрата). Адреса раскрашиваются в зависимости от имени библиотеки, а не имени функции. Разрешена прокрутка немного дальше за пределы области. #76192 (Alexey Milovidov). - Повтор выполнения запросов ON CLUSTER при ошибке TOO_MANY_SIMULTANEOUS_QUERIES. #76352 (Patrick Galbraith).
- Добавлена асинхронная метрика
CPUOverload, которая вычисляет относительный дефицит CPU-ресурсов сервера. #76404 (Alexey Milovidov). - Изменено значение по умолчанию для
output_format_pretty_max_rowsс 10 000 на 1 000. Считаю, что так удобнее. #76407 (Alexey Milovidov).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Исправлено форматирование исключений — теперь используется пользовательский формат, если они возникают во время интерпретации запроса. В предыдущих версиях исключения форматировались в формате по умолчанию, а не в формате, указанном в запросе. Исправлена ошибка #55422. #74994 (Alexey Milovidov).
- Исправлено сопоставление типов данных для SQLite (целочисленных типов в
int64, типов с плавающей запятой вfloat64). #73853 (Joanna Hulboj). - Исправлено разрешение идентификаторов из родительских областей видимости. Разрешено использование псевдонимов для выражений в предложении WITH. Исправляет #58994. Исправляет #62946. Исправляет #63239. Исправляет #65233. Исправляет #71659. Исправляет #71828. Исправляет #68749. #66143 (Dmitry Novik).
- Исправлена монотонность функции negate. В предыдущих версиях запрос
select * from a where -x = -42;, гдеxявляется первичным ключом, мог возвращать неверный результат. #71440 (Michael Kolupaev). - Исправлена обработка пустых кортежей в arrayIntersect, что исправляет #72578. #72581 (Amos Bird).
- Исправлено чтение субстолбцов вложенных объектов JSON с некорректным префиксом. #73182 (Pavel Kruglov).
- Обеспечена корректная передача настроек формата Native при клиент-серверном взаимодействии. #73924 (Pavel Kruglov).
- Добавлена проверка неподдерживаемых типов для некоторых хранилищ. #74218 (Pavel Kruglov).
- Исправлен сбой при выполнении запроса
INSERT INTO SELECTпри использовании интерфейса PostgreSQL на macOS (issue #72938). #74231 (Artem Yurov). - Исправлена проблема с неинициализированной max_log_ptr в реплицируемой базе данных. #74336 (Konstantin Morozov).
- Исправлен сбой при вставке
interval(issue #74299). #74478 (NamHoaiNguyen). - Исправлено форматирование констант JSON-литералов. Ранее это могло приводить к синтаксическим ошибкам при отправке запроса на другой сервер. #74533 (Pavel Kruglov).
- Исправлен некорректный запрос
CREATEпри использовании константных выражений секции (PARTITION) с включёнными неявными проекциями. Это исправляет #74596. #74634 (Amos Bird). - Не допускать, чтобы соединение оставалось в некорректном состоянии после завершения операции INSERT с исключением. #74740 (Azat Khузhin).
- Избегайте повторного использования соединений, оставленных в промежуточном состоянии. #74749 (Azat Khuzhin).
- Исправлено падение при разборе объявления типа JSON, если имя типа указано не в верхнем регистре. #74784 (Pavel Kruglov).
- Keeper: исправлена ошибка logical_error, возникавшая, если соединение разрывалось до его установления. #74844 (Michael Kolupaev).
- Исправлена ошибка, из-за которой сервер не мог запуститься, если существовала таблица, использующая
AzureBlobStorage. Таблицы теперь загружаются без каких-либо запросов к Azure. #74880 (Alexey Katsman). - Исправлены отсутствующие поля
used_privilegesиmissing_privilegesвquery_logдля операций BACKUP и RESTORE. #74887 (Alexey Katsman). - В HDFS обновлять krb ticket при ошибке SASL во время запроса HDFS SELECT. #74930 (inv2004).
- Исправлены запросы к базе данных Replicated в startup_scripts. #74942 (Azat Khuzhin).
- Исправлены проблемы с выражениями, использующими псевдонимы типов, в условии JOIN ON при использовании null-safe-сравнения. #74970 (Vladimir Cherkasov).
- Возвращает состояние части из «удаляемая» обратно в «устаревшая», если операция удаления завершилась неудачей. #74985 (Sema Checherinda).
- В предыдущих версиях, когда использовался скалярный подзапрос, мы начинали записывать прогресс выполнения (накопленный при обработке подзапроса) уже на этапе инициализации формата данных, то есть до отправки HTTP-заголовков. Это приводило к потере HTTP-заголовков, таких как X-ClickHouse-QueryId и X-ClickHouse-Format, а также заголовка Content-Type. #74991 (Alexey Milovidov).
- Исправлены запросы вида
CREATE TABLE AS...дляdatabase_replicated_allow_replicated_engine_arguments=0. #75000 (Bharat Nallan). - Исправлена проблема, из-за которой после исключений при выполнении INSERT-запросов соединение клиента оставалось в некорректном состоянии. #75030 (Azat Khuzhin).
- Исправлена аварийная остановка из-за неперехваченного исключения при репликации PSQL. #75062 (Azat Khuzhin).
- SASL может приводить к сбою любого RPC-вызова; исправление позволяет повторить вызов в случае, если срок действия krb5-ticket истёк. #75063 (inv2004).
- Исправлено использование индексов (первичных и вторичных) для столбцов
Array,MapиNullable(..)при включённой настройкеoptimize_function_to_subcolumns. Ранее индексы для этих столбцов могли быть проигнорированы. #75081 (Anton Popov). - Отключайте
flatten_nestedпри создании материализованных представлений на внутренних таблицах, поскольку такие развёрнутые столбцы затем нельзя будет использовать. #75085 (Christoph Wurm). - Исправлена ошибка, из-за которой некоторые IPv6-адреса (например, ::ffff:1.1.1.1) в поле forwarded_for неверно интерпретировались, что приводило к разрыву соединения с клиентом с выбросом исключения. #75133 (Yakov Olkhovskiy).
- Исправлена обработка null-safe JOIN для допускающего значения NULL типа данных LowCardinality. Ранее JOIN ON с null-safe сравнением, таким как
IS NOT DISTINCT FROM,<=>,a IS NULL AND b IS NULL OR a == b, работал некорректно с колонками LowCardinality. #75143 (Vladimir Cherkasov). - Проверяет, что при подсчёте total_number_of_rows для NumRowsCache не задаётся key_condition. #75164 (Daniil Ivanik).
- Исправлена обработка запросов с неиспользуемой интерполяцией с помощью нового анализатора. #75173 (János Benjamin Antal).
- Исправлена ошибка, приводившая к сбою при использовании CTE с Insert. #75188 (Shichao Jin).
- Исправление Keeper: предотвращена запись в повреждённые журналы изменений при откате логов. #75197 (Antonio Andelic).
- Использовать
BFloat16в качестве супертипа там, где это уместно. Исправляет проблему: #74404. #75236 (Nikita Mikhaylov). - Исправлены неожиданные значения по умолчанию в результате JOIN при использовании
any_join_distinct_right_table_keysи оператора OR в условии JOIN ON. #75262 (Vladimir Cherkasov). - Маскирование учетных данных движка таблиц azureblobstorage. #75319 (Garrett Thomas).
- Исправлено поведение, при котором ClickHouse мог ошибочно выполнять проталкивание фильтра (filter pushdown) во внешнюю СУБД, такую как PostgreSQL, MySQL или SQLite. Это исправление закрывает: #71423. #75320 (Nikita Mikhaylov).
- Исправлен сбой в кэше схем Protobuf, который мог происходить во время вывода в формате Protobuf при параллельном выполнении запроса
SYSTEM DROP FORMAT SCHEMA CACHE. #75357 (Pavel Kruglov). - Исправлена возможная логическая ошибка или обращение к неинициализированной памяти при проталкивании фильтра из
HAVINGпри использовании параллельных реплик. #75363 (Vladimir Cherkasov). - Скрыта конфиденциальная информация в табличных функциях и движках таблиц
icebergS3иicebergAzure. #75378 (Kseniia Sumarokova). - Функция
TRIMс вычисляемым пустым набором символов для обрезки теперь обрабатывается корректно. Пример:SELECT TRIM(LEADING concat('') FROM 'foo')(Issue #69922). #75399 (Manish Gill). - Исправлена гонка данных в IOutputFormat. #75448 (Pavel Kruglov).
- Исправлена возможная ошибка
Elements ... and ... of Nested data structure ... (Array columns) have different array sizesпри использовании JSON-подстолбцов типа Array в операциях JOIN с распределёнными таблицами. #75512 (Pavel Kruglov). - Исправлена порча данных при использовании
CODEC(ZSTD, DoubleDelta). Закрывает #70031. #75548 (Konstantin Bogdanov). - Исправлено взаимодействие между allow_feature_tier и настройкой MergeTree compatibility. #75635 (Raúl Marín).
- Исправлено неверное значение processed_rows в system.s3queue_log в случае повторной обработки файла. #75666 (Kseniia Sumarokova).
- Учитывать
materialized_views_ignore_errorsпри записи материализованного представления в движок URL при возникновении проблем с подключением. #75679 (Christoph Wurm). - Исправлены редкие сбои при чтении из таблицы
MergeTreeпосле нескольких асинхронных запросовRENAME(сalter_sync = 0) между столбцами разных типов. #75693 (Anton Popov). - Исправлена ошибка
Block structure mismatch in QueryPipeline stream, возникавшая при некоторых запросах сUNION ALL. #75715 (Nikolai Kochetov). - Теперь проекция перестраивается при
ALTER MODIFYстолбца её первичного ключа. Ранее это могло приводить к ошибкамCANNOT_READ_ALL_DATAпри выполненииSELECTпослеALTER MODIFYстолбца, используемого в первичном ключе проекции. #75720 (Pavel Kruglov). - Исправлен некорректный результат
ARRAY JOINдля скалярных подзапросов (с анализатором). #75732 (Nikolai Kochetov). - Исправлена ошибка разыменования нулевого указателя в
DistinctSortedStreamTransform. #75734 (Nikita Taranov). - Исправлено поведение
allow_suspicious_ttl_expressions. #75771 (Aleksei Filatov). - Исправлено чтение из неинициализированной памяти в функции
translate. Это закрывает #75592. #75794 (Alexey Milovidov). - Распространять настройки формата на JSON как строковое форматирование в формате Native. #75832 (Pavel Kruglov).
- Зафиксировано включение по умолчанию параллельного hash в качестве алгоритма соединения (JOIN) в версии v24.12 в истории изменений настроек. Это означает, что ClickHouse продолжит выполнять соединение с использованием непараллельного hash, если настроен уровень совместимости ниже v24.12. #75870 (Robert Schulze).
- Исправлена ошибка, из-за которой таблицы с неявно добавленными индексами min-max нельзя было скопировать в новую таблицу (issue #75677). #75877 (Smita Kulkarni).
clickhouse-library-bridgeпозволяет загружать любые библиотеки из файловой системы, поэтому его безопасно запускать только в изолированной среде. Чтобы предотвратить уязвимость при запуске на одном хосте с clickhouse-server, мы ограничим допустимые пути к библиотекам каталогом, указанным в конфигурации. Эта уязвимость была обнаружена в рамках ClickHouse Bug Bounty Program Арсением Дугиным. #75954 (Alexey Milovidov).- Мы использовали JSON-сериализацию для части метаданных, что было ошибкой, потому что JSON не поддерживает двоичные данные внутри строковых литералов, включая нулевые байты. SQL-запросы могут содержать двоичные данные и некорректный UTF-8, поэтому мы должны поддерживать это и в наших файлах с метаданными. При этом форматы ClickHouse
JSONEachRowи подобные обходят это ограничение, отходя от стандарта JSON в пользу идеального обратимого преобразования для двоичных данных. Обоснование см. здесь: https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790. Решение состоит в том, чтобы привести библиотекуPoco::JSONв соответствие с реализацией сериализации формата JSON в ClickHouse. Это закрывает #73668. #75963 (Alexey Milovidov). - Исправлена проверка ограничений на коммиты в хранилище
S3Queue. #76104 (Kseniia Sumarokova). - Исправлено присоединение таблиц MergeTree с автоматическими индексами (
add_minmax_index_for_numeric_columns/add_minmax_index_for_string_columns). #76139 (Azat Khuzhin). - Исправлена проблема, из‑за которой стек‑трейсы родительских потоков задания (настройка
enable_job_stack_trace) не выводились. Также исправлена проблема, при которой значение настройкиenable_job_stack_traceнекорректно распространялось на потоки, из‑за чего содержимое стек‑трейсов не всегда учитывало эту настройку. #76191 (Yakov Olkhovskiy). - Исправлена ошибка в проверке прав, при которой для
ALTER RENAMEтребовался грантCREATE USER. Закрывает #74372. #76241 (pufit). - Исправлена работа функции reinterpretAs с типом FixedString на архитектуре big-endian. #76253 (Azat Khuzhin).
- Исправлена логическая ошибка в S3Queue: «Expected current processor to be equal to for bucket ». #76358 (Kseniia Sumarokova).
- Устранена взаимная блокировка при выполнении
ALTERв базе данныхMemory. #76359 (Azat Khuzhin). - Исправлена логическая ошибка в анализе индекса, если в условии
WHEREиспользуется функцияpointInPolygon. #76360 (Anton Popov). - Исправлен потенциально небезопасный вызов в обработчике сигнала. #76549 (Yakov Olkhovskiy).
- Исправлена поддержка обратных ключей в PartsSplitter. Устраняет проблему #73400. #73418 (Amos Bird).
Улучшения сборки/тестирования/упаковки
- Добавлена поддержка сборки HDFS как на Mac с ARM, так и на Mac с Intel. #74244 (Yan Xin).
- Включены ICU и GRPC при кросс-компиляции под Darwin. #75922 (Raúl Marín).
- Обновлено встроенное LLVM до версии 19. #75148 (Konstantin Bogdanov).
- Отключён сетевой доступ для пользователя
defaultв образе Docker. #75259 (Mikhail f. Shiryaev). Все действия, связанные с clickhouse-server, оформлены в виде функции и выполняются только при запуске основного бинарника вentrypoint.sh. Давно откладываемое улучшение было предложено в #50724. Вclickhouse-extract-from-configдобавлен флаг--usersдля получения значений изusers.xml. #75643 (Mikhail f. Shiryaev). - Удалено около 20 МБ мёртвого кода из бинарника. #76226 (Alexey Milovidov).
Релиз ClickHouse 25.1, 2025-01-28
Обратные несовместимые изменения
JSONEachRowWithProgressтеперь будет выводить прогресс каждый раз, когда он обновляется. В предыдущих версиях прогресс показывался только после каждого блока результата, что делало его практически бесполезным. Изменён способ отображения прогресса: нулевые значения показываться не будут. Это закрывает #70800. #73834 (Alexey Milovidov).- Таблицы
Mergeтеперь унифицируют структуру базовых таблиц, используя объединение их столбцов и выводя общие типы. Это закрывает #64864. В некоторых случаях это изменение может быть несовместимо с предыдущими версиями. Один из примеров — когда между таблицами нет общего типа, но преобразование к типу первой таблицы всё ещё возможно, как в случаеUInt64иInt64или любого числового типа иString. Если вы хотите вернуться к старому поведению, установитеmerge_table_max_tables_to_look_for_schema_inferenceв1или установитеcompatibilityна24.12или более раннюю версию. #73956 (Alexey Milovidov). - Формат вывода Parquet конвертирует столбцы
DateиDateTimeв типы даты/времени, поддерживаемые Parquet, вместо записи их как сырых чисел.DateTimeстановитсяDateTime64(3)(ранее:UInt32); установкаoutput_format_parquet_datetime_as_uint32возвращает старое поведение.DateстановитсяDate32(ранее:UInt16). #70950 (Michael Kolupaev). - По умолчанию не допускаются несравнимые типы (такие как
JSON/Object/AggregateFunction) вORDER BYи в функциях сравненияless/greater/equal/etc. #73276 (Pavel Kruglov). - Устаревший движок базы данных
MaterializedMySQLудалён и больше недоступен. #73879 (Alexey Milovidov). - Источник словаря
mysqlбольше не выполняет запросSHOW TABLE STATUS, потому что он не даёт полезной информации ни для таблиц InnoDB, ни для каких-либо современных версий MySQL. Это закрывает #72636. Это изменение обратно совместимо, но помещено в эту категорию, чтобы у вас была возможность его заметить. #73914 (Alexey Milovidov). - Запросы
CHECK TABLEтеперь требуют отдельной привилегииCHECK. В предыдущих версиях для запуска этих запросов было достаточно привилегииSHOW TABLES. Но запросCHECK TABLEможет быть ресурсоёмким, и обычные ограничения сложности запросов для запросовSELECTк нему не применяются. Это приводило к потенциальной возможности проведения DoS-атаки. #74471 (Alexey Milovidov). - Функция
h3ToGeo()теперь возвращает результат в порядке(lat, lon)(что является стандартным порядком для геометрических функций). Пользователи, которые хотят сохранить прежний порядок результата(lon, lat), могут установить настройкуh3togeo_lon_lat_result_order = true. #74719 (Manish Gill). - Новый драйвер MongoDB теперь используется по умолчанию. Пользователи, которые хотят продолжить использовать прежний драйвер, могут установить серверную настройку
use_legacy_mongodb_integrationв значениеtrue. #73359 (Robert Schulze).
Новая возможность
- Добавлена возможность применять незавершённые мутации (ещё не материализованные фоновым процессом) во время выполнения запросов
SELECTсразу после отправки. Это можно включить, установивapply_mutations_on_fly. #74877 (Anton Popov). - Реализовано отсечение партиций таблиц
Icebergдля операций партиционирования с временными преобразованиями. #72044 (Daniil Ivanik). - Поддержка подколонок в ключе сортировки MergeTree и пропускающих индексах. #72644 (Pavel Kruglov).
- Добавлена поддержка чтения значений типа
HALF_FLOATизApache Arrow/Parquet/ORC(они считываются какFloat32). Это закрывает #72960. Имейте в виду, что формат половинной точности IEEE-754 (half float) — это не то же самое, чтоBFloat16. Закрывает #73835. #73836 (Alexey Milovidov). - Таблица
system.trace_logбудет содержать два новых столбца —symbolsиlines, в которых хранится символизированный стек вызовов. Это позволяет легко собирать и экспортировать профильную информацию. Это поведение управляется параметром конфигурации сервераsymbolizeв разделеtrace_logи по умолчанию включено. #73896 (Alexey Milovidov). - Добавлена новая функция
generateSerialID, которая может использоваться для генерации автоинкрементных значений в таблицах. Продолжение #64310 от kazalika. Закрывает #62485. #73950 (Alexey Milovidov). - Добавлен синтаксис
query1 PARALLEL WITH query2 PARALLEL WITH query3 ... PARALLEL WITH queryNдля DDL-запросов. Это означает, что запросы{query1, query2, ... queryN}могут выполняться параллельно друг с другом (что предпочтительно). #73983 (Vitaly Baranov). - Добавлен кэш в оперативной памяти для десериализованных гранул skipping‑индексов. Это должно ускорить повторные запросы, использующие skipping‑индексы. Размер нового кэша контролируется серверными настройками
skipping_index_cache_sizeиskipping_index_cache_max_entries. Изначальной мотивацией для добавления кэша были индексы векторного сходства, которые теперь работают значительно быстрее. #70102 (Robert Schulze). - Теперь встроенный веб‑интерфейс отображает индикатор прогресса во время выполнения запроса. Он позволяет отменять запросы. Он показывает общее количество записей и расширенную информацию о скорости. Таблица может отображаться постепенно по мере поступления данных. Включено HTTP‑сжатие. Отрисовка таблицы стала быстрее. Заголовок таблицы стал закреплённым. Он позволяет выделять ячейки и перемещаться по ним с помощью клавиш со стрелками. Исправлена проблема, при которой контур выделенной ячейки делал её меньше. Ячейки больше не расширяются при наведении мыши, а только при выборе. Момент прекращения отрисовки входящих данных теперь определяется на стороне клиента, а не сервера. Добавлена подсветка групп разрядов для чисел. Оформление интерфейса было обновлено и стало более выразительным. Интерфейс проверяет доступность сервера и корректность учётных данных и отображает версию сервера и время его работы. Значок облака теперь контурный во всех шрифтах, даже в Safari. Большие целые числа внутри вложенных типов данных отображаются лучше. Значения inf/nan отображаются корректно. Типы данных отображаются при наведении курсора на заголовок столбца. #74204 (Alexey Milovidov).
- Добавлена возможность по умолчанию создавать min-max (skipping) индексы для столбцов в таблицах MergeTree с помощью настроек
add_minmax_index_for_numeric_columns(для числовых столбцов) иadd_minmax_index_for_string_columns(для строковых столбцов). Пока обе настройки отключены, поэтому поведение ещё не изменилось. #74266 (Smita Kulkarni). - Добавлены поля
script_query_numberиscript_line_numberвsystem.query_log, в ClientInfo в нативном протоколе и в серверные логи. Это закрывает #67542. Благодарность pinsvin00 за то, что ранее инициировал разработку этой функциональности в #68133. #74477 (Alexey Milovidov). - Добавлена агрегатная функция
sequenceMatchEvents, которая возвращает временные метки совпавших событий для самой длинной цепочки событий, удовлетворяющей шаблону. #72349 (UnamedRus). - Добавлена функция
arrayNormalizedGini. #72823 (flynn). - Добавлена поддержка оператора
-дляDateTime64, что позволяет вычитать друг из друга значения типовDateTime64иDateTime. #74482 (Li Yin).
Экспериментальные возможности
- Тип данных
BFloat16готов к промышленной эксплуатации. #73840 (Alexey Milovidov).
Повышение производительности
- Оптимизирована функция
indexHint. Теперь столбцы, которые используются только как аргументы функцииindexHint, не читаются из таблицы. #74314 (Anton Popov). Если функцияindexHint— центральный элемент вашей корпоративной архитектуры данных, эта оптимизация спасёт вам жизнь. - Более точный учет настройки
max_joined_block_size_rowsдля алгоритма JOINparallel_hash, что помогает избежать повышенного потребления памяти по сравнению с алгоритмомhash. #74630 (Nikita Taranov). - Реализована оптимизация проталкивания предикатов на уровне плана запроса для шага
MergingAggregated. Это повышает производительность некоторых запросов при использовании анализатора. #74073 (Nikolai Kochetov). - Разбиение блоков левой таблицы по хэшу больше не выполняется на фазе probe JOIN-алгоритма
parallel_hash. #73089 (Nikita Taranov). - Оптимизирован формат входных данных RowBinary. Закрывает #63805. #65059 (Pavel Kruglov).
- Записывать части с уровнем 1, если
optimize_on_insertвключён. Это позволяет использовать ряд оптимизаций запросов сFINALдля только что записанных частей. #73132 (Anton Popov). - Ускорена десериализация строк за счёт некоторых низкоуровневых оптимизаций. #65948 (Nikita Taranov).
- При выполнении сравнения на равенство между записями, например во время слияний, начинайте сравнивать строки с тех столбцов, значения которых с наибольшей вероятностью различаются. #63780 (UnamedRus).
- Улучшена производительность операции grace hash join за счёт переупорядочивания правой таблицы соединения по ключам. #72237 (kevinyhzou).
- Разрешить
arrayROCAUCиarrayAUCPRвычислять частичную площадь под всей кривой, что позволит распараллелить вычисления на больших наборах данных. #72904 (Emmanuel). - Избегайте создания слишком большого количества простаивающих потоков. #72920 (Guo Wangyang).
- Не перечислять ключи blob-хранилища, если в табличной функции используется только расширение фигурных скобок. Закрывает #73333. #73518 (Konstantin Bogdanov).
- Оптимизация вычислений с коротким замыканием для функций, выполняемых над аргументами Nullable. #73820 (李扬).
- Не применять
maskedExecuteк столбцам, не являющимся функциями, улучшена производительность укороченного (short-circuit) выполнения. #73965 (lgbo). - Отключено автоматическое определение заголовков во входных форматах для
Kafka/NATS/RabbitMQ/FileLogдля повышения производительности. #74006 (Azat Khuzhin). - Выполнять конвейер с большей степенью параллелизма после агрегации с GROUPING SETS. #74082 (Nikita Taranov).
- Сокращена критическая секция в
MergeTreeReadPool. #74202 (Guo Wangyang). - Улучшена производительность параллельных реплик. Десериализация пакетов на инициаторе запроса для пакетов, не связанных с протоколом параллельных реплик, теперь всегда выполняется в потоке конвейера. Ранее десериализация могла выполняться в потоке, отвечающем за планирование конвейера, что могло снижать отзывчивость инициатора и задерживать выполнение конвейера. #74398 (Igor Nikonov).
- Повышена производительность крупных multi-запросов в Keeper. #74849 (Antonio Andelic).
- Используйте обёртки для логов как значения и не выделяйте их в куче. #74034 (Mikhail Artemenko).
- Восстанавливать подключения к репликам словарей MySQL и Postgres в фоновом режиме, чтобы не задерживать выполнение запросов к соответствующим словарям. #71101 (Yakov Olkhovskiy).
- Параллельные реплики использовали исторические данные о доступности реплик для оптимизации выбора реплики, но не увеличивали счетчик ошибок, когда подключение было недоступно. В этом PR счетчик ошибок реплики обновляется при её недоступности. #72666 (zoomxi).
- Добавлена настройка MergeTree
materialize_skip_indexes_on_merge, которая отключает создание skip‑индексов во время слияний. Это позволяет пользователям явно управлять тем, когда создаются skip‑индексы (черезALTER TABLE [..] MATERIALIZE INDEX [...]). Это может быть полезно, если создание skip‑индексов дорого (например, для векторных индексов сходства). #74401 (Robert Schulze). - Оптимизированы запросы к Keeper в Storage(S3/Azure)Queue. #74410 (Kseniia Sumarokova). #74538 (Kseniia Sumarokova).
- По умолчанию используется до
1000параллельных реплик. #74504 (Konstantin Bogdanov). - Улучшено повторное использование HTTP-сессий при чтении с диска S3 (#72401). #74548 (Julian Maicher).
Улучшения
- Добавлена поддержка использования SETTINGS в запросе CREATE TABLE с неявно указанным ENGINE и одновременного использования настроек движка и настроек запроса. #73120 (Raúl Marín).
- По умолчанию включена опция
use_hive_partitioning. #71636 (Yarik Briukhovetskyi). - Добавлена поддержка операций CAST и ALTER между типами JSON с различными параметрами. #72303 (Pavel Kruglov).
- Добавлена поддержка сравнения на равенство для значений столбца JSON. #72991 (Pavel Kruglov).
- Улучшено форматирование идентификаторов с JSON-подстолбцами, чтобы избежать лишних обратных кавычек. #73085 (Pavel Kruglov).
- Улучшена интерактивная работа с метриками. Исправлено неполное отображение метрик от параллельных реплик. Метрики теперь отображаются в порядке самого недавнего обновления, затем в лексикографическом порядке по имени. Устаревшие метрики не отображаются. #71631 (Julia Kartseva).
- Формат вывода JSON теперь по умолчанию удобочитаемый (pretty). Добавлена новая настройка
output_format_json_pretty_printдля управления этим поведением, по умолчанию она включена. #72148 (Pavel Kruglov). - Разрешить
LowCardinality(UUID)по умолчанию. На практике это оказалось удобным для клиентов ClickHouse Cloud. #73826 (Alexey Milovidov). - Улучшено сообщение, выводимое при установке. #73827 (Alexey Milovidov).
- Улучшено сообщение при сбросе пароля для ClickHouse Cloud. #73831 (Alexey Milovidov).
- Улучшено сообщение об ошибке для таблицы File, которая не поддерживает дозапись в файл. #73832 (Alexey Milovidov).
- Запрашивать подтверждение, если пользователь случайно пытается вывести двоичный формат (например, Native, Parquet, Avro) в терминал. Это закрывает #59524. #73833 (Alexey Milovidov).
- Подсвечивать пробелы в конце строк в форматах Pretty и Vertical в терминале для лучшей наглядности. Это поведение управляется настройкой
output_format_pretty_highlight_trailing_spaces. Первоначальную реализацию предложил Braden Burns в задаче #72996. Закрывает #71590. #73847 (Alexey Milovidov). clickhouse-clientиclickhouse-localбудут автоматически определять тип сжатия stdin, когда он перенаправлен из файла. Это устраняет проблему #70865. #73848 (Alexey Milovidov).- По умолчанию слишком длинные имена столбцов в pretty-форматах обрезаются. Это поведение настраивается параметрами
output_format_pretty_max_column_name_width_cut_toиoutput_format_pretty_max_column_name_width_min_chars_to_cut. Продолжение работы tanmaydatta в #66502. Закрывает #65968. #73851 (Alexey Milovidov). - Форматы
Prettyтеперь отображаются более наглядно: блоки объединяются, если с момента вывода предыдущего блока прошло мало времени. Это контролируется новыми настройкамиoutput_format_pretty_squash_consecutive_ms(по умолчанию 50 мс) иoutput_format_pretty_squash_max_wait_ms(по умолчанию 1000 мс). Продолжение #49537. Закрывает #49153. #73852 (Alexey Milovidov). - Добавлена метрика числа исходных частей, которые в данный момент сливаются. Исправляет #70809. #73868 (Alexey Milovidov).
- Подсвечивать столбцы в формате
Verticalпри выводе в терминал. Это можно отключить с помощью настройкиoutput_format_pretty_color. #73898 (Alexey Milovidov). - Улучшена совместимость с MySQL до уровня, при котором
mysqlsh(расширенный CLI для MySQL от Oracle) теперь может подключаться к ClickHouse. Это необходимо для упрощения тестирования. #73912 (Alexey Milovidov). - Форматы pretty могут отображать многострочные поля внутри ячейки таблицы, что повышает удобочитаемость. Это поведение включено по умолчанию и настраивается параметром
output_format_pretty_multiline_fields. Продолжение работы Volodyachan в #64094. Закрывает #56912. #74032 (Alexey Milovidov). - Сделать HTTP-заголовки X-ClickHouse доступными JavaScript в браузере. Это упрощает разработку приложений. #74180 (Alexey Milovidov).
- Формат
JSONEachRowWithProgressвключает события с метаданными, а также блокиtotalsиextremes. Он также включаетrows_before_limit_at_leastиrows_before_aggregation. Формат корректно выводит исключение, если оно возникает после частичных результатов. В информацию о прогрессе теперь включается затраченное время в наносекундах. В конце генерируется одно финальное событие прогресса. Прогресс во время выполнения запроса будет выводиться не чаще, чем это задано значением настройкиinteractive_delay. #74181 (Alexey Milovidov). - Иконка песочных часов в Play UI теперь будет плавно вращаться. #74182 (Alexey Milovidov).
- Даже если HTTP-ответ сжат, отправляйте пакеты, как только они поступают. Это позволяет браузеру получать пакеты прогресса и сжатые данные. #74201 (Alexey Milovidov).
- Если число выводимых записей больше N =
output_format_pretty_max_rows, вместо отображения только первых N строк мы обрежем результирующую таблицу посередине, показывая N/2 первых строк и N/2 последних строк. Продолжение #64200. Это закрывает #59502. #73929 (Alexey Milovidov). - Разрешено использование более общего алгоритма планирования соединений при включённом алгоритме hash join. #71926 (János Benjamin Antal).
- Добавлена возможность создавать индекс bloom_filter на столбцах с типом данных
DateTime64. #66416 (Yutong Xiao). - Когда одновременно включены
min_age_to_force_merge_secondsиmin_age_to_force_merge_on_partition_only, слияние частей будет игнорировать лимит на максимальный объём в байтах. #73656 (Kai Zhu). - Добавлены HTTP-заголовки в таблицу логов спанов OpenTelemetry для улучшения трассировки. #70516 (jonymohajanGmail).
- Добавлена поддержка записи файлов
orcв произвольном часовом поясе, а не только в часовом поясеGMT. #70615 (kevinyhzou). - Учитывать настройки планирования ввода-вывода при записи резервных копий в разных облаках. #71093 (János Benjamin Antal).
- Добавлен псевдоним
nameдля столбцаmetricвsystem.asynchronous_metrics. #71164 (megao). - Исторически по какой-то причине запрос
ALTER TABLE MOVE PARTITION TO TABLEпроверял праваSELECTиALTER DELETEвместо отдельногоALTER_MOVE_PARTITION. В этом PR используется именно этот тип доступа. Для совместимости это разрешение также будет неявно предоставляться, если предоставленыSELECTиALTER DELETE, но в будущих релизах такое поведение будет отменено. Закрывает #16403. #71632 (pufit). - Выбрасывать исключение при попытке материализовать столбец, входящий в ключ сортировки, вместо того чтобы допускать нарушение порядка сортировки. #71891 (Peter Nguyen).
- Скрытие секретов в
EXPLAIN QUERY TREE. #72025 (Yakov Olkhovskiy). - Добавлена поддержка логических целочисленных типов Parquet в «нативном» ридере. #72105 (Arthur Passos).
- Теперь в браузере интерактивно запрашиваются учетные данные, если для пользователя по умолчанию требуется пароль. В предыдущих версиях сервер возвращал HTTP 403; теперь он возвращает HTTP 401. #72198 (Alexey Milovidov).
- Преобразованы типы доступа
CREATE_USER,ALTER_USER,DROP_USER,CREATE_ROLE,ALTER_ROLE,DROP_ROLEиз глобальных в параметризованные. Теперь пользователи могут более точно выдавать права на управление доступом. #72246 (pufit). - Добавлен столбец
latest_fail_error_code_nameвsystem.mutations. Этот столбец необходим для введения новой метрики для «зависших» мутаций и использования ее при построении графиков ошибок, возникающих в облаке, а также, при необходимости, для добавления нового, менее «шумного» оповещения. #72398 (Miсhael Stetsyuk). - Уменьшено количество выделений памяти в запросе
ATTACH PARTITION. #72583 (Konstantин Morozov). - Сделано так, что лимит
max_bytes_before_external_sortтеперь зависит от общего потребления памяти запросом (ранее он соответствовал количеству байт в блоке сортировки для одного потока сортировки, теперь он имеет тот же смысл, что иmax_bytes_before_external_group_by— это общий лимит памяти для всего запроса для всех потоков). Также добавлена ещё одна настройка, управляющая размером блоков на диске —min_external_sort_block_bytes. #72598 (Azat Khuzhin). - Игнорировать ограничения по памяти в коллекторе трассировок. #72606 (Azat Khuzhin).
- Добавлены серверные настройки
dictionaries_lazy_loadиwait_dictionaries_load_at_startupвsystem.server_settings. #72664 (Christoph Wurm). - Добавлена возможность указывать настройку
max_backup_bandwidthв запросахBACKUP/RESTORE. #72665 (Christoph Wurm). - Понижен уровень логирования для сообщений о появляющихся реплицированных частях в движке ReplicatedMergeTree, чтобы уменьшить объем логов, генерируемых в реплицированном кластере. #72876 (mor-akamai).
- Улучшено извлечение общих подвыражений в дизъюнкциях. Теперь можно упрощать результирующее фильтрующее выражение, даже если нет общего подвыражения для всех дизъюнктов. Продолжение #71537. #73271 (Dmitry Novik).
- В хранилищах
S3Queue/AzureQueueдобавлена возможность задавать настройки для таблиц, созданных без них. #73283 (Kseniia Sumarokova). - Добавлена настройка
least_greatest_legacy_null_behavior(по умолчанию:false), которая определяет, должны ли функцииleastиgreatestпри наличии аргументовNULLбезусловно возвращатьNULL(еслиtrue) или игнорировать такие аргументы (еслиfalse). #73344 (Robert Schulze). - Использовать мультизапросы Keeper в потоке очистки ObjectStorageQueueMetadata. #73357 (Antonio Andelic).
- Когда ClickHouse выполняется внутри cgroup, мы по‑прежнему будем собирать асинхронные метрики по всей системе, связанные с нагрузкой на систему, планированием процессов, памятью и т. д. Они могут давать полезные сигналы, когда ClickHouse является единственным процессом на хосте с высоким потреблением ресурсов. #73369 (Nikita Taranov).
- В хранилище
S3Queueдобавлена возможность переноса старых упорядоченных таблиц, созданных до версии 24.6, в новую структуру с бакетами. #73467 (Kseniia Sumarokova). - Добавлена
system.azure_queueпо аналогии с существующейsystem.s3queue. #73477 (Kseniia Sumarokova). - Функция
parseDateTime64(и её варианты) теперь выдаёт корректные результаты для входных дат до 1970 года и после 2106 года. Пример:SELECT parseDateTime64InJodaSyntax('2200-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS'). #73594 (zhanglistar). - Исправлены некоторые проблемы удобства использования
clickhouse-disks, отмеченные пользователями. Закрывает #67136. #73616 (Daniil Ivanik). - Добавлена возможность изменять параметры коммита в хранилище S3(Azure)Queue:
max_processed_files_before_commit,max_processed_rows_before_commit,max_processed_bytes_before_commit,max_processing_time_sec_before_commit. #73635 (Kseniia Sumarokova). - В хранилище S3(Azure)Queue агрегирован прогресс между источниками для сопоставления с настройками ограничения количества коммитов. #73641 (Kseniia Sumarokova).
- Поддержка базовых настроек в запросах
BACKUPиRESTORE. #73650 (Vitaly Baranov). - Учитывать
output_format_compression_levelпри выводе в Parquet. #73651 (Arthur Passos). - Добавлено чтение Apache Arrow
fixed_size_listкакArrayвместо обработки этого типа как неподдерживаемого. #73654 (Julian Meyers). - Добавлены два движка резервного копирования:
Memory(хранит резервные копии в пределах текущей пользовательской сессии) иNull(нигде не сохраняет резервные копии), предназначенные для тестирования. #73690 (Vitaly Baranov). concurrent_threads_soft_limit_numиconcurrent_threads_soft_limit_num_ratio_to_coresмогут быть изменены без перезапуска сервера. #73713 (Sergei Trifonov).- Добавлена поддержка расширенных числовых типов (
Decimal, большие целые числа) в функцияхformatReadable. #73765 (Raúl Marín). - Добавлена поддержка TLS для совместимости с сетевым протоколом Postgres. #73812 (scanhex12).
- Функция
isIPv4Stringвозвращала true, если за корректным IPv4-адресом следовал нулевой байт, хотя в этом случае она должна возвращать false. Продолжение #65387. #73946 (Alexey Milovidov). - Код ошибки в протоколе MySQL wire приведён в соответствие с MySQL. Продолжение #56831. Закрывает #50957. #73948 (Alexey Milovidov).
- Добавлена настройка
validate_enum_literals_in_opearators, которая проверяет литералы enum в операторахINиNOT INна соответствие типу enum и выбрасывает исключение, если литерал не является допустимым значением enum. #73985 (Vladimir Cherkasov). - В хранилище
S3(Azure)Queueвсе файлы (в одном пакете, определённом настройками коммита) фиксируются в одной транзакции Keeper. #73991 (Kseniia Sumarokova). - Отключено определение заголовков для исполняемых UDF и словарей (это могло приводить к ошибке вида Function 'X': wrong result, expected Y row(s), actual Y-1). #73992 (Azat Khuzhin).
- Добавлена опция
distributedдляEXPLAIN PLAN.ТеперьEXPLAIN distributed=1 ...добавляет удалённый план к шагамReadFromParallelRemote*. #73994 (Nikolai Kochetov). - Теперь используется корректный тип возвращаемого значения для not/xor с аргументами Dynamic. #74013 (Pavel Kruglov).
- Теперь можно изменять
add_implicit_sign_column_constraint_for_collapsing_engineпосле создания таблицы. #74014 (Christoph Wurm). - Поддержка подстолбцов в запросе SELECT для материализованного представления. #74030 (Pavel Kruglov).
- Теперь есть три простых способа задать пользовательскую строку приглашения в
clickhouse-client: 1) через параметр командной строки--prompt, 2) в конфигурационном файле, через настройку<prompt>[...]</prompt>, и 3) также в конфигурационном файле, через настройки для отдельных подключений<connections_credentials><prompt>[...]</prompt></connection_credentials>. #74168 (Christoph Wurm). - Автоматически определять необходимость защищённого соединения при подключении к порту 9440 в клиенте ClickHouse. #74212 (Christoph Wurm).
- Аутентификация пользователей только по имени пользователя для http_handlers (раньше пользователю нужно было также указывать пароль). #74221 (Azat Khuzhin).
- Поддержка альтернативных языков запросов PRQL и KQL была помечена как экспериментальная. Чтобы использовать их, задайте настройки
allow_experimental_prql_dialect = 1иallow_experimental_kusto_dialect = 1. #74224 (Robert Schulze). - Расширена поддержка возврата типа Enum по умолчанию в большем числе агрегатных функций. #74272 (Raúl Marín).
- В
OPTIMIZE TABLEтеперь можно указывать ключевое словоFORCEкак альтернативу существующему ключевому словуFINAL. #74342 (Robert Schulze). - Добавлена метрика
IsServerShuttingDown, которая нужна для срабатывания оповещения, если завершение работы сервера занимает слишком много времени. #74429 (Miсhael Stetsyuk). - В EXPLAIN добавлены имена таблиц Iceberg. #74485 (alekseev-maksim).
- Добавлено более понятное сообщение об ошибке при использовании RECURSIVE CTE со старым анализатором. #74523 (Raúl Marín).
- Отображать расширенные сообщения об ошибках в
system.errors. #74574 (Vitaly Baranov). - Добавлена возможность использования пароля для взаимодействия клиента с clickhouse-keeper. Эта функция не особенно полезна, если вы настроите корректную SSL-конфигурацию для сервера и клиента, но в некоторых случаях всё же может пригодиться. Длина пароля не может превышать 16 символов. Это не связано с моделью аутентификации Keeper. #74673 (alesapin).
- Добавлен код ошибки для перезагрузчика конфигурации. #74746 (Garrett Thomas).
- Добавлена поддержка IPv6-адресов в табличных функциях и движках MySQL и PostgreSQL. #74796 (Mikhail Koviazin).
- Реализована оптимизация укороченного вычисления для
divideDecimal. Исправлена #74280. #74843 (Kevin Mingtarja). - Теперь пользователей можно задавать в скриптах запуска. #74894 (pufit).
- Добавлена поддержка SAS-токенов Azure. #72959 (Azat Khuzhin).
Исправление ошибки (некорректное поведение, заметное пользователям, в официальном стабильном релизе)
- Устанавливать уровень сжатия Parquet только в том случае, если это поддерживается используемым кодеком сжатия. #74659 (Arthur Passos).
- Исправлена регрессия, из-за которой при использовании локалей сортировки с модификаторами возникала ошибка. Например, теперь запрос
SELECT arrayJoin(['kk 50', 'KK 01', ' KK 2', ' KK 3', 'kk 1', 'x9y99', 'x9y100']) item ORDER BY item ASC COLLATE 'tr-u-kn-true-ka-shiftedработает корректно. #73544 (Robert Schulze). - Исправлена ошибка, из-за которой с помощью keeper-client было невозможно создать узел SEQUENTIAL. #64177 (Duc Canh Le).
- Исправлен некорректный подсчёт символов в функциях
position. #71003 (思维). - Операции
RESTOREдля сущностей доступа требовали больше прав, чем было нужно, из‑за некорректной обработки частичных отзывов привилегий. Этот PR исправляет проблему. Закрывает #71853. #71958 (pufit). - Исключена пауза после
ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE. Теперь используются корректные настройки для планирования фоновых задач. #72024 (Aleksei Filatov). - Исправлена обработка пустых кортежей в некоторых форматах ввода и вывода (например, Parquet, Arrow). #72616 (Michael Kolupaev).
- Операторы GRANT SELECT/INSERT на уровне столбцов для баз данных и таблиц с подстановочными символами теперь вызывают ошибку. #72646 (Johann Gan).
- Исправлена проблема, из‑за которой пользователь не может выполнить
REVOKE ALL ON *.*из‑за неявно выданных привилегий на целевой объект доступа. #72872 (pufit). - Исправлено форматирование положительных значений часового пояса в скалярной функции formatDateTime. #73091 (ollidraese).
- Исправлено определение исходного порта при установлении соединения через PROXYv1 и включённом
auth_use_forwarded_address— ранее ошибочно использовался порт прокси. Добавлена функцияcurrentQueryID(). #73095 (Yakov Olkhovskiy). - Пробрасывать настройки формата в
NativeWriterвTCPHandler, чтобы такие настройки, какoutput_format_native_write_json_as_string, применялись корректно. #73179 (Pavel Kruglov). - Исправлено аварийное завершение работы StorageObjectStorageQueue. #73274 (Kseniia Sumarokova).
- Исправлен редкий сбой в обновляемом материализованном представлении во время остановки сервера. #73323 (Michael Kolupaev).
- Теперь плейсхолдер
%fфункцииformatDateTimeвсегда генерирует шесть цифр долей секунды. Это делает его поведение совместимым с функцией MySQLDATE_FORMAT. Предыдущее поведение можно восстановить с помощью настройкиformatdatetime_f_prints_scale_number_of_digits = 1. #73324 (ollidraese). - Исправлена фильтрация по столбцу
_etagпри чтении из хранилищаs3и при использовании табличной функции. #73353 (Anton Popov). - Исправлена ошибка
Not-ready Set is passed as the second argument for function 'in', возникающая при использовании конструкцииIN (subquery)в выраженииJOIN ONсо старым анализатором. #73382 (Nikolai Kochetov). - Исправлена подготовка к схлопыванию для столбцов Dynamic и JSON. Ранее в некоторых случаях новые типы могли быть записаны в shared variant/shared data, даже если ограничение по количеству типов/путей ещё не было достигнуто. #73388 (Pavel Kruglov).
- Проверяем размеры на некорректные значения во время двоичного декодирования типов, чтобы избежать чрезмерных выделений памяти. #73390 (Pavel Kruglov).
- Исправлена логическая ошибка при чтении из однорепликового кластера при включённых параллельных репликах. #73403 (Michael Kolupaev).
- Исправлена работа ObjectStorageQueue с ZooKeeper и старыми версиями Keeper. #73420 (Antonio Andelic).
- Реализовано исправление, необходимое для включения hive-разбиения по умолчанию. #73479 (Yarik Briukhovetskyi).
- Исправлена гонка данных при создании индекса векторного сходства. #73517 (Antonio Andelic).
- Исправлена ошибка сегментации (segfault), возникавшая, когда источник словаря содержал функцию с некорректными данными. #73535 (Yarik Briukhovetskyi).
- Исправлена логика повторных попыток при неудачной вставке в хранилище S3(Azure)Queue. Закрывает #70951. #73546 (Kseniia Sumarokova).
- Исправлена ошибка в функции
tupleElement, которая могла возникать в некоторых случаях для кортежей с элементами типаLowCardinalityпри включённой настройкеoptimize_functions_to_subcolumns. #73548 (Anton Popov). - Исправлен разбор маски
enum, после которой следует диапазон. Устраняет проблему #73473. #73569 (Konstantin Bogdanov). - Исправлена проблема, при которой параметр parallel_replicas_for_non_replicated_merge_tree игнорировался во вложенных запросах к нереплицируемым таблицам. #73584 (Igor Nikonov).
- Исправлено исключение std::logical_error, выбрасываемое, когда задачу не удаётся запланировать. Обнаружено в стресс-тестах. #73629 (Alexander Gololobov).
- Не интерпретировать запросы в
EXPLAIN SYNTAX, чтобы избежать логических ошибок, связанных с некорректной стадией обработки распределённых запросов. Исправляет #65205. #73634 (Dmitry Novik). - Исправлена возможная несогласованность данных в динамическом столбце Dynamic. Исправлена потенциальная логическая ошибка
Nested columns sizes are inconsistent with local_discriminators column size. #73644 (Pavel Kruglov). - Исправлена ошибка
NOT_FOUND_COLUMN_IN_BLOCKв запросах сFINALиSAMPLE. Исправлен некорректный результат в запросах SELECT сFINALк таблицамCollapsingMergeTreeи включены оптимизации дляFINAL. #73682 (Anton Popov). - Исправлена ошибка, приводившая к сбою в LIMIT BY COLUMNS. #73686 (Raúl Marín).
- Исправлена ошибка, из-за которой при принудительном использовании обычной проекции и запросе, в точности совпадающем с определением проекции, эта проекция не выбиралась и в результате возникала ошибка. #73700 (Shichao Jin).
- Исправлена десериализация структуры Dynamic/Object, что могло приводить к исключениям CANNOT_READ_ALL_DATA. #73767 (Pavel Kruglov).
- Пропускать файл
metadata_version.txtпри восстановлении частей из резервной копии. #73768 (Vitaly Baranov). - Исправлена ошибка сегментации при приведении к типу Enum с использованием LIKE. #73775 (zhanglistar).
- Исправлена проблема, из-за которой бакет S3 Express не использовался как диск. #73777 (Sameer Tamsekar).
- Разрешено объединять строки с некорректными значениями столбца
signв таблицах CollapsingMergeTree. #73864 (Christoph Wurm). - Исправлена ошибка, возникавшая при выполнении запроса
DDLс отключенной репликой. #73876 (Tuan Pham Anh). - Исправлена редкая ошибка сравнения типов
map(), возникавшая из-за возможности созданияMapбез явных имён ('keys','values') для вложенного кортежа. #73878 (Yakov Olkhovskiy). - Игнорировать оконные функции при разрешении предложения GROUP BY ALL. Исправляет #73501. #73916 (Dmitry Novik).
- Исправлено поведение неявных привилегий (ранее они работали как подстановочный шаблон). #73932 (Azat Khuzhin).
- Исправлено повышенное потребление памяти при создании вложенных Maps. #73982 (Pavel Kruglov).
- Исправлена обработка вложенного JSON с пустыми ключами. #73993 (Pavel Kruglov).
- Исправление: псевдоним мог не добавляться в проекцию, если на него ссылался другой псевдоним, а сами псевдонимы были выбраны в обратном порядке. #74033 (Yakov Olkhovskiy).
- Теперь ошибки «object not found» в Azure игнорируются при инициализации диска plain_rewritable. #74059 (Julia Kartseva).
- Исправлено поведение
anyиanyLastпри работе с типами Enum и пустой таблицей. #74061 (Joanna Hulboj). - Исправлена проблема, возникающая, когда пользователь указывает именованные параметры в табличном движке Kafka. #74064 (Yarik Briukhovetskyi).
- Исправлена работа изменения настроек хранилища
S3Queueпри смене префикса "s3queue_" на отсутствие префикса и наоборот. #74075 (Kseniia Sumarokova). - Добавлена настройка
allow_push_predicate_ast_for_distributed_subqueries. Она включает проталкивание предикатов (predicate push-down) на основе AST для распределённых запросов с использованием анализатора. Это временное решение, которое будет использоваться до тех пор, пока не появится поддержка распределённых запросов с сериализацией плана запроса. Закрывает #66878 #69472 #65638 #68030 #73718. #74085 (Nikolai Kochetov). - Исправляет проблему, при которой после #73095 порт может присутствовать в поле forwarded_for, что приводит к невозможности разрешить имя хоста, если в него включён порт. #74116 (Yakov Olkhovskiy).
- Исправлено некорректное форматирование оператора
ALTER TABLE (DROP STATISTICS ...) (DROP STATISTICS ...). #74126 (Han Fei). - Исправление проблемы #66112. #74128 (Anton Ivashkin).
- Больше нельзя использовать
Loopв качестве движка таблицы вCREATE TABLE. Эта комбинация ранее приводила к сегфолтам. #74137 (Yarik Briukhovetskyi). - Устранена уязвимость безопасности для предотвращения SQL-инъекций в табличных функциях PostgreSQL и SQLite. #74144 (Pablo Marcos).
- Исправлена ошибка, приводившая к сбою при чтении подстолбца из сжатой таблицы движка Memory. Исправляет #74009. #74161 (Nikita Taranov).
- Исправлен бесконечный цикл, возникавший при запросах к system.detached_tables. #74190 (Konstantin Morozov).
- Исправлена логическая ошибка в s3queue при пометке файла как завершившегося с ошибкой. #74216 (Kseniia Sumarokova).
- Исправлены настройки нативного копирования (
allow_s3_native_copy/allow_azure_native_copy) при выполненииRESTOREиз базовой резервной копии. #74286 (Azat Khuzhin). - Исправлена ошибка, возникавшая, когда число отсоединённых таблиц в базе данных кратно max_block_size. #74289 (Konstantin Morozov).
- Исправлено копирование через ObjectStorage (например, S3), если для источника и назначения используются разные учетные данные. #74331 (Azat Khuzhin).
- Исправлено определение опции «use the Rewrite method in the JSON API» для нативного копирования в GCS. #74338 (Azat Khuzhin).
- Исправлено некорректное вычисление
BackgroundMergesAndMutationsPoolSize(оно в два раза превышало реальное значение). #74509 (alesapin). - Исправлена ошибка утечки наблюдателей Keeper при включённой функции Cluster Discovery. #74521 (RinChanNOW).
- Исправлена проблема с выравниванием памяти, обнаруженная UBSan #74512. #74534 (Arthur Passos).
- Исправлена проблема параллельной очистки KeeperMap при создании таблицы. #74568 (Antonio Andelic).
- Не удалять неиспользуемые столбцы проекций в подзапросах при наличии
EXCEPTилиINTERSECTдля сохранения корректного результата запроса. Исправляет #73930. Исправляет #66465. #74577 (Dmitry Novik). - Исправлены запросы
INSERT SELECTмежду таблицами со столбцами типаTupleпри включённой разрежённой сериализации. #74698 (Anton Popov). - Функция
rightработала некорректно для константного отрицательного смещения. #74701 (Daniil Ivanik). - Исправлена проблема, из‑за которой вставка gzip‑сжатых данных иногда завершалась сбоем из‑за некорректной распаковки на стороне клиента. #74707 (siyuan).
- Частичные операции REVOKE при использовании грантов с подстановочными символами могли отзывать больше привилегий, чем ожидалось. Закрывает #74263. #74751 (pufit).
- Исправление в Keeper: устранена проблема с чтением записей журнала с диска. #74785 (Antonio Andelic).
- Исправлена проверка прав для SYSTEM REFRESH/START/STOP VIEW: теперь для выполнения запроса к конкретному представлению не требуется иметь эти права на
*.*, достаточно прав только на это представление. #74789 (Alexander Tokmakov). - Ранее функция
hasColumnInTableне учитывала столбцы-алиасы. Исправлена, чтобы также работать со столбцами-алиасами. #74841 (Bharat Nallan). - Исправлена ошибка FILE_DOESNT_EXIST, возникающая при слиянии частей данных для таблицы с пустым столбцом в Azure Blob Storage. #74892 (Julia Kartseva).
- Исправлено имя столбца проекции при соединении временных таблиц, закрыт #68872. #74897 (Vladimir Cherkasov).
Улучшения сборки/тестирования/упаковки
- Универсальный скрипт установки теперь предлагает выполнить установку даже на macOS. #74339 (Alexey Milovidov).