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