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

Журнал изменений v24.12 для 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).
  • Добавлена проверка исходного (source) запроса, когда 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 «Невозможно создать постоянный узел в /processed: он уже существует». #70984 (Kseniia Sumarokova).
  • Исправлена ошибка, из-за которой в опции rebuild механизма легковесного удаления PROJECTION не учитывался столбец _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. #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 при назначении некорректных привилегий с шаблонами (wildcard grants) #71309. #71332 (pufit).
  • Проверять подозрительные и экспериментальные типы в подсказках типов JSON. #71369 (Pavel Kruglov).
  • Исправлена ошибка «Неверное число строк во фрагменте со столбцом типа Variant». #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).
  • Исправление в Analyzer для случая, когда запрос внутри materialized view использует IN с CTE. Закрывает #65598. #71538 (Maksim Kita).
  • Возвращать 0 или символ по умолчанию вместо генерации ошибки в функциях bitShift при выходе за пределы диапазона. #71580 (Pablo Marcos).
  • Исправлены сбои сервера при использовании materialized view с определёнными движками. #71593 (Pervakov Grigorii).
  • Array join с вложенной структурой данных, содержащей псевдоним на константный массив, приводил к разыменованию нулевого указателя. Это исправляет #71677. #71678 (Alexey Milovidov).
  • Исправлена LOGICAL_ERROR при выполнении ALTER с пустым кортежем, что исправляет #71647. #71679 (Amos Bird).
  • Не преобразовывать константное множество в предикатах над столбцами партиции при использовании оператора NOT IN. #71695 (Eduard Karacharov).
  • Исправлено приведение типа 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 в distributed таблице, закрыта #68602. #71855 (Vladimir Cherkasov).
  • Исправлены команды SELECT, использующие предложение WITH TIES, которые могли возвращать недостаточное количество строк. #71886 (wxybear).
  • Исправлена ошибка, из-за которой при вычислении arrayWithConstant столбец ошибочно считался превышающим ограничение на размер массива, что приводило к возникновению исключения TOO_LARGE_ARRAY_SIZE. #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-шаблона в URI s3 (например, 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).
  • Разрешены только запросы SELECT в EXPLAIN AST, используемом внутри подзапроса. Другие типы запросов приводят к логической ошибке: '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 (Konstantin Bogdanов).
  • Исправлена генерация запроса для ведомого сервера при распределённом запросе с ARRAY JOIN. Исправляет #69276. #72608 (Dmitry Novik).
  • Исправлена ошибка, из-за которой преобразование DateTime64 в DateTime64 не возвращало результат. #72640 (Yarik Briukhovetskyi).
  • Исправлена ошибка "No such key" в режиме S3Queue Unordered, возникавшая при значении настройки tracked_files_limit, меньшем скорости появления файлов в S3. #72738 (Kseniia Sumarokova).
  • Сброс mark cache может занять заметное время, если он большой. Если в это время удерживать mutex контекста, это блокирует множество других операций; новые клиентские подключения также не могут быть установлены, пока он не будет освобождён. При этом удержание этого mutex на самом деле не требуется для синхронизации — достаточно иметь локальную ссылку на кеш через 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).