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

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