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

Список изменений v24.2

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

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

  • Теперь выполняется проверка подозрительных/экспериментальных типов во вложенных типах. Ранее такие типы (кроме JSON) не проверялись во вложенных типах, таких как Array/Tuple/Map. #59385 (Kruglov Pavel).
  • Условие сортировки ORDER BY ALL (введённое в версии 23.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).
  • Устаревшие части данных в памяти были помечены как deprecated начиная с версии 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).
  • Исправление уязвимости в безопасности материализованного представления, из-за которой пользователь мог выполнять вставку в таблицу без необходимых грантов. Исправление проверяет, что у пользователя есть права на вставку не только в материализованное представление, но и во все базовые таблицы. Это означает, что некоторые запросы, которые раньше работали, теперь могут завершаться с ошибкой «Not enough privileges». Чтобы решить эту проблему, в релизе представлена новая функция SQL security для представлений https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security. #54901 (pufit)

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

  • Режим работы topK/topKWeighted, возвращающий количество значений и оценку погрешности. #54508 (UnamedRus).
  • Добавлен новый синтаксис, позволяющий указать пользователя-определителя в представлении/материализованном представлении. Это позволяет выполнять 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(['db_name', ] 'tables_regexp'). #60372 (豪肥肥).
  • Все названия форматов сделаны нечувствительными к регистру, например Tsv, TSV, tsv или даже rowbinary. #60420 (豪肥肥).
  • Добавлен новый синтаксис, позволяющий указать пользователя-определителя (definer) в представлении/материализованном представлении. Это позволяет выполнять операторы 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 — добавлено свойство таблицы context для MemorySink, чтобы обеспечить доступ к граничным значениям параметров таблицы. #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 для повышения производительности 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 по умолчанию, что означает: для составного первичного ключа, если значение столбца меняется как минимум в 90 % строк, последующие за ним столбцы не будут загружаться в память. #60255 (Alexey Milovidov).
  • Выполнять функцию multiIf постолбцово, если базовый тип result_type — числовой. #60384 (李扬).
  • Как показано на рис. 1, замена "&&" на "&" позволяет сгенерировать SIMD-код. image Рис. 1. Код, полученный при компиляции '&&' (слева) и '&' (справа). #60498 (Zhiguo Zhou).
  • Мьютексы работают почти в 2 раза быстрее (ранее они были медленнее из‑за ThreadFuzzer). #60823 (Azat Khuzhin).
  • Перенесён процесс дренирования соединений из этапа подготовки в этап работы и реализовано параллельное дренирование нескольких соединений. #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).
  • Если запрос с синтаксической ошибкой содержал COLUMNS matcher с регулярным выражением, это регулярное выражение компилировалось каждый раз во время бэктрекинга парсера вместо однократной компиляции. Это была фундаментальная ошибка. Скомпилированное регулярное выражение помещалось в AST. Но буква A в AST означает «abstract», что означает, что он не должен содержать тяжеловесных объектов. Части AST могут создаваться и отбрасываться в процессе парсинга, включая большое количество шагов бэктрекинга. Это приводит к замедлению на стороне парсинга и, как следствие, позволяет пользователю с доступом только на чтение выполнить DoS-атаку. Но основная проблема в том, что это мешает прогрессу фаззеров. #61543 (Alexey Milovidov).

Улучшение

  • При выполнении запроса MODIFY COLUMN для материализованных представлений проверьте структуру внутренней таблицы, чтобы убедиться, что все столбцы присутствуют. #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).
  • Включён механизм backoff (например, экспоненциального). Это позволит снизить загрузку 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. Также исправлена ошибка в механизме таймаута при опросе: в некоторых случаях таймаут мог работать некорректно, и при его наступлении 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).
  • Добавлен столбец metadata_version в системную таблицу system.tables для таблиц ReplicatedMergeTree. #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).
  • Добавлена настройка, позволяющая принудительно использовать кэш сквозного чтения при слияниях. #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&nbsp;млрд └──────────────┘. #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).
  • Строковые типы и типы 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 для неоднозначных путей вместо генерации исключения при выводе типов именованных кортежей из 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).
  • Улучшены проверки доступа, позволяющие отзывать права, которыми вы не обладаете, в случае, если у целевого пользователя также нет соответствующих прав GRANT. Пример: ```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 с использованием внешней памяти. Ранее она работала только в алгоритме 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).
  • Используйте управляемое удостоверение (managed identity) для операций ввода-вывода (I/O) при работе с резервными копиями в 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).
  • Fix_kql_issue_found_by_wingfuzz #59626 (Yong Wang).
  • Исправлена ошибка «Read beyond last offset» для AsynchronousBoundedReadBuffer #59630 (Vitaly Baranov).
  • rabbitmq: исправлена ситуация, при которой сообщения не были ни подтверждены (ack), ни отклонены (nack) #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 с именем агрегатной функции, допускающим значение NULL #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 и prefix #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).
  • Исправлено использование простого типа метаданных с новым параметром конфигурации дисков #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).
  • Исправление 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): Надёжный обработчик panic #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).
  • Предотвращена возможность установки пользовательских заголовков метаданных для неподдерживаемых операций многокомпонентной загрузки #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 в system.parts. #61666 (Nikolai Kochetov).