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

v24.8 — список изменений для Cloud

Актуальные изменения для сервисов ClickHouse Cloud на основе релиза v24.8.

Обратное несовместимое изменение

  • Изменена двоичная сериализация типа данных Variant: добавлен компактный режим, чтобы избежать записи одного и того же дискриминатора несколько раз для гранул с одним вариантом или только со значениями NULL. Добавлена настройка MergeTree use_compact_variant_discriminators_serialization, которая по умолчанию включена. Обратите внимание, что тип Variant по‑прежнему является экспериментальным, и обратная несовместимость в сериализации не должна на вас повлиять, если только вы ранее не работали с поддержкой для раннего включения этой функции. #62774 (Kruglov Pavel).

  • Запрещено CREATE MATERIALIZED VIEW ... ENGINE Replicated*MergeTree POPULATE AS SELECT ... с базами данных типа Replicated. Этот конкретный PR применим только к пользователям, которые всё ещё используют ReplicatedMergeTree. #63963 (vdimir).

  • Метрика KeeperOutstandingRequets была переименована в KeeperOutstandingRequests. Это исправляет опечатку, указанную в #66179. #66206 (Robert Schulze).

  • clickhouse-client и clickhouse-local теперь по умолчанию работают в режиме multi-query (вместо single-query). Например, clickhouse-client -q "SELECT 1; SELECT 2" теперь работает, тогда как ранее пользователям приходилось добавлять --multiquery (или -n). Переключатель --multiquery/-n больше не нужен. INSERT-запросы в multi-query-режиме обрабатываются по‑особому в зависимости от их предложения FORMAT: если FORMAT равен VALUES (наиболее распространённый случай), конец оператора INSERT обозначается завершающей точкой с запятой ; в конце запроса. Для всех остальных FORMAT (например, CSV или JSONEachRow) конец оператора INSERT обозначается двумя переводами строки \n\n в конце запроса. #63898 (wxybear).

  • В предыдущих версиях можно было использовать альтернативный синтаксис для типов данных LowCardinality, добавляя WithDictionary к имени типа данных. Это была первоначальная рабочая реализация, она никогда не документировалась и не была доступна широкой публике. Теперь она объявлена устаревшей. Если вы использовали этот синтаксис, вам необходимо выполнить ALTER для ваших таблиц и переименовать типы данных в LowCardinality. #66842 (Alexey Milovidov).

  • Исправлены логические ошибки при использовании хранилища Buffer с распределённой целевой таблицей. Это обратное несовместимое изменение: запросы, использующие Buffer с распределённой целевой таблицей, могут перестать работать, если таблица фигурирует в запросе более одного раза (например, в self-join). #67015 (vdimir).

  • В предыдущих версиях вызов функций для случайных распределений, основанных на гамма-функции (таких как хи-квадрат, Стьюдента, Фишера), с отрицательными аргументами, близкими к нулю, приводил к длительным вычислениям или бесконечному циклу. В новой версии вызов этих функций с нулевыми или отрицательными аргументами приведёт к генерации исключения. Это закрывает #67297. #67326 (Alexey Milovidov).

  • В предыдущих версиях arrayWithConstant могла работать медленно, если ей задавали генерацию очень больших массивов. В новой версии она ограничена 1 ГБ на массив. Это закрывает #32754. #67741 (Alexey Milovidov).

  • Исправлено форматирование модификатора REPLACE (запрещено опускать скобки). #67774 (Azat Khuzhin).

Новые возможности

  • Расширена функция tuple для конструирования именованных кортежей в запросе. Добавлена функция tupleNames для извлечения имен из кортежей. #54881 (Amos Bird).

  • Поддержка ASOF JOIN для алгоритма full_sorting_join. Закрывает #54493. #55051 (vdimir).

  • Добавлена новая табличная функция fuzzQuery. Эта функция позволяет модифицировать заданную строку запроса случайными вариациями. Пример: SELECT query FROM fuzzQuery('SELECT 1');. #62103 (pufit).

  • Добавлена новая оконная функция percent_rank. #62747 (lgbo).

  • Добавлена поддержка аутентификации по JWT в clickhouse-client. #62829 (Konstantin Bogdanov).

  • Добавлены SQL-функции changeYear, changeMonth, changeDay, changeHour, changeMinute, changeSecond. Например, SELECT changeMonth(toDate('2024-06-14'), 7) возвращает дату 2024-07-14. #63186 (cucumber95).

  • Добавлена таблица system.error_log, которая содержит историю значений ошибок из таблицы system.errors, периодически сбрасываемую на диск. #65381 (Pablo Marcos).

  • Добавлена агрегатная функция groupConcat. Примерно то же самое, что arrayStringConcat(groupArray(column), ','). Может принимать 2 параметра: строковый разделитель и количество элементов для обработки. #65451 (Yarik Briukhovetskyi).

  • Добавлено хранилище AzureQueue. #65458 (Kseniia Sumarokova).

  • Добавлена новая настройка для отключения/включения записи page index в файлы Parquet. #65475 (lgbo).

  • Автоматически добавляется подстановочный символ * в конец пути к директории при использовании табличной функции file. #66019 (Zhidong (David) Guo).

  • Добавлена опция --memory-usage для клиента в неинтерактивном режиме. #66393 (vdimir).

  • Добавлен виртуальный столбец _etag для движка таблиц S3. Исправляет #65312. #65386 (skyoct)

  • Этот pull request добавляет Hive-стиль партиционирования для разных движков (File, URL, S3, AzureBlobStorage, HDFS). Hive-стиль партиционирования организует данные в секционированные подкаталоги, что делает более эффективными выполнение запросов и управление большими наборами данных. В настоящее время он только создает виртуальные столбцы с соответствующими именами и данными. В последующем PR будет добавлена соответствующая фильтрация данных (повышение производительности). #65997 (Yarik Briukhovetskyi).

  • Добавлена функция printf для совместимости со Spark. #66257 (李扬).

  • Добавлена поддержка чтения геометрии MULTILINESTRING в формате WKT с помощью функции readWKTLineString. #67647 (Jacob Reckhard).

  • Добавлен механизм тегирования (пространства имен) для кэша запросов. Одни и те же запросы с разными тегами считаются разными для кэша запросов. Пример: SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'abc' и SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'def' теперь создают разные записи в кэше запросов. #68235 (sakulali).