Журнал изменений версии 24.5 для Cloud
Актуальные изменения в сервисах ClickHouse Cloud в релизе v24.5.
Несовместимые изменения
-
Изменено имя столбца с duration_ms на duration_microseconds в таблице system.zookeeper, чтобы отразить тот факт, что длительность измеряется в микросекундах. #60774 (Duc Canh Le).
-
Запрещена установка max_parallel_replicas в 0, так как это не имеет смысла. Установка в 0 могла приводить к неожиданным логическим ошибкам. Закрывает #60140. #61201 (Kruglov Pavel).
-
Удалена поддержка запроса INSERT WATCH (часть экспериментальной функциональности LIVE VIEW). #62382 (Alexey Milovidov).
-
Использование функций neighbor, runningAccumulate, runningDifferenceStartingWithFirstValue, runningDifference объявлено устаревшим (так как они легко приводят к ошибкам). Вместо них следует использовать полноценные оконные функции. Чтобы снова разрешить их использование, установите allow_deprecated_error_prone_window_functions=1. #63132 (Nikita Taranov).
Изменения, несовместимые с предыдущими версиями
-
В новой версии ClickHouse функции geoDistance, greatCircleDistance и greatCircleAngle будут использовать 64-битный тип с плавающей запятой двойной точности (Float64) для внутренних вычислений и в качестве возвращаемого типа, если все аргументы имеют тип Float64. Это закрывает #58476. В предыдущих версиях функция всегда использовала Float32. Вы можете переключиться на старое поведение, установив параметр geo_distance_returns_float64_on_float64_arguments в значение false или установив параметр compatibility в значение 24.2 или более раннее. #61848 (Alexey Milovidov).
-
Запросы к system.columns будут работать быстрее, если имеется большое количество столбцов, но при этом у многих баз данных или таблиц нет привилегии SHOW TABLES. Обратите внимание, что в предыдущих версиях, если вы выдавали привилегию SHOW COLUMNS на отдельные столбцы без выдачи привилегии SHOW TABLES на соответствующие таблицы, таблица system.columns показывала эти столбцы, но в новой версии такая таблица будет полностью пропускаться. Удалены сообщения трассировочного журнала "Access granted" и "Access denied", которые замедляли выполнение запросов. #63439 (Alexey Milovidov).
-
Исправлен сбой в largestTriangleThreeBuckets. Это изменяет поведение этой функции и приводит к тому, что она игнорирует значения NaN в переданной последовательности. Таким образом, результирующий набор может отличаться от предыдущих версий. #62646 (Raúl Marín).
Новые возможности
-
Новый анализатор включен по умолчанию в новых сервисах.
-
Добавлена поддержка удаления нескольких таблиц одновременно, как в
DROP TABLE a,b,c;. #58705 (zhongyuankai). -
Теперь можно обрабатывать окончания строк CRLF в формате TSV, используя настройку
input_format_tsv_crlf_end_of_line. Закрывает #56257. #59747 (Shaun Struwig). -
Теперь для движка таблицы можно выдавать права (GRANT), и это не повлияет на поведение существующих пользователей. #60117 (jsc0218).
-
Добавлен формат Form для чтения/записи одной записи в формате
application/x-www-form-urlencoded. #60199 (Shaun Struwig). -
Добавлена возможность выполнять сжатие в
CROSS JOIN. #60459 (p1rattttt). -
Добавлена новая настройка
input_format_force_null_for_omitted_fields, которая принудительно устанавливает значения NULL для пропущенных полей. #60887 (Constantine Peresypkin). -
Добавлена поддержка
JOINс неравенствами, которые используют столбцы как из левой, так и из правой таблицы, напримерt1.y < t2.y. Для включения выполнитеSET allow_experimental_join_condition = 1. #60920 (lgbo). -
Добавлена новая функция
getClientHTTPHeader. Закрывает #54665. Соавтор — @lingtaolf. #61820 (Alexey Milovidov). -
Для удобства
SELECT * FROM numbers()теперь работает так же, какSELECT * FROM system.numbers— без лимита. #61969 (YenchangChan). -
Теперь поддерживается изменение настроек таблицы
MemoryчерезALTER MODIFY SETTING. Пример:ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 1000;. #62039 (zhongyuankai). -
Анализатор поддерживает рекурсивные CTE. #62074 (Maksim Kita).
-
Ранее наше хранилище
s3и табличная функцияs3не поддерживали чтение из архивных файлов. Реализовано решение, которое позволяет итерироваться по файлам внутри архивов в S3. #62259 (Daniil Ivanik). -
Добавлена поддержка условной функции
clamp. #62377 (skyoct). -
Добавлен формат вывода
npy. #62430 (豪肥肥). -
Анализатор поддерживает предложение
QUALIFY. Закрывает #47819. #62619 (Maksim Kita). -
Добавлен параметр запроса
roleдля HTTP-интерфейса. Он работает аналогичноSET ROLE x, применяя роль до выполнения выражения. Это позволяет обойти ограничение HTTP-интерфейса, в котором запрещены несколько выражений, и нельзя отправить одновременноSET ROLE xи само выражение. Можно задать несколько ролей таким образом, например?role=x&role=y, что будет эквивалентноSET ROLE x, y. #62669 (Serge Klochkov). -
Добавлена команда
SYSTEM UNLOAD PRIMARY KEY. #62738 (Pablo Marcos). -
Добавлены SQL-функции generateUUIDv7, generateUUIDv7ThreadMonotonic, generateUUIDv7NonMonotonic (с различными компромиссами между монотонностью и производительностью) для генерации UUID версии 7, также известных как UUID на основе временной метки со случайным компонентом. Также добавлена новая функция UUIDToNum для извлечения байтов из UUID и новая функция UUIDv7ToDateTime для извлечения компонента временной метки из UUID версии 7. #62852 (Alexey Petrunyaka).
-
Raw как синоним формата TSVRaw. #63394 (Unalian).
-
Добавлена возможность выполнять cross join с использованием временного файла, если размер превышает лимиты. #63432 (p1rattttt).
Улучшения производительности
-
Пропускать слияние вновь созданных блоков проекций во время INSERT. #59405 (Nikita Taranov).
-
Снизить накладные расходы мутаций для SELECT (v2). #60856 (Azat Khuzhin).
-
Улучшения проталкивания фильтра в JOIN с использованием эквивалентных наборов. #61216 (Maksim Kita).
-
Добавлен новый проход анализатора для оптимизации IN с одиночным значением. #61564 (LiuNeng).
-
Обрабатывать строковые функции XXXUTF8 «asciily» (как ASCII), если все входные строки состоят только из символов ASCII. Вдохновлено apache/doris#29799. Общее ускорение составило 1.07–1.62 раза. Обратите внимание, что пиковое потребление памяти в некоторых случаях снизилось. #61632 (李扬).
-
Включён быстрый кодировщик Parquet по умолчанию (output_format_parquet_use_custom_encoder). #62088 (Michael Kolupaev).
-
Улучшен JSONEachRowRowInputFormat за счёт пропуска всех оставшихся полей после чтения всех требуемых полей. #62210 (lgbo).
-
Функции splitByChar и splitByRegexp были существенно ускорены. #62392 (李扬).
-
Улучшен простой INSERT SELECT из файлов в табличных функциях file/s3/hdfs/url/.... Добавлена отдельная настройка max_parsing_threads для управления количеством потоков, используемых при параллельном разборе. #62404 (Kruglov Pavel).
-
Добавлена поддержка параллельного буфера записи для AzureBlobStorage, управляемая настройкой azure_allow_parallel_part_upload. #62534 (SmitaRKulkarni).
-
Функции to_utc_timestamp и from_utc_timestamp теперь примерно в 2 раза быстрее. #62583 (KevinyhZou).
-
Функции parseDateTimeOrNull, parseDateTimeOrZero, parseDateTimeInJodaSyntaxOrNull и parseDateTimeInJodaSyntaxOrZero теперь работают значительно быстрее (в 10–1000 раз), когда входные данные в основном содержат значения, которые не удаётся разобрать. #62634 (LiuNeng).
-
Изменено поведение HostResolver при сбое так, чтобы для каждого IP сохранялась только одна запись. #62652 (Anton Ivashkin).
-
Добавлена новая настройка prefer_merge_sort_block_bytes для управления потреблением памяти и двукратного ускорения сортировки при слиянии, когда много столбцов. #62904 (LiuNeng).
-
Оптимизация QueryPlan, преобразующая OUTER JOIN в INNER JOIN, если фильтр после JOIN всегда отфильтровывает значения по умолчанию. Оптимизацией можно управлять настройкой query_plan_convert_outer_join_to_inner_join, по умолчанию включена. #62907 (Maksim Kita).
-
Включена настройка optimize_rewrite_sum_if_to_count_if по умолчанию. #62929 (Raúl Marín).
-
Микрооптимизации для нового анализатора. #63429 (Raúl Marín).
-
Анализ индексов теперь работает, если DateTime сравнивается с DateTime64. Это закрывает #63441. #63443 (Alexey Milovidov).
-
Небольшое ускорение индексов типа set (примерно в 1.5 раза) за счёт удаления мусора. #64098 (Alexey Milovidov).
Улучшения
-
Удалена настройка
optimize_monotonous_functions_in_order_by, так как она по сути стала пустой операцией (no-op). #63004 (Raúl Marín). -
В
Mapтеперь можно использовать в качестве ключей типыFloat32,Float64,Array(T),Map(K,V)иTuple(T1, T2, ...). Закрывает #54537. #59318 (李扬). -
Добавлен асинхронный
WriteBufferдляAzureBlobStorage, аналогичныйS3. #59929 (SmitaRKulkarni). -
Многострочные строки с сохранением границ и изменением ширины колонки. #59940 (Volodyachan).
-
RabbitMQ теперь отправляет
nackдля повреждённых сообщений. Закрывает #45350. #60312 (Kseniia Sumarokova). -
Добавлена настройка
first_day_of_week, которая влияет на первый день недели, используемый функциямиtoStartOfInterval(..., INTERVAL ... WEEK). Это позволяет обеспечить согласованность с функциейtoStartOfWeek, которая по умолчанию использует воскресенье как первый день недели. #60598 (Jordi Villar). -
Добавлен постоянный виртуальный столбец
_block_offset, который хранит исходный номер строки в блоке, присвоенный при вставке. Сохранение столбца_block_offsetможно включить с помощью настройкиenable_block_offset_column. Добавлен виртуальный столбецcolumn_part_data_version, который содержит либо минимальный номер блока, либо версию модификации части. Постоянный виртуальный столбец_block_numberбольше не считается экспериментальным. #60676 (Anton Popov). -
Функции
date_diffиageтеперь вычисляют результат с наносекундной, а не микросекундной точностью. Они также поддерживают наносекунду (илиnanoseconds, илиns) как возможное значение параметра единицы измерения (unit). #61409 (Austin Kothig). -
Теперь для широких частей (wide parts) метки (marks) не загружаются во время слияний. #61551 (Anton Popov).
-
По умолчанию включена настройка
output_format_pretty_row_numbers. Это повышает удобство использования. #61791 (Alexey Milovidov). -
Индикатор прогресса теперь работает для тривиальных запросов с
LIMITизsystem.zeros,system.zeros_mt(он уже работает дляsystem.numbersиsystem.numbers_mt) и для табличной функцииgenerateRandom. В качестве бонуса, если общее число записей превышает лимитmax_rows_to_read, исключение будет выброшено раньше. Это закрывает #58183. #61823 (Alexey Milovidov). -
Добавлена команда
TRUNCATE ALL TABLES. #61862 (豪肥肥). -
Добавлена настройка
input_format_json_throw_on_bad_escape_sequence; при её отключении можно сохранять некорректные escape-последовательности в JSON-форматах ввода. #61889 (Kruglov Pavel). -
Исправлена грамматика с "a" на "the" в предупреждающем сообщении. Существует только один движок
Atomic, поэтому должно быть "to the new Atomic engine" вместо "to a new Atomic engine". #61952 (shabroo). -
Исправлена логическая ошибка при откате транзакции вставки с кворумом (
quorum insert). #61953 (Han Fei). -
Типы столбцов
Nullableтеперь автоматически выводятся из схемы Apache Arrow. #61984 (Maksim Kita). -
Разрешено отменять параллельное слияние агрегатных состояний во время агрегации. Пример:
uniqExact. #61992 (Maksim Kita). -
Источник словаря с
INVALIDATE_QUERYбольше не перезагружается дважды при старте. #62050 (vdimir). -
OPTIMIZE FINALдляReplicatedMergeTreeтеперь будет ждать завершения текущих активных слияний, а затем повторно пытаться запланировать финальное слияние. Это сделает его поведение более близким к поведению обычногоMergeTree. #62067 (Nikita Taranov). -
При чтении данных из hive text file ранее использовалась первая строка файла для определения количества входных полей. Иногда количество полей в первой строке не совпадает с количеством полей, определённых в таблице Hive, например, таблица Hive определена с 3 столбцами, как
test_tbl(a Int32, b Int32, c Int32), но первая строка текстового файла содержит только 2 поля. В этой ситуации количество входных полей изменяется на 2, и если следующая строка текстового файла содержит 3 поля, то третье поле не может быть прочитано и вместо него устанавливается значение по умолчанию 0, что является некорректным поведением. #62086 (KevinyhZou). -
Подсветка синтаксиса при вводе в клиенте теперь будет работать на уровне синтаксиса (раньше она работала на уровне лексера). #62123 (Alexey Milovidov).
-
Исправлена проблема, когда при добавлении избыточного
= 1или= 0после булевого выражения, включающего первичный ключ, первичный индекс не использовался. Например, иSELECT * FROM <table> WHERE <primary-key> IN (<value>) = 1, иSELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0выполняли полное сканирование таблицы, хотя можно было использовать первичный индекс. #62142 (josh-hildred). -
Добавлена настройка
lightweight_deletes_sync(значение по умолчанию:2— ждать завершения на всех репликах синхронно). Она аналогична настройкеmutations_sync, но влияет только на поведение лёгких удалений. #62195 (Anton Popov). -
Теперь при разборе значений для пользовательских настроек различаются булевы значения и целые числа:
SET custom_a = true; SET custom_b = 1;. #62206 (Vitaly Baranov). -
Добавлена поддержка доступа к S3 через AWS Private Link Interface endpoints. Закрывает #60021, #31074 и #53761. #62208 (Arthur Passos).
-
Клиент должен отправлять серверу заголовок
Keep-Alive: timeout=X. Если клиент получает от сервера ответ с этим заголовком, он должен использовать значение с сервера. Также клиенту лучше не использовать соединение, срок жизни которого почти истёк, чтобы избежать гонки при закрытии соединения. #62249 (Sema Checherinda). -
Добавлены единицы нано-, микро- и миллисекунд для
date_trunc. #62335 (Misz606). -
Кэш запросов больше не кэширует результаты запросов к системным таблицам (
system.*,information_schema.*,INFORMATION_SCHEMA.*). #62376 (Robert Schulze). -
Запрос
MOVE PARTITION TO TABLEможет быть отложен или может выбрасывать исключениеTOO_MANY_PARTS, чтобы не превышать ограничения на количество частей. Применяются те же настройки и лимиты, что и для запросаINSERT(см.max_parts_in_total,parts_to_delay_insert,parts_to_throw_insert,inactive_parts_to_throw_insert,inactive_parts_to_delay_insert,max_avg_part_size_for_too_many_parts,min_delay_to_insert_msиmax_delay_to_insert). #62420 (Sergei Trifonov). -
Функция
transformтеперь всегда возвращает первое совпадение. #62518 (Raúl Marín). -
Избегать вычисления выражений
DEFAULTдля таблицы при выполненииRESTORE. #62601 (Vitaly Baranov). -
Разрешён ключ квоты с другой схемой аутентификации в HTTP‑запросах. #62842 (Kseniia Sumarokova).
-
Закрывать сессию, если достигнуто значение
valid_untilдля пользователя. #63046 (Konstantin Bogdanov).