Список изменений v24.10 для Cloud
Актуальные изменения в сервисах ClickHouse Cloud в релизе v24.10.
Обратно несовместимое изменение
- Разрешена запись
SETTINGSпередFORMATв цепочке запросов сUNION, когда подзапросы заключены в круглые скобки. Это закрывает #39712. Изменено поведение, когда в запросе секция SETTINGS указана дважды подряд. Ближайшая секция SETTINGS будет иметь приоритет для соответствующего подзапроса. В предыдущих версиях внешняя секция SETTINGS могла получать приоритет над внутренней. #60197 #68614 (Alexey Milovidov). - Пере реализован тип Dynamic. Теперь, когда достигнут лимит динамических типов данных, новые типы не приводятся к String, а сохраняются в специальной структуре данных в двоичном формате с двоично закодированным типом данных. Теперь любой тип, когда‑либо вставленный в столбец типа Dynamic, может быть прочитан из него как подстолбец. #68132 (Pavel Kruglov).
- Выражения вида
a[b].cподдерживаются для именованных кортежей, а также именованные обращения из произвольных выражений, напримерexpr().name. Это полезно для обработки JSON. Это закрывает #54965. В предыдущих версиях выражение видаexpr().nameразбиралось какtupleElement(expr(), name), и анализатор запроса искал столбецname, а не соответствующий элемент кортежа; в новой версии оно изменено наtupleElement(expr(), 'name'). В большинстве случаев предыдущая версия не работала, но можно представить себе очень нетипичный сценарий, когда это изменение может привести к несовместимости: если вы хранили имена элементов кортежа в столбце или алиасе, который назывался иначе, чем имя элемента кортежа:SELECT 'b' AS a, CAST([tuple(123)] AS 'Array(Tuple(b UInt8))') AS t, t[1].a. Маловероятно, что вы использовали такие запросы, но мы всё же должны пометить это изменение как потенциально обратно несовместимое. #68435 (Alexey Milovidov). - Когда настройка
print_pretty_type_namesвключена, тип данныхTupleвыводится в удобочитаемом виде в командахSHOW CREATE TABLE, функцииformatQuery, а также в интерактивном режиме вclickhouse-clientиclickhouse-local. В предыдущих версиях эта настройка применялась только к запросамDESCRIBEиtoTypeName. Это закрывает #65753. #68492 (Alexey Milovidov). - Перестановка условий фильтрации в секции
[PRE]WHEREтеперь по умолчанию разрешена. Её можно отключить, установивallow_reorder_prewhere_conditionsв значениеfalse. #70657 (Nikita Taranov). - Исправлена оптимизация
optimize_functions_to_subcolumns(ранее могла приводить к ошибкеInvalid column type for ColumnUnique::insertRangeFrom. Expected String, got LowCardinality(String)), за счёт сохранения типаLowCardinalityвmapKeys/mapValues. #70716 (Azat Khuzhin).
Новая возможность
- Refreshable materialized views готовы к использованию в продакшене. #70550 (Michael Kolupaev). Refreshable materialized views теперь поддерживаются в базах данных Replicated. #60669 (Michael Kolupaev).
- Функция
toStartOfInterval()теперь имеет новую перегрузку, которая эмулирует функцию TimescaleDBtime_bucket(), а также функцию PostgreSQLdate_bin(). (#55619) Она позволяет выравнивать значения дат и временных меток по кратным заданному интервалу, отсчитываемым от произвольного начала (вместо 0000-01-01 00:00:00.000 в качестве фиксированного начала). Например,SELECT toStartOfInterval(toDateTime('2023-01-01 14:45:00'), INTERVAL 1 MINUTE, toDateTime('2023-01-01 14:35:30'));возвращает2023-01-01 14:44:30, что является значением, кратным минутным интервалам, отсчитываемым от точки отсчёта2023-01-01 14:35:30. #56738 (Yarik Briukhovetskyi). - Рефакторинг интеграции с MongoDB: миграция на новый драйвер mongocxx вместо устаревшего Poco::MongoDB, удалена поддержка устаревшего протокола, добавлена поддержка подключения по URI, всех типов MongoDB, команд WHERE и ORDER BY на стороне MongoDB, введены ограничения на выражения, не поддерживаемые MongoDB. #63279 (Kirill Nikiforov).
- Новый параметр
--progress-tableв clickhouse-client выводит таблицу с метриками, изменяющимися во время выполнения запроса; связанный с ним параметр--enable-progress-table-toggleпозволяет переключать отображение таблицы прогресса по нажатию комбинации клавиш Ctrl+Space. #63689 (Maria Khristenko). - Это позволяет предоставлять доступ к префиксам с подстановочными символами:
GRANT SELECT ON db.table_pefix_* TO user. #65311 (pufit). - Добавлен формат JSONCompactWithProgress, где ClickHouse выводит каждую строку в виде JSON-объекта, по одному на строку, включая метаданные, данные, прогресс, итоговые значения и статистику. #66205 (Alexey Korepanov).
- Добавлен журнал system.query_metric_log, который содержит историю значений использования памяти и метрик из таблицы system.events для отдельных запросов и периодически сбрасывается на диск. #66532 (Pablo Marcos).
- Добавлена настройка
input_format_json_empty_as_default, которая при включении интерпретирует пустые поля во входных JSON-данных как значения по умолчанию. Закрывает #59339. #66782 (Alexis Arnaud). - Добавлены функции
overlayиoverlayUTF8, которые заменяют часть строки другой строкой. Пример:SELECT overlay('Hello New York', 'Jersey', 11)возвращаетHello New Jersey. #66933 (李扬). - Добавлена новая команда: легковесное удаление в партиции
DELETE FROM [db.]table [ON CLUSTER cluster] [IN PARTITION partition_expr] WHERE expr;``` VM-114-29-tos :) select * from ads_app_poster_ip_source_channel_di_replicated_local;. #67805 (sunny). - Реализовано сравнение значений типа данных
Interval, и теперь они приводятся к наименьшему общему надтипу. #68057 (Yarik Briukhovetskyi). - Добавлена настройка create_if_not_exists, позволяющая по умолчанию использовать поведение IF NOT EXISTS при выполнении команд CREATE. #68164 (Peter Nguyen).
- Добавляет возможность читать таблицы Iceberg в Azure и локально. #68210 (Daniil Ivanik).
- Добавлены агрегатные функции distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypes для более удобного анализа содержимого и типов JSON-столбцов. #68463 (Pavel Kruglov).
- Записи кэша запросов теперь можно удалять по тегу. Например, запись кэша запросов, созданная запросом
SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc', теперь может быть удалена с помощьюSYSTEM DROP QUERY CACHE TAG 'abc'(или, разумеется, просто:SYSTEM DROP QUERY CACHE, что полностью очистит кэш запросов). #68477 (Michał Tabaszewski). - Простой запрос SELECT можно записывать с неявным SELECT, чтобы использовать выражения как в калькуляторе, например
ch "1 + 2". Это поведение задаётся новым параметромimplicit_select. #68502 (Alexey Milovidov). - Добавлена поддержка режима --copy для clickhouse local как упрощённого способа преобразования форматов #68503. #68583 (Denis Hananein).
- Добавлена функция
ripeMD160, которая вычисляет криптографический хеш RIPEMD-160 для строки. Пример:SELECT hex(ripeMD160('The quick brown fox jumps over the lazy dog'))возвращает37F332F68DB77BD9D7EDD4969571AD671CF9DD3B. #68639 (Dergousov Maxim). - Добавлен виртуальный столбец _headers для табличного движка url. Закрывает #65026. #68867 (flynn).
- Добавлена таблица
system.projectionsдля отслеживания доступных проекций. #68901 (Jordi Villar). - Добавлена поддержка функции
arrayUnion. #68989 (Peter Nguyen). - Добавлена новая функция
arrayZipUnalignedдля совместимости со Spark (arrays_zip), которая допускает массивы разной длины и основана на исходнойarrayZip. ``` sql SELECT arrayZipUnaligned([1], [1, 2, 3]). #69030 (李扬). - Поддержана агрегатная функция
quantileExactWeightedInterpolated, которая представляет собой интерполированную версиюquantileExactWeighted. Некоторые могут задаться вопросом, зачем нужна новаяquantileExactWeightedInterpolated, если у нас уже естьquantileExactInterpolatedWeighted. Причина в том, что новая функция более точная, чем старая. Кроме того, она нужна для совместимости со Spark в Apache Gluten. #69619 (李扬). - Добавлена поддержка функции arrayElementOrNull. Она возвращает null, если индекс массива выходит за пределы или ключ в map не найден. #69646 (李扬).
- Добавлена поддержка типа Dynamic в большинстве функций за счёт выполнения их над внутренними типами, хранящимися в Dynamic. #69691 (Pavel Kruglov).
- Добавлен аргумент
scale(по умолчанию:true) в функциюarrayAUC, который позволяет пропустить шаг нормализации (issue #69609). #69717 (gabrielmcg44). - Повторно добавлена функция
RIPEMD160, которая вычисляет криптографический хеш RIPEMD-160 для строки. Пример:SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'))возвращает37F332F68DB77BD9D7EDD4969571AD671CF9DD3B. #70087 (Dergousov Maxim). - Разрешить кэширование файлов при чтении для движков таблиц объектного хранилища и озёр данных, используя хеш, вычисленный по ETag и пути к файлу, в качестве ключа кэша. #70135 (Kseniia Sumarokova).
- Поддерживается чтение таблиц Iceberg из HDFS. #70268 (flynn).
- Добавлена возможность чтения/записи типа JSON как бинарной строки в формате RowBinary при включённых настройках
input_format_binary_read_json_as_string/output_format_binary_write_json_as_string. #70288 (Pavel Kruglov). - Позволяет сериализовать/десериализовать столбец JSON как один столбец типа String в формате Native. Для вывода используйте настройку
output_format_native_write_json_as_string. Для ввода используйте версию сериализации1перед данными столбца. #70312 (Pavel Kruglov). - Теперь поддерживается стандартный CTE
with insert, ранее поддерживался толькоinsert ... with .... #70593 (Shichao Jin).