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

Журнал изменений v24.2

Тег релиза 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. Поэтому вы можете выбрать, какой тип данных Arrow использовать для типа данных ClickHouse String — 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 security для представлений https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security. #54901 (pufit)

Новая функция

  • Режим topk/topkweighed, возвращающий количество значений и оценку ошибки. #54508 (UnamedRus).
  • Добавлен новый синтаксис, который позволяет указать пользователя-определителя (definer) в view/materialized view. Это позволяет выполнять операции SELECT/INSERT из представлений без явных привилегий на базовые таблицы. #54901 (pufit).
  • Реализовано автоматическое преобразование таблиц семейства MergeTree различных типов в реплицируемый движок. Создайте пустой файл 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 (豪肥肥).
  • Добавлен новый синтаксис, который позволяет указать пользователя-определителя (definer user) для view/materialized view. Это позволяет выполнять операции SELECT и INSERT из представлений без явной выдачи прав на базовые таблицы. #60439 (pufit).
  • Добавлены четыре свойства к StorageMemory (движок памяти): 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. #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 и big decimal за счёт сокращения промахов предсказания ветвлений. #59504 (李扬).
  • Улучшена производительность запросов SELECT при наличии активных мутаций. #59531 (Azat Khuzhin).
  • Тривиальная оптимизация фильтрации по столбцу. Избегайте фильтрации по столбцам, базовый тип данных которых не является числовым, при использовании result_size_hint = -1. В некоторых случаях пиковое потребление памяти может быть снижено до 44% от исходного. #59698 (李扬).
  • Первичный ключ будет занимать меньше памяти. #60049 (Alexey Milovidov).
  • Оптимизировано использование памяти для первичного ключа и некоторых других операций. #60050 (Alexey Milovidov).
  • Первичные ключи таблиц будут загружаться в память по требованию при первом обращении. Это контролируется новой настройкой MergeTree primary_key_lazy_load, которая по умолчанию включена. Это даёт несколько преимуществ: - первичный ключ не будет загружаться для таблиц, которые не используются; - если памяти недостаточно, исключение будет выброшено при первом использовании, а не при запуске сервера. Это даёт несколько недостатков: - задержка на загрузку первичного ключа будет возникать при выполнении первого запроса, а не до принятия подключений; теоретически это может привести к проблеме «лавинообразной нагрузки». Это закрывает #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-числовых и Nullable-строковых типов. #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).
  • Если запрос с синтаксической ошибкой содержал matcher COLUMNS с регулярным выражением, то регулярное выражение компилировалось заново при каждом откате парсера (backtracking), вместо однократной компиляции. Это была фундаментальная ошибка. Скомпилированный regexp помещался в AST. Но буква A в AST означает «abstract», то есть он не должен содержать тяжеловесных объектов. Части AST могут создаваться и уничтожаться в процессе парсинга, включая большое количество откатов. Это приводит к замедлению на стороне парсинга и, как следствие, позволяет осуществлять DoS от пользователя только с правами на чтение. Но основная проблема в том, что это мешает прогрессу фаззеров. #61543 (Alexey Milovidov).

Улучшение

  • При выполнении запроса MODIFY COLUMN для materialized views проверяйте структуру внутренней таблицы, чтобы убедиться, что все столбцы присутствуют. #47427 (sunny).
  • Добавлена таблица system.keywords, которая содержит все ключевые слова, известные парсеру. В основном предназначена для улучшения фаззинга и подсветки синтаксиса. #51808 (Nikita Mikhaylov).
  • Добавлена поддержка параметризованных представлений в анализаторе, чтобы не анализировать оператор CREATE PARAMETERIZED VIEW. Отрефакторена существующая логика параметризованных представлений, чтобы не анализировать оператор CREATE PARAMETERIZED VIEW. #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).
  • По умолчанию не определять тип Float для чисел в экспоненциальной нотации. Добавлена настройка 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. Также исправлена ошибка в механизме таймаута опроса: мы наблюдали, что в некоторых случаях таймаут работает некорректно — если он срабатывает, IAA и CPU могут обрабатывать буфер одновременно. На данный момент лучше убедиться, что статус кодека IAA не QPL_STS_BEING_PROCESSED, а затем переключаться на программный (SW) кодек. #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).
  • Добавлен столбец metadata_version для таблиц ReplicatedMergeTree в системную таблицу system.tables. #59942 (Maksim Kita).
  • Улучшение Keeper: добавлены повторные попытки выполнения при сбоях операций, связанных с диском Disk. #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 больше одного сегмента (num_layers > 1), фоновый сброс будет выполняться одновременно для всех сегментов в нескольких потоках. #60111 (alesapin).
  • Добавлена возможность указывать пользователей для отдельных настроек S3 в конфигурации с использованием ключа user. #60144 (Antonio Andelic).
  • Резервный механизм копирования S3‑файла через GCP изменён: теперь при возврате 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).
  • Добавлен столбец query_id в таблицы system.backups и system.backup_log. В столбец error добавлена трассировка стека ошибки. #60220 (Maksim Kita).
  • Параллельный сброс ожидающих INSERT-блоков движка Distributed при DETACH/выключении сервера и SYSTEM FLUSH DISTRIBUTED (параллелизм будет работать только если для таблицы настроена политика хранения с несколькими дисками, как и для всего в движке Distributed сейчас). #60225 (Azat Khuzhin).
  • Исправлена некорректная настройка фильтра в joinRightColumnsSwitchNullability, см. #59625. #60259 (lgbo).
  • Добавлена настройка, принудительно включающая read-through-кэш при слияниях. #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).
  • Когда формат вывода — Pretty и блок состоит из одного числового значения, которое превышает один миллион, в правой части таблицы будет напечатано удобочитаемое число. Например: ┌──────count()─┐ │ 233765663884 │ -- 233.77 billion └──────────────┘. #60379 (rogeryk).
  • Добавлена возможность настраивать обработчики перенаправлений HTTP для clickhouse-server. Например, можно сделать так, чтобы / перенаправлял на Play UI. #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 на пересекающиеся и непересекающиеся для инъекции сбоев (fault injection) с использованием настройки merge_tree_read_split_ranges_into_intersecting_and_non_intersecting_fault_probability. #60548 (Maksim Kita).
  • В расширенном дашборде элементы управления теперь всегда остаются видимыми при прокрутке. Это позволяет добавлять новый график, не прокручивая страницу вверх. #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 для неоднозначных путей вместо генерации исключения при выводе типов именованных Tuples из объектов 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).
  • Теперь в подстановках конфигурации для поддеревьев вида <include from_zk="/path" merge="true"> можно указывать атрибут merge="true". Если этот атрибут указан, ClickHouse будет объединять поддерево с существующей конфигурацией, в противном случае используется поведение по умолчанию: новое содержимое просто добавляется к конфигурации. #61299 (alesapin).
  • Добавлены асинхронные метрики для отображений виртуальной памяти: VMMaxMapCount и VMNumMaps. Закрывает #60662. #61354 (Tuan Pham Anh).
  • Настройка temporary_files_codec теперь используется во всех местах, где создаются временные данные, например при сортировке с использованием внешней памяти и внешнем GROUP BY. Ранее она работала только в алгоритме JOIN partial_merge. #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).
  • Используйте управляемое удостоверение для операций ввода-вывода резервных копий при работе с 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: исправлена проблема, при которой сообщения не были ни подтверждены (acked), ни отклонены (nacked) #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).
  • Разрешено приводить булевы значения в строковом представлении к булевому типу #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 : исправлены проблемы с endpoint-адресом и префиксом #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).
  • Исправлено использование типа метаданных plain с новым параметром конфигурации дисков #60396 (Kseniia Sumarokova).
  • Запрещена установка max_parallel_replicas в 0, так как это не имеет смысла #60430 (Kruglov Pavel).
  • Попытка исправить логическую ошибку «Cannot capture column because it has incompatible type» в 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).
  • Fix_max_query_size_for_kql_compound_operator: #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 для реплицируемой базы данных #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).
  • исправлена проблема с разбиением 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).
  • Исправлен сбой в WINDOW VIEW #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 для асинхронных вставок с дедупликацией #61620 (Antonio Andelic).
  • Исправлен non-ready Set для system.parts. #61666 (Nikolai Kochetov).