Изменения, обратно несовместимые
- Формат вывода 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). JSONEachRowWithProgressбудет записывать информацию о прогрессе при каждом его обновлении. В предыдущих версиях прогресс показывался только после каждого блока результата, из-за чего был практически бесполезен. Изменён способ отображения прогресса: нулевые значения больше не показываются. Имейте в виду, что прогресс отправляется даже при частых обновлениях. Это может создавать значительный объём трафика. Также имейте в виду, что при сжатом выводе прогресс не сбрасывается. Это закрывает #70800. #73834 (Alexey Milovidov).- источник словаря
mysqlбольше не выполняет запросSHOW TABLE STATUS, поскольку он не даёт никакой полезной информации для таблиц InnoDB ни в одной из современных версий MySQL. Это закрывает #72636. Изменение обратно совместимо, но помещено в эту категорию, чтобы вы могли его заметить. #73914 (Alexey Milovidov). - Таблицы
Mergeбудут унифицировать структуру базовых таблиц, используя объединение их столбцов и выводя общие типы. Это закрывает #64864. Это закрывает #35307. В некоторых случаях это изменение может быть несовместимо с предыдущими версиями. Например, когда у таблиц нет общего типа, но при этом всё же возможно преобразование к типу первой таблицы, как в случае UInt64 и Int64 или любого числового типа и String. Если вы хотите вернуться к прежнему поведению, установитеmerge_table_max_tables_to_look_for_schema_inferenceв1или задайтеcompatibilityравным24.12либо более ранней версии. #73956 (Alexey Milovidov). - Для запросов
CHECK TABLEтеперь требуется отдельный grantCHECK. В предыдущих версиях для выполнения таких запросов было достаточно grantSHOW TABLES. Однако запросCHECK TABLEможет быть ресурсоёмким, и обычные ограничения на сложность запросов, применяемые к запросамSELECT, на него не распространяются. Это создавало потенциальную возможность для DoS. #74471 (Alexey Milovidov). - Проверять, что все столбцы в materialized view соответствуют целевой таблице, если
allow_materialized_view_with_bad_selectравноfalse. #74481 (Christoph Wurm). - Функция
h3ToGeo()теперь возвращает результаты в порядке(lat, lon)(это стандартный порядок для геометрических функций). Пользователи, которые хотят сохранить прежний порядок результатов(lon, lat), могут установить настройкуh3togeo_lon_lat_result_order = true. #74719 (Manish Gill). - Добавлены форматы
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). - Запрещён TRUNCATE DATABASE для баз данных Replicated. #76651 (Bharat Nallan).
- Параллельные реплики теперь по умолчанию отключены при отключённом анализаторе, независимо от настройки
compatibility. Это поведение по-прежнему можно изменить, явно установивparallel_replicas_only_with_analyzerвfalse. #77115 (Igor Nikonov). - Больше нельзя использовать
NaNилиinfв качестве значений параметров с плавающей точкой. #77546 (Yarik Briukhovetskyi). - Исправлены случаи, когда
dateTruncиспользуется с отрицательными аргументами date/datetime. #77622 (Yarik Briukhovetskyi). - Устаревшая интеграция с MongoDB была удалена. Настройка сервера
use_legacy_mongodb_integrationустарела и больше ничего не делает. #77895 (Robert Schulze). - Улучшена проверка SummingMergeTree: агрегация теперь пропускается для столбцов, используемых в ключах партиционирования или сортировки. #78022 (Pervakov Grigorii).
Новые возможности
- Добавлен кэш в оперативной памяти для десериализованных гранул индексов пропуска данных. Это должно ускорить повторные запросы, использующие индексы пропуска данных. Размер нового кэша задаётся настройками сервера
skipping_index_cache_sizeиskipping_index_cache_max_entries. Изначально этот кэш был создан для индексов векторного сходства, которые теперь работают значительно быстрее. #70102 (Robert Schulze). - Новая реализация кэша страниц в пространстве пользователя, которая позволяет кэшировать данные в памяти процесса, а не полагаться на кэш страниц ОС. Это полезно, когда данные хранятся в удалённой виртуальной файловой системе без использования файлового кэша локальной файловой системы. #70509 (Michael Kolupaev).
- Добавлена настройка для выполнения запросов к таблицам Iceberg на момент определённой временной метки. #71072 (Brett Hoerner).
- Реализовано отсечение партиций в таблицах Iceberg для связанных со временем операций преобразования партиций в Iceberg. #72044 (Daniil Ivanik).
- Добавлена возможность по умолчанию создавать min-max-индексы (skipping) для столбцов в таблицах MergeTree с помощью настроек
enable_minmax_index_for_all_numeric_columns(для числовых столбцов) иenable_minmax_index_for_all_string_columns(для строковых столбцов). Пока обе настройки отключены, поэтому поведение пока не изменилось. #72090 (Smita Kulkarni). - Добавлена агрегатная функция sequenceMatchEvents, которая возвращает временные метки событий, совпавших с самой длинной цепочкой событий по шаблону регулярного выражения. #72349 (UnamedRus).
- Команды
SELECTиVIEWтеперь поддерживают псевдонимы, например:SELECT b FROM (SELECT number, number*2 FROM numbers(2)) AS x (a, b);. Благодаря этому запрос TPC-H 15 можно выполнять без изменений. #72480 (Yarik Briukhovetskyi). - Добавлена новая настройка
enable_adaptive_memory_spill_scheduler, которая позволяет нескольким grace JOIN в рамках одного запроса отслеживать их совокупное потребление памяти и при необходимости адаптивно выгружать данные во внешнее хранилище, чтобы избежать MEMORY_LIMIT_EXCEEDED. #72728 (lgbo). - Добавлена функция
arrayNormalizedGini. #72823 (flynn). - Добавлена поддержка десятичных типов данных с низкой кардинальностью, исправлена ошибка #72256. #72833 (zhanglistar).
- Когда одновременно включены
min_age_to_force_merge_secondsиmin_age_to_force_merge_on_partition_only, слияние частей будет игнорировать ограничение на максимальный размер в байтах. #73656 (Kai Zhu). - Добавлена поддержка чтения значений 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. Это означает, что подзапросы{query1, query2, ... queryN}могут выполняться параллельно друг с другом (и это желательно). #73983 (Vitaly Baranov). - Теперь в интерфейсе Play есть индикатор прогресса во время выполнения запроса. Он позволяет отменять запросы. Он показывает общее число записей и расширенную информацию о скорости. Таблица может отрисовываться по мере поступления данных. Добавлено 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). - Добавлена поддержка оператора вычитания для DateTime64, чтобы можно было выполнять вычитание между значениями DateTime64, а также DateTime. #74482 (Li Yin).
- Добавлена поддержка движка таблиц DeltaLake для AzureBlobStorage. Исправлено #68043. #74541 (Smita Kulkarni).
- Добавлена настройка bind_host для указания исходного IP-адреса подключений клиента ClickHouse. #74741 (Todd Yocum).
- Добавлена возможность применять незавершённые (не материализованные фоновым процессом) мутации при выполнении запросов
SELECTсразу после отправки. Это можно включить с помощью настройкиapply_mutations_on_fly. #74877 (Anton Popov). - Исправлены некоторые ранее непредусмотренные случаи, когда datetime-аргументы функции
toStartOfIntervalимеют отрицательные значения. Это сделано путём реализации новой функции toStartOfIntervalAllowNegative, которая делает почти то же самое, но возвращает только Date32/DateTime64. #74933 (Yarik Briukhovetskyi). - Добавлена новая функция initialQueryStartTime. Она возвращает время начала текущего запроса. Это значение одинаково на всех сегментах при выполнении распределённого запроса. #75087 (Roman Lomonosov).
- Добавлено поле parametrized_view_parameters в system.tables. Закрывает https://github.com/clickhouse/clickhouse/issues/66756. #75112 (NamNguyenHoai).
- Разрешено изменять комментарий к базе данных. Закрывает #73351 ### Запись в документации об изменениях, заметных для пользователей. #75622 (NamNguyenHoai).
- Добавлена возможность выполнять ATTACH таблиц без уровня базы данных (что позволяет избежать обходного решения с UUID). #75788 (Azat Khuzhin).
- Добавлена настройка сервера
concurrent_threads_scheduler, управляющая распределением слотов CPU между параллельно выполняющимися запросами. Может быть установлена вround_robin(прежнее поведение) илиfair_round_robin, чтобы устранить проблему несправедливого распределения CPU между INSERT- и SELECT-запросами. #75949 (Sergei Trifonov). - Восстановлен кодек QPL, удалённый в v24.10 из-за проблем с лицензией. #76021 (Konstantin Bogdanov).
- Добавлена функция
arraySymmetricDifference. Она возвращает все элементы из нескольких массивов-аргументов, которые встречаются не во всех аргументах. Пример:SELECT arraySymmetricDifference([1, 2], [2, 3])возвращает[1, 3]. (issue #61673). #76231 (Filipp Abapolov). - Добавлена агрегатная функция
estimatecompressionratio— см. #70801. #76661 (Tariq Almawash). - События profile events
FilterTransformPassedRowsиFilterTransformPassedBytesбудут показывать число строк и байт, отфильтрованных при выполнении запроса. #76662 (Onkar Deshpande). - Добавлена хеш-функция keccak256, которая широко используется в реализациях блокчейна, особенно в системах на базе EVM. #76669 (Arnaud Briche).
- SCRAM SHA256 и обновление аутентификации в wire-протоколе Postgres. #76839 (scanhex12).
- Эта функция добавляет возможность задавать список заголовков, которые передаются из заголовков клиентского запроса во внешний HTTP-аутентификатор. #77054 (inv2004).
- Добавлена поддержка
IcebergMetadataFilesCache, который будет хранить файлы manifest/list и metadata.json в одном кэше. #77156 (Han Fei). - Добавлены функции
arrayLevenshteinDistance,arrayLevenshteinDistanceWeightedиarraySimilarity. #77187 (Mikhail f. Shiryaev). - Добавлены три новые функции:
icebergTruncateсогласно спецификации https://iceberg.apache.org/spec/#truncate-transform-details, а такжеtoYearNumSinceEpochиtoMonthNumSinceEpoch. Добавлена поддержка преобразованияtruncateдля отсечения партиций в движкеIceberg. #77403 (alesapin). - Позволяет пользователю запрашивать состояние таблицы Iceberg на предыдущий момент времени. #77439 (Daniil Ivanik).
- Добавлено планирование слотов CPU для рабочих нагрузок; подробности см. на странице https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling. #77595 (Sergei Trifonov).
- Функция
hasAll()теперь может использовать полнотекстовые индексы пропуска данных tokenbf_v1 и ngrambf_v1. #77662 (UnamedRus). - Тип данных
JSONготов к использованию в продакшне. См. https://jsonbench.com/. Типы данныхDynamicиVaraintготовы к использованию в продакшне. #77785 (Alexey Milovidov). - Добавлен кэш в памяти для десериализованных индексов векторного сходства. Это должно ускорить повторные запросы ANN-поиска. Размер нового кэша определяется настройками сервера
vector_similarity_index_cache_sizeиvector_similarity_index_cache_max_entries. Эта возможность пришла на смену возможности кэширования skipping index в более ранних релизах. #77905 (Shankar Iyer). - Добавлены функции sparseGrams и sparseGramsHashes с поддержкой UTF8. Автор: scanhex12. #78176 (Pervakov Grigorii).
- Добавлена функция
toInterval. Эта функция принимает 2 аргумента (valueиunit) и преобразует значение в определённый типInterval. #78723 (Andrew Davis).
Экспериментальные возможности
- Добавлена возможность автоматически выполнять слияния с очисткой для целых партиций по истечении настраиваемого тайм-аута с помощью новой настройки
enable_replacing_merge_with_cleanup_for_min_age_to_force_merge. #76440 (Christoph Wurm). - Добавлена поддержка Unity Catalog для таблиц DeltaLake поверх AWS S3 и локальной файловой системы. #76988 (alesapin).
- Добавлена экспериментальная интеграция с каталогом AWS Glue для таблиц Iceberg. #77257 (alesapin).
Повышение производительности
- Повысьте производительность с помощью ленивой проекции, чтобы избежать чтения неиспользуемых столбцов. #55518 (Xiaozhe Yu).
- Сравнение строк теперь начинается со столбцов, которые с наибольшей вероятностью различаются. #63780 (UnamedRus).
- Оптимизирован формат ввода RowBinary. Закрывает #63805. #65059 (Pavel Kruglov).
- Ускорена десериализация строк благодаря низкоуровневой оптимизации. #65948 (Nikita Taranov).
- Атрибут
preserve_mostприменён в некоторых местах кода. #67778 (Nikita Taranov). - Реализован кэш условий запроса для повышения производительности запросов при повторном использовании условий. Диапазон части данных, не соответствующей условию, запоминается в памяти как временный индекс. Последующие запросы будут использовать этот индекс. закрывает #67768 ### Запись в документации об изменениях, видимых пользователю. #69236 (zhongyuankai).
- Добавлена поддержка асинхронной prefetch-операции ввода-вывода для
NativeORCBlockInputFormat, что повышает общую производительность за счёт сокрытия задержек удалённого ввода-вывода. В моём тестовом случае ускорение могло достигать 1,47 раза. #70534 (李扬). - Улучшена производительность grace hash JOIN за счёт перегруппировки правой таблицы в JOIN по ключам. #72237 (kevinyhzou).
- Вернули учёт
ttl_only_drop_partsприmaterialize ttl; читать только необходимые столбцы для пересчёта TTL и удалять части, заменяя их пустой частью. #72751 (Andrey Zvonov). - Добавлена возможность для
arrayROCAUCиarrayAUCPRвычислять площадь части кривой, чтобы этот расчёт можно было распараллелить на очень больших датасетах. #72904 (Emmanuel). - Не создавайте слишком много бездействующих потоков. #72920 (Guo Wangyang).
- Разбиение блоков левой таблицы по хешу было убрано из этапа probe алгоритма JOIN
parallel_hash. #73089 (Nikita Taranov). - Не перечислять ключи в blob storage, если в табличной функции используется только раскрытие фигурных скобок. Закрывает #73333. #73518 (Konstantin Bogdanov).
- Int256 и UInt256 заменены на встроенный в clang тип i256 для арифметических вычислений в соответствии с тестами в #70502. #73658 (李扬).
- Добавлен быстрый путь для функций, у которых все типы аргументов — числовые. Исправлены проблемы с производительностью в https://github.com/ClickHouse/ClickHouse/pull/72258. #73820 (李扬).
- Не применять
maskedExecuteк столбцам, не являющимся функциями; улучшена производительность вычислений с коротким замыканием. #73965 (lgbo). - Отключено определение заголовков для Kafka/NATS/RabbitMQ/FileLog для повышения производительности. #74006 (Azat Khuzhin).
- Используйте обёртки для логирования по значению и не выделяйте их на куче. #74034 (Mikhail Artemenko).
- Конвейер теперь выполняется с более высокой степенью параллелизма после агрегации с grouping sets. #74082 (Nikita Taranov).
- Уменьшена критическая секция в
MergeTreeReadPool. #74202 (Guo Wangyang). - Оптимизирована функция
indexHint. Теперь столбцы, используемые только в качестве аргументов функцииindexHint, не считываются из таблицы. #74314 (Anton Popov). - Повышение производительности параллельных реплик. Десериализация пакетов, не относящихся к протоколу параллельных реплик, на инициаторе запроса теперь всегда выполняется в потоке конвейера. Раньше это могло происходить в потоке, отвечающем за планирование конвейера, что снижало отзывчивость инициатора и могло задерживать выполнение конвейера. #74398 (Igor Nikonov).
- Исправлен расчёт объёма памяти для столбцов
LowCardinality. #74688 (Nikita Taranov). - Улучшает производительность чтения JSON-столбца целиком в частях Wide из S3. Это достигается за счет добавления операций предварительного чтения при десериализации префиксов подстолбцов, кэша десериализованных префиксов и параллельной десериализации префиксов подстолбцов. Это ускоряет чтение JSON-столбца из S3 в 4 раза для запросов вида
SELECT data FROM tableи примерно в 10 раз для запросов видаSELECT data FROM table LIMIT 10. #74827 (Pavel Kruglov). - Предварительно выделять память для async inserts, чтобы повысить производительность. #74945 (Ilya Golshtein).
- Исправлено повторное предварительное выделение памяти в
ConcurrentHashJoin, если оптимизатор меняет местами стороны JOIN. #75149 (Nikita Taranov). - Устранена излишняя конкуренция в
parallel_hash, когдаmax_rows_in_join = max_bytes_in_join = 0. #75155 (Nikita Taranov). - Небольшое улучшение в некоторых сценариях JOIN: количество выходных строк теперь вычисляется заранее, и под них резервируется память. #75376 (Alexander Gololobov).
- Файлы метаданных
plain_rewritableимеют небольшой размер и не требуют большого буфера по умолчанию. Используйте буфер записи размера, подходящего для указанного пути, чтобы эффективнее использовать память при большом количестве активных частей. ### Запись в документации об изменениях, заметных пользователю. #75758 (Julia Kartseva). - В некоторых случаях (например, если столбец типа Array пуст) части данных могут содержать пустые файлы. Мы можем пропускать запись пустых объектов в ObjectStorage и хранить только метаданные для таких файлов, если таблица находится на диске с раздельными хранилищами метаданных и объектов. #75860 (Alexander Gololobov).
- Было обнаружено, что управление параллелизмом могло приводить к несправедливому распределению CPU между операциями INSERT и SELECT. Когда все слоты CPU безусловно выделяются (без конкуренции) операциям INSERT с
max_threads= 1, операции SELECT с высокими значениямиmax_threadsстрадают от низкой производительности, поскольку используют только один поток. #75941 (Sergei Trifonov). - Небольшая оптимизация в wrapInNullable, позволяющая избежать ненужного выделения памяти под null map. #76489 (李扬).
- Улучшена производительность функций min/max для Decimal32/Decimal64/DateTime64. #76570 (李扬).
- Активно вытесняйте данные из кэша при удалении частей. Не допускайте роста кэша до максимального размера, если объём данных меньше. #76641 (Alexey Milovidov).
- Компиляция запросов (настройка
compile_expressions) теперь учитывает тип машины. Это существенно ускоряет такие запросы. #76753 (Robert Schulze). - Оптимизирована функция arraySort. #76850 (李扬).
- Ускорено построение результата JOIN благодаря девиртуализации вызовов
col->insertFrom(). #77350 (Alexander Gololobov). - Объединять марки одной и той же части и записывать их в кэш условий запроса за один раз, чтобы уменьшить количество блокировок. #77377 (zhongyuankai).
- Оптимизирован ORDER BY для одного Nullable-столбца или столбца с низкой мощностью. #77789 (李扬).
- Отключена настройка
filesystem_cache_prefer_bigger_buffer_size, когда кэш используется в пассивном режиме, например при слияниях. #77898 (Kseniia Sumarokova). - Реализована тривиальная оптимизация для
count()в Iceberg. Теперь запросы сcount()без каких-либо фильтров должны выполняться быстрее. Закрывает #77639. #78090 (alesapin). - Добавлена поддержка отсечения данных Iceberg на основе значений lower_bound и uppert_bound для столбцов. Исправляет #77638. #78242 (alesapin).
- Оптимизировано использование памяти в NativeReader. #78442 (Azat Khuzhin).
- Тривиальная оптимизация: не выполнять rewrite
count(if())в countIf, если требуетсяCAST. Закрывает #78564. #78565 (李扬).
Улучшения
- Уменьшено количество запросов к Keeper за счёт отказа от одиночных запросов
getтам, где доступенmultiRead, поскольку при увеличении числа реплик они могли создавать значительную нагрузку на Keeper. #56862 (Nikolay Degterinsky). - Добавлена поддержка SSL-аутентификации для MySQL с использованием именованных коллекций. Закрывает #59111. #59452 (Nikolay Degterinsky).
- Повышена производительность новой инфраструктуры анализатора за счёт хранения
ColumnPtrвместоFieldвConstantNode. Связано с #62245. #63198 (Dmitry Novik). - Отклонять запросы, когда сервер перегружен. Решение принимается на основе отношения времени ожидания (
OSCPUWaitMicroseconds) ко времени активной работы (OSCPUVirtualTimeMicroseconds). Запрос отклоняется с некоторой вероятностью, когда это отношение находится в диапазоне междуmin_os_cpu_wait_time_ratio_to_throwиmax_os_cpu_wait_time_ratio_to_throw(это настройки уровня запроса). #63206 (Alexey Katsman). - Освобождайте блоки как можно раньше, чтобы снизить потребление памяти. #65647 (lgbo).
- Для таблицы
processors_profile_logтеперь используется конфигурация по умолчанию с TTL 30 дней. #66139 (Ilya Yatsishin). - Теперь можно создавать индекс
bloom_filterдля столбцов с типом данных DateTime64. #66416 (Yutong Xiao). - Добавить бакеты задержек и использовать их для отслеживания времени до первого байта при чтении/записи и времени подключения для запросов S3. Это позволит позже использовать собранные данные для расчета приблизительных перцентилей и корректировки тайм-аутов. #69783 (Alexey Katsman).
- Запросы, передаваемые в хранилище
Executable, больше не ограничиваются однопоточным выполнением. #70084 (yawnt). - Добавлены HTTP-заголовки в таблицу журналов спанов OpenTelemetry для повышения трассируемости. #70516 (jonymohajanGmail).
- Добавлена поддержка записи ORC-файлов с пользовательским часовым поясом вместо обязательного использования часового пояса
GMT. #70615 (kevinyhzou). - Заменены табличные функции на их варианты
-Cluster, если включены параллельные реплики. Исправление #65024. #70659 (Konstantin Bogdanov). - При записи резервных копий между облаками теперь учитываются настройки планирования ввода-вывода. #71093 (János Benjamin Antal).
- Восстанавливать соединение с репликами словарей MySQL и Postgres в фоновом режиме, чтобы это не задерживало запросы к соответствующим словарям. #71101 (Yakov Olkhovskiy).
- В system.asynchronous_metrics добавлено альтернативное имя метрики. #71164 (megao).
- Обновления refreshable materialized views теперь отображаются в
system.query_log. #71333 (Michael Kolupaev). - Совместно оценивать bloom-фильтры Parquet и индексы min/max. Это необходимо для корректной поддержки выражения
x = 3 or x > 5, где data = [1, 2, 4, 5]. #71383 (Arthur Passos). - Улучшения интерактивных метрик. Исправлено неполное отображение метрик из параллельных реплик. Метрики отображаются в порядке времени последнего обновления, а затем лексикографически по имени. Устаревшие метрики не отображаются. #71631 (Julia Kartseva).
- Исторически по какой-то причине запрос
ALTER TABLE MOVE PARTITION TO TABLEпроверял праваSELECTиALTER DELETEвместо отдельного праваALTER_MOVE_PARTITION. В этом PR начал использоваться этот тип доступа. Для совместимости это разрешение также будет неявно выдаваться, если выданыSELECTиALTER DELETE, но в будущих релизах это поведение будет убрано. Закрывает #16403. #71632 (pufit). - По умолчанию включает параметр
use_hive_partitioning. #71636 (Yarik Briukhovetskyi). - Сгенерировать исключение при попытке материализовать столбец в ключе сортировки вместо того, чтобы допускать нарушение порядка сортировки. Однако это не решает #71777. #71891 (Peter Nguyen).
- Разрешено использовать более общий алгоритм планирования JOIN, когда включен алгоритм hash join. #71926 (János Benjamin Antal).
- Скрытие секретов в
EXPLAIN QUERY TREE. #72025 (Yakov Olkhovskiy). - Разрешено использовать настраиваемый disk для хранения файлов метаданных баз данных и таблиц. Имя disk можно задать через параметр
database_disk.diskв config. #72027 (Tuan Pham Anh). - Добавлена поддержка логических целочисленных типов Parquet в нативном считывателе. #72105 (Arthur Passos).
- Сделать JSON output format красиво отформатированным по умолчанию. Добавить новую настройку
output_format_json_pretty_printдля управления этим и включить её по умолчанию. #72148 (Pavel Kruglov). - Теперь браузер интерактивно запрашивает учетные данные, если для пользователя default требуется пароль. В предыдущих версиях сервер возвращал HTTP 403; теперь он возвращает HTTP 401. #72198 (Alexey Milovidov).
- Этот PR переводит типы доступа
CREATE_USER,ALTER_USER,DROP_USER,CREATE_ROLE,ALTER_ROLE,DROP_ROLEиз глобальных в параметризованные. Это означает, что теперь вы можете точнее выдавать привилегии на управление доступом. #72246 (pufit). - Разрешена поддержка имен сегментов в конфигурации кластера. #72276 (MikhailBurdukov).
- Добавлена поддержка CAST и ALTER между типами JSON с разными параметрами. #72303 (Pavel Kruglov).
- Добавлен столбец
latest_fail_error_code_nameвsystem.mutations. Этот столбец нужен, чтобы добавить новую метрику для зависших мутаций и использовать её для построения графиков ошибок, возникающих в облаке, а также, при необходимости, добавить новый, менее шумный алерт. #72398 (Miсhael Stetsyuk). - Сокращено количество выделений памяти при присоединении партиций. #72583 (Konstantin Morozov).
- Теперь предел
max_bytes_before_external_sortзависит от общего потребления памяти запросом (раньше это было количество байтов в блоке сортировки для одного потока сортировки, теперь этот параметр имеет тот же смысл, что иmax_bytes_before_external_group_by— это общий лимит памяти для всего запроса по всем потокам). Также добавлена ещё одна настройка для управления размером блока на диске —min_external_sort_block_bytes. #72598 (Azat Khuzhin). - Коллектор трассировок теперь игнорирует ограничения памяти. #72606 (Azat Khuzhin).
- Добавлена поддержка подстолбцов в ключе сортировки MergeTree и индексах пропуска данных. #72644 (Pavel Kruglov).
- В
system.server_settingsдобавлены настройки сервераdictionaries_lazy_loadиwait_dictionaries_load_at_startup. #72664 (Christoph Wurm). - В список настроек, которые можно указывать в запросах
BACKUP/RESTORE, добавлена настройкаmax_backup_bandwidth. #72665 (Christoph Wurm). - Параллельные реплики использовали историческую информацию о доступности реплик, чтобы улучшить их выбор, но не обновляли счётчик ошибок реплики, когда соединение было недоступно. Этот PR обновляет счётчик ошибок реплики, когда соединение недоступно. #72666 (zoomxi).
- Понижен уровень журналирования при появлении реплицируемых частей в движке ReplicatedMergeTree, чтобы уменьшить объем журналов, генерируемых в реплицированном кластере. #72876 (mor-akamai).
- Многие новые возможности потребуют лучшей инкапсуляции кода (в том, что касается метаданных Iceberg) и более качественных абстракций. #72941 (Daniil Ivanik).
- Добавлена поддержка сравнения на равенство для значений в JSON-столбце. #72991 (Pavel Kruglov).
- Улучшено оформление идентификаторов с подстолбцами JSON, чтобы избежать лишних обратных кавычек. #73085 (Pavel Kruglov).
- Логирование условий
PREWHEREна уровнеTest. #73116 (Vladimir Cherkasov). - Поддержка SETTINGS с неявным ENGINE и смешиванием настроек движка и запроса. #73120 (Raúl Marín).
- Записывать части с уровнем 1, если
optimize_on_insertвключен. Это позволяет применять несколько оптимизаций для запросов сFINALк только что записанным частям. #73132 (Anton Popov). - Для запроса вида
WHERE a<b AND b<c AND c<5можно сгенерировать новые условия сравнения (a<5 and b<5), чтобы улучшить фильтрацию. #73164 (Shichao Jin). - Улучшено выделение общего выражения в дизъюнкциях. Разрешено упрощать итоговое фильтрующее выражение, даже если общего подвыражения для всех дизъюнктов нет. Продолжение #71537. #73271 (Dmitry Novik).
- В
S3(Azure)Queueтеперь можно добавлять настройки для таблиц, созданных без них. #73283 (Kseniia Sumarokova). - Clickhouse-client теперь поддерживает завершение запроса по Ctrl+D. Теперь можно использовать Ctrl+D вместо ввода точки с запятой и нажатия Enter. Кроме того, в однострочном режиме Ctrl+D теперь работает как Enter. #73293 (Xiaozhe Yu).
- Добавлена настройка
least_greatest_legacy_null_behavior(по умолчанию:false), которая определяет, как функцииleastиgreatestобрабатывают аргументыNULL: безусловно возвращаютNULL(еслиtrue) или игнорируют их (еслиfalse). #73344 (Robert Schulze). - Использование мультизапросов Keeper в потоке очистки ObjectStorageQueueMetadata. #73357 (Antonio Andelic).
- Новый драйвер MongoDB теперь используется по умолчанию. Пользователи, которые хотят и дальше использовать устаревший драйвер, могут установить для настройки сервера
use_legacy_mongodb_integrationзначение true. #73359 (Robert Schulze). - Когда ClickHouse работает в cgroup, мы по-прежнему будем собирать асинхронные метрики всей системы, связанные с системной нагрузкой, планированием процессов, памятью и т. д. Они могут быть полезным сигналом, если ClickHouse — единственный процесс на хосте, интенсивно потребляющий ресурсы. #73369 (Nikita Taranov).
- В S3Queue теперь можно переносить старые упорядоченные таблицы, созданные до версии 24.6, в новую структуру с бакетами. #73467 (Kseniia Sumarokova).
- Добавлена таблица
system.azure_queue, аналогичная существующейsystem.s3queue. #73477 (Kseniia Sumarokova). - Исправлена регрессия, из-за которой при использовании локалей collation с модификаторами возникала ошибка. Например, теперь работает
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). - Добавлена поддержка типа Nullable(JSON). #73556 (Pavel Kruglov).
- Функция
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).
- Добавлена возможность изменять настройки commit в хранилище S3(Azure)Queue. (Настройки commit: 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 агрегируется суммарный прогресс по источникам для сопоставления с настройками лимита commit. #73641 (Kseniia Sumarokova).
- Поддерживаются основные настройки в запросе
BACKUP/RESTORE. #73650 (Vitaly Baranov). - Учитывается
output_format_compression_levelпри выводе в формате Parquet. #73651 (Arthur Passos). - Добавлена поддержка чтения arrow fixed_size_list как Array вместо того, чтобы считать его неподдерживаемым типом. #73654 (Julian Meyers).
- Этот PR добавляет два движка резервного копирования:
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).
- Учитывается сопоставление столбцов без учёта регистра для полей в столбцах-кортежах. Закрывает https://github.com/apache/incubator-gluten/issues/8324. #73780 (李扬).
- Добавлена поддержка TLS для wire protocol Postgres. #73812 (scanhex12).
- Разрешено
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).
- Тип данных
BFloat16готов к использованию в продакшне. #73840 (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). - Исправлено сопоставление типов для SQLite (целочисленные типы — в
int64, типы с плавающей запятой — вfloat64). #73853 (Joanna Hulboj). - Добавлена метрика числа исходных частей, которые в данный момент находятся в процессе слияния. Это закрывает #70809. #73868 (Alexey Milovidov).
- Столбцы в формате
Verticalтеперь подсвечиваются при выводе в терминал. Это можно отключить с помощью настройкиoutput_format_pretty_color. #73898 (Alexey Milovidov). - Улучшили совместимость с MySQL до такого уровня, что теперь
mysqlsh(многофункциональный CLI-клиент MySQL от Oracle) может подключаться к ClickHouse. Это нужно для упрощения тестирования. #73912 (Alexey Milovidov). - Если число выходных записей больше N =
output_format_pretty_max_rows, то вместо отображения только первых N строк выходная таблица будет обрезана посередине: будут показаны N/2 первых строк и N/2 последних строк. Продолжение #64200. Закрывает #59502. #73929 (Alexey Milovidov). - Функция
isIPv4Stringвозвращала true, если за корректным IPv4-адресом следовал нулевой байт, хотя в этом случае должна была возвращать false. Продолжение #65387. #73946 (Alexey Milovidov). - Обеспечена совместимость кода ошибки в протоколе MySQL с MySQL. Продолжение #56831. Закрывает #50957. #73948 (Alexey Milovidov).
- Добавлена настройка
validate_enum_literals_in_opearatorsдля проверки enum-литералов в операторах, таких какINиNOT IN, на соответствие типу enum и генерации исключения, если литерал не является допустимым значением enum. #73985 (Vladimir Cherkasov). - В хранилище
S3(Azure)Queueвсе файлы фиксируются (в рамках одного пакета, определяемого настройками commit) в одной транзакции Keeper. #73991 (Kseniia Sumarokova). - Отключено автоопределение заголовка для исполняемых UDF и словарей (это могло приводить к ошибке Function ‘X’: неверный результат, ожидалось Y строк, фактически 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-запросе materialized view. #74030 (Pavel Kruglov).
- Форматы Pretty могут отображать многострочные поля в ячейках таблицы, что повышает читаемость. Эта возможность включена по умолчанию и управляется параметром
output_format_pretty_multiline_fields. Продолжение работы Volodyachan в #64094. Это закрывает #56912. #74032 (Alexey Milovidov). - Добавлена поддержка оптимизации
predicate-push-downна уровне плана запроса для шагаMergingAggregated. Это повышает производительность некоторых запросов с новым анализатором. #74073 (Nikolai Kochetov). - Теперь в
clickhouse-clientесть три простых способа задать пользовательский промпт: 1. через параметр командной строки--prompt, 2. в файле конфигурации через настройку<prompt>[...]</prompt>, и 3. также в файле конфигурации через настройки для отдельных подключений<connections_credentials><prompt>[...]</prompt></connection_credentials>. #74168 (Christoph Wurm). - Изменён успешный статус ответа Prometheus remote write с 200/OK на 204/NoContent. #74170 (Michael Dempsey).
- Открыли доступ к HTTP-заголовкам X-ClickHouse из JavaScript в браузере. Это упрощает разработку приложений. #74180 (Alexey Milovidov).
- Формат
JSONEachRowWithProgressбудет включать события с метаданными, а также итоги и экстремумы. Он также включаетrows_before_limit_at_leastиrows_before_aggregation. Формат корректно выводит Исключение, если оно поступает после частичных результатов. Прогресс теперь включает прошедшее время в наносекундах. В конце отправляется ещё одно финальное событие прогресса. Прогресс во время выполнения запроса будет выводиться не чаще, чем значение настройкиinteractive_delay. #74181 (Alexey Milovidov). - Значок песочных часов будет плавно вращаться в интерфейсе Play. #74182 (Alexey Milovidov).
- Даже если HTTP-ответ сжат, отправляйте пакеты сразу после их получения. Это позволяет браузеру получать пакеты Прогресс и сжатые данные. #74201 (Alexey Milovidov).
- Добавлена возможность перезагружать
max_remote_read_network_bandwidth_for_serveиmax_remote_write_network_bandwidth_for_serverна лету, без перезапуска сервера. #74206 (Kai Zhu). - Автоматическое определение защищённого соединения при подключении к порту 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). - Добавлена настройка MergeTree
materialize_skip_indexes_on_merge, которая отключает создание индексов пропуска данных при слиянии. Это позволяет явно управлять тем, когда создаются индексы пропуска данных (черезALTER TABLE [..] MATERIALIZE INDEX [...]). Это может быть полезно, если построение индексов пропуска данных требует значительных затрат (например, для индексов векторного сходства). #74401 (Robert Schulze). - Поддержка подстолбцов в выражениях по умолчанию и материализованных выражениях. #74403 (Pavel Kruglov).
- Оптимизированы запросы к Keeper в Storage(S3/Azure)Queue. #74410 (Kseniia Sumarokova).
- Добавлена метрика IsServerShuttingDown, необходимая для срабатывания оповещения, если завершение работы сервера занимает слишком много времени. #74429 (Miсhael Stetsyuk).
- В EXPLAIN добавлены названия таблиц Iceberg. #74485 (alekseev-maksim).
- По умолчанию используется до
1000параллельных реплик. #74504 (Konstantin Bogdanov). - Улучшено сообщение об ошибке при использовании RECURSIVE CTE со старым анализатором. #74523 (Raúl Marín).
- Оптимизированы запросы к Keeper в Storage(S3/Azure)Queue. #74538 (Kseniia Sumarokova).
- Улучшено повторное использование HTTP-сеансов при чтении с S3-диска (#72401). #74548 (Julian Maicher).
- Показывать подробные сообщения об ошибках в
system.errors. #74574 (Vitaly Baranov). - Для всех типов реплицируемых задач включен механизм задержки повторных попыток. Это позволит снизить нагрузку на 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). - Более точный учёт настройки
max_joined_block_size_rowsв алгоритме JOINparallel_hash. Это помогает избежать повышенного потребления памяти по сравнению с алгоритмомhash. #74630 (Nikita Taranov). - Добавлена поддержка параметра конфигурации
dfs.client.use.datanode.hostnameв libhdfs3. #74635 (Mikhail Tiukavkin). - Исправлена ошибка Invalid: кодек ‘snappy’ не поддерживает установку уровня сжатия. #74659 (Arthur Passos).
- Разрешено использовать пароль для взаимодействия клиента с clickhouse-keeper. Эта возможность не очень полезна, если для сервера и клиента настроена корректная SSL-конфигурация, но в некоторых случаях всё же может пригодиться. Пароль не может быть длиннее 16 символов. Это не связано с моделью аутентификации Keeper. #74673 (alesapin).
- Разрешено использовать пути к blob-объектам для расчёта контрольных сумм при создании резервной копии. #74729 (Vitaly Baranov).
- Используйте динамическое сегментирование для JOIN, если ключ JOIN является префиксом PK в обеих частях. Эта оптимизация включается настройкой
query_plan_join_shard_by_pk_ranges(по умолчанию отключена). #74733 (Nikolai Kochetov). - Добавлен код ошибки для модуля перезагрузки конфигурации. #74746 (Garrett Thomas).
- Добавлена поддержка IPv6-адресов в табличных функциях и движках для MySQL и PostgreSQL. #74796 (Mikhail Koviazin).
- Параметры кодека Gorilla теперь всегда будут сохраняться в метаданных таблицы в файле .sql. Это закрывает: #70072. #74814 (Nikita Mikhaylov).
- Реализована оптимизация короткого вычисления для
divideDecimal. Исправлено #74280. #74843 (Kevin Mingtarja). - Повышена производительность больших мультизапросов в Keeper. #74849 (Antonio Andelic).
- Теперь пользователей можно указывать в скриптах запуска. #74894 (pufit).
- Получение частей в ALTER TABLE FETCH PARTITION теперь выполняется параллельно (размер пула потоков задаётся параметром
max_fetch_partition_thread_pool_size). #74978 (Azat Khuzhin). - В
system.query_cacheдобавлен столбец Query id (issue #68205). #74982 (NamNguyenHoai). - Вернули поддержку протокола SSH. Исправили несколько критических уязвимостей, так что использовать пользовательский пейджер или указывать
server-logs-fileбольше нельзя. По умолчанию отключили возможность передавать параметры клиента через переменные окружения (она по-прежнему доступна черезssh-server.enable_client_options_passingв config.xml). Добавили поддержку таблицы прогресса, отмены запроса, автодополнения, прогресса событий профилирования, stdin и опцииsend_logs_level. Это закрывает: #74340. #74989 (Nikita Mikhaylov). - Исправлено форматирование исключений с использованием пользовательского формата, если они возникают при интерпретации запроса. В предыдущих версиях исключения форматировались в формате по умолчанию, а не в формате, указанном в запросе. Это исправляет #55422. #74994 (Alexey Milovidov).
- Реализованы улучшения в разборе (разбор Sequence ID: добавлена возможность разбирать идентификаторы последовательности в файлах manifest, а разбор метаданных Avro: парсер метаданных Avro переработан так, чтобы его можно было легко расширять в будущем). #75010 (Daniil Ivanik).
- Разрешено отменять запросы
ALTER TABLE ... FREEZE ...с помощьюKILL QUERYи по тайм-ауту(max_execution_time). #75016 (Kirill). - Добавлена поддержка
groupUniqArrayArrayMapв видеSimpleAggregateFunction. #75034 (Miel Donkers). - Добавлена поддержка подготовленных операторов в протоколе Postgres wire. #75035 (scanhex12).
- Скрыты настройки учетных данных каталога в движке базы данных
Iceberg. Закрывает #74559. #75080 (Kseniia Sumarokova). - В BuzzHouse добавлено несколько недостающих возможностей: операторы
ILIKE,REGEXP,<=>иIS NOT DISTINCT FROM. #75168 (Pedro Ferreira). - Значение настройки
min_chunk_bytes_for_parallel_parsingбольше не может быть нулевым. Это исправляет проблему: #71110. #75239 (Nikita Mikhaylov). 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).
- Добавлена поддержка знака микросекунды (U+00B5) в функции
parseTimeDelta. Теперь и знак микросекунды (U+00B5), и греческая буква мю (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). - Улучшение Keeper: для повышения производительности отключено вычисление дайджеста при фиксации в хранилище в памяти. Его можно включить с помощью параметра конфигурации
keeper_server.digest_enabled_on_commit. Дайджест по-прежнему вычисляется при предварительной обработке запросов. #75490 (Antonio Andelic). - Проталкивание выражения фильтра из условия JOIN ON, где это возможно. #75536 (Vladimir Cherkasov).
- Более понятные сообщения об ошибках при синтаксических ошибках. Ранее, если запрос был слишком большим, а token, длина которого превышала лимит, был очень длинным строковым литералом, сообщение о причине терялось между двумя примерами этого очень длинного token. Исправлена проблема, из-за которой запрос с UTF-8 некорректно обрезался в сообщении об ошибке. Исправлено избыточное заключение фрагментов запроса в кавычки. Это закрывает #75473. #75561 (Alexey Milovidov).
- В хранилище
S3(Azure)Queueдобавлены profile events. #75618 (Kseniia Sumarokova). - Отключена передача настроек от сервера клиенту (
send_settings_to_client=false) для совместимости (позже эта возможность будет заново реализована в виде настройки клиента для более удобного использования). #75648 (Michael Kolupaev). - Добавлен параметр конфигурации
memory_worker_correct_memory_tracker, позволяющий корректировать внутренний трекер памяти на основе информации из разных источников, периодически считываемой в фоновом потоке. #75714 (Antonio Andelic). - Использование Analyzer в PrometheusRemoteReadProtocol. #75729 (Dmitry Novik).
- Мы поддерживаем типы метрик Gauge/Counter. Однако для некоторых метрик (например, для времени ответа запросов к Keeper) этого недостаточно, поэтому требуется поддержка гистограмм. Интерфейс практически повторяет клиент Prometheus: достаточно вызвать
observe(value), чтобы увеличить счётчик в бакете, соответствующем значению. Метрики гистограммы доступны через system.histogram_metrics. #75736 (Miсhael Stetsyuk). - В
system.processesдобавлен столбецnormalized_query_hash. Примечание: хотя его можно без труда вычислить на лету с помощью функцииnormalizedQueryHash, это нужно для подготовки к последующим изменениям. #75756 (Alexey Milovidov). - Запрос к
system.tablesне будет генерировать исключение, даже если существует таблицаMerge, созданная над базой данных, которой больше не существует. МетодgetTotalRowsудалён из таблицHive, поскольку мы не разрешаем ему выполнять сложные операции. #75772 (Alexey Milovidov). - В веб-интерфейсе теперь доступна интерактивная навигация по базе данных. #75777 (Alexey Milovidov).
- Разрешено комбинировать в storage policy диски только для чтения и диски с возможностью чтения и записи (в виде нескольких томов или нескольких дисков). Это позволяет читать данные со всего тома, при этом для вставки будет предпочтителен диск с возможностью записи (то есть storage policy Copy-on-Write). #75862 (Azat Khuzhin).
- Из ORDER BY по умолчанию для system.opentelemetry_span_log удалён trace_id. #75907 (Azat Khuzhin).
- Шифрование (XML-атрибут
encrypted_by) теперь можно применять к любому конфигурационному файлу (config.xml, users.xml, вложенные конфигурационные файлы). Ранее оно работало только для файла config.xml верхнего уровня. #75911 (Mikhail Gorshkov). - Сохранять start_time/end_time резервных копий с точностью до микросекунд. #75929 (Aleksandr Musorin).
- Добавлена метрика
MemoryTrackingUncorrected, показывающая значение внутреннего глобального трекера памяти, не скорректированное по RSS. #75935 (Antonio Andelic). - Ленивое вычисление размеров столбцов и индексов в MergeTree. #75938 (Pavel Kruglov).
- Преобразование JOIN в
IN-подзапрос, если результирующий столбец связан с левой таблицей, сначала требует шага обеспечения уникальности, поэтому по умолчанию отключено до тех пор, пока этот шаг не будет добавлен позже. #75942 (Shichao Jin). - Добавлена настройка сервера
throw_on_unknown_workload, которая позволяет выбрать поведение для запроса, если для настройкиworkloadзадано неизвестное значение: либо разрешить неограниченный доступ (по умолчанию), либо сгенерировать исключениеRESOURCE_ACCESS_DENIED. Это полезно, чтобы принудительно использовать планирование рабочих нагрузок для всех запросов. #75999 (Sergei Trifonov). - Новый экспериментальный движок таблицы Kafka теперь полностью поддерживает feature flags Keeper. #76004 (János Benjamin Antal).
- Не выполняйте Rewrite подстолбцов в getSubcolumn в ARRAY JOIN без необходимости. #76018 (Pavel Kruglov).
- Повторные попытки при ошибках координации во время загрузки таблиц. #76020 (Alexander Tokmakov).
- Улучшена таблица
system.warningsи добавлены динамические предупреждения, которые можно добавлять, обновлять и удалять. #76029 (Bharat Nallan). - Реализована поддержка сброса отдельных журналов в SYSTEM FLUSH LOGS. #76132 (Raúl Marín).
- Улучшена страница сервера
/binary. Вместо кривой Мортона теперь используется кривая Гильберта. В квадрате отображаются адреса в объёме 512 МБ, благодаря чему он заполняется лучше (в предыдущих версиях адреса заполняли только половину квадрата). Цвет адресов теперь определяется по имени библиотеки, а не функции. Разрешена немного более широкая прокрутка за пределы области. #76192 (Alexey Milovidov). - Этот PR делает невозможным выполнение запроса
ALTER USER user1 ADD PROFILES a, DROP ALL PROFILES, поскольку по порядку все операцииDROPдолжны идти первыми. #76242 (pufit). - Различные улучшения для SYNC REPLICA (более информативные сообщения об ошибках, улучшенные тесты, проверки согласованности). #76307 (Azat Khuzhin).
- Повторные попытки выполнения запросов с предложением ON CLUSTER в случае TOO_MANY_SIMULTANEOUS_QUERIES. #76352 (Patrick Galbraith).
- Значение по умолчанию для
output_format_pretty_max_rowsизменено с 10000 на 1000. Думаю, так удобнее в использовании. #76407 (Alexey Milovidov). - Поддержка обновления для таблиц MergeTree в режиме только для чтения. #76467 (Alexey Milovidov).
- Используется корректный fallback, если при резервном копировании многокомпонентное копирование в S3 завершается ошибкой Access Denied. Многокомпонентное копирование может приводить к ошибке Access Denied, когда резервное копирование выполняется между бакетами с разными учетными данными. #76515 (Antonio Andelic).
- Ускорено завершение работы серверов ClickHouse (убрана задержка в 2,5 с). #76550 (Azat Khuzhin).
- В system.errors добавлен query_id. Связанный тикет #75815. #76581 (Vladimir Baikov).
- Обновили librdkafka до версии 2.8.0 и улучшили последовательность завершения работы таблиц Kafka, сократив задержки при удалении таблиц и перезапуске сервера.
engine=Kafkaбольше не выполняет явный выход из consumer group при удалении таблицы. Вместо этого consumer остается в группе, пока не будет автоматически удален послеsession_timeout_ms(по умолчанию: 45 секунд) бездействия. #76621 (filimonov). - Исправлена валидация настроек S3-запросов. #76658 (Vitaly Baranov).
- Устранено избыточное выделение памяти в ReadBufferFromS3 и других буферах удалённого чтения; их потребление памяти сокращено вдвое. #76692 (Sema Checherinda).
- Добавлена поддержка типа JSON и чтения подстолбцов из представлений. #76903 (Pavel Kruglov).
- Добавлена поддержка преобразования
UInt128в IPv6. Это позволяет выполнять операциюbitAndи арифметические операции над IPv6, а затем преобразовывать результат обратно в IPv6. Закрывает #76752. Это также позволяет преобразовывать результат операцииbitAndнад IPv6 обратно в IPv6. См.: https://github.com/ClickHouse/ClickHouse/pull/57707. #76928 (Muzammil Abdul Rehman). - В системных таблицах, таких как
server_settingsилиsettings, есть столбецdefault, что удобно. Только вmerge_tree_settingsиreplicated_merge_tree_settingsэтого столбца нет. #76942 (Diego Nieto). - По умолчанию специальные значения Bool в текстовых форматах внутри типа Variant не разбираются. Это поведение можно включить с помощью настройки
allow_special_bool_values_inside_variant. #76974 (Pavel Kruglov). - Добавлена поддержка настройки времени ожидания низкоприоритетного запроса для каждой задачи на уровне сеанса и сервера. #77013 (VicoWu).
- Добавлен
ProfileEvents::QueryPreemptedс той же логикой, что и уCurrentMetrics::QueryPreempted. #77015 (VicoWu). - Ранее реплицируемая база данных могла записывать в журналы учетные данные, указанные в запросе. Это поведение исправлено. Это закрывает: #77123. #77133 (Nikita Mikhaylov).
- Обновлён zstd с 1.5.5 до 1.5.7, что даёт довольно ощутимый прирост производительности. #77137 (Pradeep Chhetri).
- Разрешена операция ALTER TABLE DROP PARTITION для диска plain_rewritable. #77138 (Julia Kartseva).
- Добавлена возможность перед выполнением слияний/мутаций в случае репликации с нулевым копированием делать случайную паузу до 500 мс вне зависимости от размера частей. #77165 (Alexey Katsman).
- Добавлена поддержка атомарного переименования при использовании
TRUNCATEсINTO OUTFILE. Исправляет #70323. #77181 (Onkar Deshpande). - Используйте FixedString для типов PostgreSQL CHARACTER, CHAR и BPCHAR. #77304 (Pablo Marcos).
- Добавлена возможность явно указывать файл метаданных, который нужно читать для Iceberg, с помощью настройки storage/table function
iceberg_metadata_file_path. Исправляет #47412. #77318 (alesapin). - Добавлена поддержка хранения файлов метаданных баз данных на удалённом диске. #77365 (Tuan Pham Anh).
- Реализовано сравнение значений типа данных JSON. Теперь объекты JSON можно сравнивать так же, как значения типа Map. #77397 (Pavel Kruglov).
- Изменение отменено. #77399 (Yarik Briukhovetskyi).
- Настройка резервного копирования/восстановления
allow_s3_native_copyтеперь поддерживает три возможных значения: -False— нативное копирование S3 не используется; -True(прежнее значение по умолчанию) — ClickHouse сначала попытается использовать нативное копирование S3, а в случае неудачи переключится на подход с чтением и записью; -'auto'(новое значение по умолчанию) — ClickHouse сначала сравнит учетные данные источника и пункта назначения. Если они совпадают, ClickHouse попытается использовать нативное копирование S3, а затем при необходимости может переключиться на подход с чтением и записью. Если они различаются, ClickHouse сразу перейдет к подходу с чтением и записью. #77401 (Vitaly Baranov). - Добавлена поддержка ALTER TABLE … ATTACH|DETACH|MOVE|REPLACE PARTITION для диска plain_rewritable. #77406 (Julia Kartseva).
- Изменения в кэше skipping index отменены. #77447 (Nikita Mikhaylov).
- Снижено использование памяти при предварительном чтении JSON-столбца в частях Wide. #77640 (Pavel Kruglov).
- Добавлена поддержка использования токена сеанса AWS и учетных данных из окружения в delta kernel для движка таблицы DeltaLake. #77661 (Kseniia Sumarokova).
- Поддержка параметров запроса в настройке
additional_table_filters. После этого изменения следующий запрос будет успешно выполняться:. #77680 (wxybear). - Пользовательские функции (UDF) теперь можно помечать как детерминированные с помощью нового тега в их XML-определении. Кроме того, кэш запросов теперь проверяет, являются ли UDF, вызываемые в запросе, детерминированными. Если да, результат запроса кэшируется. (Issue #59988). #77769 (Jimmy Aguilar Mena).
- Добавлена валидация параметров движка таблицы Buffer. #77840 (Pervakov Grigorii).
- Добавлен параметр
enable_hdfs_preadдля включения или отключения hdfs pread. #77885 (kevinyhzou). - Добавлены события профилирования для количества запросов ZooKeeper ‘multi’ на чтение и запись. #77888 (JackyWoo).
- Разрешено создавать временную таблицу и выполнять в неё вставку, когда включён disable_insertion_and_mutation. #77901 (Xu Jia).
- Уменьшено значение max_insert_delayed_streams_for_parallel_write (до 100). #77919 (Azat Khuzhin).
- Добавлена возможность настраивать количество столбцов, которые слияния могут сбрасывать на диск параллельно, с помощью
max_merge_delayed_streams_for_parallel_write(это должно сократить использование памяти при вертикальных слияниях в S3 примерно в 25 раз). #77922 (Azat Khuzhin). - Исправлен разбор года в синтаксисе Joda для шаблонов вроде ‘yyy’. #77973 (李扬).
- Присоединение частей таблиц MergeTree будет выполняться в порядке номеров их блоков, что важно для специальных алгоритмов слияния, таких как ReplacingMergeTree. Это закрывает #71009. #77976 (Alexey Milovidov).
- Правила маскирования запросов теперь могут сгенерировать исключение LOGICAL_ERROR в случае совпадения. Это поможет проверить, не утекает ли заранее заданный пароль в журналы. #78094 (Nikita Mikhaylov).
- В
information_schema.tablesдобавлен столбецindex_length_columnдля улучшения совместимости с MySQL. #78119 (Paweł Zakrzewski). - Добавлены две новые метрики:
TotalMergeFailuresиNonAbortedMergeFailures. Эти метрики нужны для выявления случаев, когда за короткий период происходит слишком много сбоев слияния. #78150 (Miсhael Stetsyuk). - Исправлен некорректный разбор S3 URI, когда ключ не указан при использовании path-style. #78185 (Arthur Passos).
- Исправлены некорректные значения асинхронных метрик
BlockActiveTime,BlockDiscardTime,BlockWriteTime,BlockQueueTimeиBlockReadTime(до этого изменения 1 секунда ошибочно отображалась как 0.001). #78211 (filimonov). - Для ошибок при отправке в materialized view для StorageS3(Azure)Queue теперь учитывается ограничение
loading_retries. Ранее такие ошибки повторялись неограниченное число раз. #78313 (Kseniia Sumarokova). - В StorageDeltaLake (реализация delta-kernel-rs) исправлены проблемы с производительностью и индикатором прогресса. #78368 (Kseniia Sumarokova).
- Индекс векторного сходства мог выделять до 2x больше оперативной памяти, чем требовалось. Это исправление перерабатывает стратегию выделения памяти, снижая её потребление и повышая эффективность кэша индекса векторного сходства. (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субсекундное разрешение для представления не поддерживается,event_time_microseconds— это просто алиас для обратной совместимости. #78412 (alesapin). - Добавлена поддержка
include,from_env,from_zkдля дисков runtime. Закрывает #78177. #78470 (Kseniia Sumarokova). - Добавлено несколько удобных способов нахождения корневого файла metadata.json в табличной функции и движке Iceberg. Закрывает #78455. #78475 (Daniil Ivanik).
- Добавлена поддержка отсечения партиций в Delta Lake. #78486 (Kseniia Sumarokova).
- Добавлена поддержка аутентификации по паролю в протоколе SSH в ClickHouse. #78586 (Nikita Mikhaylov).
- Добавлено динамическое предупреждение о длительно выполняющихся мутациях в таблицу
system.warnings. #78658 (Bharat Nallan). - Разрывать соединения, если CPU сильно перегружен. Решение принимается на основе отношения времени ожидания (
OSCPUWaitMicroseconds) ко времени занятости (OSCPUVirtualTimeMicroseconds). Запрос отбрасывается с некоторой вероятностью, когда это отношение находится междуmin_os_cpu_wait_time_ratio_to_drop_connectionиmax_os_cpu_wait_time_ratio_to_drop_connection. #78778 (Alexey Katsman). - Разрешено пустое значение в партиционировании 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).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Исправлена ошибка, из-за которой нельзя было создать последовательный узел с помощью keeper-client. #64177 (Duc Canh Le).
- Исправлено разрешение идентификаторов в родительских областях видимости. Разрешено использовать псевдонимы выражений в конструкции WITH. Исправлено #58994. Исправлено #62946. Исправлено #63239. Исправлено #65233. Исправлено #71659. Исправлено #71828. Исправлено #68749. #66143 (Dmitry Novik).
- Исправлен неверный подсчёт символов в PositionImpl::vectorVector. #71003 (思维).
- Исправлена монотонность функции negate. В предыдущих версиях запрос
select * from a where -x = -42;, гдеx— первичный ключ, мог возвращать неверный результат. #71440 (Michael Kolupaev). - Операции
RESTOREдля сущностей доступа требовали больше разрешений, чем нужно, из-за необработанного частичного отзыва прав. Этот PR устраняет проблему. Закрывает #71853. #71958 (pufit). - Исключена пауза после
ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE. Исправлено получение корректных настроек для планирования фоновых задач. #72024 (Aleksei Filatov). - Исправлена обработка пустого кортежа в arrayIntersect. Исправление #72578. #72581 (Amos Bird).
- Исправлена обработка пустых Tuple в некоторых входных и выходных форматах (например, Parquet, Arrow). #72616 (Michael Kolupaev).
- Операторы GRANT SELECT/INSERT на уровне столбцов для баз данных и таблиц с подстановочными символами теперь приводят к ошибке. #72646 (Johann Gan).
- Исправлена ситуация, когда пользователь не может выполнить
REVOKE ALL ON *.*из-за неявных привилегий у целевого объекта управления доступом. #72872 (pufit). - Исправлено зависание при обработке ожидающего батча для асинхронной вставки в Distributed (например, из-за
No such file or directory). #72939 (Azat Khuzhin). - Добавлена поддержка SAS-токенов Azure. #72959 (Azat Khuzhin).
- Исправлено форматирование положительного смещения часового пояса в скалярной функции formatDateTime. #73091 (ollidraese).
- Исправлено корректное отображение исходного порта, когда соединение устанавливается через PROXYv1 и включён
auth_use_forwarded_address— ранее ошибочно использовался порт прокси. Добавлена функцияcurrentQueryID(). #73095 (Yakov Olkhovskiy). - Настройки формата теперь передаются в NativeWriter в TCPHandler, благодаря чему такие параметры, как
output_format_native_write_json_as_string, применяются корректно. #73179 (Pavel Kruglov). - Исправлено чтение подстолбцов подобъектов JSON с некорректным префиксом. #73182 (Pavel Kruglov).
- Исправлен сбой в StorageObjectStorageQueue. #73274 (Kseniia Sumarokova).
- Устранён редкий сбой в refreshable materialized view при завершении работы сервера. #73323 (Michael Kolupaev).
- Плейсхолдер
%fфункцииformatDateTimeтеперь всегда генерирует шесть цифр (долей секунды). Это делает его поведение совместимым с функцией MySQLDATE_FORMAT. Прежнее поведение можно восстановить с помощью настройкиformatdatetime_f_prints_scale_number_of_digits = 1. #73324 (ollidraese). - Улучшено преобразование DateTime при анализе индексов за счёт принудительного применения поведения с насыщением для неявных преобразований из Date в DateTime. Это устраняет возможные неточности анализа индексов, вызванные ограничениями диапазона DateTime. Это исправляет проблему #73307. Также исправлено явное преобразование
toDateTime, когдаdate_time_overflow_behavior = 'ignore', что является значением по умолчанию. #73326 (Amos Bird). - Исправлена фильтрация по столбцу
_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/общие данные, даже если ограничение на количество типов/путей ещё не было достигнуто. #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, которая в некоторых случаях могла возникать для Tuple с элементамиLowCardinalityи включенной настройкойoptimize_functions_to_subcolumns. #73548 (Anton Popov). - Исправлен парсинг
enum glob, за которым следуетrange one. Исправление #73473. #73569 (Konstantin Bogdanov). - Исправлено игнорирование параметра parallel_replicas_for_non_replicated_merge_tree в подзапросах для нереплицируемых таблиц. #73584 (Igor Nikonov).
- Исправление
std::logical_error, возникавшей, когда задачу невозможно запланировать. Обнаружено в стресс-тестах. Пример трассировки стека:2024.12.19 02:05:46.171833 [ 18190 ] {01f0daba-d3cc-4898-9e0e-c2c263306427} <Fatal> : Logical error: 'std::exception. Code: 1001, type: std::__1::future_error, e.what() = The associated promise has been destructed prior to the associated state becoming ready. (version 25.1.1.18724), Stack trace:.#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). - Исправлена #73737. #73775 (zhanglistar).
- Исправляет #72078 ( была нарушена поддержка S3 Express ). #73777 (Sameer Tamsekar).
- Разрешено слияние строк с некорректными значениями в столбце sign в таблицах CollapsingMergeTree. #73864 (Christoph Wurm).
- Исправлена следующая ошибка
Row 1: ────── hostname: c-test-wy-37-server-nlkyjyb-0.c-test-wy-37-server-headless.ns-test-wy-37.svc.cluster.local type: ExceptionWhileProcessing event_date: 2024-12-23 event_time: 2024-12-23 16:21:19 event_time_microseconds: 2024-12-23 16:21:19.824624 query_start_time: 2024-12-23 16:21:19 query_start_time_microseconds: 2024-12-23 16:21:19.747142 query_duration_ms: 77 read_rows: 1 read_bytes: 134 written_rows: 0 written_bytes: 0 result_rows: 0 result_bytes: 0 memory_usage: 7824 current_database: default query: CREATE DATABASE db0 formatted_query: normalized_query_hash: 7820917191074023511 -- 7.82 quintillion query_kind: Create databases: ['db0'] tables: [] columns: [] partitions: [] projections: [] views: [] exception_code: 170 exception: Code: 170. DB::Exception: Bad get: has Null, requested Int64: While executing DDLOnClusterQueryStatus. (BAD_GET) (version 25.1.1.19134 (official build)) stack_trace: 0. ./build_docker/./src/Common/Exception.cpp:107: DB::Exception::Exception(DB::Exception::MessageMasked&&, int, bool) @ 0x000000000da5e53b 1. DB::Exception::Exception(PreformattedMessage&&, int) @ 0x00000000088aca4c 2. DB::Exception::Exception<std::basic_string_view<char, std::char_traits<char>>, std::basic_string_view<char, std::char_traits<char>>>(int, FormatStringHelperImpl<std::type_identity<std::basic_string_view<char, std::char_traits<char>>>::type, std::type_identity<std::basic_string_view<char, std::char_traits<char>>>::type>, std::basic_string_view<char, std::char_traits<char>>&&, std::basic_string_view<char, std::char_traits<char>>&&) @ 0x00000000088bae8b 3. auto& DB::Field::safeGet<long>() & @ 0x0000000008a3c748 4. ./src/Core/Field.h:484: DB::ColumnVector<long>::insert(DB::Field const&) @ 0x0000000012e44c0f 5. ./build_docker/./src/Interpreters/DDLOnClusterQueryStatusSource.cpp:53: DB::DDLOnClusterQueryStatusSource::generateChunkWithUnfinishedHosts() const @ 0x0000000012a40214 6. ./build_docker/./src/Interpreters/DDLOnClusterQueryStatusSource.cpp:104: DB::DDLOnClusterQueryStatusSource::handleTimeoutExceeded() @ 0x0000000012a41640 7. ./build_docker/./src/Interpreters/DDLOnClusterQueryStatusSource.cpp:109: DB::DDLOnClusterQueryStatusSource::stopWaitingOfflineHosts() @ 0x0000000012a41be9 8. ./build_docker/./src/Interpreters/DistributedQueryStatusSource.cpp:182: DB::DistributedQueryStatusSource::generate() @ 0x0000000011feb3bf 9. ./build_docker/./src/Processors/ISource.cpp:139: DB::ISource::tryGenerate() @ 0x0000000014148f5b 10. ./build_docker/./src/Processors/ISource.cpp:108: DB::ISource::work() @ 0x0000000014148c47 11. ./build_docker/./src/Processors/Executors/ExecutionThreadContext.cpp:49: DB::ExecutionThreadContext::executeTask() @ 0x0000000014164fc7 12. ./build_docker/./src/Processors/Executors/PipelineExecutor.cpp:290: DB::PipelineExecutor::executeStepImpl(unsigned long, std::atomic<bool>*) @ 0x00000000141577e5. #73876 (Tuan Pham Anh). - Исправлен редкий сбой при сравнении типов
map(), вызванный возможностью создатьMapбез явного указания имён (‘keys’,‘values’) для его вложенного кортежа. #73878 (Yakov Olkhovskiy). - Оконные функции теперь игнорируются при разборе предложения GROUP BY ALL. Исправлено #73501. #73916 (Dmitry Novik).
- Корректно передавать настройки Native format при взаимодействии клиента с сервером. #73924 (Pavel Kruglov).
- Исправлены неявные привилегии (раньше они работали как символ подстановки). #73932 (Azat Khuzhin).
- Исправлено повышенное использование памяти при создании вложенных Map. #73982 (Pavel Kruglov).
- Исправлен парсинг вложенного JSON с пустыми ключами. #73993 (Pavel Kruglov).
- Исправление: псевдоним мог не добавляться в проекцию, если на него ссылался другой псевдоним и он был выбран в обратном порядке. #74033 (Yakov Olkhovskiy).
- Диск, использующий метаданные plain_rewritable, может использоваться совместно несколькими экземплярами сервера. Предполагается, что один экземпляр будет читать объект метаданных, пока другой его изменяет. Ошибки «объект не найден» игнорируются при инициализации plain_rewritable с хранилищем Azure — аналогично поведению, реализованному для S3. #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. Она добавляет проталкивание предикатов на основе 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. Ранее такое сочетание приводило к segfault. #74137 (Yarik Briukhovetskyi). - Исправлена уязвимость, позволявшая SQL-инъекции в табличных функциях postgresql и sqlite. #74144 (Pablo Marcos).
- Исправлен сбой при чтении подстолбца из сжатой таблицы движка Memory. Исправляет #74009. #74161 (Nikita Taranov).
- Исправлен бесконечный цикл, возникавший при выполнении запросов к system.detached_tables. #74190 (Konstantin Morozov).
- Исправлена логическая ошибка в s3queue при присвоении файлу статуса failed. #74216 (Kseniia Sumarokova).
- Добавлена проверка на неподдерживаемые типы для некоторых хранилищ. #74218 (Pavel Kruglov).
- Исправлен сбой при выполнении запроса
INSERT INTO SELECTчерез интерфейс PostgreSQL на macOS (проблема #72938). #74231 (Artem Yurov). - Исправлены настройки нативного копирования (
allow_s3_native_copy/allow_azure_native_copy) дляRESTOREиз базовой резервной копии. #74286 (Azat Khuzhin). - Исправлена проблема, возникавшая, если количество отсоединённых таблиц в базе данных было кратно max_block_size. #74289 (Konstantin Morozov).
- Исправлено копирование через ObjectStorage (то есть S3), если учетные данные источника и пункта назначения различаются. #74331 (Azat Khuzhin).
- Исправлен неинициализированный
max_log_ptrв базе данных Replicated. #74336 (Konstantin Morozov). - Исправлено распознавание варианта “используйте метод Rewrite в JSON API” при нативном копировании в GCS. #74338 (Azat Khuzhin).
- Исправлен сбой при вставке Interval (issue #74299). #74478 (NamNguyenHoai).
- Исправлен ошибочный анализ проекций, когда в агрегатных проекциях используется
count(nullable). Это исправляет #74495 . В этот PR также добавлены сообщения в журнале, связанные с анализом проекций, чтобы было понятнее, почему проекция используется или не используется. #74498 (Amos Bird). - Исправлен некорректный расчёт
BackgroundMergesAndMutationsPoolSize(значение было в 2 раза больше реального). #74509 (alesapin). - Исправлена ошибка утечки наблюдений в Keeper при включении Cluster Discovery. #74521 (RinChanNOW).
- Исправлено форматирование константных литералов JSON. Ранее это могло приводить к синтаксическим ошибкам при отправке запроса на другой сервер. #74533 (Pavel Kruglov).
- Исправлена проблема с выравниванием памяти, выявленная UBSan #74512. #74534 (Arthur Passos).
- Исправлена проблема с одновременной очисткой KeeperMap при создании таблицы. #74568 (Antonio Andelic).
- Не удалять неиспользуемые столбцы проекции в подзапросах при использовании
EXCEPTилиINTERSECT, чтобы сохранить корректный результат запроса. Исправляет #73930. Исправляет #66465. #74577 (Dmitry Novik). - Исправлена некорректная обработка запроса CREATE при использовании константных выражений партиционирования с включенными неявными проекциями. Это исправляет #74596. #74634 (Amos Bird).
- Исправлены запросы
INSERT SELECTмежду таблицами со столбцамиTupleи включённой разреженной сериализацией. #74698 (Anton Popov). - Функция
rightработает некорректно при константном отрицательном смещении. #74701 (Daniil Ivanik). - Исправлена ошибка, из-за которой вставка данных, сжатых с помощью gzip, иногда завершалась сбоем из-за некорректной распаковки на стороне клиента. #74707 (siyuan).
- Соединение больше не остаётся в нерабочем состоянии, если INSERT завершается с исключением. #74740 (Azat Khuzhin).
- Избегайте повторного использования соединений, оставшихся в промежуточном состоянии. #74749 (Azat Khuzhin).
- Частичный отзыв grant’ов с подстановочными знаками мог отозвать больше привилегий, чем ожидалось. Закрывает #74263. #74751 (pufit).
- Исправлен сбой при разборе объявления типа JSON, когда имя типа указано не в верхнем регистре. #74784 (Pavel Kruglov).
- Keeper: исправлено чтение записей журнала с диска. #74785 (Antonio Andelic).
- Исправлена проверка привилегий для SYSTEM REFRESH/START/STOP VIEW: теперь для выполнения запроса к конкретному представлению не нужно иметь эту привилегию на
*.*— достаточно привилегий на это представление. #74789 (Alexander Tokmakov). - Функция
hasColumnInTableне учитывает столбцы-псевдонимы. Исправлено: теперь она также работает со столбцами-псевдонимами. #74841 (Bharat Nallan). - Keeper: исправлен logical_error, возникавший, когда соединение прерывалось до установления. #74844 (Michael Kolupaev).
- Исправлено поведение, из-за которого сервер не мог запуститься при наличии таблицы, использующей
AzureBlobStorage. Таблицы загружаются без каких-либо запросов к Azure. #74880 (Alexey Katsman). - Исправлена проблема с отсутствием полей
used_privilegesиmissing_privilegesвquery_logдля операций BACKUP и RESTORE. #74887 (Alexey Katsman). - Исправлена ошибка FILE_DOESNT_EXIST, возникавшая при слиянии частей данных в таблице с пустым столбцом в Azure Blob Storage. #74892 (Julia Kartseva).
- Исправлено имя столбца проекции при JOIN временных таблиц, закрыт #68872. #74897 (Vladimir Cherkasov).
- Обновление krb-билета HDFS при ошибке SASL во время запроса SELECT к HDFS. #74930 (inv2004).
- Исправлены запросы к базе данных Replicated в startup_scripts. #74942 (Azat Khuzhin).
- Исправлены проблемы с выражениями, для которых в условии JOIN ON тип задан через алиас, при использовании сравнения с безопасной обработкой NULL. #74970 (Vladimir Cherkasov).
- Состояние part возвращается из deleting обратно в устаревший, если операция remove завершилась с ошибкой. #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 tickerистёк. #75063 (inv2004). - Исправлена работа индексов (первичных и вторичных) для столбцов
Array,MapиNullable(..)при включенной настройкеoptimize_function_to_subcolumns. Ранее индексы для этих столбцов могли игнорироваться. #75081 (Anton Popov). - Отключено
flatten_nestedпри создании materialized view с внутренними таблицами, так как такие уплощённые столбцы невозможно использовать. #75085 (Christoph Wurm). - Исправлена ошибка, из-за которой некоторые IPv6-адреса (например, ::ffff:1.1.1.1) в поле forwarded_for неверно интерпретировались, что приводило к разрыву соединения с клиентом и Исключению. #75133 (Yakov Olkhovskiy).
- Исправлена обработка nullsafe JOIN для nullable-типа LowCardinality. Ранее JOIN ON с nullsafe-сравнением, таким как
IS NOT DISTINCT FROM,<=>,a IS NULL AND b IS NULL OR a == b, некорректно работал со столбцами LowCardinality. #75143 (Vladimir Cherkasov). - Исправлены запросы с неиспользуемой интерполяцией при использовании нового анализатора. #75173 (János Benjamin Antal).
- Исправлен сбой CTE при вставке. #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 мог ошибочно выполнять 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 для distributed таблиц. #75512 (Pavel Kruglov). - Исправлен некорректный расчёт размера буфера результата. Закрывает #70031. #75548 (Konstantin Bogdanov).
- Исправлено взаимодействие между allow_feature_tier и настройкой совместимости в MergeTree. #75635 (Raúl Marín).
- Исправлено некорректное значение processed_rows в system.s3queue_log, если обработка файла была повторно запущена. #75666 (Kseniia Sumarokova).
- Параметр
materialized_views_ignore_errorsтеперь учитывается, когда materialized view записывает в движок 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 её PK-столбца. Ранее это могло приводить к ошибкам
CANNOT_READ_ALL_DATAприselect-запросах после alter modify столбца, используемого в PK проекции. #75720 (Pavel Kruglov). - Исправлен некорректный результат
ARRAY JOINдля скалярных подзапросов (с analyzer). #75732 (Nikolai Kochetov). - Исправлена ошибка разыменования нулевого указателя в
DistinctSortedStreamTransform. #75734 (Nikita Taranov). - Исправлено поведение
allow_suspicious_ttl_expressions. #75771 (Aleksei Filatov). - Устранено чтение неинициализированной памяти в функции
translate. Это закрывает #75592. #75794 (Alexey Milovidov). - Распространение настроек format на JSON как строковое formatting в Native format. #75832 (Pavel Kruglov).
- В истории изменений настроек зафиксировано, что в v24.12 алгоритм JOIN
parallel hashвключён по умолчанию. Это означает, что ClickHouse продолжит выполнять JOIN с использованиемnon-parallel hash, если настроен уровень совместимости ниже v24.12. #75870 (Robert Schulze). - Исправлена ошибка, из-за которой таблицы с неявно добавленными min-max-индексами нельзя было скопировать в новую таблицу (issue #75677). #75877 (Smita Kulkarni).
clickhouse-library-bridgeпозволяет открывать произвольные библиотеки из файловой системы, поэтому его безопасно запускать только в изолированной среде. Чтобы устранить уязвимость при запуске рядом с clickhouse-server, мы ограничим пути к библиотекам расположением, заданным в конфигурации. Эта уязвимость была обнаружена Arseniy Dugin в рамках ClickHouse Bug Bounty Program. #75954 (Alexey Milovidov).- Мы использовали сериализацию JSON для некоторых метаданных, и это было ошибкой, поскольку JSON не поддерживает бинарные данные внутри строковых литералов, включая нулевые байты. SQL-запросы могут содержать бинарные данные и некорректный UTF-8, поэтому это нужно поддерживать и в файлах метаданных. В то же время
JSONEachRowв ClickHouse и похожие форматы обходят это ограничение, отступая от стандарта JSON ради полной обратимости бинарных данных. Обоснование см. здесь: https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790. Решение состоит в том, чтобы привести библиотекуPoco::JSONв соответствие с сериализацией в формат JSON в ClickHouse. Это закрывает #73668. #75963 (Alexey Milovidov). - Исправлена ошибка
Part <...> does not contain in snapshot of previous virtual parts. (PART_IS_TEMPORARILY_LOCKED)при выполнении DETACH PART. #76039 (Aleksei Filatov). - Исправлена проверка лимитов commit в табличном движке
S3Queue. #76104 (Kseniia Sumarokova). - Исправлена операция ATTACH для таблиц 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). - Исправлена работа reinterpretAs с FixedString на архитектурах с прямым порядком байтов. #76253 (Azat Khuzhin).
- Исправлены всевозможные ошибки, возникающие из-за состояния гонки между UUID и именами таблиц (например, это устраняет состояние гонки между
RENAMEиRESTART REPLICA: в случае одновременного выполненияRENAMEиSYSTEM RESTART REPLICAв итоге может быть перезапущена неверная реплика и/или одна из таблиц может остаться в состоянииTable X is being restarted). #76308 (Azat Khuzhin). - Удалено выделение памяти в обработчике сигнала. #76446 (Nikita Taranov).
- Исправлена обработка динамического изменения размера файлового кэша при возникновении непредвиденных ошибок во время вытеснения. #76466 (Kseniia Sumarokova).
- Исправлена инициализация
used_flagв параллельном хеше. Это могло привести к сбою сервера. #76580 (Nikita Taranov). - Исправлена логическая ошибка при вызове функции
defaultProfiles()в проекции. #76627 (pufit). - Не запрашивать в браузере интерактивную Basic-аутентификацию в Web UI. Закрывает #76319. #76637 (Alexey Milovidov).
- Исправлено Исключение THERE_IS_NO_COLUMN при выборе логического литерала из distributed-таблиц. #76656 (Yakov Olkhovskiy).
- Подпуть в каталоге таблицы теперь выбирается более продуманно. #76681 (Daniil Ivanik).
- Исправлена ошибка
Not found column in block, возникавшая после изменения таблицы с подстолбцом в PK. После 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 pushdown для MongoDB при использовании табличной функции (#72210) - Изменено сопоставление типов MongoDB и ClickHouse: теперь двоичный UUID MongoDB может быть разобран только как UUID ClickHouse. Это должно помочь избежать неоднозначностей и неожиданных эффектов в будущем. - Исправлено сопоставление OID с сохранением обратной совместимости. #76762 (Kirill Nikiforov).
- Исправлена обработка исключений при параллельной десериализации префиксов JSON-подстолбцов. #76809 (Pavel Kruglov).
- Исправлено поведение функции lgamma для отрицательных целых чисел. #76840 (Ilya Kataev).
- Исправлен анализ обратного ключа для явно заданных первичных ключей. Аналогично #76654. #76846 (Amos Bird).
- Исправлено форматирование значений Bool при выводе в формате JSON. #76905 (Pavel Kruglov).
- Исправлено возможное аварийное завершение из-за некорректного отката JSON-столбца при ошибке во время асинхронных вставок. #76908 (Pavel Kruglov).
- Ранее
multi_ifмог возвращать столбцы разных типов на этапе планирования и при основном выполнении. Из-за этого код приводил к неопределённому поведению с точки зрения C++. #76914 (Nikita Taranov). - Исправлена некорректная сериализация константных ключей Nullable в MergeTree. Исправление для #76939. #76985 (Amos Bird).
- Исправлена сортировка значений
BFloat16. Закрывает #75487. Закрывает #75669. #77000 (Alexey Milovidov). - Исправлена ошибка JSON с подстолбцом Variant: добавлена проверка для пропуска эфемерных подстолбцов при проверке согласованности part. #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).
- Исправлена работа индексов пропуска данных с выражениями, содержащими литералы, в анализаторе, а также удалены тривиальные приведения типов при анализе индексов. #77229 (Pavel Kruglov).
- Исправлена работа индекса bloom filter с Array и неподдерживаемыми функциями. #77271 (Pavel Kruglov).
- Мы должны проверять ограничение на количество таблиц только при выполнении первоначального запроса CREATE. #77274 (Nikolay Degterinsky).
SELECT toBFloat16(-0.0) == toBFloat16(0.0)теперь корректно возвращаетtrue(ранее возвращалосьfalse). Это приводит поведение в соответствие сFloat32иFloat64. #77290 (Shankar Iyer).- Исправлено возможное некорректное обращение к неинициализированной переменной key_index, которое может привести к аварийному завершению в отладочных сборках (в релизных сборках это неинициализированное обращение, скорее всего, не вызовет проблем, поскольку последующий код, вероятно, сгенерирует исключение.) ### запись для документации об изменениях, заметных пользователю. #77305 (wxybear).
- Откачено. #77307 (Nikolai Kochetov).
- Исправлено имя партиции со значением Bool. Ошибка появилась в https://github.com/ClickHouse/ClickHouse/pull/74533. #77319 (Pavel Kruglov).
- Исправлено сравнение кортежей с Nullable-элементами и строк. Например, до этого изменения сравнение Tuple
(1, null)и String'(1,null)'приводило к ошибке. Другой пример — сравнение Tuple(1, a), гдеa— столбец Nullable, и String'(1, 2)'. Это изменение устраняет эти проблемы. #77323 (Alexey Katsman). - Исправлен сбой в ObjectStorageQueueSource. Ошибка была внесена в https://github.com/ClickHouse/ClickHouse/pull/76358. #77325 (Pavel Kruglov).
- Исправлена ошибка, из-за которой параметр запроса
close_sessionне работал, в результате чего именованные сеансы закрывались только послеsession_timeout. #77336 (Alexey Katsman). - Исправлена работа
async_insertсinput(). #77340 (Azat Khuzhin). - Исправление:
WITH FILLможет завершаться с ошибкойNOT_FOUND_COLUMN_IN_BLOCK, когда планировщик удаляет столбец сортировки. Аналогичная проблема была связана с несогласованно вычисляемым DAG для выраженияINTERPOLATE. #77343 (Yakov Olkhovskiy). - Отменено. #77390 (Vladimir Cherkasov).
- Исправлен приём сообщений с сервера nats без присоединённого mv. #77392 (Dmitry Novikov).
- Исправлена логическая ошибка при чтении из пустого
FileLogс помощью табличной функцииmerge, закрыт #75575. #77441 (Vladimir Cherkasov). - Исправлено несколько ошибок
LOGICAL_ERROR, связанных с назначением псевдонима недопустимым узлам AST. #77445 (Raúl Marín). - В реализации файлового кэша исправлена обработка ошибок при записи сегмента файла. #77471 (Kseniia Sumarokova).
- Теперь DatabaseIceberg использует корректный файл метаданных, предоставленный каталогом. Закрывает #75187. #77486 (Kseniia Sumarokova).
- Использовать настройки формата по умолчанию при сериализации Dynamic из разделяемого Variant. #77572 (Pavel Kruglov).
- Откат изменения ‘Избегать использования
toAST()при выполнении скалярных подзапросов’. #77584 (Raúl Marín). - Исправлена проверка наличия пути к данным таблицы на локальном диске. #77608 (Tuan Pham Anh).
- Теперь кэш запросов считает UDF недетерминированными. Соответственно, результаты запросов с UDF больше не кэшируются. Ранее пользователи могли определять недетерминированные UDF, результаты которых ошибочно попадали в кэш (проблема #77553). #77633 (Jimmy Aguilar Mena).
- Исправлена отправка константных значений на удалённый сервер для некоторых типов. #77634 (Pavel Kruglov).
- Исправлена проблема, из-за которой system.filesystem_cache_log работал только при включённой настройке
enable_filesystem_cache_log. #77650 (Kseniia Sumarokova). - Исправлена логическая ошибка при вызове
defaultRoles()внутри проекции. Дополнение к #76627. #77667 (pufit). - Исправлено падение из-за истёкшего контекста в StorageS3(Azure)Queue. #77720 (Kseniia Sumarokova).
- Вторые arguments типа
Nullableдля функцииarrayResizeтеперь не допускаются. Ранее использованиеNullableв качестве второго argument могло приводить к чему угодно — от ошибок до некорректных результатов. (issue #48398). #77724 (Manish Gill). - Скрыты учетные данные в движках таблиц RabbitMQ, Nats, Redis и AzureQueue. #77755 (Kseniia Sumarokova).
- Исправлено неопределённое поведение при сравнении NaN в ArgMin/ArgMax. #77756 (Raúl Marín).
- Регулярно проверяйте, не были ли отменены слияния и мутации, даже если операция не формирует блоков для записи. #77766 (János Benjamin Antal).
- Отменено. #77843 (Vladimir Cherkasov).
- Исправлен возможный сбой, возникающий при ошибке
NOT_FOUND_COLUMN_IN_BLOCK. #77854 (Vladimir Cherkasov). - Исправлен сбой, происходивший в
StorageSystemObjectStorageQueueSettingsпри заполнении данных. #77878 (Bharat Nallan). - Отключён нечёткий поиск по истории на SSH-сервере (так как для него требуется
skim). #78002 (Azat Khuzhin). - Исправлена ошибка, из-за которой запрос векторного поиска по неиндексированному столбцу возвращал некорректные результаты, если в таблице был другой векторный столбец с настроенным индексом векторного сходства. (Issue #77978). #78069 (Shankar Iyer).
- Исправлен промпт
The requested output format {} is binary... Do you want to output it anyway? [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).
- Исправлена проверка на слишком большое количество таблиц в Database Replicated после https://github.com/ClickHouse/ClickHouse/pull/77274. Также проверка выполняется до создания хранилища, чтобы избежать создания неучтённых узлов в ZooKeeper в случае RMT или KeeperMap. #78127 (Nikolay Degterinsky).
- Исправлено возможное аварийное завершение из-за одновременной инициализации метаданных S3Queue. #78131 (Azat Khuzhin).
- Функции
groupArray*теперь выдают ошибку BAD_ARGUMENTS для значения 0 типа Int в аргументе max_size, как это уже сделано для UInt, вместо того чтобы пытаться выполнить функцию с этим значением. #78140 (Eduard Karacharov). - Предотвращён сбой в
recoverLostReplica, если локальная таблица была удалена до её отсоединения. #78173 (Raúl Marín). - Исправлено значение столбца “alterable” в system.s3_queue_settings, которое всегда было равно
false. #78187 (Kseniia Sumarokova). - Сигнатура доступа Azure теперь маскируется, чтобы она не была видна пользователю и не попадала в журналы. #78189 (Kseniia Sumarokova).
- Исправлена предвыборка подпотоков с префиксами в частях Wide. #78205 (Pavel Kruglov).
- Исправлены сбои и некорректные результаты для
mapFromArrays, когда массив ключей имеет типLowCardinality(Nullable). #78240 (Eduard Karacharov). - Исправлены параметры аутентификации для delta-kernel. #78255 (Kseniia Sumarokova).
- Не планировать задачу RefreshMV, если для реплики
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, если тип входных данных >= 8 bits), что соответствует поведениюminimum()для пустогоroaring_bitmap. #78444 (wxybear).- Отменено изменение “Apply preserve_most attribute at some places in code”, так как оно может приводить к сбоям. #78449 (Azat Khuzhin).
- Используйте столбцы вставки для автоопределения схемы INFILE. #78490 (Pervakov Grigorii).
- Отключена параллельная обработка запроса сразу после чтения
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 для ObjectStorage завершались ошибкой при использовании с настройками на уровне таблицы. #78587 (Daniil Ivanik).
- Улучшенные проверки транзакций не поддерживаются в ReplicatedMergeTree для
INSERT. #78633 (Azat Khuzhin). - Настройки запроса теперь применяются при выполнении ATTACH. #78637 (Raúl Marín).
- Исправлен сбой при указании недопустимого пути в
iceberg_metadata_file_path. #78688 (alesapin). - В движке таблицы DeltaLake с реализацией delta-kernel исправлен случай, когда схема чтения отличается от схемы таблицы и при этом есть столбцы партиции, из-за чего возникала ошибка «столбец не найден». #78690 (Kseniia Sumarokova).
- Это обновление исправляет ошибку, из-за которой новый именованный сеанс мог непреднамеренно закрыться в момент, запланированный для предыдущего сеанса, если оба сеанса имели одно и то же имя, а новый был создан до истечения тайм-аута старого. #78698 (Alexey Katsman).
- Остановка таблицы больше не блокируется при выполнении 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 MV после некорректного завершения работы при выполнении ALTER. #78858 (Azat Khuzhin).
- Исправлен разбор некорректных значений DateTime в формате CSV. #78919 (Pavel Kruglov).
Улучшения в сборке, тестировании и упаковке
- Внутренняя зависимость LLVM обновлена с версии 16 до 18. #66053 (Nikita Mikhaylov).
- Восстановлены удалённые интеграционные тесты для nats и исправлены ошибки. - исправлены некоторые состояния гонки в движке nats - исправлена потеря данных при стриминге данных в nats в случае потери соединения - исправлено зависание при получении последнего фрагмента данных, когда завершался стриминг из nats - nats_max_reconnect объявлен устаревшим и не имеет никакого эффекта; переподключение выполняется постоянно с тайм-аутом nats_reconnect_wait. #69772 (Dmitry Novikov).
- Исправлена проблема, из-за которой не удавалось сгенерировать asm-файлы для contrib openssl. #72622 (RinChanNOW).
- Исправлена проблема со стабильностью теста 03210_variant_with_aggregate_function_type. #74012 (Anton Ivashkin).
- Добавлена поддержка сборки HDFS как на ARM, так и на Intel Mac. #74244 (Yan Xin).
- Универсальный установочный скрипт теперь предлагает установку даже на macOS. #74339 (Alexey Milovidov).
- Исправлена сборка в случае, когда Kerberos отключён. #74771 (flynn).
- Обновление встроенного LLVM до версии 19. #75148 (Konstantin Bogdanov).
- Потенциально несовместимое изменение: Значения по умолчанию стали ещё более строгими. Текущие значения по умолчанию уже безопасны. Чтобы опубликовать порты, пользователь должен явно указать соответствующий параметр. Но если для пользователя
defaultне задан пароль через переменную окруженияCLICKHOUSE_PASSWORDи/или не изменено имя пользователя через переменную окруженияCLICKHOUSE_USER, он должен быть доступен только с локальной системы как дополнительный уровень защиты. #75259 (Mikhail f. Shiryaev). - Для одного батча параллельно выполняемых интеграционных тестов установлен тайм-аут 1 час. При достижении этого тайм-аута
pytestпринудительно завершается, и часть журналов теряется. Внутренний тайм-аут pytest установлен на 55 минут, чтобы успеть вывести результаты сеанса и не сработал внешний сигнал тайм-аута. Закрывает #75532. #75533 (Ilya Yatsishin). - Все действия, связанные с
clickhouse-server, вынесены в функцию и выполняются только при запуске бинарного файла по умолчанию вentrypoint.sh. Давно откладывавшееся улучшение было предложено в #50724. Вclickhouse-extract-from-configдобавлен переключатель--usersдля получения значений изusers.xml. #75643 (Mikhail f. Shiryaev). - Для стресс-тестов: если server не завершился, пока мы собирали трассировки стека через gdb, добавляется дополнительное время ожидания, чтобы сделать обнаружение
Possible deadlock on shutdown (see gdb.log)менее шумным. Задержка добавляется только в случаях, когда тест не завершился успешно. #75668 (Ilya Yatsishin). - Восстановлены удалённые интеграционные тесты nats и исправлены ошибки. - исправлены некоторые состояния гонки в движке nats - исправлена потеря данных при потоковой передаче данных в nats в случае потери соединения - исправлено зависание при получении последнего фрагмента данных после завершения потоковой передачи из nats - nats_max_reconnect устарел и не имеет эффекта; переподключение выполняется постоянно с тайм-аутом nats_reconnect_wait. #75850 (Dmitry Novikov).
- Включены ICU и GRPC при кросс-компиляции под Darwin. #75922 (Raúl Marín).
- Исправлен вывод теста split из-за
sleepпри завершении группы процессов. #76090 (Mikhail f. Shiryaev). - Не собирайте журналы
docker-composeв конце выполнения, так как скрипт часто принудительно завершается. Вместо этого собирайте их в фоновом режиме. #76140 (Mikhail f. Shiryaev). - Тесты для хранилища Kafka вынесены в несколько файлов. Исправляет #69452. #76208 (Mikhail f. Shiryaev).
clickhouse-odbc-bridgeиclickhouse-library-bridgeперенесены в отдельный репозиторий: https://github.com/ClickHouse/odbc-bridge/. #76225 (Alexey Milovidov).- Удалено около 20 МБ неиспользуемого кода из бинарного файла. #76226 (Alexey Milovidov).
- Минимально требуемая версия CMake повышена до 3.25 в связи с появлением
block(). #76316 (Konstantin Bogdanov). - fmt обновлён до 11.1.3. #76547 (Raúl Marín).
- Обновлён пакет
lz4до версии1.10.0. #76571 (Konstantin Bogdanov). - Обновлён
curlдо версии8.12.1. #76572 (Konstantin Bogdanov). - Обновлена версия
libcpuidдо0.7.1. #76573 (Konstantin Bogdanov). - Используйте машиночитаемый формат для разбора результатов pytest. #76910 (Mikhail f. Shiryaev).
- Исправлена кросс-компиляция Rust и добавлена возможность полностью отключать Rust. #76921 (Raúl Marín).
- Для сборки проекта требуется clang 19. #76945 (Raúl Marín).
- Тест выполняется более 10 секунд в последовательном режиме. Это слишком долго для быстрых тестов. #76948 (Mikhail f. Shiryaev).
- Обновлена версия
sccacheдо0.10.0. #77580 (Konstantin Bogdanov). - Учитывать возможности целевого CPU в Rust и включить LTO во всех крейтах. #78590 (Raúl Marín).
- Версия
minizip-ngобновлена до4.0.9. #78917 (Konstantin Bogdanov).