Журнал изменений V24.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. Это закрывает #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. Это изменяет поведение этой функции и приводит к тому, что она игнорирует NaNs в переданной последовательности. Таким образом, результирующий набор данных может отличаться от предыдущих версий. #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).
-
Теперь можно выдавать права на движок таблиц, и это не повлияет на поведение существующих пользователей. #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).
-
Добавлена поддержка соединений с неравенствами в условиях, которые используют столбцы из левой и правой таблиц, например
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).
-
Теперь стало возможным изменение настроек таблиц в памяти с помощью ALTER MODIFY SETTING. ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 1000;. #62039 (zhongyuankai).
-
Analyzer поддерживает рекурсивные 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).
Повышение производительности
-
Пропуск слияния вновь созданных блоков PROJECTION во время операций INSERT. #59405 (Nikita Taranov).
-
Снижение накладных расходов от мутаций для SELECT (v2). #60856 (Azat Khuzhin).
-
Улучшение проталкивания фильтров в JOIN с использованием эквивалентных множеств. #61216 (Maksim Kita).
-
Добавлен новый проход анализатора для оптимизации выражений с одним значением. #61564 (LiuNeng).
-
Обработка строковых функций XXXUTF8 «по-ASCII», если все входные строки содержат только символы ASCII. Основано на apache/doris#29799. Общее ускорение в 1.07x–1.62x. Обратите внимание, что пиковое потребление памяти в некоторых случаях уменьшилось. #61632 (李扬).
-
Быстрый кодировщик Parquet включён по умолчанию (output_format_parquet_use_custom_encoder). #62088 (Michael Kolupaev).
-
Улучшен JSONEachRowRowInputFormat за счёт пропуска всех оставшихся полей, когда все необходимые поля уже прочитаны. #62210 (lgbo).
-
Функции splitByChar и splitByRegexp были существенно ускорены. #62392 (李扬).
-
Ускорена простая операция INSERT SELECT из файлов в table functions 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 для управления использованием памяти и ускорения сортировки при слиянии в 2 раза при большом количестве столбцов. #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).
-
Карты теперь могут использовать в качестве ключей типы 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. Добавлен виртуальный столбец _part_data_version, который содержит либо минимальный номер блока, либо версию мутации части. Постоянный виртуальный столбец _block_number больше не считается экспериментальным. #60676 (Anton Popov).
-
Функции date_diff и age теперь вычисляют результат с наносекундной точностью вместо микросекундной. Они также поддерживают наносекунду (или наносекунды, или ns) в качестве возможного значения аргумента unit. #61409 (Austin Kothig).
-
Теперь для широких частей метки не загружаются при слияниях. #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).
-
Исправлена логическая ошибка при откате транзакции кворумной вставки. #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 первая строка файла используется для определения количества входных полей, и иногда количество полей в первой строке не совпадает с определением таблицы 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 PrivateLink. Закрывает #60021, #31074 и #53761. #62208 (Arthur Passos).
-
Клиент должен отправлять серверу заголовок 'Keep-Alive: timeout=X'. Если клиент получает от сервера ответ с этим заголовком, он должен использовать значение из ответа сервера. Также клиенту лучше не использовать соединение, срок действия которого почти истекает, чтобы избежать гонки при закрытии соединения. #62249 (Sema Checherinda).
-
Добавлены единицы измерения nano-, micro- и millisecond для функции 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).
-
Разрешить использование ключа QUOTA с другой схемой аутентификации в HTTP‑запросах. #62842 (Kseniia Sumarokova).
-
Закрывать сессию, если для пользователя достигнуто значение
valid_until. #63046 (Konstantin Bogdanov).