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

Тег релиза ClickHouse: 24.2.2.15987

Обратно несовместимое изменение

  • Проверка подозрительных/экспериментальных типов внутри вложенных типов. Ранее мы не проверяли такие типы (кроме JSON) внутри вложенных типов, таких как Array/Tuple/Map. #59385 (Kruglov Pavel).
  • Условие сортировки ORDER BY ALL (добавленное в v23.12) заменено на ORDER BY *. Прежний синтаксис был слишком подвержен ошибкам для таблиц со столбцом all. #59450 (Robert Schulze).
  • Добавлена базовая проверка количества потоков и размеров блоков. #60138 (Raúl Marín).
  • Отклонять входящие запросы INSERT, если одновременно включены настройки уровня запроса async_insert и deduplicate_blocks_in_dependent_materialized_views. Это поведение управляется настройкой throw_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert и включено по умолчанию. Это продолжение https://github.com/ClickHouse/ClickHouse/pull/59699, необходимое для разблокировки https://github.com/ClickHouse/ClickHouse/pull/59915. #60888 (Nikita Mikhaylov).
  • Утилита clickhouse-copier перенесена в отдельный репозиторий на GitHub: https://github.com/ClickHouse/copier. Она больше не входит в комплект поставки, но по-прежнему доступна для отдельной загрузки. Закрывает: #60734 Закрывает: #60540 Закрывает: #60250 Закрывает: #52917 Закрывает: #51140 Закрывает: #47517 Закрывает: #47189 Закрывает: #46598 Закрывает: #40257 Закрывает: #36504 Закрывает: #35485 Закрывает: #33702 Закрывает: #26702 ### Запись в документации об изменениях, заметных пользователям. #61058 (Nikita Mikhaylov).
  • Для повышения совместимости с MySQL функция locate теперь по умолчанию принимает аргументы (needle, haystack[, start_pos]). Прежнее поведение (haystack, needle, [, start_pos]) можно восстановить, установив function_locate_has_mysql_compatible_argument_order = 0. #61092 (Robert Schulze).
  • Устаревшие части данных в памяти были объявлены устаревшими начиная с версии 23.5 и перестали поддерживаться начиная с версии 23.10. Теперь оставшийся код удалён. Продолжение #55186 и #45409. Маловероятно, что вы использовали части данных в памяти, поскольку они были доступны только до версии 23.5 и только если вы включали их вручную, указав соответствующие SETTINGS для таблицы MergeTree. Чтобы проверить, есть ли у вас части данных в памяти, выполните следующий запрос: SELECT part_type, count() FROM system.parts GROUP BY part_type ORDER BY part_type. Чтобы отключить использование частей данных в памяти, выполните ALTER TABLE ... MODIFY SETTING min_bytes_for_compact_part = DEFAULT, min_rows_for_compact_part = DEFAULT. Перед обновлением со старых релизов ClickHouse сначала проверьте, что у вас нет частей данных в памяти. Если части данных в памяти есть, сначала отключите их, затем дождитесь, пока частей данных в памяти не останется, и продолжайте обновление. #61127 (Alexey Milovidov).
  • По умолчанию запретить SimpleAggregateFunction в ORDER BY таблиц MergeTree (как и AggregateFunction; они запрещены, поскольку не поддерживают сравнение) (используйте allow_suspicious_primary_key, чтобы разрешить их). #61399 (Azat Khuzhin).
  • ClickHouse допускает произвольные двоичные данные в типе String, который обычно содержит UTF-8. Строки в Parquet/ORC/Arrow поддерживают только UTF-8. Поэтому для типа String в ClickHouse можно выбрать, какой тип данных Arrow использовать — String или Binary. Это задаётся настройками output_format_parquet_string_as_string, output_format_orc_string_as_string, output_format_arrow_string_as_string. Хотя Binary был бы более корректным и совместимым вариантом, использование String по умолчанию в большинстве случаев лучше соответствует ожиданиям пользователей. Parquet/ORC/Arrow поддерживают множество методов сжатия, включая lz4 и zstd. ClickHouse поддерживает все эти методы сжатия. В некоторых менее функциональных инструментах нет поддержки более быстрого метода сжатия lz4, поэтому по умолчанию используется zstd. Это задаётся настройками output_format_parquet_compression_method, output_format_orc_compression_method и output_format_arrow_compression_method. Мы изменили значение по умолчанию на zstd для Parquet и ORC, но не для Arrow (он ориентирован на низкоуровневые сценарии использования). #61817 (Alexey Milovidov).
  • Исправление проблемы безопасности materialized view, из-за которой пользователь мог вставлять данные в таблицу без необходимых для этого привилегий. Теперь проверяется, что у пользователя есть разрешение на вставку не только в materialized view, но и во все базовые таблицы. Это означает, что некоторые запросы, которые раньше работали, теперь могут завершаться ошибкой Not enough privileges. Чтобы решить эту проблему, в релизе представлена новая возможность безопасности SQL для представлений https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security. #54901 (pufit)

Новая возможность

  • Поддержка режима Topk/topkweighed, который возвращает количество значений и погрешность. #54508 (UnamedRus).
  • Добавлен новый синтаксис, позволяющий указывать пользователя-определителя для view/materialized view. Это позволяет выполнять запросы SELECT и операции вставки через представления без явных привилегий на базовые таблицы. #54901 (pufit).
  • Реализовано автоматическое преобразование таблиц MergeTree различных типов в движок Replicated. Создайте пустой файл convert_to_replicated в каталоге данных таблицы (/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/), и при следующем запуске сервера эта таблица будет автоматически преобразована. #57798 (Kirill).
  • Добавлена табличная функция mergeTreeIndex. Она показывает содержимое файлов индекса и меток таблиц MergeTree. Ее можно использовать для интроспекции. Синтаксис: mergeTreeIndex(database, table, [with_marks = true]), где database.table — существующая таблица с движком MergeTree. #58140 (Anton Popov).
  • Пытаться автоматически определять формат файла при определении схемы, если он неизвестен в движках file/s3/hdfs/url/azureBlobStorage. Закрывает #50576. #59092 (Kruglov Pavel).
  • Добавлена табличная функция generate_series. Эта функция генерирует таблицу с арифметической прогрессией натуральных чисел. #59390 (divanik).
  • Добавлен запрос ALTER TABLE table FORGET PARTITION partition, удаляющий узлы ZooKeeper, связанные с пустой партицией. #59507 (Sergei Trifonov).
  • Добавлена поддержка чтения и записи резервных копий в формате tar-архивов. #59535 (josh-hildred).
  • Добавлена новая агрегатная функция ‘groupArrayIntersect’. В продолжение: #49862. #59598 (Yarik Briukhovetskyi).
  • Реализована таблица system.dns_cache, которая может быть полезна для диагностики проблем с DNS. #59856 (Kirill Nikiforov).
  • Добавлена поддержка бакетов S3Express. #59965 (Nikita Taranov).
  • Кодек LZ4HC теперь поддерживает новый уровень 2, который работает быстрее прежнего минимального уровня 3, но обеспечивает меньшее сжатие. В предыдущих версиях LZ4HC(2) и ниже было равнозначно LZ4HC(3). Автор: Cyan4973. #60090 (Alexey Milovidov).
  • Реализована таблица system.dns_cache, которая может быть полезна при отладке проблем с DNS. Добавлена новая настройка сервера dns_cache_max_size. #60257 (Kirill Nikiforov).
  • Добавлена функция toMillisecond, которая возвращает миллисекундную составляющую для значений типа DateTime или DateTime64. #60281 (Shaun Struwig).
  • Добавлена поддержка варианта табличной функции merge с одним аргументом: merge(['db_name', ] 'tables_regexp'). #60372 (豪肥肥).
  • Все названия форматов теперь регистронезависимы: Tsv, TSV, tsv или даже rowbinary. #60420 (豪肥肥).
  • Добавлен новый синтаксис, позволяющий указывать пользователя-определителя в view/materialized view. Это позволяет выполнять SELECT/INSERT через представления без явных привилегий на базовые таблицы. #60439 (pufit).
  • Добавлены четыре свойства для StorageMemory (memory-engine): min_bytes_to_keep, max_bytes_to_keep, min_rows_to_keep и max_rows_to_keep — добавлены тесты, отражающие эти изменения, — обновлена документация memory.md — в MemorySink добавлено свойство таблицы context, чтобы обеспечить доступ к ограничениям параметров таблицы. #60612 (Jake Bamrah).
  • Добавлена функция toMillisecond, которая возвращает миллисекундную составляющую для значений типа DateTime или DateTime64. #60649 (Robert Schulze).
  • Раздельные ограничения на число ожидающих и выполняемых запросов. Добавлена новая настройка сервера max_waiting_queries, которая ограничивает число запросов, ожидающих из-за async_load_databases. Существующие ограничения на число выполняемых запросов больше не учитывают ожидающие запросы. #61053 (Sergei Trifonov).
  • Добавлена поддержка ATTACH PARTITION ALL. #61107 (Kirill Nikiforov).

Повышение производительности

  • Убирает агрегаторы min/max/any/anyLast для ключей GROUP BY в секции SELECT. #52230 (JackyWoo).
  • Улучшена производительность сериализованного метода агрегации при работе с несколькими [nullable] столбцами. Это обобщённая версия #51399, которая не нарушает целостность абстракции. #55809 (Amos Bird).
  • Ленивое построение результата JOIN для повышения производительности ALL JOIN. #58278 (LiuNeng).
  • Повышена производительность агрегатных функций ArgMin / ArgMax / any / anyLast / anyHeavy, а также запросов ORDER BY {u8/u16/u32/u64/i8/i16/u32/i64) LIMIT 1. #58640 (Raúl Marín).
  • Оптимизирована производительность условных sum/avg для bigint и больших типов Decimal за счёт уменьшения числа промахов предсказателя ветвлений. #59504 (李扬).
  • Повышена производительность запросов SELECT при наличии активных мутаций. #59531 (Azat Khuzhin).
  • Небольшая оптимизация фильтрации по столбцам. Фильтрация по тем столбцам фильтра, чей базовый тип данных не является числовым, при result_size_hint = -1 теперь не выполняется. В некоторых случаях пиковое потребление памяти можно снизить до 44% от исходного. #59698 (李扬).
  • Для первичного ключа будет использоваться меньше памяти. #60049 (Alexey Milovidov).
  • Улучшено использование памяти при работе с первичным ключом и некоторыми другими операциями. #60050 (Alexey Milovidov).
  • Первичные ключи таблиц будут загружаться в память отложенно, при первом обращении. Это поведение контролируется новой настройкой MergeTree primary_key_lazy_load, которая включена по умолчанию. Это дает несколько преимуществ: - они не будут загружаться для таблиц, которые не используются; - если памяти недостаточно, при первом использовании будет сгенерировано исключение, а не при запуске сервера. Это также имеет несколько недостатков: - задержка, связанная с загрузкой первичного ключа, будет приходиться на первый запрос, а не возникать до начала приема соединений; теоретически это может привести к эффекту thundering herd. Это закрывает #11188. #60093 (Alexey Milovidov).
  • Векторизованная функция dotProduct, полезная при векторном поиске. #60202 (Robert Schulze).
  • Если первичный ключ таблицы состоит в основном из бесполезных столбцов, не держите их в памяти. Это регулируется новой настройкой primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns со значением 0.9 по умолчанию, что означает: для составного первичного ключа, если столбец меняет своё значение как минимум в 0.9 всех случаев, следующие за ним столбцы загружаться не будут. #60255 (Alexey Milovidov).
  • Выполнять функцию multiIf в столбцовом режиме, если базовый тип result_type — числовой. #60384 (李扬).
  • Как показано на рис. 1, замена ”&&” на ”&” позволяет сгенерировать SIMD-код. изображение Рис. 1. Код, полученный при компиляции ’&&’ (слева) и ’&’ (справа). #60498 (Zhiguo Zhou).
  • Ускорены (почти в 2 раза) мьютексы (раньше работали медленнее из-за ThreadFuzzer). #60823 (Azat Khuzhin).
  • Перенесён этап освобождения соединений из prepare в work, а также реализовано параллельное освобождение нескольких соединений. #60845 (lizhuoyu5).
  • Оптимизирована insertManyFrom для Nullable(Number) и Nullable(String). #60846 (李扬).
  • Оптимизирована функция dotProduct, чтобы избежать ненужного и дорогостоящего копирования данных в памяти. #60928 (Robert Schulze).
  • Операции с файловым кэшем будут меньше страдать из-за конкуренции за блокировки. #61066 (Alexey Milovidov).
  • Оптимизирован ColumnString::replicate, а также предотвращено преобразование memcpySmallAllowReadWriteOverflow15Impl во встроенный memcpy при оптимизации. Закрывает #61074. ColumnString::replicate работает в 2,46 раза быстрее на x86-64. #61075 (李扬).
  • Печать 256-битных целых чисел стала в 30 раз быстрее. #61100 (Raúl Marín).
  • Если запрос с синтаксической ошибкой содержал матчер COLUMNS с регулярным выражением, это регулярное выражение компилировалось при каждом откате парсера, вместо того чтобы компилироваться один раз. Это была фундаментальная ошибка. Скомпилированное регулярное выражение помещалось в AST. Но буква A в AST означает “абстрактное”, а это значит, что оно не должно содержать тяжеловесных объектов. Части AST могут создаваться и отбрасываться во время разбора, в том числе при большом количестве откатов. Это замедляет разбор и, как следствие, позволяет пользователю только для чтения устраивать DoS-атаки. Но главная проблема в том, что это не даёт фаззерам продвигаться дальше. #61543 (Alexey Milovidov).

Улучшения

  • При выполнении запроса MODIFY COLUMN для materialized views проверяется структура внутренней таблицы, чтобы убедиться в наличии каждого столбца. #47427 (sunny).
  • Добавлена таблица system.keywords, содержащая все ключевые слова из парсера. В основном она нужна и будет использоваться для улучшения фаззинга и подсветки синтаксиса. #51808 (Nikita Mikhaylov).
  • Добавлена поддержка параметризованного представления в анализаторе, чтобы не анализировать создание параметризованного представления. Переработана существующая логика параметризованного представления, чтобы не анализировать создание параметризованного представления. #54211 (SmitaRKulkarni).
  • Движок базы данных Ordinary устарел. Если ваш сервер использует его, в clickhouse-client вы получите предупреждение. Это закрывает #52229. #56942 (shabroo).
  • При удалении таблицы необходимо удалить все блокировки zero copy, связанные с ней. Также нужно удалить каталог, в котором хранятся эти блокировки. #57575 (Sema Checherinda).
  • Реализована поддержка короткого замыкания для функции dictGetOrDefault. Закрывает #52098. #57767 (jsc0218).
  • Разрешено объявлять тип enum в структуре внешней таблицы. #57857 (Duc Canh Le).
  • Выполнение ALTER COLUMN MATERIALIZE для столбца с выражением DEFAULT или MATERIALIZED теперь записывает правильные значения: значение по умолчанию для существующих частей со значением по умолчанию и не заданное по умолчанию значение для существующих частей с не заданным по умолчанию значением. Ранее для всех существующих частей записывалось значение по умолчанию. #58023 (Duc Canh Le).
  • Включена логика задержки повторных попыток (например, экспоненциальной). Это позволит снизить нагрузку на CPU, использование памяти и размеры файлов журнала. #58036 (MikhailBurdukov).
  • При выборе частей для слияния теперь учитываются строки, удалённые с помощью легковесного удаления. #58223 (Zhuo Qiu).
  • Добавлена возможность задавать volume_priority в storage_configuration. #58533 (Andrey Zvonov).
  • Добавлена поддержка типа Date32 в кодеке T64. #58738 (Hongbin Ma).
  • Этот PR позволяет повторно использовать HTTP/HTTPS-соединения во всех случаях. Даже если ответ имеет код 3xx или 4xx. #58845 (Sema Checherinda).
  • Добавлены комментарии для столбцов в дополнительных системных таблицах. Продолжение https://github.com/ClickHouse/ClickHouse/pull/58356. #59016 (Nikita Mikhaylov).
  • Теперь в PREWHERE можно использовать виртуальные столбцы. Это особенно полезно для неконстантных виртуальных столбцов, таких как _part_offset. #59033 (Amos Bird).
  • Настройки для движка таблицы Distributed теперь можно задавать в файле конфигурации сервера (как и настройки MergeTree), например: <distributed> <flush_on_detach>false</flush_on_detach> </distributed>. #59291 (Azat Khuzhin).
  • Улучшение Keeper: хранить в памяти только ограниченное количество журналов; это количество задается параметрами latest_logs_cache_size_threshold и commit_logs_cache_size_threshold. #59460 (Antonio Andelic).
  • Вместо использования постоянного ключа объектное хранилище теперь генерирует ключ для проверки возможности удаления объектов. #59495 (Sema Checherinda).
  • По умолчанию не определять числа с плавающей запятой в экспоненциальной форме. Добавлена настройка input_format_try_infer_exponent_floats, которая восстанавливает прежнее поведение (по умолчанию отключена). Закрывает #59476. #59500 (Kruglov Pavel).
  • Разрешено заключать операции ALTER в круглые скобки. Выводом круглых скобок можно управлять с помощью настройки format_alter_operations_with_parentheses. По умолчанию в отформатированных запросах круглые скобки выводятся, поскольку в некоторых местах мы храним отформатированные операции ALTER как метаданные (например, Мутации). Новый синтаксис делает более понятными некоторые запросы, в которых операции ALTER заканчиваются списком. Например, запрос ALTER TABLE x MODIFY TTL date GROUP BY a, b, DROP COLUMN c невозможно корректно разобрать при старом синтаксисе. В новом синтаксисе запрос ALTER TABLE x (MODIFY TTL date GROUP BY a, b), (DROP COLUMN c) однозначен. Старые версии не могут читать новый синтаксис, поэтому его использование может вызвать проблемы, если в одном кластере одновременно используются более новые и более старые версии ClickHouse. #59532 (János Benjamin Antal).
  • Обновили Intel QPL (используется кодеком DEFLATE_QPL) с v1.3.1 до v1.4.0. Также исправили ошибку в механизме тайм-аута при polling: мы заметили, что в некоторых случаях тайм-аут срабатывал некорректно — если происходил тайм-аут, IAA и CPU могли обрабатывать буфер одновременно. На данный момент лучше убедиться, что статус кодека IAA не равен QPL_STS_BEING_PROCESSED, и затем переключаться на программный кодек. #59551 (jasperzhu).
  • Добавлена поддержка позиционного pread в libhdfs3. Чтобы вызвать позиционное чтение в libhdfs3, используйте функцию hdfsPread из hdfs.h следующим образом: tSize hdfsPread(hdfsFS fs, hdfsFile file, void * buffer, tSize length, tOffset position);. #59624 (M1eyu).
  • Добавлена проверка на переполнение стека в парсерах, даже если пользователь неправильно настроил параметр max_parser_depth, задав слишком большое значение. Это закрывает #59622. #59697 (Alexey Milovidov).
  • Унифицировано поведение именованных коллекций, созданных через XML и SQL, в хранилище Kafka. #59710 (Pervakov Grigorii).
  • Разрешено использовать uuid в replica_path, если он явно указан в CREATE TABLE. #59908 (Azat Khuzhin).
  • В системную таблицу system.tables добавлен столбец metadata_version для таблиц ReplicatedMergeTree. #59942 (Maksim Kita).
  • Улучшение Keeper: добавлены повторные попытки при ошибках в операциях, связанных с диском. #59980 (Antonio Andelic).
  • Добавлена новая настройка конфигурации backups.remove_backup_files_after_failure: <clickhouse> <backups> <remove_backup_files_after_failure>true</remove_backup_files_after_failure> </backups> </clickhouse>. #60002 (Vitaly Baranov).
  • При чтении метаданных таблиц из резервной копии во время выполнения команды RESTORE используется несколько потоков. #60040 (Vitaly Baranov).
  • Теперь, если у StorageBuffer более 1 сегмента (num_layers > 1), фоновый flush будет выполняться одновременно для всех сегментов в нескольких потоках. #60111 (alesapin).
  • Добавлена возможность указывать пользователей для отдельных настроек S3 в конфигурации с помощью ключа user. #60144 (Antonio Andelic).
  • Добавлено резервное переключение с копирования S3-файла из GCP на копирование через buffer, если GCP возвращает Internal Error с кодом HTTP-ошибки GATEWAY_TIMEOUT. #60164 (Maksim Kita).
  • Разрешить использовать “local” в качестве типа объектного хранилища вместо “local_blob_storage”. #60165 (Kseniia Sumarokova).
  • Реализован оператор сравнения для значений Variant и корректная вставка Field в столбец Variant. По умолчанию запрещено создавать тип Variant с похожими типами варианта (это можно разрешить с помощью настройки allow_suspicious_variant_types). Закрывает #59996. Закрывает #59850. #60198 (Kruglov Pavel).
  • Повышено общее удобство использования виртуальных столбцов. Теперь виртуальные столбцы можно использовать в PREWHERE (это особенно полезно для неконстантных виртуальных столбцов, таких как _part_offset). Также для виртуальных столбцов теперь доступна встроенная документация в виде комментария к столбцу в запросе DESCRIBE при включенной настройке describe_include_virtual_columns. #60205 (Anton Popov).
  • Короткое замыкание при выполнении ULIDStringToDateTime. #60211 (Juan Madurga).
  • В таблицы system.backups и system.backup_log добавлен столбец query_id. В столбец error добавлена трассировка стека ошибки. #60220 (Maksim Kita).
  • Параллельный сброс ожидающих блоков вставки движка Distributed при DETACH/выключении сервера и SYSTEM FLUSH DISTRIBUTED (параллелизм будет работать, только если для таблицы настроена политика с несколькими дисками (как и всё в движке Distributed сейчас)). #60225 (Azat Khuzhin).
  • Параметр filter в joinRightColumnsSwitchNullability задан некорректно, исправлено #59625. #60259 (lgbo).
  • Добавлена настройка, принудительно включающая read-through cache для слияний. #60308 (Kseniia Sumarokova).
  • В issue #57598 упоминается особенность поведения при обработке транзакций. Если выполнить COMMIT/ROLLBACK, когда ни одна транзакция не активна, это будет зарегистрировано как ошибка, в отличие от поведения MySQL. #60338 (PapaToemmsn).
  • Добавлен режим none_only_active для параметра distributed_ddl_output_mode. #60340 (Alexander Tokmakov).
  • Соединения через порт MySQL теперь автоматически используют настройку prefer_column_name_to_alias = 1, что обеспечивает поддержку QuickSight «из коробки». Кроме того, настройки mysql_map_string_to_text_in_show_columns и mysql_map_fixed_string_to_text_in_show_columns теперь включены по умолчанию; они также влияют только на соединения MySQL. Это повышает совместимость с большим числом BI-инструментов. #60365 (Robert Schulze).
  • Когда output format — Pretty format, а block состоит из одного числового значения, превышающего один миллион, справа в table будет выведено число в удобочитаемом виде. Например: ┌──────count()─┐ │ 233765663884 │ -- 233.77 billion └──────────────┘. #60379 (rogeryk).
  • Добавлена возможность настраивать обработчики HTTP-перенаправлений для clickhouse-server. Например, можно сделать так, чтобы / перенаправлял в интерфейс Play. #60390 (Alexey Milovidov).
  • Расширенная панель мониторинга получила немного улучшенную цветовую схему для многолинейных графиков. #60391 (Alexey Milovidov).
  • Исправлено состояние гонки в коде JavaScript, приводившее к дублированию диаграмм, накладывающихся друг на друга. #60392 (Alexey Milovidov).
  • Проверка переполнения стека в парсерах, даже если пользователь по ошибке установил для параметра max_parser_depth очень большое значение. Это закрывает #59622. #60434 (Alexey Milovidov).
  • У функции substring появился новый псевдоним byteSlice. #60494 (Robert Schulze).
  • Настройка сервера dns_cache_max_size была переименована в dns_cache_max_entries, чтобы устранить неоднозначность. #60500 (Kirill Nikiforov).
  • SHOW INDEX | INDEXES | INDICES | KEYS больше не сортирует по столбцам первичного ключа (что было неочевидно). #60514 (Robert Schulze).
  • Улучшение в Keeper: прерывание запуска при обнаружении недопустимого снимка во избежание потери данных. #60537 (Antonio Andelic).
  • Добавлена инъекция сбоев при разделении диапазонов чтения MergeTree на пересекающиеся и непересекающиеся с использованием настройки merge_tree_read_split_ranges_into_intersecting_and_non_intersecting_fault_probability. #60548 (Maksim Kita).
  • На панели мониторинга Advanced элементы управления теперь всегда остаются видимыми при прокрутке. Это позволяет добавлять новый график без прокрутки вверх. #60692 (Alexey Milovidov).
  • Типы String и enum можно использовать в одном контексте, например в массивах, запросах UNION и условных выражениях. Это закрывает #60726. #60727 (Alexey Milovidov).
  • tzdata обновлён до версии 2024a. #60768 (Raúl Marín).
  • Поддержка файлов без расширения в базе данных Filesystem. #60795 (Kruglov Pavel).
  • Улучшение в Keeper: поддержка leadership_expiry_ms в настройках Keeper. #60806 (Brokenice0415).
  • Числа в экспоненциальной форме в форматах JSON теперь всегда определяются независимо от настройки input_format_try_infer_exponent_floats. Добавлена настройка input_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects, которая позволяет использовать тип String для неоднозначных путей вместо Исключения при выводе именованных Tuple из объектов JSON. #60808 (Kruglov Pavel).
  • Добавлен флаг для SMJ, позволяющий трактовать NULL как наибольшее/наименьшее значение, чтобы поведение было совместимо с другими SQL-системами, такими как Apache Spark. #60896 (loudongfeng).
  • Версия ClickHouse была добавлена в метки Docker. Закрывает #54224. #60949 (Nikolay Monkov).
  • Добавлена настройка parallel_replicas_allow_in_with_subquery = 1, позволяющая использовать подзапросы в IN при работе с параллельными репликами. #60950 (Nikolai Kochetov).
  • DNSResolver перемешивает набор разрешённых IP-адресов. #60965 (Sema Checherinda).
  • Добавлена поддержка определения формата вывода по расширению файла в clickhouse-client и clickhouse-local. #61036 (豪肥肥).
  • Периодически проверять изменения лимита памяти. #61049 (Han Fei).
  • По умолчанию включён сбор данных профилирования процессоров (затраченное время, объём входящих и исходящих байтов для сортировки, агрегации, …). #61096 (Azat Khuzhin).
  • Добавлена функция toUInt128OrZero, которая была по ошибке пропущена (эта ошибка связана с https://github.com/ClickHouse/ClickHouse/pull/945). Псевдонимы совместимости FROM_UNIXTIME и DATE_FORMAT (они не являются встроенными в ClickHouse и существуют только для совместимости с MySQL) сделали регистронезависимыми, как и ожидается от SQL-совместимых псевдонимов. #61114 (Alexey Milovidov).
  • Улучшены проверки доступа: теперь можно отзывать непредоставленные права, даже если у целевого пользователя тоже нет привилегий на отзыв. Пример: ```sql GRANT SELECT ON . TO user1; REVOKE SELECT ON system.* FROM user1;. #61115 (pufit).
  • Исправлена ошибка в предыдущей оптимизации: https://github.com/ClickHouse/ClickHouse/pull/59698 — убран break, чтобы первый отфильтрованный столбец гарантированно имел минимальный размер cc @jsc0218. #61145 (李扬).
  • Исправлена функция has() для столбца типа Nullable (устраняет проблему #60214). #61249 (Mikhail Koviazin).
  • Теперь можно указывать атрибут merge="true" в подстановках конфигурации для поддеревьев <include from_zk="/path" merge="true">. Если этот атрибут указан, ClickHouse объединит поддерево с существующей конфигурацией, в противном случае поведение по умолчанию — добавление нового содержимого в конфигурацию. #61299 (alesapin).
  • Добавлены асинхронные метрики для сопоставлений виртуальной памяти: VMMaxMapCount & VMNumMaps. Закрывает #60662. #61354 (Tuan Pham Anh).
  • Используйте настройку temporary_files_codec везде, где создаются временные данные, например при сортировке с использованием внешней памяти и GROUP BY с использованием внешней памяти. Ранее это работало только для алгоритма partial_merge JOIN. #61456 (Maksim Kita).
  • Удалена повторяющаяся проверка containing_part.empty(): она уже выполняется здесь: https://github.com/ClickHouse/ClickHouse/blob/1296dac3c7e47670872c15e3f5e58f869e0bd2f2/src/Storages/MergeTree/MergeTreeData.cpp#L6141. #61467 (William Schoeffel).
  • Добавлена новая настройка max_parser_backtracks, которая позволяет ограничить сложность разбора запроса. #61502 (Alexey Milovidov).
  • Снижена конкуренция при динамическом изменении размера файлового кэша. #61524 (Kseniia Sumarokova).
  • Запретить режим сегментирования для очереди StorageS3, поскольку его будут переписывать. #61537 (Kseniia Sumarokova).
  • Исправлена опечатка: use_leagcy_max_level заменено на use_legacy_max_level. #61545 (William Schoeffel).
  • Удалены некоторые дублирующиеся записи в blob_storage_log. #61622 (YenchangChan).
  • Добавлена функция current_user как псевдоним для совместимости с MySQL. #61770 (Yarik Briukhovetskyi).
  • Используйте управляемую идентичность для операций IO резервных копий при работе с Azure Blob Storage. Добавлена настройка, которая не позволяет ClickHouse пытаться создавать несуществующий контейнер, что требует разрешений на уровне учетной записи хранения. #61785 (Daniel Pozo Escalona).
  • В предыдущей версии некоторые числа в форматах Pretty выглядели недостаточно красиво. #61794 (Alexey Milovidov).
  • Длинное значение в форматах Pretty не будет обрезано, если оно является единственным значением в наборе результатов, например в результате запроса SHOW CREATE TABLE. #61795 (Alexey Milovidov).
  • По аналогии с clickhouse-local, clickhouse-client также поддерживает параметр --output-format как синоним --format. Это закрывает #59848. #61797 (Alexey Milovidov).
  • Если stdout — это терминал и выходной формат не указан, clickhouse-client и аналогичные инструменты по умолчанию будут использовать PrettyCompact, как и в интерактивном режиме. clickhouse-client и clickhouse-local будут единообразно обрабатывать аргументы командной строки для входных и выходных форматов. Это закрывает #61272. #61800 (Alexey Milovidov).
  • В форматах Pretty группы цифр теперь для лучшей читаемости разделяются символом подчёркивания. Это управляется новой настройкой output_format_pretty_highlight_digit_groups. #61802 (Alexey Milovidov).

Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)

  • Исправлена ошибка в intDiv для аргументов типа Decimal #59243 (Yarik Briukhovetskyi).
  • Исправление_ошибки_kql,_найденной_wingfuzz #59626 (Yong Wang).
  • Исправлена ошибка “Read beyond last offset” в буфере AsynchronousBoundedReadBuffer #59630 (Vitaly Baranov).
  • rabbitmq: исправлена ситуация, при которой сообщения не были ни подтверждены, ни отклонены #59775 (Kseniia Sumarokova).
  • Исправлено выполнение функций для const и LowCardinality при GROUP BY const в анализаторе #59986 (Azat Khuzhin).
  • Исправлено преобразование точности для DateTime64 #60004 (Yarik Briukhovetskyi).
  • Исправлена вставка INSERT в SQLite при наличии одинарной кавычки (одинарные кавычки теперь экранируются кавычкой, а не обратной косой чертой) #60015 (Azat Khuzhin).
  • Исправлено удаление псевдонима столбца оптимизацией optimize_uniq_to_count #60026 (Raúl Marín).
  • Исправлено значение finished_mutations_to_keep=0 в MergeTree (как указано в документации, 0 означает сохранять всё) #60031 (Azat Khuzhin).
  • Исправлено возможное исключение при удалении таблицы s3queue #60036 (Kseniia Sumarokova).
  • Некорректные диапазоны в PartsSplitter для одной и той же части #60041 (Maksim Kita).
  • Использовать max_query_size из контекста в DDLLogEntry вместо жёстко заданного значения 4096 #60083 (Kruglov Pavel).
  • Исправлена несогласованность в форматировании запросов #60095 (Alexey Milovidov).
  • Исправлено непоследовательное форматирование EXPLAIN в подзапросах #60102 (Alexey Milovidov).
  • Исправлен сбой в cosineDistance при использовании Nullable #60150 (Raúl Marín).
  • Разрешено приводить логические значения в строковом представлении к значению true #60160 (Robert Schulze).
  • Исправлена system.s3queue_log #60166 (Kseniia Sumarokova).
  • Исправлена ошибка в arrayReduce при использовании имени Nullable агрегатной функции #60188 (Raúl Marín).
  • Исправлено выполнение действий при предварительной фильтрации (PK, отсечении партиций) #60196 (Azat Khuzhin).
  • Скрыта конфиденциальная информация в s3queue #60233 (Kseniia Sumarokova).
  • Отменена “замена ORDER BY ALL на ORDER BY *#60248 (Robert Schulze).
  • Azure Blob Storage : исправлены проблемы с конечной точкой и префиксом #60251 (SmitaRKulkarni).
  • Исправлены коды исключений HTTP. #60252 (Austin Kothig).
  • исправлена ошибка в кэше LRUResource (кэш Hive) #60262 (shanfengp).
  • s3queue: исправлена ошибка (также исправлен нестабильный тест test_storage_s3_queue/test.py::test_shards_distributed) #60282 (Kseniia Sumarokova).
  • Исправлено использование неинициализированного значения и некорректный результат в хеш-функциях для IPv6 #60359 (Kruglov Pavel).
  • Принудительный повторный анализ при изменении параллельных реплик #60362 (Raúl Marín).
  • Исправлено использование простого типа метаданных в новой опции конфигурации disks #60396 (Kseniia Sumarokova).
  • Не разрешать устанавливать max_parallel_replicas в 0, поскольку это не имеет смысла #60430 (Kruglov Pavel).
  • Попытка исправления логической ошибки ‘Не удаётся захватить столбец, так как у него несовместимый тип’ в mapContainsKeyLike #60451 (Kruglov Pavel).
  • Исправлен OptimizeDateOrDateTimeConverterWithPreimageVisitor при аргументах со значением NULL #60453 (Raúl Marín).
  • По возможности избегать вычисления скалярных подзапросов в CREATE TABLE. #60464 (Nikolai Kochetov).
  • Слияние #59674. #60470 (Alexey Milovidov).
  • Исправлена проверка ключей в s3Cluster #60477 (Antonio Andelic).
  • Исправлена взаимная блокировка при параллельном парсинге, когда из-за ошибок пропускается большое количество строк #60516 (Kruglov Pavel).
  • Исправлено_значение_max_query_size_для_составного_оператора_KQL: #60534 (Yong Wang).
  • Исправление Keeper: добавлены тайм-ауты при ожидании журналов коммитов #60544 (Antonio Andelic).
  • Сокращено количество строк, считываемых из system.numbers #60546 (JackyWoo).
  • Не выводить числовые подсказки для типов даты #60577 (Raúl Marín).
  • Исправлено чтение из MergeTree при использовании недетерминированных функций в фильтре #60586 (Kruglov Pavel).
  • Исправлена логическая ошибка при некорректном типе значения параметра совместимости #60596 (Kruglov Pavel).
  • Исправлена несогласованность состояний агрегатных функций в смешанных кластерах x86-64 / ARM #60610 (Harry Lee).
  • fix(prql): Надёжный обработчик паники #60615 (Maximilian Roos).
  • Исправлен intDiv для аргументов Decimal и Date #60672 (Yarik Briukhovetskyi).
  • Исправлено: раскрытие CTE в запросе alter modify #60682 (Yakov Olkhovskiy).
  • Исправлен system.parts для движков баз данных, отличных от Atomic/Ordinary (то есть Memory) #60689 (Azat Khuzhin).
  • Исправлена ошибка “Invalid storage definition in metadata file” для параметризованных представлений #60708 (Azat Khuzhin).
  • Исправлено переполнение буфера в CompressionCodecMultiple #60731 (Alexey Milovidov).
  • Удалена бессмыслица в SQL/JSON #60738 (Alexey Milovidov).
  • Удалена некорректная проверка sanitize в агрегатной функции quantileGK #60740 (李扬).
  • Исправлена ошибка в insert-select + insert_deduplication_token путём установки значения streams в 1 #60745 (Jordi Villar).
  • Предотвращена установка пользовательских заголовков метаданных для неподдерживаемых операций multipart-загрузки #60748 (Francisco J. Jurado Moreno).
  • Исправлено в toStartOfInterval #60763 (Andrey Zvonov).
  • Исправлено падение в arrayEnumerateRanked #60764 (Raúl Marín).
  • Исправлен сбой при использовании input() в запросе INSERT SELECT JOIN #60765 (Kruglov Pavel).
  • Исправлен сбой при разных значениях allow_experimental_analyzer в подзапросах #60770 (Dmitry Novik).
  • Устранена рекурсия при чтении из S3 #60849 (Antonio Andelic).
  • Исправлено возможное зависание из-за ошибки в HashedDictionaryParallelLoader #60926 (vdimir).
  • Исправлена асинхронная команда RESTORE для базы данных Replicated #60934 (Antonio Andelic).
  • Устранена взаимная блокировка при асинхронных вставках в таблицы Log через собственный протокол #61055 (Anton Popov).
  • Исправлено ленивое вычисление аргумента по умолчанию в dictGetOrDefault для RangeHashedDictionary #61196 (Kruglov Pavel).
  • Исправлены несколько ошибок в groupArraySorted #61203 (Raúl Marín).
  • Исправлена перенастройка Keeper в автономном бинарном файле #61233 (Antonio Andelic).
  • Исправлено использование session_token в движке S3 #61234 (Kruglov Pavel).
  • Исправлен возможный неверный результат агрегатной функции uniqExact #61257 (Anton Popov).
  • Исправлены ошибки в команде SHOW DATABASE #61269 (Raúl Marín).
  • Исправлена логическая ошибка в хранилище RabbitMQ со столбцами MATERIALIZED #61320 (vdimir).
  • Исправлена команда CREATE OR REPLACE DICTIONARY #61356 (Vitaly Baranov).
  • Исправлен запрос ATTACH с внешним ON CLUSTER #61365 (Nikolay Degterinsky).
  • исправлена проблема с split в DAG действий #61458 (Raúl Marín).
  • Исправлено завершение неуспешной операции RESTORE #61466 (Vitaly Baranov).
  • Корректно отключён async_insert_use_adaptive_busy_timeout при использовании настроек совместимости #61468 (Raúl Marín).
  • Добавлена возможность ставить задачи в очередь в пуле восстановления #61475 (Nikita Taranov).
  • Исправлена ошибка при чтении system.parts по UUID (issue 61220). #61479 (Dan Wu).
  • Исправлено падение в оконном представлении #61526 (Alexey Milovidov).
  • Исправлена работа repeat с ненативными целыми числами #61527 (Antonio Andelic).
  • Исправлен аргумент -s в клиенте #61530 (Mikhail f. Shiryaev).
  • Исправлен сбой в функции arrayPartialReverseSort #61539 (Raúl Marín).
  • Исправлен поиск строки при константной позиции #61547 (Antonio Andelic).
  • Исправлена ошибка, из-за которой addDays вызывал ошибку при использовании datetime64 #61561 (Shuai li).
  • Исправлен system.part_log при async insert с дедупликацией #61620 (Antonio Andelic).
  • Исправлен набор Non-ready в system.parts. #61666 (Nikolai Kochetov).
Последнее изменение 10 июня 2026 г.