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

Журнал изменений v24.6 для Cloud

Важные изменения в сервисах ClickHouse Cloud в релизе v24.6.

Изменения, нарушающие обратную совместимость

  • Переработана параллельная обработка в режиме Ordered хранилища S3Queue. Этот PR нарушает обратную совместимость для режима Ordered, если вы использовали настройки s3queue_processing_threads_num или s3queue_total_shards_num. Настройка s3queue_total_shards_num удалена; ранее её было разрешено использовать только при включённой опции s3queue_allow_experimental_sharded_mode, которая теперь объявлена устаревшей. Добавлена новая настройка — s3queue_buckets. #64349 (Kseniia Sumarokova).
  • Добавлены новые функции snowflakeIDToDateTime, snowflakeIDToDateTime64, dateTimeToSnowflakeID и dateTime64ToSnowflakeID. В отличие от существующих функций snowflakeToDateTime, snowflakeToDateTime64, dateTimeToSnowflake и dateTime64ToSnowflake, новые функции совместимы с функцией generateSnowflakeID, то есть они принимают snowflake‑ID, сгенерированные generateSnowflakeID, и возвращают snowflake‑ID того же типа, что и generateSnowflakeID (то есть UInt64). Кроме того, новые функции по умолчанию используют эпоху UNIX (она же 1970‑01‑01), так же как generateSnowflakeID. При необходимости можно передать другую эпоху, например эпоху Twitter/X 2010‑11‑04, то есть 1288834974657 мс с начала эпохи UNIX. Старые функции конвертации объявлены устаревшими и будут удалены после переходного периода; чтобы продолжать использовать их, включите настройку allow_deprecated_snowflake_conversion_functions. #64948 (Robert Schulze).

Новые возможности

  • Поддержка пустых кортежей. #55061 (Amos Bird).
  • Добавлены функции кодирования и декодирования на основе кривой Гильберта. #60156 (Artem Mustafin).
  • Добавлена поддержка анализа индексов над hilbertEncode. #64662 (Artem Mustafin).
  • Добавлена поддержка чтения геометрии LINESTRING в формате WKT с помощью функции readWKTLineString. #62519 (Nikita Mikhaylov).
  • Добавлены новые SQL-функции generateSnowflakeID для генерации идентификаторов Snowflake в стиле Twitter. #63577 (Danila Puzov).
  • Добавлена поддержка сравнения типов IPv4 и IPv6 с использованием оператора =. #64292 (Francisco J. Jurado Moreno).
  • Добавлена поддержка десятичных аргументов в бинарных математических функциях (pow, atan2, max2, min2, hypot). #64582 (Mikhail Gorshkov).
  • Добавлены SQL-функции parseReadableSize (а также варианты OrNull и OrZero). #64742 (Francisco J. Jurado Moreno).
  • Добавлен виртуальный столбец _time в файловые хранилища (s3/file/hdfs/url/azureBlobStorage). #64947 (Ilya Golshtein).
  • Добавлены новые функции base64URLEncode, base64URLDecode и tryBase64URLDecode. #64991 (Mikhail Gorshkov).
  • Добавлена новая функция editDistanceUTF8, вычисляющая редакционное расстояние между двумя строками в UTF-8. #65269 (LiuNeng).
  • Добавлен параметр конфигурации http_response_headers для поддержки пользовательских заголовков ответа в пользовательских HTTP-обработчиках. #63562 (Grigorii).
  • Добавлена новая табличная функция loop для возврата результатов запроса в бесконечном цикле. #63452 (Sariel). Полезно для тестирования.
  • В system.query_log добавлены два дополнительных столбца: used_privileges и missing_privileges. В used_privileges записываются привилегии, которые были проверены во время выполнения запроса, а missing_privileges содержит требуемые, но отсутствующие привилегии. #64597 (Alexey Katsman).
  • Добавлена настройка output_format_pretty_display_footer_column_names, которая при включении отображает имена столбцов в конце таблицы для длинных таблиц (по умолчанию — от 50 строк), при этом пороговое значение минимального количества строк управляется настройкой output_format_pretty_display_footer_column_names_min_rows. #65144 (Shaun Struwig).

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

  • Исправлена регрессия производительности операции CROSS JOIN, возникшая в #60459 (24.5). #65243 (Nikita Taranov).
  • Улучшена отслеживаемость повторных отправок io_uring. Переименовано событие профилирования IOUringSQEsResubmits -> IOUringSQEsResubmitsAsync и добавлено новое событие IOUringSQEsResubmitsSync. #63699 (Tomer Shafir).
  • Добавлены ассерты, проверяющие, что все функции вызываются с колонками правильного размера. #63723 (Raúl Marín).
  • Добавлена возможность перераспределять строки при вставке для оптимизации объёма данных без нарушения порядка, заданного PRIMARY KEY. Это поведение управляется настройкой optimize_row_order (по умолчанию выключена). #63578 (Igor Markelov).
  • Добавлен нативный ридер Parquet, который может напрямую считывать двоичный формат Parquet в столбцы ClickHouse. Управляется настройкой input_format_parquet_use_native_reader (по умолчанию отключён). #60361 (ZhiHong Zhang).
  • Добавлена поддержка частичной тривиальной оптимизации операции count, когда фильтр запроса может выбирать точные диапазоны из таблиц MergeTree. #60463 (Amos Bird).
  • Снижено максимальное потребление памяти многопоточных операций INSERT за счет сбора фрагментов из нескольких потоков в одном шаге преобразования. #61047 (Yarik Briukhovetskyi).
  • Уменьшили потребление памяти при работе с объектным хранилищем Azure за счёт фиксированного распределения памяти, без выделения дополнительного буфера. #63160 (SmitaRKulkarni).
  • Сокращено число вызовов виртуальных функций в ColumnNullable::size. #60556 (HappenLee).
  • Ускорена работа splitByRegexp, когда аргумент регулярного выражения является одним символом. #62696 (Robert Schulze).
  • Ускорена агрегация по 8- и 16-битным ключам за счёт отслеживания минимального и максимального значений ключей. Это позволяет сократить количество ячеек, которые нужно проверять. #62746 (Jiebin Sun).
  • Оптимизирован оператор IN, когда левый операнд имеет тип LowCardinality, а правый — набор констант. #64060 (Zhiguo Zhou).
  • Использовать пул потоков для инициализации и удаления хеш-таблиц в ConcurrentHashJoin. #64241 (Nikita Taranov).
  • Оптимизированы вертикальные слияния в таблицах с разреженными столбцами. #64311 (Anton Popov).
  • Включена предварительная подгрузка данных из удалённой файловой системы при вертикальных слияниях. Это уменьшает задержку вертикальных слияний в таблицах с данными, хранящимися на удалённой файловой системе. #64314 (Anton Popov).
  • Снижено количество избыточных вызовов isDefault в ColumnSparse::filter для повышения производительности. #64426 (Jiebin Sun).
  • Ускорены команды keeper-client find_super_nodes и find_big_family за счёт выполнения нескольких асинхронных вызовов getChildren. #64628 (Alexander Gololobov).
  • Улучшена работа функций least/greatest для аргументов числовых типов, допускающих значения NULL. #64668 (KevinyhZou).
  • Разрешено объединение двух последовательных шагов фильтрации в плане запроса. Это улучшает оптимизацию проталкивания фильтров (filter pushdown), если условие фильтрации может быть протолкнуто из родительского шага. #64760 (Nikolai Kochetov).
  • Удалена некорректная оптимизация в реализации алгоритма vertical final и по умолчанию снова включён этот алгоритм. #64783 (Duc Canh Le).
  • Удалены узлы ALIAS в выражениях фильтра. Это немного повышает производительность запросов с PREWHERE (при использовании нового анализатора). #64793 (Nikolai Kochetov).
  • Повторно включено кэширование сеансов OpenSSL. #65111 (Robert Schulze).
  • Добавлены настройки для отключения материализации индексов пропуска и статистики при вставке данных (materialize_skip_indexes_on_insert и materialize_statistics_on_insert). #64391 (Anton Popov).
  • Использовать выделенный объём памяти для вычисления размера группы строк и снижения пикового потребления памяти писателем Parquet в однопоточном режиме. #64424 (LiuNeng).
  • Улучшен итератор разрежённого столбца, чтобы сократить количество вызовов метода size. #64497 (Jiebin Sun).
  • Обновлено условие, чтобы использовать серверное копирование при создании резервных копий в Azure Blob Storage. #64518 (SmitaRKulkarni).
  • Оптимизировано использование памяти при вертикальных слияниях для таблиц с большим количеством skip-индексов. #64580 (Anton Popov).

Улучшение

  • Восстановлено прежнее поведение ClickHouse при работе с кортежами в формате CSV и их интерпретации. Это изменение фактически откатывает ClickHouse/ClickHouse#60994 и делает его доступным только при нескольких настройках: output_format_csv_serialize_tuple_into_separate_columns, input_format_csv_deserialize_separate_columns_into_tuple и input_format_csv_try_infer_strings_from_quoted_tuples. #65170 (Nikita Mikhaylov).
  • SHOW CREATE TABLE, выполненный для системных таблиц, теперь будет показывать очень удобный уникальный комментарий для каждой таблицы, объясняющий, зачем она нужна. #63788 (Nikita Mikhaylov).
  • Второй аргумент (scale) функций round(), roundBankers(), floor(), ceil() и trunc() теперь может быть не константой. #64798 (Mikhail Gorshkov).
  • Избежана возможная взаимоблокировка во время анализа индекса MergeTree при планировании потоков в перегруженном сервисе. #59427 (Sean Haynes).
  • Несколько небольших исправлений обработки граничных случаев в поддержке прокси для S3 и туннелирования. #63427 (Arthur Passos).
  • Добавлены метрики для отслеживания количества каталогов, создаваемых и удаляемых хранилищем метаданных plain_rewritable, а также количества записей в in-memory‑карте соответствия «локальное–удалённое». #64175 (Julia Kartseva).
  • Кэш запросов теперь рассматривает одинаковые запросы с разными настройками как разные. Это повышает надёжность в случаях, когда различные настройки (например, limit или additional_table_filters) могут повлиять на результат запроса. #64205 (Robert Schulze).
  • Добавлена поддержка нестандартного кода ошибки QpsLimitExceeded в объектном хранилище как ошибки, для которой допускается повторная попытка. #64225 (Sema Checherinda).
  • Добавлена новая настройка input_format_parquet_prefer_block_bytes для управления средним размером выходного блока в байтах и изменено значение по умолчанию параметра input_format_parquet_max_block_size на 65409. #64427 (LiuNeng).
  • Настройки из пользовательского конфига не влияют на слияния и мутации для MergeTree, использующего объектное хранилище. #64456 (alesapin).
  • Поддержан нестандартный код ошибки TotalQpsLimitExceeded от объектного хранилища как ошибка, при которой допустим повтор запроса. #64520 (Sema Checherinda).
  • Обновлена расширенная панель мониторинга как в open-source-версии, так и в ClickHouse Cloud: добавлен график «Maximum concurrent network connections». #64610 (Thom O'Connor).
  • Улучшено отображение прогресса в zeros_mt и generateRandom. #64804 (Raúl Marín).
  • Добавлен асинхронный метрика jemalloc.profile.active, показывающая, включено ли в данный момент семплирование. Это механизм активации в дополнение к prof.active; оба параметра должны быть включены, чтобы вызывающий поток выполнял семплирование. #64842 (Unalian).
  • С настройки allow_experimental_join_condition снят признак важности. Этот признак мог мешать успешному выполнению распределённых запросов в кластере со смешанными версиями. #65008 (Nikita Mikhaylov).
  • Добавлены асинхронные метрики сервера DiskGetObjectThrottler* и DiskGetObjectThrottler*, отражающие лимит числа запросов в секунду, заданный настройками диска s3_max_get_rps и s3_max_put_rps, а также текущее доступное количество запросов, которые можно отправить, не достигнув порога троттлинга на диске. Метрики определены для каждого диска, для которого настроен лимит. #65050 (Sergei Trifonov).
  • Добавлена валидация при создании пользователя с bcrypt_hash. #65242 (Raúl Marín).
  • Добавлены события профилирования для учета количества строк, прочитанных во время и после PREWHERE. #64198 (Nikita Taranov).
  • Показывать запрос в EXPLAIN PLAN при использовании параллельных реплик. #64298 (vdimir).
  • Переименуйте параметр allow_deprecated_functions в allow_deprecated_error_prone_window_functions. #64358 (Raúl Marín).
  • Настройка max_read_buffer_size теперь учитывается и для файловых дескрипторов в табличной функции file. #64532 (Azat Khuzhin).
  • Отключены транзакции для неподдерживаемых хранилищ, в том числе для материализованных представлений. #64918 (alesapin).
  • Запрещено использование конструкции QUALIFY в старом анализаторе. Старый анализатор игнорировал QUALIFY, что могло приводить к неожиданному удалению данных при выполнении мутаций. #65356 (Dmitry Novik).

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

  • Исправлена проблема, из-за которой пропускающий индекс Set не работал с IN и indexHint(). #62083 (Michael Kolupaev).
  • Исправлены запросы с FINAL, которые выдавали неверный результат, если таблица не использовала адаптивную гранулярность. #62432 (Duc Canh Le).
  • Добавлена поддержка выполнения функции при присваивании значения параметризованному представлению. #63502 (SmitaRKulkarni).
  • Исправлено отслеживание использования памяти для Parquet. #63584 (Michael Kolupaev).
  • Исправлен редкий случай, когда в результате распределённого запроса отсутствовали данные. #63691 (vdimir).
  • Исправлено чтение столбцов с типом Tuple(Map(LowCardinality(String), String), ...). #63956 (Anton Popov).
  • Исправлена обработка сопоставителя unqualified COLUMNS. Сохраняется порядок входных столбцов и запрещается использование неизвестных идентификаторов. #63962 (Dmitry Novik).
  • Исправлена ошибка Cyclic aliases для циклических псевдонимов разных типов (выражений и функций). #63993 (Nikolai Kochetov).
  • Это исправление будет использовать корректно переопределённый контекст с правильным определяющим пользователем (definer) для каждого представления в конвейере выполнения запроса. #64079 (pufit).
  • Исправлен анализатор: при использовании INTERPOLATE больше не возникает ошибка "Not found column". #64096 (Yakov Olkhovskiy).
  • Предотвращена LOGICAL_ERROR при выполнении CREATE TABLE AS MaterializedView. #64174 (Raúl Marín).
  • Кэш запросов теперь рассматривает два идентичных запроса к разным базам данных как разные запросы. Предыдущее поведение могло использоваться для обхода недостатка прав на чтение таблицы. #64199 (Robert Schulze).
  • Исправлена возможная аварийная остановка процесса из-за необработанного исключения в деструкторе ~WriteBufferFromFileDescriptor в StatusFile. #64206 (Kruglov Pavel).
  • Исправлена ошибка дублирования псевдонима для распределённых запросов с ARRAY JOIN. #64226 (Nikolai Kochetov).
  • Исправлено неожиданное преобразование accurateCast из строки в целое число. #64255 (wudidapaopao).
  • Исправлена процедура упрощения КНФ для случая, когда какая-либо группа OR содержит взаимоисключающие атомы. #64256 (Eduard Karacharov).
  • Исправлена проверка размера дерева запросов. #64377 (Dmitry Novik).
  • Исправлена логическая ошибка: неверное приведение типа для таблицы Buffer при использовании PREWHERE. #64388 (Nikolai Kochetov).
  • Исправлены запросы CREATE TABLE AS для таблиц с выражениями по умолчанию. #64455 (Anton Popov).
  • Исправлена работа optimize_read_in_order для ORDER BY ... NULLS FIRST / LAST в таблицах с ключами типа Nullable. #64483 (Eduard Karacharov).
  • Исправлены ошибки Expression nodes list expected 1 projection names и Unknown expression or identifier для запросов, в которых используется GLOBAL IN с алиасами. #64517 (Nikolai Kochetov).
  • Исправлена ошибка «Cannot find column» в распределённых запросах, использующих константный CTE в ключе GROUP BY. #64519 (Nikolai Kochetov).
  • Исправлен вывод функции formatDateTimeInJodaSyntax, если форматтер генерирует нечётное количество символов и последний символ — 0. Например, теперь SELECT formatDateTimeInJodaSyntax(toDate('2012-05-29'), 'D') корректно возвращает 150 вместо прежнего значения 15. #64614 (LiuNeng).
  • Не переписывать агрегацию, если уже используется комбинатор -If. #64638 (Dmitry Novik).
  • Исправлен вывод типа для float (в случае маленького буфера, т. е. при --max_read_buffer_size 1). #64641 (Azat Khuzhin).
  • Исправлена ошибка, которая могла приводить к некорректной работе TTL при использовании выражений. #64694 (alesapin).
  • Исправлено удаление выражений WHERE и PREWHERE, которые всегда истинны, в новом анализаторе. #64695 (Nikolai Kochetov).
  • Исправлено чрезмерное отбрасывание частей текста текстовыми индексами по токенам (ngrambf, full_text) при фильтрации по результату функций startsWith, endsWith, match, multiSearchAny. #64720 (Eduard Karacharov).
  • Исправляет некорректное поведение экранирования управляющих последовательностей ANSI CSI в функции UTF8::computeWidth. #64756 (Shaun Struwig).
  • Исправлен случай некорректного удаления ORDER BY / LIMIT BY из подзапросов. #64766 (Raúl Marín).
  • Исправлено (экспериментально) неэквисоединение с подзапросами для Set, используемых в смешанных условиях соединения. #64775 (lgbo).
  • Исправлен сбой локального кэша на диске plain_rewritable. #64778 (Julia Kartseva).
  • Исправлена ошибка "Cannot find column" в распределённом запросе с ARRAY JOIN по Nested-столбцу. Исправляет #64755. #64801 (Nikolai Kochetov).
  • Исправлена утечка памяти в политике SLRU-кэша. #64803 (Kseniia Sumarokova).
  • Исправлено возможное некорректное отслеживание использования памяти в нескольких типах запросов: запросах, читающих данные из S3, запросах по протоколу HTTP и асинхронных операциях вставки. #64844 (Anton Popov).
  • Исправлена ошибка несоответствия структуры Block при выполнении запросов с PREWHERE к materialized view, если в materialized view есть столбцы типов, отличающихся от исходной таблицы. Исправляет #64611. #64855 (Nikolai Kochetov).
  • Исправлен редкий сбой, возникавший при сочетании: у таблицы настроен TTL с подзапросом + реплицируемая база данных + параллельные реплики + анализатор. Ситуация крайне редкая, но, пожалуйста, не используйте TTL с подзапросами. #64858 (alesapin).
  • Исправлена проблема с запросом ALTER MODIFY COMMENT, который некорректно работал для параметризованных VIEW в ClickHouse/ClickHouse#54211. #65031 (Nikolay Degterinsky).
  • Исправлен host_id в DatabaseReplicated при включённом параметре cluster_secure_connection. Ранее все соединения внутри кластера, создаваемые DatabaseReplicated, оставались незащищёнными, даже если параметр был включён. #65054 (Nikolay Degterinsky).
  • Исправлена ошибка «Not-ready Set» после оптимизации PREWHERE для StorageMerge. #65057 (Nikolai Kochetov).
  • Избегать записи в завершённый буфер в файлоподобных хранилищах. #65063 (Kruglov Pavel).
  • Исправлена возможная бесконечная длительность выполнения запроса при циклических псевдонимах. Исправляет #64849. #65081 (Nikolai Kochetov).
  • Исправлена ошибка «Unknown expression identifier» при удалённых запросах с INTERPOLATE (псевдоним) в новом анализаторе. Fixes #64636. #65090 (Nikolai Kochetov).
  • Исправлена оптимизация вынесения арифметических операций из агрегации. В новом анализаторе оптимизация применялась только один раз. #65104 (Dmitry Novik).
  • Исправлена перезапись имени агрегатной функции в новом анализаторе. #65110 (Dmitry Novik).
  • Возвращать код 5xx вместо 200 OK в случае тайм-аута при чтении тела запроса (или его части) из клиентского сокета. #65118 (Julian Maicher).
  • Исправлен возможный сбой при выполнении хеджированных запросов. #65206 (Azat Khuzhin).
  • Исправлена ошибка в укороченной (short-circuit) оценке для словарей Hashed и Hashed_Array, из-за которой могло происходить чтение неинициализированного числа, что приводило к различным ошибкам. #65256 (jsc0218).
  • Этот PR гарантирует, что тип константы (второй параметр оператора IN) всегда доступен в процессе приведения типов оператором IN. Иначе потеря информации о типе может привести к сбою некоторых преобразований, например преобразования из DateTime в Date. Исправление проблемы (#64487). #65315 (pn).