Журнал изменений 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).