Журнал изменений v24.12 для ClickHouse Cloud
Актуальные изменения для сервисов ClickHouse Cloud на основе релиза v24.12.
Изменения, нарушающие обратную совместимость
- Функции
greatestиleastтеперь игнорируют значения NULL во входных данных, тогда как ранее они возвращали NULL, если один из аргументов был NULL. Например,SELECT greatest(1, 2, NULL)теперь возвращает 2. Это делает поведение совместимым с PostgreSQL. #65519 (kevinyhzou). - По умолчанию не допускаются типы Variant/Dynamic в ORDER BY/GROUP BY/PARTITION BY/PRIMARY KEY, поскольку это может приводить к неожиданным результатам. #69731 (Pavel Kruglov).
- Удалены системные таблицы
generate_seriesиgenerateSeries. Они были добавлены по ошибке здесь: #59390. #71091 (Alexey Milovidov). - Удалён
StorageExternalDistributed. Закрывает #70600. #71176 (flynn). - Настройки из конфигурации сервера (users.xml) теперь применяются и на стороне клиента. Это полезно для настроек форматов, например
date_time_output_format. #71178 (Michael Kolupaev). - Исправлена возможная ошибка
No such file or directory, возникавшая из‑за неэкранированных специальных символов в файлах для JSON-подстолбцов. #71182 (Pavel Kruglov). - Движки таблиц Kafka, NATS и RabbitMQ теперь управляются отдельными правами доступа в иерархии
SOURCES. Добавьте соответствующие права всем пользователям, отличным от пользователя по умолчанию, которые создают таблицы с этими типами движков. #71250 (Christoph Wurm). - Теперь перед выполнением полностью проверяется запрос мутации (включая подзапросы). Это предотвращает случайный запуск некорректного запроса и накопление «мёртвых» мутаций, которые блокируют корректные мутации. #71300 (Christoph Wurm).
- Переименована настройка кэша файловой системы
skip_download_if_exceeds_query_cacheвfilesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit. #71578 (Kseniia Sumarokova). - Запрещены типы Dynamic/Variant в функциях min/max, чтобы избежать путаницы. #71761 (Pavel Kruglov).
- Удалена поддержка
Enum, а также аргументовUInt128иUInt256вdeltaSumTimestamp. Удалена поддержка типовInt8,UInt8,Int16иUInt16для второго («timestamp») аргументаdeltaSumTimestamp. #71790 (Alexey Milovidov). - Добавлена проверка исходного запроса, когда ClickHouse используется как источник для словаря. #72548 (Alexey Katsman).
Новые возможности
- Реализована команда SYSTEM LOAD PRIMARY KEY для загрузки первичных индексов для всех частей указанной таблицы или для всех таблиц, если таблица не указана. Это полезно для бенчмарков и для предотвращения дополнительной задержки при выполнении запросов. #66252 (ZAWA_ll).
- Добавлен оператор
SYSTEM LOAD PRIMARY KEYдля загрузки первичных индексов всех частей указанной таблицы или всех таблиц, если таблица не указана. Это может быть полезно для тестирования производительности и предотвращения дополнительной задержки при выполнении запросов. #67733 (ZAWA_ll). - Добавлен запрос
CHECK GRANT, позволяющий проверить, выданы ли текущему пользователю/роли конкретные привилегии и существует ли соответствующая таблица/столбец в памяти. #68885 (Unalian). - Добавлен SQL‑синтаксис для описания управления нагрузкой и ресурсами. https://clickhouse.com/docs/en/operations/workload-scheduling. #69187 (Sergei Trifonov).
- Формат хранения данных Iceberg предоставляет пользователю широкие возможности для изменения схемы своей таблицы. В этом pull request-е реализовано чтение таблицы в формате Iceberg, в которой изменены порядок столбцов, имена столбцов и простые расширения типов. #69445 (Daniil Ivanik).
- Разрешить каждому методу аутентификации задавать свой срок действия, удалить срок действия у сущности пользователя. #70090 (Arthur Passos).
- Передавать внешние роли пользователей от инициатора запроса на другие узлы кластера. Полезно, когда только инициатор имеет доступ к внешнему аутентификатору (например, LDAP). #70332 (Andrey Zvonov).
- Добавлена поддержка изменения типа с String на JSON. Этот PR также переводит сериализацию типов JSON и Dynamic на новую версию V2. Старая версия V1 всё ещё может использоваться при включении настройки
merge_tree_use_v1_object_and_dynamic_serialization(может применяться во время обновления, чтобы при необходимости можно было без проблем откатиться на предыдущую версию). #70442 (Pavel Kruglov). - Добавлена функция
toUnixTimestamp64Second, которая преобразуетDateTime64в значение типаInt64с фиксированной точностью до секунд, чтобы можно было возвращать отрицательное значение, если дата раньше 00:00:00 UTC четверга, 1 января 1970 года. #70597 (zhanglistar). - Добавлена новая настройка
enforce_index_structure_match_on_partition_manipulation, позволяющая выполнять операцию ATTACH, когда проекции и вторичные индексы исходной таблицы являются подмножеством соответствующих проекций и вторичных индексов целевой таблицы. Закрывает #70602. #70603 (zwy991114). - Результат работы функции
castотличается от Apache Spark, что приводит к различиям в проекте gluten, см. https://github.com/apache/incubator-gluten/issues/7602. Этот PR добавляет поддержку текстового формата вывода Spark, по умолчанию функция отключена. #70957 (zhanglistar). - Добавлен новый тип заголовка для S3‑эндпоинтов для аутентификации пользователей (
access_header). Он позволяет задать некоторый заголовок доступа с наименьшим приоритетом, который будет переопределён значениемaccess_key_idиз любого другого источника (например, схемы таблицы или именованной коллекции). #71011 (MikhailBurdukov). - Первоначальная реализация уровней настроек. #71145 (Raúl Marín).
- Добавлена поддержка предложения STALENESS в ORDER BY при использовании оператора FILL. #71151 (Mikhail Artemenko).
- Реализован простой CAST из Map/Tuple/Object в новый тип JSON при помощи сериализации/десериализации из JSON-строки. #71320 (Pavel Kruglov).
- Добавлены псевдонимы
anyRespectNulls,firstValueRespectNullsиanyValueRespectNullsдля агрегатной функцииany. Также добавлены псевдонимыanyLastRespectNullsиlastValueRespectNullsдля агрегатной функцииanyLast. Это позволяет использовать более естественный синтаксис в чистом camelCase вместо смешанного camelCase/underscore, например:SELECT anyLastRespectNullsStateIfвместоanyLast_respect_nullsStateIf. #71403 (Peter Nguyen). - Добавлен параметр конфигурации
date_time_utc, позволяющий форматировать JSON‑логи с использованием даты и времени в UTC в формате RFC 3339/ISO8601. #71560 (Ali). - Добавлена возможность выбрать сторону
JOIN, которая будет выступать в роли внутренней (build) таблицы в плане запроса. Это контролируется настройкойquery_plan_join_swap_table, которую можно установить в значениеauto. В этом режиме ClickHouse будет пытаться выбрать таблицу с наименьшим количеством строк. #71577 (Vladimir Cherkasov). - Оптимизировано использование памяти для значений гранулярности индекса, если гранулярность постоянна для парта. Добавлена возможность всегда использовать постоянную гранулярность для парта (настройка
use_const_adaptive_granularity), что помогает гарантировать, что она всегда оптимально размещается в памяти. Это помогает при больших нагрузках (триллионы строк в общем хранилище) избежать постоянного роста использования памяти метаданными (значениями гранулярности индекса) партов данных. #71786 (Anton Popov). - Добавлен параметр
allowed_feature_tierкак глобальный переключатель для отключения всех экспериментальных и бета‑функций. #71841 (Raúl Marín). - Добавлены табличные функции
iceberg[S3;HDFS;Azure]Cluster,deltaLakeCluster,hudiCluster. #72045 (Mikhail Artemenko). - Добавлен синтаксис
ALTER USER {ADD|MODIFY|DROP SETTING},ALTER USER {ADD|DROP PROFILE}, аналогично дляALTER ROLEиALTER PROFILE. #72050 (pufit). - Добавлена функция
arrayPrAUC, которая вычисляет AUC (Area Under the Curve, площадь под кривой) для кривой Precision-Recall. #72073 (Emmanuel). - Добавлен кэш для первичного индекса таблиц
MergeTree(можно включить настройкой таблицыuse_primary_key_cache). Если для первичного индекса включены отложенная загрузка и кэш, он будет загружаться в кэш по требованию (аналогично кэшу меток — mark cache), вместо того чтобы постоянно храниться в памяти. Добавлен предварительный прогрев первичного индекса при вставках/слияниях/загрузках частей данных и при перезапусках таблицы (можно включить настройкойprewarm_primary_key_cache). #72102 (Anton Popov). - Добавлена функция indexOfAssumeSorted для массивов. Оптимизирует поиск в случае массива, отсортированного в неубывающем порядке. #72517 (Eric Kurbanov).
- Позволяет использовать разделитель в качестве необязательного второго аргумента агрегирующей функции
groupConcat. #72540 (Yarik Briukhovetskyi). - Новая настройка
http_response_headersпозволяет настраивать HTTP-заголовки ответа. Например, вы можете указать браузеру отобразить изображение, хранящееся в базе данных. Это закрывает #59620. #72656 (Alexey Milovidov). - Добавлена функция
fromUnixTimestamp64Second, которая преобразует значение Unix‑метки времени типа Int64 в DateTime64. #73146 (Robert Schulze).
Улучшения производительности
- Добавлены две новые настройки
short_circuit_function_evaluation_for_nullsиshort_circuit_function_evaluation_for_nulls_threshold, которые позволяют выполнять функции над столбцами типаNullableв режиме короткого замыкания, когда доля значений NULL в блоке данных превышает заданный порог. Это означает, что функция будет выполняться только для строк со значениями, отличными от NULL. Применяется только к функциям, которые возвращают значение NULL для строк, где хотя бы один аргумент имеет значение NULL. #60129 (李扬). - Снижено потребление памяти при выполнении
clickhouse disks remove --recursiveдля дисков объектного хранилища. #67323 (Kirill). - Теперь мы не будем копировать столбцы входных блоков данных для
join_algorithm='parallel_hash'при их распределении между потоками для параллельной обработки. #67782 (Nikita Taranov). - Включена JIT-компиляция для большего набора выражений:
abs/bitCount/sign/modulo/pmod/isNull/isNotNull/assumeNotNull/to(U)Int*/toFloat*, функций сравнения (=,<,>,>=,<=), логических функций (and,or). #70598 (李扬). - Теперь алгоритм
parallel_hashбудет использоваться (если применимо), когда настройкаjoin_algorithmустановлена вdefault. Две предыдущие альтернативы (directиhash) по-прежнему будут использоваться, когдаparallel_hashне может быть применён. #70788 (Nikita Taranov). - Оптимизирован алгоритм слияния
Replacingдля непересекающихся частей. #70977 (Anton Popov). - Не выводить отсоединённые части с дисков readonly и write-once в метриках и таблице
system.detached_parts. #71086 (Alexey Milovidov). - По умолчанию не вычислять ресурсоёмкие асинхронные метрики. Эта функциональность была добавлена в #40332, но нецелесообразно иметь ресурсоёмкий фоновый процесс, который требуется только одному клиенту. #71087 (Alexey Milovidov).
- Улучшена производительность и точность интервала сбора журнала
system.query_metric_logза счёт уменьшения критической секции. #71473 (Pablo Marcos). - Добавлена опция для извлечения общих подвыражений из условий
WHEREиONс целью уменьшения количества хеш-таблиц, используемых при выполнении соединений. Может быть включена с помощьюoptimize_extract_common_expressions = 1. #71537 (János Benjamin Antal). - Позволяет использовать индексы в запросах
SELECTсLowCardinality(String). #71598 (Yarik Briukhovetskyi). - Во время выполнения запроса с параллельными репликами и включённым локальным планом на рабочих узлах не выполняется анализ пропускающих индексов. Координатор определяет диапазоны для чтения рабочими узлами на основе анализа индексов на своей стороне (на инициаторе запроса). #72109 (Igor Nikonov).
- Вернуть оптимизацию чтения подколонок одного столбца в Compact‑частях из https://github.com/ClickHouse/ClickHouse/pull/57631. Она была случайно удалена. #72285 (Pavel Kruglov).
- Ускорена сортировка столбцов
LowCardinality(String)за счёт девиртуализации вызовов в компараторе. #72337 (Alexander Gololobov). - Оптимизирована функция argMin/Max для некоторых простых типов данных. #72350 (alesapin).
- Оптимизировать механизм блокировок в трекере памяти за счет использования разделяемых блокировок, чтобы уменьшить конкуренцию за них. #72375 (Jiebin Sun).
- Добавлена новая настройка
use_async_executor_for_materialized_views. Она использует асинхронное и потенциально многопоточное выполнение запросов для материализованных представлений, что может ускорить их обработку во время INSERT, но при этом потребляет больше памяти. #72497 (alesapin). - Значения по умолчанию для настроек
max_size_to_preallocate_for_aggregationиmax_size_to_preallocate_for_joinsбыли ещё увеличены до10^12, поэтому оптимизация будет применяться чаще. #72555 (Nikita Taranov). - Улучшена производительность десериализации состояний агрегатных функций (в типе данных
AggregateFunctionи в распределённых запросах). Незначительно улучшена производительность разбора форматаRowBinary. #72818 (Anton Popov).
Улучшения
- Функции высшего порядка с константными массивами и константными захваченными аргументами будут возвращать константы. #58400 (Alexey Milovidov).
- Оптимизация последовательного чтения путем генерации виртуальных строк, что позволяет при сортировке слиянием считывать меньше данных и особенно полезно при наличии нескольких частей. #62125 (Shichao Jin).
- Названия шагов плана запроса (
EXPLAIN PLAN json=1) и процессоров конвейера (EXPLAIN PIPELINE compact=0,graph=1) теперь содержат уникальный идентификатор, добавленный в качестве суффикса. Это позволяет сопоставлять вывод профайлера процессоров и трасс OpenTelemetry с выводомEXPLAIN. #63518 (qhsong). - Добавлена опция проверки наличия объекта после записи в Azure Blob Storage, она управляется настройкой
check_objects_after_upload. #64847 (Smita Kulkarni). - Исправлена ошибка use-after-dtor в HashTable::destroyElements. #65279 (cangyin).
- По умолчанию в
clickhouse-localиспользовать базу данныхAtomic. Реализованы пункты 1 и 5 из #50647. Закрывает #44817. #68024 (Alexey Milovidov). - Буфер записи должен быть явно отменён или завершён. Исключения нарушают протокол HTTP, чтобы уведомить клиента об ошибке. #68800 (Sema Checherinda).
- Регистрировать запущенные хосты DDLWorker, создавая replica_dir, и помечать реплики как активные в DDLWorker. #69658 (Tuan Pham Anh).
-
- Рефакторинг
DDLQueryStatusSource: - ПереименоватьDDLQueryStatusSourceвDistributedQueryStatusSourceи сделать его базовым классом. - Создать два подклассаDDLOnClusterQueryStatusSourceиReplicatedDatabaseQueryStatusSource, производных отDDLQueryStatusSource, для запроса статуса DDL-задач изDDL On Clusterи реплицируемых баз данных соответственно. 2. Добавлена поддержка прекращения ожидания отключённых хостов вDDLOnClusterQueryStatusSource. #69660 (Tuan Pham Anh).
- Рефакторинг
- Добавлена новая логика отмены:
CancellationCheckerпроверяет тайм-ауты всех запущенных запросов и останавливает их, как только истекает тайм-аут. #69880 (Yarik Briukhovetskyi). - Удалена настройка
allow_experimental_join_condition, теперь неравенственные условия разрешены по умолчанию. #69910 (Vladimir Cherkasov). - Включена настройка
parallel_replicas_local_planпо умолчанию. Построение полноценного локального плана на инициаторе запроса улучшает производительность параллельных реплик при меньшем потреблении ресурсов и даёт возможность применять больше оптимизаций запросов. #70171 (Igor Nikonov). - Добавлена возможность задавать пользователя и пароль в http_handlers (для
dynamic_query_handler/predefined_query_handler). #70725 (Azat Khuzhin). - Добавлена поддержка
ALTER TABLE ... MODIFY/RESET SETTING ...для определённых настроек в хранилище S3Queue. #70811 (Kseniia Sumarokova). - Не вызывайте API объектного хранилища при перечислении директорий, так как это может быть экономически неэффективно. Вместо этого храните список имён файлов в памяти. Обратной стороной этого будут увеличенное время начальной загрузки и объём памяти, необходимый для хранения имён файлов. #70823 (Julia Kartseva).
- Добавлен параметр
--threadsвclickhouse-compressorдля параллельного сжатия данных. #70860 (Alexey Milovidov). - Сделать настраиваемым размер истории в клиенте Replxx. #71014 (Jiří Kozlovský).
- Добавлена настройка
prewarm_mark_cache, которая позволяет загружать метки в кэш меток при вставках, слияниях, выборках частей и при старте таблицы. #71053 (Anton Popov). - Поддержка типа Boolean в нативном ридере Parquet. #71055 (Arthur Passos).
- При взаимодействии с S3 повторять попытки и для большего числа ошибок, например «Malformed message». #71088 (Alexey Milovidov).
- Понижен уровень логирования для некоторых сообщений, связанных с S3. #71090 (Alexey Milovidov).
- Добавлена поддержка записи файлов HDFS с пробелами в именах. #71105 (exmy).
system.session_logвполне устраивает. Это закрывает #51760. #71150 (Alexey Milovidov).- Исправлена работа операторов RIGHT / FULL JOIN в запросах с параллельными репликами. Теперь операторы RIGHT JOIN могут выполняться с параллельными репликами (чтение правой таблицы распределяется). Операторы FULL JOIN не могут быть распараллелены по узлам и выполняются локально. #71162 (Igor Nikonov).
- Добавлены настройки, ограничивающие количество реплицируемых таблиц, словарей и представлений. #71179 (Kirill).
- Исправляет #71227. #71286 (Arthur Passos).
- Автоматический переход на внешний
GROUP BY/ORDER BYс использованием диска в зависимости от использования памяти сервером/пользователем. Управляется параметрами запросаmax_bytes_ratio_before_external_group_by/max_bytes_ratio_before_external_sort. #71406 (Azat Khuzhin). - В расширенный дашборд добавлены дашборды по хостам
Overview (host)иCloud overview (host). #71422 (alesapin). - Функция
translateтеперь поддерживает удаление символов, если в аргументеfromбольше символов, чем в аргументеto. Пример:SELECT translate('clickhouse', 'clickhouse', 'CLICK')теперь возвращаетCLICK. #71441 (shuai.xu). - Добавлены новые функции
parseDateTime64,parseDateTime64OrNullиparseDateTime64OrZero. По сравнению с существующей функциейparseDateTime(и ее вариантами) они возвращают значение типаDateTime64вместоDateTime. #71581 (kevinyhzou). - Уменьшен размер массива index_granularity в памяти для снижения объёма потребляемой памяти семейством движков таблиц MergeTree. #71595 (alesapin).
- Приложения командной строки будут подсвечивать синтаксис даже для запросов, содержащих несколько операторов. #71622 (Alexey Milovidov).
- Консольные приложения теперь возвращают ненулевые коды выхода при возникновении ошибок. В предыдущих версиях приложение
disksвозвращало ноль при ошибках, а другие приложения возвращали ноль для ошибок с кодами 256 (PARTITION_ALREADY_EXISTS) и 512 (SET_NON_GRANTED_ROLE). #71623 (Alexey Milovidov). - Формат
Vertical(который также активируется, если завершить запрос символом\G) получил возможности форматов Pretty, такие как: - подсветка групп тысяч в числах; - вывод подсказки с числом в удобочитаемом виде. #71630 (Alexey Milovidov). - Добавлена возможность отключить увеличение буфера в памяти для кэша файловой системы с помощью настройки
filesystem_cache_prefer_bigger_buffer_size. #71640 (Kseniia Sumarokova). - Добавлена отдельная настройка
background_download_max_file_segment_sizeдля максимального размера сегмента файла при фоновой загрузке в файловый кэш. #71648 (Kseniia Sumarokova). - Изменяет значение настройки
enable_http_compressionпо умолчанию с 0 на 1. Закрывает #71591. #71774 (Peter Nguyen). - Добавлена поддержка ALTER из Object в JSON. #71784 (Pavel Kruglov).
- Немного улучшен разбор типов JSON: если текущий блок для JSON-пути содержит значения разных типов, выбирается наиболее подходящий тип, перебирая варианты в специальном порядке «best-effort». #71785 (Pavel Kruglov).
- Ранее чтение из
system.asynchronous_metricsожидало завершения конкурентного обновления. Это могло занимать много времени при высокой нагрузке на систему. После этого изменения ранее собранные значения всегда доступны для чтения. #71798 (Alexander Gololobov). - Установите
polling_max_timeout_msв 10 минут, аpolling_backoff_ms— в 30 секунд. #71817 (Kseniia Sumarokova). - Запросы вида 'SELECT - FROM t LIMIT 1' раньше загружали индексы частей, даже если они не использовались. #71866 (Alexander Gololobov).
- Параметр Allow_reorder_prewhere_conditions по умолчанию включён при использовании старых настроек совместимости. #71867 (Raúl Marín).
- Не увеличивать счетчик
ILLEGAL_TYPE_OF_ARGUMENTв таблицеsystem.errorsпри вызове функцииbitmapTransform, если типы аргументов корректны. #71971 (Dmitry Novik). - При получении данных напрямую из словаря с помощью Dictionary storage, табличной функции словаря или прямого
SELECTиз самого словаря теперь достаточно иметь правоSELECTили правоdictGetдля этого словаря. Это согласуется с предыдущими попытками предотвратить обход ACL: https://github.com/ClickHouse/ClickHouse/pull/57362 и https://github.com/ClickHouse/ClickHouse/pull/65359. Это также делает второе из этих изменений обратно совместимым. #72051 (Nikita Mikhaylov). - На HTML-странице расширенного дашборда добавлен выпадающий список выбора дашборда из таблицы
system.dashboards. #72081 (Sergei Trifonov). - Учитывать настройку
prefer_locahost_replicaпри построении плана выполнения для распределённогоINSERT ... SELECT. #72190 (filimonov). - Проблема описана здесь. Azure Iceberg Writer создаёт метаданные Iceberg (а также файлы манифестов), которые нарушают спецификации. В этом PR я добавил попытку прочитать метаданные формата Iceberg v1 с помощью ридера v2 (так как они записывают их именно так), а также добавил генерацию ошибки, если в файле манифеста не созданы соответствующие поля. #72277 (Daniil Ivanik).
- Перевести типы JSON/Dynamic/Variant из экспериментальных возможностей в бета-стадию. #72294 (Pavel Kruglov).
- Теперь допускается выполнять
CREATE MATERIALIZED VIEWсUNION [ALL]в запросе. Поведение такое же, как для материализованного представления сJOIN: в качестве триггера для вставки используется только первая таблица в выраженииSELECT, все остальные таблицы игнорируются. #72347 (alesapin). - Ускорены вставки в MergeTree в случае, когда во вставляемом наборе данных используется одно значение ключа партиционирования. #72348 (alesapin).
- Добавлена новая метрика MergeTreeIndexGranularityInternalArraysTotalSize в system.metrics. Эта метрика нужна для поиска экземпляров с огромными наборами данных, подверженных проблеме высокого потребления памяти. #72490 (Miсhael Stetsyuk).
- Теперь распознаются все варианты написания слова
Null, когда в запросе используетсяFormat Null. Ранее другие формы (например,NULL) не приводили к генерации исключений, но при этом форматNullфактически не применялся в этих случаях. #72658 (Nikita Taranov). - Разрешить в множестве неизвестные значения, отсутствующие в Enum. Исправление #72662. #72686 (zhanglistar).
- Добавлен столбец total_bytes_with_inactive в system.tables для подсчёта общего объёма байт неактивных частей. #72690 (Kai Zhu).
- В system.settings_changes добавлены MergeTreeSettings. #72694 (Raúl Marín).
- Добавлена поддержка оператора строкового поиска (например, LIKE) для типа данных Enum, исправлена ошибка #72661. #72732 (zhanglistar).
- В функции notEmpty добавлена поддержка типа JSON. #72741 (Pavel Kruglov).
- Добавлена поддержка разбора ошибки GCS S3
AuthenticationRequired. #72753 (Vitaly Baranov). - Добавлена поддержка типа Dynamic в функциях ifNull и coalesce. #72772 (Pavel Kruglov).
- Добавлены профильные события
JoinBuildTableRowCount/JoinProbeTableRowCount/JoinResultRowCount. #72842 (Vladimir Cherkasov). - Добавлена поддержка типа Dynamic в функциях toFloat64/touInt32/etc. #72989 (Pavel Kruglov).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Части, дедуплицированные при выполнении запроса
ATTACH PART, больше не остаются с префиксомattaching_. #65636 (Kirill). - Исправлена ошибка, из-за которой DateTime64 терял точность при использовании функции
IN. #67230 (Yarik Briukhovetskyi). - Исправлена возможная логическая ошибка при использовании функций с
IGNORE/RESPECT NULLSвORDER BY ... WITH FILL, закрыт #57609. #68234 (Vladimir Cherkasov). - Исправлены редкие логические ошибки при асинхронных вставках в формате
Nativeпри достижении ограничения по памяти. #68965 (Anton Popov). - Исправлен COMMENT в операторе CREATE TABLE для столбца EPHEMERAL. #70458 (Yakov Olkhovskiy).
- Исправлена логическая ошибка в функции
JSONExtractпри работе с типомLowCardinality(Nullable). #70549 (Pavel Kruglov). - Исправлено поведение при слишком длинном имени таблицы. #70810 (Yarik Briukhovetskyi).
- Добавлена возможность переопределять Content-Type пользовательскими заголовками в движке URL. #70859 (Artem Iurin).
- Исправлена логическая ошибка в
StorageS3Queue, приводившая к сообщению об ошибке «Cannot create a persistent node in /processed since it already exists». #70984 (Kseniia Sumarokova). - Исправлена ошибка, при которой в опции rebuild легковесного удаления проекций не учитывался столбец _row_exists. #71089 (Shichao Jin).
- Исправлено некорректное значение в system.query_metric_log из-за непредвиденного состояния гонки. #71124 (Pablo Marcos).
- Исправлено несоответствие в имени агрегатной функции quantileExactWeightedInterpolated. Ошибка была допущена в https://github.com/ClickHouse/ClickHouse/pull/69619. cc @Algunenano. #71168 (李扬).
- Исправлено исключение bad_weak_ptr, возникающее при использовании Dynamic при сравнении функций. #71183 (Pavel Kruglov).
- Не удаляйте blob-объект, если в ReplicatedMergeTree с репликацией без копирования (zero-copy replication) есть узлы, которые его используют. #71186 (Antonio Andelic).
- Исправлено игнорирование настроек формата Native при использовании HTTP и Async Inserts. #71193 (Pavel Kruglov).
- Запросы SELECT с параметром
use_query_cache = 1больше не отклоняются, если имя системной таблицы используется в виде литерала, например,SELECT - FROM users WHERE name = 'system.metrics' SETTINGS use_query_cache = true;теперь работает. #71254 (Robert Schulze). - Исправлена ошибка роста потребления памяти, возникавшая при enable_filesystem_cache=1, если в конфигурации хранилища для диска не была задана настройка кеша. #71261 (Kseniia Sumarokova).
- Исправлена потенциальная ошибка "Cannot read all data" при десериализации словаря LowCardinality из столбца типа Dynamic. #71299 (Pavel Kruglov).
- Исправлена неполная очистка формата параллельного вывода в клиенте. #71304 (Raúl Marín).
- Добавлено пропущенное снятие экранирования в именованных коллекциях. Без этого исправления clickhouse-server не запускается. #71308 (MikhailBurdukov).
- Исправлена ошибка в асинхронных вставках пустых блоков через нативный протокол. #71312 (Anton Popov).
- Исправлено неконсистентное форматирование AST при указании некорректных грантов с подстановочными символами #71309. #71332 (pufit).
- Проверка подозрительных и экспериментальных типов в подсказках типов JSON. #71369 (Pavel Kruglov).
- Исправлена ошибка «Invalid number of rows in Chunk with Variant column». #71388 (Pavel Kruglov).
- Исправлен сбой в табличной функции
mongodbпри передаче некорректных аргументов (например,NULL). #71426 (Vladimir Cherkasov). - Исправлено падение при использовании
optimize_rewrite_array_exists_to_has. #71432 (Raúl Marín). - Исправлена ошибка NoSuchKey при откате транзакции, если не удаётся создать каталог для диска palin_rewritable. #71439 (Julia Kartseva).
- Исправлено использование настройки
max_insert_delayed_streams_for_parallel_writeво вставках. Ранее она работала некорректно, что могло приводить к высокому потреблению памяти при вставках, которые записывают данные в несколько партиций. #71474 (Anton Popov). - Исправлена возможная ошибка
Argument for function must be constant(старый анализатор) в случае, когда arrayJoin может появляться в условииWHERE. Регрессия после https://github.com/ClickHouse/ClickHouse/pull/65414. #71476 (Nikolai Kochetov). - Предотвращён сбой SortCursor при 0 столбцах (старый анализатор). #71494 (Raúl Marín).
- Исправлена ошибка выхода значения типа date32 за допустимый диапазон, вызванная неинициализированными данными ORC. Более подробную информацию см. по адресу https://github.com/apache/incubator-gluten/issues/7823. #71500 (李扬).
- Исправлен подсчёт размера столбца в широкой части для типов Dynamic и JSON. #71526 (Pavel Kruglov).
- Исправлена ошибка анализатора, когда запрос внутри материализованного представления использует IN с CTE. Закрывает #65598. #71538 (Maksim Kita).
- Возвращать 0 или символ по умолчанию вместо выброса ошибки в функциях bitShift при выходе за границы. #71580 (Pablo Marcos).
- Исправлены сбои сервера при использовании материализованного представления с определёнными движками таблиц. #71593 (Pervakov Grigorii).
- ARRAY JOIN с вложенной структурой данных, содержащей алиас на константный массив, приводил к обращению по нулевому указателю. Это исправляет #71677. #71678 (Alexey Milovidov).
- Исправлена ошибка LOGICAL_ERROR при выполнении ALTER с пустым кортежем. Это исправляет #71647. #71679 (Amos Bird).
- Не преобразовывать константное множество в предикатах по колонкам партиционирования для оператора NOT IN. #71695 (Eduard Karacharov).
- Исправлено приведение типов
CASTизLowCardinality(Nullable)кDynamic. Ранее это могло приводить к ошибкеBad cast from type DB::ColumnVector<int> to DB::ColumnNullable. #71742 (Pavel Kruglov). - Исправлена ошибка, приводившая к исключению при использовании toDayOfWeek в условии WHERE с первичным ключом типа DateTime64. #71849 (Yakov Olkhovskiy).
- Исправлено заполнение значений по умолчанию после разбора данных в разрежённые столбцы. #71854 (Anton Popov).
- Исправлена ошибка функции GROUPING, возникавшая, когда в распределённой таблице во входных данных использовался ALIAS, закрыта #68602. #71855 (Vladimir Cherkasov).
- Исправлены запросы
SELECT, использующие конструкциюWITH TIES, которые могли возвращать недостаточное количество строк. #71886 (wxybear). - Исправлено исключение TOO_LARGE_ARRAY_SIZE, возникавшее, когда столбец при вычислении функцией arrayWithConstant ошибочно считался превышающим ограничение размера массива. #71894 (Udi).
clickhouse-benchmarkсообщал некорректные значения метрик для запросов, выполнявшихся дольше одной секунды. #71898 (Alexey Milovidov).- Исправлена гонка данных между индикатором прогресса и таблицей прогресса в clickhouse-client. Эта проблема проявлялась при использовании FROM INFILE. Теперь во время запросов INSERT перехватываются нажатия клавиш, чтобы можно было переключать отображение таблицы прогресса. #71901 (Julia Kartseva).
- Исправлена сериализация значений типа Dynamic в форматах Pretty JSON. #71923 (Pavel Kruglov).
- Исправлен столбец rows_processed в system.s3/azure_queue_log, некорректно работавший в версии 24.6. Закрывает #69975. #71946 (Kseniia Sumarokova).
- Исправлен случай, когда функции
s3/s3Clusterмогли возвращать неполный результат или выбрасывать исключение. Он возникал при использовании glob‑шаблона в S3 URI (например,pattern/*), когда должен существовать пустой объект с ключомpattern/(такие объекты автоматически создаются в консоли S3). Также значение настройкиs3_skip_empty_filesпо умолчанию изменено сfalseнаtrue. #71947 (Nikita Taranov). - Исправлена ошибка, приводившая к сбою подсветки синтаксиса в clickhouse-client. Закрывает #71864. #71949 (Nikolay Degterinsky).
- Исправлена ошибка
Illegal typeдля таблицMergeTreeс бинарной монотонной функцией вORDER BY, когда первым аргументом является константа. Исправляет #71941. #71966 (Nikolai Kochetov). - В EXPLAIN AST, используемом внутри подзапроса, разрешены только запросы SELECT. Другие типы запросов приводят к логической ошибке: 'Bad cast from type DB::ASTCreateQuery to DB::ASTSelectWithUnionQuery' или
Inconsistent AST formatting. #71982 (Pavel Kruglov). - При вставке записи с помощью клиента
clickhouse-clientклиент считывает описания столбцов с сервера. Однако из-за ошибки описания записывались в неверном порядке, тогда как правильный порядок должен быть [statistics, ttl, settings]. #71991 (Han Fei). - Исправлено форматирование ALTER-команд
MOVE PARTITION ... TO TABLE ...при включённом параметреformat_alter_commands_with_parentheses. #72080 (János Benjamin Antal). - Добавлено имя автоматически определяемого формата в запрос
CREATEв движках File/S3/URL/HDFS/Azure. Ранее имя формата вычислялось заново при каждом перезапуске сервера, и если указанные файлы данных были удалены, это приводило к ошибкам во время запуска сервера. #72108 (Pavel Kruglov). - Исправлена ошибка, из-за которой
min_age_to_force_merge_on_partition_onlyзастревал, повторно пытаясь сливать один и тот же раздел, уже слитый в одну часть, и при этом не сливал разделы, состоявшие из нескольких частей. #72209 (Christoph Wurm). - Исправлено падение в
SimpleSquashingChunksTransform, которое в редких случаях происходило при обработке разреженных столбцов. #72226 (Vladimir Cherkasov). - Исправлена гонка данных в
GraceHashJoin, из-за которой некоторые строки могли отсутствовать в результате операции соединения. #72233 (Nikita Taranov). - Исправлены запросы
ALTER DELETEс материализованным столбцом_block_number(если включена настройкаenable_block_number_column). #72261 (Anton Popov). - Исправлена гонка данных при одновременных вызовах
ColumnDynamic::dumpStructure(), например из конструктораConcurrentHashJoin. #72278 (Nikita Taranov). - Исправлена потенциальная ошибка
LOGICAL_ERRORпри дублировании столбцов вORDER BY ... WITH FILL. #72387 (Vladimir Cherkasov). - Исправлены несоответствия типов в нескольких случаях после применения
optimize_functions_to_subcolumns. #72394 (Anton Popov). - Исправлена ошибка при разборе запросов
BACKUP DATABASE db EXCEPT TABLES db.table. #72429 (Konstantin Bogdanov). - Запрещено создавать пустой тип Variant. #72454 (Pavel Kruglov).
- Исправлено некорректное форматирование
result_part_pathвsystem.merges. #72567 (Konstantin Bogdanov). - Исправлена обработка glob-шаблона с одним элементом. #72572 (Konstantин Bogданов).
- Исправлена генерация запроса для ведомого сервера в случае распределённого запроса с ARRAY JOIN. Исправляет #69276. #72608 (Dmitry Novik).
- Исправлена ошибка, из-за которой выражение DateTime64 IN DateTime64 ничего не возвращало. #72640 (Yarik Briukhovetskyi).
- Исправлена ошибка «No such key» в режиме Unordered для S3Queue при значении настройки
tracked_files_limit, меньшем, чем скорость появления файлов в S3. #72738 (Kseniia Sumarokova). - Сброс кэша меток (mark cache) может занять заметное время, если его размер велик. Если при этом мы удерживаем мьютекс контекста, это блокирует множество других операций: даже новые подключения клиентов не могут быть установлены, пока он не будет освобождён. При этом удерживать этот мьютекс на самом деле не требуется для синхронизации — достаточно иметь локальную ссылку на кэш через shared_ptr. #72749 (Alexander Gololobov).
- Кэш PK значительно занижал свой размер на одном из тестовых экземпляров. В частности, для столбцов LowCardinality не учитывался размер словаря. Исправление заключается в использовании column->allocatedBytes() с добавлением оценки накладных расходов для размера элемента кэша. #72750 (Alexander Gololobov).
- Исправлена ошибка, из-за которой в RemoteQueryExecutor выбрасывалось исключение, если пользователь отсутствовал локально. #72759 (Andrey Zvonov).
- Исправлены мутации с материализованным столбцом
_block_number(если включена настройкаenable_block_number_column). #72854 (Anton Popov). - Исправлена проблема с резервным копированием и восстановлением с использованием простого перезаписываемого диска в случае наличия пустых файлов в резервной копии. #72858 (Kseniia Sumarokova).
- Корректная отмена вставок в DistributedAsyncInsertDirectoryQueue. #72885 (Antonio Andelic).
- Исправлен сбой при разборе некорректных данных в разрежённые столбцы (может происходить при включённой настройке
enable_parsing_to_custom_serialization). #72891 (Anton Popov). - Исправлена потенциальная ошибка, приводящая к сбою во время восстановления из резервной копии. #72947 (Kseniia Sumarokova).
- Исправлена ошибка в методе JOIN
parallel_hash, которая могла проявляться, когда запрос содержал сложное условие в предложенииONс неравенствами в фильтрах. #72993 (Nikita Taranov). - Используйте настройки формата по умолчанию при разборе JSON, чтобы избежать ошибок десериализации. #73043 (Pavel Kruglov).
- Исправлен сбой транзакций при использовании неподдерживаемого типа хранилища. #73045 (Raúl Marín).
- Выполняется проверка наличия дублирующихся ключей JSON при разборе Tuple. Ранее это могло приводить к логической ошибке
Invalid number of rows in Chunkпри разборе. #73082 (Pavel Kruglov).