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

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