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

Журнал изменений 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, вычисляющая редакционное расстояние между двумя строками в кодировке UTF8. #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).
  • Исправлено разрешение неквалифицированного сопоставителя COLUMNS. Теперь сохраняется порядок входных столбцов и запрещается использование неизвестных идентификаторов. #63962 (Dmitry Novik).
  • Исправлена ошибка при обработке циклических псевдонимов разного типа (выражение и функция). #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 в таблицах с ключами, допускающими NULL. #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).
  • Исправлен (экспериментальный) неравный JOIN с подзапросами для наборов, участвующих в смешанных условиях соединения. #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 из материализованного представления, когда материализованное представление содержит столбцы типов, отличных от типов в исходной таблице. Исправляет #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 (alias) (новый анализатор). Исправляет #64636. #65090 (Nikolai Kochetov).
  • Исправлено вынесение арифметических операций из агрегации. В новом анализаторе эта оптимизация применялась только один раз. #65104 (Dmitry Novik).
  • Исправлена перезапись имён агрегатных функций в новом анализаторе. #65110 (Dmitry Novik).
  • Возвращать код 5xx вместо 200 OK в случае таймаута ожидания при чтении (частей) тела запроса из клиентского сокета. #65118 (Julian Maicher).
  • Исправлен возможный сбой при hedged-запросах. #65206 (Azat Khuzhin).
  • Исправлена ошибка в механизме укороченного вычисления словарей Hashed и Hashed_Array, которая могла приводить к чтению неинициализированного числа и, как следствие, к различным ошибкам. #65256 (jsc0218).
  • Этот PR гарантирует, что тип константы (второго параметра оператора IN) всегда учитывается в процессе приведения типов для оператора IN. В противном случае потеря информации о типе может привести к сбоям некоторых преобразований, например преобразования из DateTime в Date. Исправление (#64487). #65315 (pn).