Перейти к основному содержанию
Перейти к основному содержанию

Журнал изменений 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).
    1. Рефакторинг 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).