Журнал изменений за 2023 год
Оглавление
Релиз ClickHouse v23.12, 2023-12-28
Релиз ClickHouse v23.11, 2023-12-06
Релиз ClickHouse v23.10, 2023-11-02
Релиз ClickHouse v23.9, 2023-09-28
Релиз ClickHouse v23.8 LTS, 2023-08-31
Релиз ClickHouse v23.7, 2023-07-27
Релиз ClickHouse v23.6, 2023-06-30
Релиз ClickHouse v23.5, 2023-06-08
Релиз ClickHouse v23.4, 2023-04-26
Релиз ClickHouse v23.3 LTS, 2023-03-30
Релиз ClickHouse v23.2, 2023-02-23
Релиз ClickHouse v23.1, 2023-01-25
Журнал изменений за 2022 год
Релиз ClickHouse 23.12 от 2023-12-28
Обратное несовместимое изменение
- Исправлена проверка на недетерминированные функции в выражениях TTL. Ранее в некоторых случаях можно было создать выражение TTL с недетерминированными функциями, что могло приводить к неопределённому поведению в дальнейшем. Это исправляет #37250. По умолчанию запрещены выражения TTL, которые не зависят ни от каких столбцов таблицы. Их можно снова разрешить с помощью
SET allow_suspicious_ttl_expressions = 1илиSET compatibility = '23.11'. Закрывает #37286. #51858 (Alexey Milovidov). - Параметр MergeTree
clean_deleted_rowsобъявлен устаревшим, он больше ни на что не влияет. Ключевое словоCLEANUPдляOPTIMIZEпо умолчанию не допускается (его можно разблокировать с помощью параметраallow_experimental_replacing_merge_with_cleanup). #58267 (Alexander Tokmakov). Это исправляет #57930. Это закрывает #54988. Это закрывает #54570. Это закрывает #50346. Это закрывает #47579. Функциональность должна быть удалена, потому что она оказалась неудачной. Мы должны удалить её как можно скорее, потому что у нас нет другого выхода. #57932 (Alexey Milovidov).
Новая функциональность
- Реализована поддержка refreshable materialized views, запрошенных в #33919. #56946 (Michael Kolupaev, Michael Guzov).
- Добавлен
PASTE JOIN, который позволяет соединять таблицы без указания условияON, просто по номерам строк. Пример:SELECT * FROM (SELECT number AS a FROM numbers(2)) AS t1 PASTE JOIN (SELECT number AS a FROM numbers(2) ORDER BY a DESC) AS t2. #57995 (Yarik Briukhovetskyi). - Оператор
ORDER BYтеперь поддерживает указание значенияALL, что означает, что ClickHouse сортирует по всем столбцам, указанным в оператореSELECT. Пример:SELECT col1, col2 FROM tab WHERE [...] ORDER BY ALL. #57875 (zhongyuankai). - Добавлена новая команда мутации
ALTER TABLE <table> APPLY DELETED MASK, которая позволяет принудительно применить маску, записанную с помощью механизма легковесного удаления, и удалить с диска строки, помеченные как удалённые. #57433 (Anton Popov). - Обработчик
/binaryоткрывает визуальный интерфейс для просмотра символов в бинарнике ClickHouse. #58211 (Alexey Milovidov). - Добавлена новая SQL‑функция
sqidдля генерации идентификаторов Sqid (https://sqids.org/), пример:SELECT sqid(125, 126). #57512 (Robert Schulze). - Добавлена новая функция
seriesPeriodDetectFFTдля обнаружения периода временного ряда с использованием FFT. #57574 (Bhavna Jindal). - Добавлен HTTP-эндпоинт для проверки готовности Keeper к приёму трафика. #55876 (Konstantin Bogdanov).
- Добавлен режим 'union' для определения схемы. В этом режиме результирующая схема таблицы представляет собой объединение схем всех файлов (то есть схема определяется по каждому файлу). Режим определения схемы управляется настройкой
schema_inference_modeс двумя возможными значениями —defaultиunion. Закрывает #55428. #55892 (Kruglov Pavel). - Добавлена новая настройка
input_format_csv_try_infer_numbers_from_strings, которая позволяет определять числовые значения по строкам в формате CSV. Закрывает #56455. #56859 (Kruglov Pavel). - Если количество баз данных или таблиц превышает настраиваемый порог, отображается предупреждение для пользователя. #57375 (凌涛).
- Словарь с макетом
HASHED_ARRAY(иCOMPLEX_KEY_HASHED_ARRAY) поддерживает параметрSHARDSтак же, как и макетHASHED. #57544 (vdimir). - Добавлены асинхронные метрики для общего объёма байт первичного ключа и общего объёма байт первичного ключа, выделенных в памяти. #57551 (Bharat Nallan).
- Добавлена функция
SHA512_256. #57645 (Bharat Nallan). - Добавлен алиас
FORMAT_BYTESдляformatReadableSize. #57592 (Bharat Nallan). - Разрешена возможность передавать необязательный токен сессии в табличную функцию
s3. #57850 (Shani Elharrar). - Добавлена новая настройка
http_make_head_request. Если она отключена, табличный движок URL не будет выполнять запрос HEAD для определения размера файла. Это нужно для поддержки неэффективных, неправильно сконфигурированных или не поддерживающих такую возможность HTTP-серверов. #54602 (Fionera). - Теперь можно ссылаться на столбец-алиас (ALIAS) в определениях индексов, не являющихся первичным ключом (issue #55650). Пример:
CREATE TABLE tab(col UInt32, col_alias ALIAS col + 1, INDEX idx (col_alias) TYPE minmax) ENGINE = MergeTree ORDER BY col;. #57546 (Robert Schulze). - Добавлена новая настройка
readonly, которую можно использовать для указания, что диск S3 доступен только для чтения. Это может быть полезно для создания таблицы на диске типаs3_plainпри наличии доступа только на чтение к лежащему в основе бакету S3. #57977 (Pengyuan Bian). - Анализ первичного ключа в таблицах MergeTree теперь применяется к предикатам, которые включают виртуальный столбец
_part_offset(при необходимости совместно с_part). Эта возможность может использоваться как особый вид вторичного индекса. #58224 (Amos Bird).
Повышение производительности
- Извлекаются диапазоны непересекающихся частей из таблицы MergeTree во время обработки FINAL. Таким образом можно избежать дополнительной логики FINAL для этих непересекающихся диапазонов частей. Если количество дублирующихся значений с одинаковым первичным ключом невелико, производительность будет почти такой же, как без FINAL. Улучшена производительность чтения для MergeTree FINAL, когда включена настройка
do_not_merge_across_partitions_select_final. #58120 (Maksim Kita). - Реализовано копирование между S3-дисками с использованием s3-server-side copy вместо копирования через буфер. Улучшены операции
BACKUP/RESTOREи командаclickhouse-disks copy. #56744 (MikhailBurdukov). - Hash JOIN учитывает настройку
max_joined_block_size_rowsи не создаёт большие блоки дляALL JOIN. #56996 (vdimir). - Более раннее освобождение памяти при агрегации. Это может позволить избежать ненужной внешней агрегации. #57691 (Nikolai Kochetov).
- Повышена производительность сериализации строк. #57717 (Maksim Kita).
- Добавлена поддержка тривиальной оптимизации
countдля таблиц с движкомMerge. #57867 (skyoct). - Оптимизирована агрегация в некоторых случаях. #57872 (Anton Popov).
- Функция
hasAnyтеперь может использовать преимущества полнотекстовых индексов пропуска. #57878 (Jpnock). - Функция
if(cond, then, else)(и её псевдонимcond ? then : else) была оптимизирована для безветвленного вычисления. #57885 (zhanglistar). - MergeTree автоматически определяет значение настройки
do_not_merge_across_partitions_select_final, если выражение ключа партиции содержит только столбцы из выражения первичного ключа. #58218 (Maksim Kita). - Ускорена работа операций
MINиMAXдля нативных типов данных. #58231 (Raúl Marín). - Реализована политика кэширования
SLRUдля кэша файловой системы. #57076 (Kseniia Sumarokova). - Лимит числа подключений на один endpoint для фоновых выборок увеличен с
15до значения настройкиbackground_fetches_pool_size. - Настройка уровня MergeTreereplicated_max_parallel_fetches_for_hostпризнана устаревшей. - Настройки уровня MergeTreereplicated_fetches_http_connection_timeout,replicated_fetches_http_send_timeoutиreplicated_fetches_http_receive_timeoutперенесены на уровень Server. - Настройкаkeep_alive_timeoutдобавлена в список настроек уровня Server. #57523 (Nikita Mikhaylov). - Запросы к
system.filesystem_cacheстали менее затратными по памяти. #57687 (Kseniia Sumarokova). - Снижено использование памяти при десериализации строк. #57787 (Maksim Kita).
- Более эффективный конструктор для Enum — актуально, когда у Enum очень много значений. #57887 (Duc Canh Le).
- Улучшено чтение из кэша файловой системы: всегда используется метод
pread. #57970 (Nikita Taranov). - Добавлена оптимизация цепочки AND notEquals в оптимизаторе логических выражений. Эта оптимизация доступна только при включённом экспериментальном Analyzer. #58214 (Kevin Mingtarja).
Улучшения
- Поддержка мягкого ограничения памяти в Keeper. Он будет отклонять запросы, когда использование памяти приближается к максимальному значению. #57271 (Han Fei). #57699 (Han Fei).
- Обеспечена корректная обработка обновлённой конфигурации кластера при вставках в distributed таблицы. При динамическом обновлении списка узлов кластера Directory Monitor distributed таблицы будет синхронизировать его. #42826 (zhongyuankai).
- Не допускается создание реплицируемой таблицы с несогласованными параметрами слияния. #56833 (Duc Canh Le).
- Отображать несжатый размер в
system.tables. #56618. #57186 (Chen Lixiang). - Добавлена настройка
skip_unavailable_shardsдля таблицDistributed, аналогичная одноимённой настройке на уровне запроса. Закрывает #43666. #57218 (Gagan Goel). - Функция
substring(синонимы:substr,mid) теперь может использоваться с типамиEnum. Ранее первый аргумент функции должен был иметь типStringилиFixedString. Это улучшает совместимость с инструментами третьих сторон, такими как Tableau, при использовании интерфейса MySQL. #57277 (Serge Klochkov). - Функция
formatтеперь поддерживает произвольные типы аргументов (вместо того чтобы работать только с аргументами типовStringиFixedString). Это позволяет выполнить запросSELECT format('The {0} to all questions is {1}', 'answer', 42). #57549 (Robert Schulze). - Добавлена возможность использовать функцию
date_truncс нечувствительным к регистру первым аргументом. Теперь поддерживаются оба варианта:SELECT date_trunc('day', now())иSELECT date_trunc('DAY', now()). #57624 (Yarik Briukhovetskyi). - Более информативные подсказки, когда таблица не существует. #57342 (Bharat Nallan).
- Разрешено переопределять серверные настройки
max_partition_size_to_dropиmax_table_size_to_dropпри выполнении запроса. #57452 (Jordi Villar). - Незначительно улучшено определение безымянных кортежей в форматах JSON. #57751 (Kruglov Pavel).
- Добавлена поддержка флага read-only при подключении к Keeper (исправляет #53749). #57479 (Mikhail Koviazin).
- Исправлены возможные случаи, когда распределённые отправки «застревали» из‑за ошибки «No such file or directory» (во время восстановления батча с диска). Исправлены возможные проблемы со значением
error_countизsystem.distribution_queue(в случае, еслиdistributed_directory_monitor_max_sleep_time_ms> 5 минут). Добавлено событие профилирования для отслеживания неуспешных асинхронных INSERT —DistributedAsyncInsertionFailures. #57480 (Azat Khuzhin). - Добавлена поддержка генерируемых столбцов PostgreSQL и значений по умолчанию для столбцов в
MaterializedPostgreSQL(экспериментальная возможность). Закрывает #40449. #57568 (Kseniia Sumarokova). - Позволяет применять некоторые изменения настроек кэша файловой системы без перезапуска сервера. #57578 (Kseniia Sumarokova).
- Корректная обработка структуры таблицы PostgreSQL при пустом массиве. #57618 (Mike Kot).
- Добавлена метрика
ClickHouseErrorMetric_ALL, отображающая общее количество ошибок, произошедших с момента последнего перезапуска сервера. #57627 (Nikita Mikhaylov). - Разрешены узлы в конфигурационном файле со ссылкой
from_env/from_zkи непустым элементом при replace=1. #57628 (Azat Khuzhin). - Табличная функция
fuzzJSON, которая позволяет генерировать большое количество некорректного JSON для фаззинга. #57646 (Julia Kartseva). - Разрешено преобразование IPv6 в UInt128 и бинарные арифметические операции. #57707 (Yakov Olkhovskiy).
- Добавлена настройка
async inserts deduplication cache, задающая время ожидания обновления кэша. Настройкаasync_block_ids_cache_min_update_interval_msобъявлена устаревшей. Теперь кэш обновляется только в случае конфликтов. #57743 (alesapin). - Функция
sleep()теперь может быть прервана командойKILL QUERY. #57746 (Vitaly Baranov). - Запрещено выполнение запросов
CREATE TABLE ... AS SELECTдля движков таблицReplicatedв экспериментальной базе данныхReplicated, поскольку они не поддерживаются. См. #35408. #57796 (Nikolay Degterinsky). - Исправлена и улучшена трансформация запросов для внешних баз данных, чтобы рекурсивно получать все совместимые предикаты. #57888 (flynn).
- Добавлена поддержка динамического изменения размера файлового кеша. Закрывает #57866. #57897 (Kseniia Sumarokova).
- Обеспечена корректная поддержка
system.stack_traceдля потоков с заблокированным SIGRTMIN (такие потоки могут встречаться во внешних библиотеках низкого качества, таких как Apache rdkafka). #57907 (Azat Khuzhin). А также сигнал отправляется потокам только в том случае, если он не заблокирован, чтобы избежать ожиданияstorage_system_stack_trace_pipe_read_timeout_ms, когда в этом нет смысла. #58136 (Azat Khuzhin). - Разрешить сбои Keeper при проверке вставок с кворумом. #57986 (Raúl Marín).
- Добавлено максимальное/пиковое значение RSS (
MemoryResidentMax) в таблицу system.asynchronous_metrics. #58095 (Azat Khuzhin). - Этот PR позволяет использовать ссылки в стиле S3 (
https://иs3://) без указания региона, даже если он отличается от региона по умолчанию. Кроме того, автоматически определяется корректный регион, если пользователь указал неверный. #58148 (Yarik Briukhovetskyi). clickhouse-format --obfuscateбудет корректно обрабатывать Settings, MergeTreeSettings и часовые пояса и не изменять их названия. #58179 (Alexey Milovidov).- Добавлена явная функция
finalize()вZipArchiveWriter. Упрощён слишком сложный код вZipArchiveWriter. Это исправляет #58074. #58202 (Vitaly Baranov). - Кэши с одинаковым путём теперь используют одни и те же объекты кэша. Такое поведение было и раньше, но было нарушено в версии 23.4. Если для таких кэшей с одинаковым путём заданы разные наборы настроек кэша, будет выброшено исключение, сообщающее, что это не допускается. #58264 (Kseniia Sumarokova).
- Параллельные реплики (экспериментальная функция): более удобные настройки #57542 (Igor Nikonov).
- Parallel replicas (экспериментальная возможность): улучшена обработка ответов на объявления #57749 (Igor Nikonov).
- Параллельные реплики (экспериментальная функция): строже учитывать
min_number_of_marksвParallelReplicasReadingCoordinator#57763 (Nikita Taranov). - Параллельные реплики (экспериментальная возможность): отключены параллельные реплики для IN (subquery) #58133 (Igor Nikonov).
- Параллельные реплики (экспериментальная возможность): добавлено событие профиля 'ParallelReplicasUsedCount' #58173 (Igor Nikonov).
- Запросы, отличные от POST, такие как HEAD, будут только для чтения, аналогично GET. #58060 (San).
- Добавлен столбец
bytes_uncompressedв таблицуsystem.part_log#58167 (Jordi Villar). - Добавлено имя базового бэкапа в таблицы
system.backupsиsystem.backup_log#58178 (Pradeep Chhetri). - Добавлена поддержка задания параметров запроса в clickhouse-local через командную строку #58210 (Pradeep Chhetri).
Улучшение сборки/тестирования/упаковки
- Рандомизировать больше настроек #39663 (Anton Popov).
- Рандомизировать отключённые оптимизации в CI #57315 (Raúl Marín).
- Разрешить использование табличных движков и функций, связанных с Azure, на macOS. #51866 (Alexey Milovidov).
- ClickHouse Fast Test теперь использует Musl вместо GLibc. #57711 (Alexey Milovidov). Полностью статическая сборка на Musl доступна для загрузки из CI.
- Запускать ClickBench для каждого коммита. Это закрывает #57708. #57712 (Alexey Milovidov).
- Исключить использование небезопасной C/POSIX-функции
selectво внешних библиотеках. #57467 (Igor Nikonov). - Настройки, доступные только в ClickHouse Cloud, также будут присутствовать в open-source сборке ClickHouse для удобства. #57638 (Nikita Mikhaylov).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Исправлена возможная проблема с нарушением порядка сортировки в TTL GROUP BY #49103 (Nikita Mikhaylov).
- Исправлено: в стратегии разбиения на бакеты
lttbпервый и последний бакеты теперь содержат только по одной точке #57003 (FFish). - Исправлена потенциальная взаимоблокировка в формате
Templateпри синхронизации после ошибки #57004 (Kruglov Pavel). - Исправлена ошибка, приводившая к преждевременной остановке разбора файла при пропуске большого количества ошибок #57006 (Kruglov Pavel).
- Предотвращён обход ACL словаря через табличную функцию
dictionary#57362 (Salvatore Mesoraca). - Исправлен ещё один случай ошибки «non-ready Set», обнаруженной фаззером. #57423 (Nikolai Kochetov).
- Исправлено несколько ошибок в использовании функции PostgreSQL
array_ndims. #57436 (Ryan Jacobs). - Исправлена несогласованность RWLock после истечения тайм‑аута блокировки на запись #57454 (Vitaly Baranov). Исправлена несогласованность RWLock после истечения тайм‑аута блокировки на запись (снова) #57733 (Vitaly Baranov).
- Исправлено: не исключать эфемерный столбец при построении цепочки проталкивания в представления #57461 (Yakov Olkhovskiy).
- MaterializedPostgreSQL (экспериментальная функциональность): исправлена ошибка #41922, добавлен тест для #41923 #57515 (Kseniia Sumarokova).
- Игнорировать предложение ON CLUSTER в запросах GRANT/REVOKE для управления реплицируемыми сущностями доступа. #57538 (MikhailBurdukov).
- Исправлено падение clickhouse-local #57553 (Nikolay Degterinsky).
- Исправлена ошибка в Hash JOIN. #57564 (vdimir).
- Исправлена потенциальная ошибка в источнике PostgreSQL #57567 (Kseniia Sumarokova).
- Исправлено приведение типов в Hash JOIN для вложенного LowCardinality. #57614 (vdimir).
- Предотвращены зависания
system.stack_traceпутём корректного запрета параллельного чтения из него. #57641 (Azat Khuzhin). - Исправлена ошибка при агрегации разреженных столбцов с
any(...) RESPECT NULL#57710 (Azat Khuzhin). - Исправлен парсинг унарных операторов #57713 (Nikolay Degterinsky).
- Исправлена загрузка зависимостей для экспериментального табличного движка
MaterializedPostgreSQL. #57754 (Kseniia Sumarokova). - Исправлены повторные попытки выполнения для отключённых узлов при BACKUP/RESTORE ON CLUSTER #57764 (Vitaly Baranov).
- Исправлен результат внешней агрегации при частично материализованной проекции #57790 (Anton Popov).
- Исправлено слияние в агрегатных функциях с комбинатором
*Map#57795 (Anton Popov). - Отключён
system.kafka_consumersиз-за ошибки. #57822 (Azat Khuzhin). - Исправлена поддержка ключей типа LowCardinality в Merge JOIN. #57827 (vdimir).
- Исправление для
InterpreterCreateQuery, связанное с примерным блоком. #57855 (Maksim Kita). addresses_exprигнорировались в именованных коллекциях PostgreSQL. #57874 (joelynch).- Исправлен некорректный доступ к памяти в BLAKE3 (Rust) #57876 (Raúl Marín). Затем реализация была переписана с Rust на C++ для повышения безопасности работы с памятью. #57994 (Raúl Марин).
- Нормализованы имена функций в
CREATE INDEX#57906 (Alexander Tokmakov). - Исправлена обработка случая недоступности реплик до выполнения первого запроса #57933 (Nikita Taranov).
- Исправлена некорректная классификация псевдонима литерала #57988 (Chen768959).
- Исправлена некорректная предварительная обработка в Keeper #58069 (Antonio Andelic).
- Исправлено целочисленное переполнение в библиотеке
Poco, связанное сUTF32Encoding#58073 (Andrey Fedotov). - Исправлена работа параллельных реплик (экспериментальная функциональность) при наличии скалярного подзапроса с большим целочисленным значением #58118 (Alexey Milovidov).
- Исправлена функция
accurateCastOrNullдля значенийDateTime, выходящих за допустимый диапазон #58139 (Andrey Zvonov). - Исправлена возможная ошибка
PARAMETER_OUT_OF_BOUNDпри чтении подстолбцов из широкой части в MergeTree #58175 (Kruglov Pavel). - Исправлено снижение производительности
CREATE VIEWс огромным количеством подзапросов #58220 (Tao Wang). - Исправлен параллельный парсинг JSONCompactEachRow #58181 (Alexey Milovidov). #58250 (Kruglov Pavel).
Релиз ClickHouse 23.11 от 2023-12-06
Изменение, нарушающее обратную совместимость
- В конфигурационном файле сервера ClickHouse по умолчанию включены
access_management(управление пользователями с помощью SQL-запросов) иnamed_collection_control(управление именованными коллекциями с помощью SQL-запросов) для пользователяdefault. Это закрывает #56482. #56619 (Alexey Milovidov). - Многочисленные улучшения для
RESPECT NULLS/IGNORE NULLSдля оконных функций. Если вы используете их как агрегатные функции и храните состояния агрегатных функций с этими модификаторами, они могут стать несовместимыми. #57189 (Raúl Marín). - Удалена оптимизация
optimize_move_functions_out_of_any. #57190 (Raúl Marín). - Спецификаторы формата
%l/%k/%cв функцииparseDateTimeтеперь могут разбирать часы/месяцы без ведущих нулей, например,select parseDateTime('2023-11-26 8:14', '%F %k:%i')теперь работает. Установитеparsedatetime_parse_without_leading_zeros = 0, чтобы восстановить предыдущее поведение, требовавшее две цифры. ФункцияformatDateTimeтеперь также может выводить часы/месяцы без ведущих нулей. Это контролируется настройкойformatdatetime_format_without_leading_zeros, но по умолчанию она выключена, чтобы не ломать существующие сценарии использования. #55872 (Azat Khuzhin). - Больше нельзя использовать агрегатную функцию
avgWeightedс аргументами типаDecimal. Обходной путь: преобразовать аргументы вFloat64. Это закрывает #43928. Это закрывает #31768. Это закрывает #56435. Если вы использовали эту функцию внутри materialized views или проекций с аргументами типаDecimal, свяжитесь с [email protected]. Исправлена ошибка в агрегатной функцииsumMap, из-за чего она стала работать медленнее примерно в 1,5–2 раза. Это не важно, потому что функция всё равно мусорная. Это закрывает #54955. Это закрывает #53134. Это закрывает #55148. Исправлена ошибка в функцииgroupArraySample— она использовала одно и то же случайное начальное значение (seed) в случае, когда в запросе генерировалось более одного агрегатного состояния. #56350 (Alexey Milovidov).
Новая возможность
- Добавлена серверная настройка
async_load_databasesдля асинхронной загрузки баз данных и таблиц. Ускоряет запуск сервера. Применяется к базам данных с движкамиOrdinary,AtomicиReplicated. Метаданные их таблиц загружаются асинхронно. Запрос к таблице повышает приоритет задания загрузки и ждёт его завершения. Добавлена новая таблицаsystem.asynchronous_loaderдля интроспекции. #49351 (Sergei Trifonov). - Добавлена системная таблица
blob_storage_log. Она позволяет вести аудит всех данных, записанных в S3 и другие объектные хранилища. #52918 (vdimir). - Используйте статистику для более оптимального упорядочивания условий PREWHERE. #53240 (Han Fei).
- Добавлена поддержка сжатия в протоколе Keeper. Ее можно включить на стороне ClickHouse с помощью флага
use_compressionв секцииzookeeper. Учтите, что сжатие поддерживается только в ClickHouse Keeper, а Apache ZooKeeper его не поддерживает. Исправляет #49507. #54957 (SmitaRKulkarni). - Добавлен параметр
storage_metadata_write_full_object_key. Если он имеет значениеtrue, метаданные записываются в новом формате. В этом формате ClickHouse сохраняет полный ключ удалённого объекта в файле метаданных, что даёт большую гибкость и возможности для оптимизации. #55566 (Sema Checherinda). - Добавлены новые настройки и синтаксис, предотвращающие перезапись полей именованных коллекций. Это позволяет исключить получение злоумышленником несанкционированного доступа к секретам. #55782 (Salvatore Mesoraca).
- Добавлен столбец
hostnameво все системные таблицы логов — он полезен, если вы используете реплицируемые, общие или распределённые системные таблицы. #55894 (Bharat Nallan). - Добавлен запрос
CHECK ALL TABLES. #56022 (vdimir). - Добавлена функция
fromDaysSinceYearZero, которая аналогична функцииFROM_DAYSв MySQL. Например,SELECT fromDaysSinceYearZero(739136)возвращает2023-09-08. #56088 (Joanna Hulboj). - Добавлен внешний инструмент на Python для просмотра бэкапов и извлечения из них информации без использования ClickHouse. #56268 (Vitaly Baranov).
- Реализована новая настройка
preferred_optimize_projection_name. Если она имеет непустое значение, по возможности будет использоваться указанная проекция вместо выбора из всех кандидатов. #56309 (Yarik Briukhovetskyi). - Добавлена 4-символьная команда для передачи / отказа от роли лидера (https://github.com/ClickHouse/ClickHouse/issues/56352). #56354 (Pradeep Chhetri). #56620 (Pradeep Chhetri).
- Добавлена новая SQL-функция
arrayRandomSample(arr, k), которая возвращает выборку k элементов из входного массива. Ранее аналогичную функциональность можно было реализовать только с использованием менее удобного синтаксиса, напримерSELECT arrayReduce('groupArraySample(3)', range(10)). #56416 (Robert Schulze). - Добавлена поддержка данных типа
Float16для использования в файлах.npy. Закрыта задача #56344. #56424 (Yarik Briukhovetskyi). - Добавлено системное представление
information_schema.statisticsдля лучшей совместимости с Tableau Online. #56425 (Serge Klochkov). - Добавлена таблица
system.symbolsдля интроспекции бинарника. #56548 (Alexey Milovidov). - Настраиваемые дашборды. Запросы для графиков теперь по умолчанию загружаются из новой таблицы
system.dashboards. #56771 (Sergei Trifonov). - Добавлена табличная функция
fileCluster— она полезна, если вы монтируете общую файловую систему (NFS и подобные) в каталогuser_files. #56868 (Andrey Zvonov). - Добавлен виртуальный столбец
_size, содержащий размер файла в байтах, для движковs3/file/hdfs/url/azureBlobStorage. #57126 (Kruglov Pavel). - Добавлена метрика Prometheus, показывающая количество ошибок для каждого кода ошибки, возникших на сервере с момента последнего перезапуска, через endpoint Prometheus. #57209 (Nikita Mikhaylov).
- ClickHouse Keeper сообщает о зоне доступности, в которой он запущен, по пути
/keeper/availability-zone. Её можно настроить с помощью<availability_zone><value>us-west-1a</value></availability_zone>. #56715 (Jianfei Hu). - Снять экспериментальный статус
ALTER materialized_view MODIFY QUERYи объявить устаревшей настройкуallow_experimental_alter_materialized_view_structure. Исправляет #15206. #57311 (alesapin). - Настройка
join_algorithmтеперь учитывает указанный порядок #51745 (vdimir). - Добавлена поддержка стандартных типов Protobuf в формате Protobuf. #56741 (János Benjamin Antal).
Повышение производительности
- Адаптивные таймауты для взаимодействия с S3. Первая попытка выполняется с короткими таймаутами отправки и приёма данных. #56314 (Sema Checherinda).
- Увеличено значение по умолчанию параметра
max_concurrent_queriesсо 100 до 1000. Это имеет смысл, когда есть большое количество подключающихся клиентов, которые медленно отправляют или получают данные, так что производительность сервера не ограничивается CPU, или когда число ядер CPU превышает 100. Также по умолчанию включено управление параллелизмом, а общее желаемое количество потоков обработки запросов установлено равным удвоенному числу ядер CPU. Это улучшает производительность в сценариях с очень большим количеством одновременных запросов. #46927 (Alexey Milovidov). - Добавлена поддержка параллельного вычисления оконных функций. Исправлена #34688. #39631 (Dmitry Novik).
- Движок таблицы
Numbers(таблицыsystem.numbers) теперь анализирует условие запроса, чтобы сгенерировать нужное подмножество данных, аналогично индексу таблицы. #50909 (JackyWoo). - Повышена производительность фильтрации по условию
IN (...)для движка таблицыMerge. #54905 (Nikita Taranov). - Улучшение, которое проявляется при полном кэше файловой системы и выполнении крупных операций чтения. #55158 (Kseniia Sumarokova).
- Добавлена возможность отключать контрольные суммы для S3, чтобы избежать избыточных проходов по файлу (это поведение управляется настройкой
s3_disable_checksum). #55559 (Azat Khuzhin). - Теперь мы синхронно читаем из удалённых таблиц, когда данные находятся в кэше страниц (как и для локальных таблиц). Это быстрее, не требует синхронизации внутри пула потоков, позволяет свободно выполнять операции
seekпо локальной файловой системе и сокращает время простоя CPU в ожидании. #55841 (Nikita Taranov). - Оптимизация получения значений из
map,arrayElement. Это даст ускорение примерно на 30%: уменьшен объём зарезервированной памяти и сокращено число вызововresize. #55957 (lgbo). - Оптимизация многоступенчатой фильтрации с использованием AVX-512. Результаты экспериментов производительности на наборе данных OnTime на устройстве ICX (процессор Intel Xeon Platinum 8380, 80 ядер, 160 потоков) показывают, что это изменение может дать прирост QPS запросов Q2, Q3, Q4, Q5 и Q6 на 7.4%, 5.9%, 4.7%, 3.0% и 4.6% соответственно, без влияния на остальные запросы. #56079 (Zhiguo Zhou).
- Ограничено максимальное количество потоков, участвующих в профилировании запросов. Если потоков больше — они пропускают профилирование. #56105 (Alexey Milovidov).
- Снижено количество вызовов виртуальных функций в оконных функциях. #56120 (Maksim Kita).
- Добавлена поддержка рекурсивного отсечения полей
Tupleв формате ORC для ускорения сканирования. #56122 (李扬). - Простая оптимизация подсчёта для формата данных
Npy: запросы видаselect count() from 'data.npy'будут выполняться значительно быстрее за счёт кэширования результатов. #56304 (Yarik Briukhovetskyi). - Запросы с агрегацией и большим количеством потоков будут использовать меньше памяти при построении плана выполнения. #57074 (Alexey Milovidov).
- Повышена производительность выполнения запросов для сценариев с большим числом пользователей и высокой конкурентностью запросов (>2000 QPS) за счёт оптимизации доступа к ProcessList. #57106 (Andrej Hoos).
- Незначительное улучшение
ARRAY JOIN: повторное использование промежуточных результатов. #57183 (李扬). - Бывали случаи, когда раскрутка стека выполнялась медленно. Больше нет. #57221 (Alexey Milovidov).
- Теперь при чтении из внешнего хранилища при
max_streams = 1используется пул чтения по умолчанию. Это особенно полезно, когда включена упреждающая выборка данных (prefetch). #57334 (Nikita Taranov). - Улучшение Keeper: снижено потребление памяти при запуске за счёт отложенной предварительной обработки журналов. #55660 (Antonio Andelic).
- Улучшена производительность сопоставления по маскам (glob) для хранилищ
FileиHDFS. #56141 (Andrey Zvonov). - Списки постинга в экспериментальных полнотекстовых индексах теперь хранятся в сжатом виде, что уменьшает их размер на 10–30%. #56226 (Harry Lee).
- Параллелизована работа
BackupEntriesCollectorпри создании резервных копий. #56312 (Kseniia Sumarokova).
Улучшения
- Добавлена новая настройка
MergeTreeadd_implicit_sign_column_constraint_for_collapsing_engine(по умолчанию отключена). При включении она добавляет неявное ограничение CHECK для таблицCollapsingMergeTree, которое ограничивает значение столбцаSignзначениями -1 и 1. #56701. #56986 (Kevin Mingtarja). - Разрешено добавлять новые диски в конфигурацию хранилища без перезапуска. #56367 (Duc Canh Le).
- Добавлена поддержка создания и материализации индекса в одном и том же запросе
ALTER, а также возможности указыватьmodify TTLиmaterialize TTLв одном запросе. Закрывает #55651. #56331 (flynn). - Добавлена новая табличная функция
fuzzJSON, возвращающая строки с модифицированными версиями исходной JSON-строки со случайными вариациями. #56490 (Julia Kartseva). - Движок
Mergeфильтрует записи в соответствии с политиками строк исходных таблиц, поэтому нет необходимости создавать отдельную политику строк для таблицыMerge. #50209 (Ilya Golshtein). - Добавлена настройка
max_execution_time_leafдля ограничения времени выполнения на сегменте при распределённом запросе иtimeout_overflow_mode_leafдля управления поведением при срабатывании тайм-аута. #51823 (Duc Canh Le). - Добавлена настройка ClickHouse, позволяющая отключить туннелирование HTTPS‑запросов через HTTP‑прокси. #55033 (Arthur Passos).
- Параметр
background_fetches_pool_sizeустановлен в 16, а background_schedule_pool_size — в 512; такая конфигурация лучше подходит для эксплуатации в продакшене с частыми небольшими вставками. #54327 (Denny Crane). - При чтении данных из файла в формате CSV, если в конце строки стоит
\r, за которым не следует\n, возникает исключение вида:Cannot parse CSV format: found \r (CR) not followed by \n (LF). Line must end by \n (LF) or \r\n (CR LF) or \n\r.В ClickHouse конец строки в CSV должен быть\nили\r\nили\n\r, поэтому символ\rдолжен сопровождаться\n, но в некоторых случаях входные CSV-данные могут быть некорректными, как в примере выше, когда\rстоит в конце строки. #54340 (KevinyhZou). - Библиотека Arrow обновлена до релиза 13.0.0 с поддержкой новых кодировок. Закрыта задача #44505. #54800 (Kruglov Pavel).
- Улучшена производительность запросов
ON CLUSTERза счет удаления ресурсоемких системных вызовов для получения всех сетевых интерфейсов при поиске локального IP-адреса в списке хостов в записи DDL. #54909 (Duc Canh Le). - Исправлен учет памяти, выделенной до привязки потока к запросу или пользователю. #56089 (Nikita Taranov).
- Добавлена поддержка
LARGE_LISTв форматах Apache Arrow. #56118 (edef). - Добавлена возможность ручной компакции
EmbeddedRocksDBс помощью запросаOPTIMIZE. #56225 (Azat Khuzhin). - Добавлена возможность задавать BlockBasedTableOptions для таблиц
EmbeddedRocksDB. #56264 (Azat Khuzhin). SHOW COLUMNSтеперь отображает эквивалентное имя типа данных MySQL, если соединение установлено через протокол MySQL. Ранее так было только при установкеuse_mysql_types_in_show_columns = 1. Настройка сохранена, но помечена как устаревшая. #56277 (Robert Schulze).- Исправлена возможная ошибка
The local set of parts of table doesn't look like the set of parts in ZooKeeper, возникавшая при перезапуске сервера сразу после выполненияTRUNCATEилиDROP PARTITION. #56282 (Alexander Tokmakov). - Исправлена обработка неконстантных строк запросов в функциях
formatQuery/formatQuerySingleLine. Также добавлены варианты обеих функций с суффиксомOrNull, которые возвращают NULL, если запрос не удаётся разобрать, вместо выбрасывания исключения. #56327 (Robert Schulze). - Добавлена возможность создания резервной копии materialized view с удалённой внутренней таблицей вместо завершения операции с ошибкой. #56387 (Kseniia Sumarokova).
- Запросы к
system.replicasинициируют обращения к ZooKeeper при выборке некоторых столбцов. Когда таблиц тысячи, эти обращения могут создавать значительную нагрузку на ZooKeeper. Если выполняется несколько одновременных запросов кsystem.replicas, они повторяют одни и те же обращения многократно. Изменение позволяет «дедуплицировать» обращения, выполняемые параллельными запросами. #56420 (Alexander Gololobov). - Исправлена трансляция в MySQL-совместимый запрос при обращении к внешним базам данных. #56456 (flynn).
- Добавлена поддержка резервного копирования и восстановления таблиц с использованием движка
KeeperMap. #56460 (Antonio Andelic). - Ответ 404 на CompleteMultipartUpload следует проверять повторно. Операция могла быть завершена на сервере, даже если клиент получил таймаут или другие сетевые ошибки. При следующей попытке CompleteMultipartUpload возвращается ответ 404. Если ключ объекта существует, эта операция считается успешной. #56475 (Sema Checherinda).
- По умолчанию включён метод HTTP OPTIONS — это упрощает выполнение запросов к ClickHouse из веб-браузера. #56483 (Alexey Milovidov).
- Значение параметра
dns_max_consecutive_failuresбыло по ошибке изменено в #46550 — это изменение отменено, а значение скорректировано на более подходящее. Также увеличен таймаут HTTP keep-alive до разумного значения, используемого в продакшене. #56485 (Alexey Milovidov). - Ленивая загрузка базовых бэкапов (базовый бэкап загружается только при необходимости). Также добавлены сообщения журнала и события профилирования для бэкапов. #56516 (Vitaly Baranov).
- Параметр
query_cache_store_results_of_queries_with_nondeterministic_functions(со значениямиfalseилиtrue) объявлен устаревшим. Его заменил параметрquery_cache_nondeterministic_function_handling— перечисление (enum) с тремя значениями, которое определяет, как кэш запросов обрабатывает запросы с недетерминированными функциями: a) выбросить исключение (поведение по умолчанию), b) всё равно сохранить результат недетерминированного запроса или c) игнорировать, то есть не выбрасывать исключение и не кэшировать результат. #56519 (Robert Schulze). - Проверка на равенство в секции JOIN ON теперь переписывается в проверку
is null. Экспериментальная возможность, только Analyzer. #56538 (vdimir). - Функция
concatтеперь поддерживает аргументы произвольных типов, а не только аргументы типов String и FixedString. Это делает её поведение более похожим на реализацию функцииconcatв MySQL. Например,SELECT concat('ab', 42)теперь возвращаетab42. #56540 (Serge Klochkov). - Добавлена возможность получения конфигурации кэша из секции 'named_collection' в конфигурации или из созданных через SQL именованных коллекций. #56541 (Kseniia Sumarokova).
- PostgreSQL database engine: сделать удаление устаревших таблиц менее агрессивным в случае неуспешного подключения к PostgreSQL. #56609 (jsc0218).
- Подключение к PostgreSQL занимало слишком много времени при неверно указанном URL, в результате соответствующий запрос зависал и затем отменялся. #56648 (jsc0218).
- Улучшение Keeper: по умолчанию отключено сжатое логирование в Keeper. #56763 (Antonio Andelic).
- Добавлена конфигурационная настройка
wait_dictionaries_load_at_startup. #56782 (Vitaly Baranov). - В предыдущих версиях ClickHouse существовала потенциальная уязвимость: если пользователь подключался и безуспешно пытался аутентифицироваться с помощью метода «interserver secret», сервер не завершал соединение немедленно, а продолжал принимать и игнорировать оставшиеся пакеты от клиента. Хотя эти пакеты игнорируются, они всё равно разбираются, и если в них используется метод сжатия с другой известной уязвимостью, это приводит к эксплуатации этой уязвимости без аутентификации. Эта проблема была обнаружена в рамках ClickHouse Bug Bounty Program пользователем https://twitter.com/malacupa. #56794 (Alexey Milovidov).
- Получение части ожидает, пока эта часть будет полностью зафиксирована на удалённой реплике. Не следует отправлять часть в состоянии PreActive. В случае zero copy это жёсткое требование. #56808 (Sema Checherinda).
- Исправлена потенциальная ошибка преобразования логической репликации PostgreSQL при использовании экспериментального
MaterializedPostgreSQL. #53721 (takakawa). - Реализована пользовательская настройка
alter_move_to_space_execute_async, позволяющая выполнять запросыALTER TABLE ... MOVE PARTITION|PART TO DISK|VOLUMEасинхронно. Размер пула для фонового выполнения контролируется параметромbackground_move_pool_size. Поведение по умолчанию — синхронное выполнение. Исправлена #47643. #56809 (alesapin). - Добавлена возможность фильтровать по движку при сканировании
system.tables, чтобы избежать лишних (потенциально затратных по времени) подключений. #56813 (jsc0218). - Добавлен вывод
total_bytesиtotal_rowsв системных таблицах для хранилища RocksDB. #56816 (Aleksandr Musorin). - Разрешить базовые команды ALTER для временных таблиц. #56892 (Sergey).
- Сжатие LZ4. Буферизация сжатого блока в редких случаях, когда ёмкости выходного буфера недостаточно, чтобы записать его напрямую. #56938 (Sema Checherinda).
- Добавлены метрики для числа заданий в очереди, что полезно для пула потоков ввода-вывода. #56958 (Alexey Milovidov).
- Добавлена настройка движка таблиц PostgreSQL в конфигурационный файл. Добавлена проверка этой настройки. Добавлена документация по этой дополнительной настройке. #56959 (Peignon Melvyn).
- Функцию
concatтеперь можно вызывать с одним аргументом, напримерSELECT concat('abc'). Это делает ее поведение более согласованным с реализацией функцииconcatв MySQL. #57000 (Serge Klochkov). - Подписывает все заголовки
x-amz-*, как того требует документация AWS S3. #57001 (Arthur Passos). - Функцию
fromDaysSinceYearZero(псевдоним:FROM_DAYS) теперь можно использовать со знаковыми и беззнаковыми целочисленными типами данных (ранее требовался беззнаковый целочисленный тип). Это повышает совместимость со сторонними инструментами, такими как Tableau Online. #57002 (Serge Klochkov). - Добавлен
system.s3queue_logв конфигурацию по умолчанию. #57036 (Kseniia Sumarokova). - Измените значение по умолчанию для
wait_dictionaries_load_at_startupна true и используйте эту настройку только еслиdictionaries_lazy_loadимеет значение false. #57133 (Vitaly Baranov). - Проверять тип источника словаря при создании словаря, даже если
dictionaries_lazy_loadвключен. #57134 (Vitaly Baranov). - Оптимизации на уровне плана теперь можно включать и отключать по отдельности. Ранее можно было только отключить их все разом. Настройка, которая ранее использовалась для этого (
query_plan_enable_optimizations), сохранена и по‑прежнему может использоваться для отключения всех оптимизаций. #57152 (Robert Schulze). - Код завершения сервера будет соответствовать коду исключения. Например, если сервер не может запуститься из-за ограничения памяти, он завершится с кодом 241 = MEMORY_LIMIT_EXCEEDED. В предыдущих версиях код завершения для исключений всегда был 70 = Poco::Util::ExitCode::EXIT_SOFTWARE. #57153 (Alexey Milovidov).
- Не выполнять деманглирование и символизацию кадров стека из заголовочного файла C++
functional. #57201 (Mike Kot). - Страница HTTP-сервера
/dashboardтеперь поддерживает многолинейные графики. #57236 (Sergei Trifonov). - Параметр командной строки
max_memory_usage_in_clientподдерживает строковое значение с суффиксом единицы измерения (K, M, G и т. д.). Закрывает задачу #56879. #57273 (Yarik Briukhovetskyi). - Обновлена Intel QPL (используется кодеком
DEFLATE_QPL) с v1.2.0 до v1.3.1. Также исправлена ошибка для случая BOF (Block on Fault) = 0: теперь при возникновении ошибок страниц памяти (page faults) выполняется переход на программный (SW) путь. #57291 (jasperzhu). - Увеличено значение по умолчанию настройки
replicated_deduplication_windowв MergeTree со 100 до 1k. #57335 (sichenzhao). - Реже использовать
INCONSISTENT_METADATA_FOR_BACKUP. По возможности лучше продолжать сканирование вместо его остановки и последующего запуска сканирования резервной копии с самого начала. #57385 (Vitaly Baranov).
Улучшения в сборке/тестировании/упаковке
- Добавлен тест SQLLogic. #56078 (Han Fei).
- Для удобства
clickhouse-localиclickhouse-clientдоступны под короткими именами (ch,chl,chc). #56634 (Alexey Milovidov). - Дополнительно оптимизирован размер сборки за счёт удаления неиспользуемого кода из внешних библиотек. #56786 (Alexey Milovidov).
- Добавлена автоматическая проверка на отсутствие слишком крупных единиц трансляции. #56559 (Alexey Milovidov).
- Уменьшен размер однобинарного дистрибутива. Это закрывает #55181. #56617 (Alexey Milovidov).
- Информация о размерах каждой единицы трансляции и бинарного файла после каждой сборки будет отправляться в CI-базу данных ClickHouse Cloud. Это закрывает #56107. #56636 (Alexey Milovidov).
- Некоторые файлы библиотеки "Apache Arrow" (которую мы используем только для второстепенных задач, таких как разбор формата arrow) каждый раз пересобирались независимо от кэша сборки. Это исправлено. #56657 (Alexey Milovidov).
- Исключена повторная компиляция единиц трансляции, зависящих от автогенерируемого исходного файла с информацией о версии. #56660 (Alexey Milovidov).
- Трассировочные данные запусков компоновщика будут отправляться в CI-базу данных ClickHouse Cloud. #56725 (Alexey Milovidov).
- Для исполняемого файла clickhouse используются отладочные символы DWARF 5 (ранее использовался DWARF 4). #56770 (Michael Kolupaev).
- Добавлена новая опция сборки
SANITIZE_COVERAGE. Если она включена, код инструментируется для отслеживания покрытия. Собранная информация доступна внутри ClickHouse с помощью: (1) новой функцииcoverage, которая возвращает массив уникальных адресов в коде, найденных после предыдущего сброса покрытия; (2) запросаSYSTEM RESET COVERAGE, который сбрасывает накопленные данные. Это позволяет сравнивать покрытие разных тестов, включая дифференциальное покрытие кода. Продолжение #20539. #56102 (Alexey Milovidov). - Некоторые фреймы стека могут не разрешаться при сборе стеков. В таких случаях может быть полезен сам адрес. #56267 (Alexander Gololobov).
- Добавлена опция для отключения
libssh. #56333 (Alexey Milovidov). - В S3-тестах в CI включён
temporary_data_in_cache. #48425 (vdimir). - В CI установлено максимальное потребление памяти для clickhouse-client (
1G). #56873 (Nikita Mikhaylov).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Исправлен экспериментальный Analyzer — при вставке из SELECT с подзапросом, ссылающимся на таблицу, в которую выполняется вставка, он должен обрабатывать только вставляемый блок. #50857 (Yakov Olkhovskiy).
- Исправлена ошибка в функции
str_to_map. #56423 (Arthur Passos). - Keeper
reconfig: добавлен тайм-аут перед передачей/получением роли лидера #53481 (Mike Kot). - Исправлен некорректный заголовок в grace hash join и при проталкивании фильтра #53922 (vdimir).
- Разрешён выбор из системных таблиц, когда таблица основана на табличной функции. #55540 (MikhailBurdukov).
- RFC: Исправление ошибки «Cannot find column X in source stream» для распределённых запросов с LIMIT BY #55836 (Azat Khuzhin).
- Исправлена ошибка «Cannot read from file:» при запуске клиента в фоновом режиме #55976 (Kruglov Pavel).
- Исправлено аварийное завершение clickhouse-local при некорректном значении параметра send_logs_level #55994 (Kruglov Pavel).
- Исправлена ошибка в EXPLAIN AST с параметризованным представлением #56004 (SmitaRKulkarni).
- Исправлен сбой при загрузке таблицы во время запуска #56232 (Nikolay Degterinsky).
- Исправлены словари с источником данных ClickHouse, использующие явный запрос #56236 (Nikolay Degterinsky).
- Исправлен segfault в обработчике сигналов Keeper #56266 (Antonio Andelic).
- Исправлена проблема с неполным результатом запроса при использовании UNION в функции view(). #56274 (Nikolai Kochetov).
- Устранена несогласованность между "cast('0' as DateTime64(3))" и "cast('0' as Nullable(DateTime64(3)))" #56286 (李扬).
- Исправлено редкое состояние гонки, связанное с ошибкой выделения памяти #56303 (alesapin).
- Исправлена ошибка восстановления из резервной копии при использовании
flatten_nestedиdata_type_default_nullable#56306 (Kseniia Sumarokova). - Исправлена ошибка, приводившая к сбою при добавлении столбца типа Object(JSON) #56307 (Nikita Mikhaylov).
- Исправлено падение в
filterPushDown#56380 (vdimir). - Исправлено восстановление из резервной копии при наличии материализованного представления и удалённой исходной таблицы #56383 (Kseniia Sumarokova).
- Исправлен segfault во время инициализации Kerberos #56401 (Nikolay Degterinsky).
- Исправлено переполнение буфера в T64 #56434 (Alexey Milovidov).
- Исправлена работа Nullable первичного ключа в FINAL (2) #56452 (Amos Bird).
- Исправлена ошибка в запросах ON CLUSTER без базы данных на инициирующем узле #56484 (Nikolay Degterinsky).
- Исправлен сбой запуска из-за зависимости TTL #56489 (Nikolay Degterinsky).
- Исправлена работа запросов ALTER COMMENT с ON CLUSTER #56491 (Nikolay Degterinsky).
- Исправлена работа ALTER COLUMN с ALIAS #56493 (Nikolay Degterinsky).
- Исправлена обработка пустых NAMED COLLECTIONs #56494 (Nikolay Degterinsky).
- Исправлены две ошибки в анализе проекций. #56502 (Amos Bird).
- Исправлена обработка алиасов в кэше запросов #56545 (Robert Schulze).
- Исправлено преобразование из
Nullable(Enum)вNullable(String)#56644 (Nikolay Degterinsky). - Более надёжная обработка логов в Keeper #56670 (Antonio Andelic).
- Исправлено слияние конфигурации для узлов с атрибутами подстановки #56694 (Konstantin Bogdanov).
- Исправлено дублирующееся использование табличной функции input(). #56695 (Nikolai Kochetov).
- Исправлена проблема с динамической загрузкой OpenSSL для RabbitMQ #56703 (Igor Nikonov).
- Исправлено падение кодека GCD при наличии нулей в данных #56704 (Nikita Mikhaylov).
- Исправлена ошибка 'mutex lock failed: Invalid argument' в clickhouse-local при вставке в функцию #56710 (Kruglov Pavel).
- Исправлен разбор текстового представления Date в оптимистичном пути выполнения #56765 (Kruglov Pavel).
- Исправлено аварийное завершение в кодеке FPC #56795 (Alexey Milovidov).
- DatabaseReplicated: исправлен таймаут DDL-запроса после восстановления реплики #56796 (Alexander Tokmakov).
- Исправлена некорректная передача информации о столбцах Nullable в двоичном протоколе MySQL #56799 (Serge Klochkov).
- Добавлена поддержка файлов метаданных Iceberg в таблицах метахранилища #56810 (Kruglov Pavel).
- Исправлено сообщение TSAN для transform #56817 (Raúl Marín).
- Исправлено форматирование запроса SET и SETTINGS #56825 (Nikolay Degterinsky).
- Исправлен сбой запуска из-за зависимости таблицы в joinGet #56828 (Nikolay Degterinsky).
- Исправлена проблема с уплощением существующих столбцов типа Nested при выполнении ADD COLUMN #56830 (Nikolay Degterinsky).
- Исправлено: допускается символ CR (возврат каретки) в конце строки в CSV #56901 (KevinyhZou).
- Исправлена ошибка в функции
tryBase64Decodeпри обработке некорректного ввода #56913 (Robert Schulze). - Исправлена ошибка генерации глубоко вложенных столбцов в схемах CapnProto/Protobuf #56941 (Kruglov Pavel).
- Предотвращено выполнение несовместимого ALTER над столбцами PROJECTION #56948 (Amos Bird).
- Исправлена проверка пути к файлу SQLite #56984 (San).
- S3Queue: исправлено увеличение счётчика ссылок на метаданные #56990 (Kseniia Sumarokova).
- Небольшое исправление в S3Queue #56999 (Kseniia Sumarokova).
- Исправлена валидация пути к файлу для DatabaseFileSystem #57029 (San).
- Исправлена ошибка в
fuzzBitsпри использовании сARRAY JOIN#57033 (Antonio Andelic). - Исправлено разыменование nullptr в частичном merge join с joined_subquery_re... #57048 (vdimir).
- Исправлена гонка условий в RemoteSource #57052 (Raúl Marín).
- Реализована
bitHammingDistanceдля больших целых чисел #57073 (Alexey Milovidov). - Исправление ошибки с ссылками в стиле S3 #57075 (Yarik Briukhovetskyi).
- Исправлена ошибка в функции JSON_QUERY с несколькими числовыми путями #57096 (KevinyhZou).
- Исправлено переполнение буфера в кодеке Gorilla #57107 (Nikolay Degterinsky).
- Закрывать межсерверное соединение при возникновении любого исключения до аутентификации #57142 (Antonio Andelic).
- Исправлен segfault после выполнения ALTER UPDATE для столбца Nullable MATERIALIZED #57147 (Nikolay Degterinsky).
- Исправлена некорректная оптимизация плана выполнения JOIN с частично материализованной обычной проекцией #57196 (Amos Bird).
- При сравнении описаний столбцов комментарии игнорируются #57259 (Antonio Andelic).
- Исправлена метрика
ReadonlyReplicaдля всех случаев #57267 (Antonio Andelic). - Фоновые слияния теперь корректно используют временное хранилище данных в кэше #57275 (vdimir).
- Исправление в Keeper для журнала изменений и снимков состояния #57299 (Antonio Andelic).
- Игнорировать завершённые задачи ON CLUSTER, если имя хоста изменилось #57339 (Alexander Tokmakov).
- Мутации в MergeTree повторно используют гранулярность индекса исходной части #57352 (Maksim Kita).
- FS cache: добавлено ограничение на фоновую загрузку #57424 (Kseniia Sumarokova).
Релиз ClickHouse 23.10 от 2023-11-02
Несовместимые изменения с предыдущими версиями
- Больше нет возможности автоматически удалять повреждённые части данных. Это закрывает #55174. #55184 (Alexey Milovidov). #55557 (Jihyuk Bok).
- Устаревшие части данных в памяти больше не могут считываться из журнала предзаписи (write-ahead log). Если у вас ранее были настроены части данных в памяти (in-memory parts), их необходимо удалить перед обновлением. #55186 (Alexey Milovidov).
- Удалена интеграция с Meilisearch. Причина: она была совместима только со старой версией 0.18. В последней версии Meilisearch протокол был изменён, и интеграция больше не работает. Примечание: мы будем признательны, если вы поможете вернуть её обратно. #55189 (Alexey Milovidov).
- Переименована концепция directory monitor в background INSERT. Все настройки
*directory_monitor*были переименованы вdistributed_background_insert*. Обратная совместимость должна сохраняться (так как старые настройки были добавлены как алиасы). #55978 (Azat Khuzhin). send_timeout, установленный на стороне клиента, больше не интерпретируется какreceive_timeoutна стороне сервера, и наоборот. #56035 (Azat Khuzhin).- Сравнение временных интервалов с разными единицами измерения теперь будет выбрасывать исключение. Это закрывает #55942. Ранее вы могли неосознанно полагаться на поведение, при котором сравнивались лежащие в основе числовые значения независимо от единиц измерения. #56090 (Alexey Milovidov).
- Полностью переработан экспериментальный движок таблиц
S3Queue: изменён способ хранения информации в ZooKeeper, что позволяет выполнять меньше запросов в ZooKeeper, добавлено кеширование состояния ZooKeeper в случаях, когда известно, что состояние не изменится, улучшен процесс опроса S3, чтобы сделать его менее агрессивным, изменён способ обслуживания TTL и max для отслеживаемых файлов — теперь это фоновый процесс. Добавлены таблицыsystem.s3queueиsystem.s3queue_log. Закрывает #54998. #54422 (Kseniia Sumarokova). - Произвольные пути на HTTP-эндпоинте больше не интерпретируются как запрос к эндпоинту
/query. #55521 (Konstantin Bogdanov).
Новые возможности
- Добавлена функция
arrayFold(accumulator, x1, ..., xn -> expression, initial, array1, ..., arrayn), которая применяет лямбда-функцию к нескольким массивам одинаковой длины и накапливает результат в аккумуляторе. #49794 (Lirikl). - Поддержка формата
Npy.SELECT * FROM file('example_array.npy', Npy). #55982 (Yarik Briukhovetskyi). - Если таблица имеет в своём ключе кривую, заполняющую пространство, например
ORDER BY mortonEncode(x, y), то условия по её аргументам, напримерx >= 10 AND x <= 20 AND y >= 20 AND y <= 30, могут использоваться для индексации. Добавлена настройкаanalyze_index_with_space_filling_curvesдля включения или отключения этого анализа. Закрывает #41195. Продолжение #4538. Продолжение #6286. Продолжение #28130. Продолжение #41753. #55642 (Alexey Milovidov). - Добавлена новая настройка
force_optimize_projection_name, принимающая имя проекции в качестве аргумента. Если ей присвоено непустое значение, ClickHouse проверяет, что эта проекция используется в запросе хотя бы один раз. Закрывает #55331. #56134 (Yarik Briukhovetskyi). - Добавлена поддержка асинхронных вставок с внешними данными через нативный протокол. Ранее это работало только в случае, если данные передавались внутри запроса. #54730 (Anton Popov).
- Добавлена агрегатная функция
lttb, которая использует алгоритм Largest-Triangle-Three-Buckets для даунсемплинга (уменьшения объёма) данных при визуализации. #53145 (Sinan). - Запрос
CHECK TABLEтеперь обладает лучшей производительностью и удобством использования (отправляет уведомления о ходе выполнения, может быть отменён). Поддерживается проверка конкретной части с помощьюCHECK TABLE ... PART 'part_name'. #53404 (vdimir). - Добавлена функция
jsonMergePatch. При работе с JSON-данными в виде строк она предоставляет способ объединять эти строки, каждая из которых содержит JSON-объект, в одну строку с одним JSON-объектом. #54364 (Memo). - Вторая часть поддержки диалекта Kusto Query Language. Реализация фазы 1 уже объединена. #42510 (larryluogit).
- Добавлена новая SQL-функция
arrayRandomSample(arr, k), которая возвращает выборку из k элементов входного массива. Ранее аналогичную функциональность можно было реализовать только с помощью менее удобного синтаксиса, например: "SELECT arrayReduce('groupArraySample(3)', range(10))". #54391 (itayisraelov). - Добавлены агрегатные комбинаторы
-ArgMin/-ArgMax, которые позволяют выполнять агрегацию только по минимальным/максимальным значениям. Один из вариантов использования описан в #54818. Этот PR также переносит комбинаторы в отдельную директорию. #54947 (Amos Bird). - Добавлена возможность очищать кэш для формата Protobuf с помощью
SYSTEM DROP SCHEMA FORMAT CACHE [FOR Protobuf]. #55064 (Aleksandr Musorin). - Добавлен внешний аутентификатор HTTP Basic. #55199 (Aleksei Filatov).
- Добавлена функция
byteSwap, которая обращает порядок байтов беззнаковых целых чисел. Это особенно полезно для обращения порядка байтов значений типов, которые внутренне хранятся как беззнаковые целые числа, например IPv4. #55211 (Priyansh Agrawal). - Добавлена функция
formatQuery, которая возвращает форматированное представление (возможно, в несколько строк) строки SQL‑запроса. Также добавлена функцияformatQuerySingleLine, которая делает то же самое, но возвращаемая строка не будет содержать переносов строки. #55239 (Salvatore Mesoraca). - Добавлен формат ввода
DWARF, который считывает отладочные символы из ELF-исполняемого файла, библиотеки или объектного файла. #55450 (Michael Kolupaev). - Позволяет сохранять неразобранные записи и ошибки в движках RabbitMQ, NATS и FileLog. Добавлены виртуальные столбцы
_errorи_raw_message(для NATS и RabbitMQ),_raw_record(для FileLog), которые заполняются, когда ClickHouse не может разобрать новую запись. Поведение управляется настройками хранилищаnats_handle_error_modeдля NATS,rabbitmq_handle_error_modeдля RabbitMQ,handle_error_modeдля FileLog, аналогичноkafka_handle_error_mode. Если задано значениеdefault, при неудачной попытке ClickHouse разобрать запись будет выброшено исключение, а если задано значениеstream, ошибка и сырая запись будут сохранены в виртуальные столбцы. Закрывает #36035. #55477 (Kruglov Pavel). - Улучшение клиента Keeper: добавлена команда
get_all_children_number, которая возвращает общее количество дочерних узлов по указанному пути. #55485 (guoxiaolong). - Улучшен клиент Keeper: добавлена команда
get_direct_children_number, возвращающая число непосредственных дочерних узлов по указанному пути. #55898 (xuzifu666). - Добавлен оператор
SHOW SETTING setting_name, который является упрощённой версией существующего оператораSHOW SETTINGS. #55979 (Maksim Kita). - В таблицу
system.parts_columnsдобавлены столбцыsubstreamsиfilenames. #55108 (Anton Popov). - Добавлена поддержка запроса
SHOW MERGES. #55815 (megao). - Добавлена настройка
create_table_empty_primary_key_by_defaultдля заданияORDER BY ()по умолчанию. #55899 (Srikanth Chekuri).
Повышение производительности
- Добавлена опция
query_plan_preserve_num_streams_after_window_functionsдля сохранения числа потоков после вычисления оконных функций, что позволяет выполнять параллельную обработку потоков. #50771 (frinkr). - Использовать больше потоков, если объём данных мал. #53867 (Jiebin Sun).
- RoaringBitmaps теперь оптимизируются перед сериализацией. #55044 (UnamedRus).
- Списки вхождений в инвертированных индексах теперь оптимизированы для использования максимально компактного представления внутренних битовых карт. В зависимости от степени повторяемости данных это может значительно снизить объем занимаемого места инвертированными индексами. #55069 (Harry Lee).
- Уменьшена конкуренция за блокировку Context, что значительно улучшает производительность большого числа кратковременных параллельных запросов. #55121 (Maksim Kita).
- Производительность создания инвертированного индекса улучшена на 30%. Этого удалось добиться за счёт замены
std::unordered_mapнаabsl::flat_hash_map. #55210 (Harry Lee). - Поддержка проталкивания фильтров ORC (на уровне rowgroup). #55330 (李扬).
- Повышена производительность внешней агрегации при большом количестве временных файлов. #55489 (Maksim Kita).
- По умолчанию установлен разумный размер кеша меток для вторичных индексов, чтобы избежать их повторной многократной загрузки. #55654 (Alexey Milovidov).
- Избегайте избыточной реконструкции гранул индекса при чтении skip-индексов. Это решает проблему #55653. #55683 (Amos Bird).
- Кэширование функции CAST в Set во время выполнения для повышения производительности функции
IN, если тип элемента Set не полностью совпадает с типом столбца. #55712 (Duc Canh Le). - Повышена производительность
ColumnVector::insertManyиColumnVector::insertManyFrom. #55714 (frinkr). - Оптимизированы операции доступа по ключу в
Mapза счет предсказания позиции ключа следующей строки и уменьшения числа сравнений. #55929 (lgbo). - Добавлена поддержка отсечения полей структур в Parquet (в предыдущих версиях это в некоторых случаях не работало). #56117 (lgbo).
- Добавлена возможность настраивать количество параллельных реплик, используемых при выполнении запроса, на основе оценки количества строк, подлежащих чтению. #51692 (Raúl Marín).
- Оптимизировано потребление памяти при внешней агрегации в случаях, когда создаётся много временных файлов. #54798 (Nikita Taranov).
- Распределённые запросы, выполняемые в режиме
async_socket_for_remote(по умолчанию), теперь соблюдают ограничениеmax_threads. Ранее некоторые запросы могли создавать чрезмерное количество потоков (доmax_distributed_connections), что вызывало проблемы с производительностью сервера. #53504 (filimonov). - Кэширование пропускаемых записей при выполнении DDL из очереди распределённого DDL в ZooKeeper. #54828 (Duc Canh Le).
- Экспериментальные инвертированные индексы не сохраняют токены с слишком большим числом совпадений (т. е. идентификаторов строк в списке вхождений). Это экономит место и позволяет избежать неэффективных поисков по индексу в случаях, когда последовательное сканирование было бы столь же быстрым или быстрее. Предыдущая эвристика (параметр
density, передаваемый в определение индекса), которая определяла, когда токены не должны сохраняться, была слишком запутанной для пользователей. Вводится гораздо более простая эвристика, основанная на параметреmax_rows_per_postings_list(по умолчанию: 64k), которая напрямую задаёт максимально допустимое число идентификаторов строк в списке вхождений. #55616 (Harry Lee). - Повышена производительность записи в таблицы
EmbeddedRocksDB. #55732 (Duc Canh Le). - Повышена общая надёжность ClickHouse при наличии большого числа частей в партиции (свыше 1000). Это может сократить количество ошибок
TOO_MANY_PARTS. #55526 (Nikita Mikhaylov). - Снижено потребление памяти при загрузке иерархических словарей. #55838 (Nikita Taranov).
- Все словари поддерживают настройку
dictionary_use_async_executor. #55839 (vdimir). - Предотвращено чрезмерное потребление памяти при десериализации
AggregateFunctionTopKGenericData. #55947 (Raúl Marín). - На Keeper с большим числом watches потоки AsyncMetrics могут на заметное время загружать CPU до 100% в
DB::KeeperStorage::getSessionsWithWatchesCount. Исправление заключается в отказе от обхода тяжёлых множествwatchesиlist_watches. #56054 (Alexander Gololobov). - Добавлена настройка
optimize_trivial_approximate_count_queryдля использования приблизительного значенияcountдля хранилища EmbeddedRocksDB. Включено использование тривиального подсчёта для StorageJoin. #55806 (Duc Canh Le).
Улучшения
- Функции
toDayOfWeek(псевдоним MySQL:DAYOFWEEK),toYearWeek(YEARWEEK) иtoWeek(WEEK) теперь поддерживают аргументы типаString. Это делает их поведение соответствующим поведению MySQL. #55589 (Robert Schulze). - Добавлена настройка
date_time_overflow_behaviorс возможными значениямиignore,throw,saturate, которая задаёт поведение при переполнении при преобразовании из типов Date, Date32, DateTime64, Integer или Float в Date, Date32, DateTime или DateTime64. #55696 (Andrey Zvonov). - Реализована поддержка параметров запроса для
ALTER TABLE ... ACTION PARTITION [ID] {parameter_name:ParameterType}. Объединяет задачи #49516. Закрывает #49449. #55604 (alesapin). - Вывод идентификаторов процессоров в более наглядном виде в EXPLAIN. #48852 (Vlad Seliverstov).
- Попытка создать прямой словарь с полем lifetime будет отклонена при создании (поскольку параметр lifetime не имеет смысла для прямых словарей). Исправления: #27861. #49043 (Rory Crispin).
- Разрешено использование параметров в запросах по работе с партициями, например
ALTER TABLE t DROP PARTITION. Закрывает #49449. #49516 (Nikolay Degterinsky). - Добавлен новый столбец
xidвsystem.zookeeper_connection. #50702 (helifu). - Теперь в
system.server_settingsотображаются корректные настройки сервера после перезагрузки конфигурации. #53774 (helifu). - Добавлена поддержка математического символа минус
−в запросах, аналогично символу-. #54100 (Alexey Milovidov). - Добавлены группы реплик в экспериментальный движок базы данных
Replicated. Закрывает #53620. #54421 (Nikolay Degterinsky). - Лучше повторять попытки при повторяемых ошибках S3, чем полностью завершать запрос с ошибкой. По умолчанию увеличено значение параметра s3_retry_attempts. #54770 (Sema Checherinda).
- Добавлен режим балансировки нагрузки
hostname_levenshtein_distance. #54826 (JackyWoo). - Улучшена маскировка секретных данных в логах. #55089 (Vitaly Baranov).
- Пока что анализ PROJECTION выполняется только на уровне плана запроса. Настройка
query_plan_optimize_projectionпризнана устаревшей (она уже давно включена по умолчанию). #55112 (Nikita Mikhaylov). - Теперь, когда функция
untupleвызывается для кортежа с именованными элементами и сама функция имеет псевдоним (например,select untuple(tuple(1)::Tuple(element_alias Int)) AS untuple_alias), имя результирующего столбца формируется из псевдонимаuntupleи псевдонима элемента кортежа (в примере: "untuple_alias.element_alias"). #55123 (garcher22). - Добавлена настройка
describe_include_virtual_columns, которая позволяет включать виртуальные столбцы таблицы в результат выполнения запросаDESCRIBE. Добавлена настройкаdescribe_compact_output. Если она установлена в значениеtrue, запросDESCRIBEвозвращает только имена и типы столбцов без дополнительной информации. #55129 (Anton Popov). - Иногда выполнение
OPTIMIZEсoptimize_throw_if_noop=1может завершаться с ошибкойunknown reason, тогда как истинной причиной являются разные проекции в разных частях. Это поведение исправлено. #55130 (Nikita Mikhaylov). - Позволяет использовать несколько таблиц
MaterializedPostgreSQL, соответствующих одной и той же таблице Postgres. По умолчанию это поведение отключено (для совместимости, так как это изменение несовместимо с предыдущими версиями), но его можно включить с помощью настройкиmaterialized_postgresql_use_unique_replication_consumer_identifier. Закрывает #54918. #55145 (Kseniia Sumarokova). - Добавлена возможность разбора отрицательных
DateTime64иDateTimeс дробной частью из коротких строк. #55146 (Andrey Zvonov). - Для улучшения совместимости с MySQL 1.
information_schema.tablesтеперь содержит новое полеtable_rows, а 2.information_schema.columnsтеперь содержит новое полеextra. #55215 (Robert Schulze). - Clickhouse-client больше не будет показывать "0 rows in set", если результат содержит 0 строк и при этом было выброшено исключение. #55240 (Salvatore Mesoraca).
- Добавлена поддержка операции переименования таблиц без ключевого слова
TABLE, напримерRENAME db.t1 to db.t2. #55373 (凌涛). - Добавлен параметр
internal_replicationвsystem.clusters. #55377 (Konstantin Morozov). - Выбор удалённого прокси-резолвера в зависимости от протокола запроса, добавлена документация по возможностям прокси и удалён
DB::ProxyConfiguration::Protocol::ANY. #55430 (Arthur Passos). - Исключены повторные попытки выполнения операций Keeper при INSERT после остановки таблицы. #55519 (Azat Khuzhin).
SHOW COLUMNSтеперь корректно отображает типFixedStringкакBLOB, если включена настройкаuse_mysql_types_in_show_columns. Также добавлены две новые настройки —mysql_map_string_to_text_in_show_columnsиmysql_map_fixed_string_to_text_in_show_columns, — позволяющие переключать вывод типовStringиFixedStringмеждуTEXTиBLOB. #55617 (Serge Klochkov).- При запуске таблиц ReplicatedMergeTree сервер ClickHouse проверяет набор частей на наличие неожиданных частей (существуют локально, но отсутствуют в ZooKeeper). Все неожиданные части перемещаются в каталог detached, и вместо них сервер пытается восстановить предковые (покрывающие) части. Теперь сервер пытается восстановить ближайшие предковые части вместо случайных покрывающих частей. #55645 (alesapin).
- Расширенная панель мониторинга теперь поддерживает перетаскивание графиков на устройствах с сенсорным экраном. Это закрывает #54206. #55649 (Alexey Milovidov).
- Теперь используется формат запроса по умолчанию, если он задан, при выводе исключения с
http_write_exception_in_output_format. #55739 (Raúl Marín). - Улучшено сообщение для типичных проблем при работе с MATERIALIZED VIEW. #55826 (Raúl Marín).
- Если вы удалили текущую базу данных, вы по‑прежнему сможете выполнять некоторые запросы в
clickhouse-localи переключаться на другую базу данных. Это делает поведение единообразным сclickhouse-client. Тем самым закрывается задача #55834. #55853 (Alexey Milovidov). - Функции
(add|subtract)(Year|Quarter|Month|Week|Day|Hour|Minute|Second|Millisecond|Microsecond|Nanosecond)теперь поддерживают аргументы даты в строковом виде, напримерSELECT addDays('2023-10-22', 1). Это повышает совместимость с MySQL и требуется для Tableau Online. #55869 (Robert Schulze). - Настройка
apply_deleted_mask, если отключена, позволяет читать строки, которые были помечены как удалённые запросами легковесного удаления (lightweight DELETE). Это полезно для отладки. #55952 (Alexander Gololobov). - Добавлена возможность пропускать значения
nullпри сериализации Tuple в JSON-объекты, что позволяет сохранить совместимость с функцией Sparkto_jsonи также полезно для Gluten. #55956 (李扬). - Функции
(add|sub)Dateтеперь поддерживают аргументы дат в строковом виде, напримерSELECT addDate('2023-10-22 11:12:13', INTERVAL 5 MINUTE). Аналогичная поддержка аргументов дат в строковом виде добавлена к операторам сложения и вычитания, напримерSELECT '2023-10-23' + INTERVAL 1 DAY. Это повышает совместимость с MySQL и необходимо для Tableau Online. #55960 (Robert Schulze). - Разрешено использование строк без кавычек с CR (
\r) в формате CSV. Закрывает #39930. #56046 (Kruglov Pavel). - Добавлена возможность запускать
clickhouse-keeperс использованием встроенной конфигурации. #56086 (Maksim Kita). - Установлено ограничение максимального значения параметра конфигурации
queued.min.messages, чтобы избежать проблем при запуске чтения данных из Kafka. #56121 (Stas Morozov). - Исправлена опечатка в SQL-функции
minSampleSizeContinous(переименована вminSampleSizeContinuous). Старое имя сохранено для обратной совместимости. Закрыта задача: #56139. #56143 (Dorota Szeremeta). - Перед завершением работы сервера выводится путь к повреждённым частям на диске. Ранее, если часть была повреждена на диске и сервер не мог запуститься, было почти невозможно определить, какая именно часть повреждена. Теперь это исправлено. #56181 (Duc Canh Le).
Улучшения сборки/тестирования/пакетирования
- Если база данных в Docker уже инициализирована, её не нужно инициализировать повторно при последующих запусках. Это потенциально может исправить проблему бесконечных перезапусков контейнера, когда база данных не успевает загрузиться за 1000 попыток (актуально для очень больших баз данных и многонодовых конфигураций). #50724 (Alexander Nikolaev).
- Ресурс с исходным кодом, включая подмодули, теперь собирается в специальной задаче сборки для Darwin. Он может использоваться для сборки ClickHouse без отдельной загрузки подмодулей. #51435 (Ilya Yatsishin).
- Ошибка возникала при сборке ClickHouse с глобально включённой серией инструкций AVX (что не рекомендуется). Причина в том, что snappy не включает
SNAPPY_HAVE_X86_CRC32. #55049 (monchickey). - Решена проблема с запуском отдельного
clickhouse-keeperиз пакетаclickhouse-server. #55226 (Mikhail f. Shiryaev). - В тестах версия RabbitMQ обновлена до 3.12.6. Улучшен сбор логов для тестов RabbitMQ. #55424 (Ilya Yatsishin).
- Сообщение об ошибке между openssl и boringssl приведено к единому виду, чтобы исправить функциональный тест. #55975 (MeenaRenganathan22).
- Теперь используется основной (upstream) репозиторий для apache datasketches. #55787 (Nikita Taranov).
Исправление ошибки (заметное пользователям некорректное поведение в официальном стабильном релизе)
- Не создавать жёсткие ссылки на файлы инвертированного индекса при мутациях #47663 (cangyin).
- Исправлена ошибка в функции
match(регулярное выражение), при которой шаблон с альтернативой приводил к некорректному ключевому условию. Закрывает #53222. #54696 (Yakov Olkhovskiy). - Исправлена ошибка 'Cannot find column' в оптимизации чтения в заданном порядке при использовании ARRAY JOIN #51746 (Nikolai Kochetov).
- Добавлена поддержка экспериментальных подстолбцов
Object(Nullable(json))в запросах, которые ранее не обрабатывались. #54052 (zps). - Повторно применено исправление для
accurateCastOrNull#54629 (Salvatore Mesoraca). - Исправлено определение
DEFAULTдля столбцов distributed таблицы, созданной безAS#55060 (Vitaly Baranov). - Корректная очистка ресурсов при возникновении исключения в конструкторе класса ShellCommandSource #55103 (Alexander Gololobov).
- Устранена взаимоблокировка при обновлении роли, назначенной через LDAP #55119 (Julian Maicher).
- Отключено обновление статистики ошибок для внутренних исключений #55128 (Robert Schulze).
- Исправлена взаимная блокировка при резервном копировании #55132 (alesapin).
- Исправлено получение файлов из хранилища Iceberg #55144 (Kseniia Sumarokova).
- Исправлено отсечение партиций по дополнительным столбцам в Set. #55172 (Amos Bird).
- Исправлен перерасчёт пропускающих индексов в запросах ALTER UPDATE для таблиц с адаптивной гранулярностью #55202 (Duc Canh Le).
- Исправлена фоновая загрузка в кэше fs #55252 (Kseniia Sumarokova).
- Предотвращены возможные утечки памяти в компрессорах при отсутствии финализации буфера #55262 (Azat Khuzhin).
- Исправлено выполнение функций с разрежёнными столбцами #55275 (Azat Khuzhin).
- Исправлено некорректное слияние
NestedприSELECT FINAL FROM SummingMergeTree#55276 (Azat Khuzhin). - Исправлена ошибка, из-за которой было невозможно удалить отсоединённую партицию в реплицированном MergeTree поверх S3 без zero-copy #55309 (alesapin).
- Исправлена ошибка, приводившая к падению MergeSortingPartialResultTransform (из-за пустых фрагментов после
remerge) #55335 (Azat Khuzhin). - Исправлена гонка данных в CreatingSetsTransform при обработке ошибок из-за выбрасывания разделяемого исключения #55338 (Azat Khuzhin).
- Исправлена оптимизация trash (в некоторой степени) #55353 (Alexey Milovidov).
- Устранена утечка в StorageHDFS #55370 (Azat Khuzhin).
- Исправлен разбор массивов оператором
CAST#55417 (Anton Popov). - Исправлена фильтрация по виртуальным столбцам при использовании оператора OR в запросе #55418 (Azat Khuzhin).
- Исправлены проблемы подключения к MongoDB #55419 (Nikolay Degterinsky).
- Исправлено представление булевых значений в интерфейсе MySQL #55427 (Serge Klochkov).
- Исправлено форматирование
DateTimeв текстовом протоколе MySQL и вывод типовLowCardinality(Nullable(T))#55479 (Serge Klochkov). - Параметр
use_mysql_types_in_show_columnsтеперь влияет только наSHOW COLUMNS#55481 (Robert Schulze). - Исправлена некорректная обработка
DW_FORM_ref_addrв символизаторе стека, которая иногда приводила к его падению #55483 (Michael Kolupaev). - Теперь fiber уничтожается при возникновении исключения в cancelBefore в AsyncTaskExecutor #55516 (Kruglov Pavel).
- Исправлена проблема, из-за которой параметры запроса не работали с пользовательскими HTTP-обработчиками #55521 (Konstantin Bogdanov).
- Исправлена проверка необработанных данных для формата Values #55527 (Azat Khuzhin).
- Исправлена ошибка «Invalid cursor state» в драйвере ODBC при работе с MS SQL Server #55558 (vdimir).
- Исправлены максимальное время выполнения запроса и режим обработки переполнения 'break' #55577 (Alexander Gololobov).
- Исправлено аварийное завершение работы QueryNormalizer при циклических псевдонимах #55602 (vdimir).
- Отключена некорректная оптимизация и добавлен тест #55609 (Alexey Milovidov).
- Объединены #52352 и #55621 (Alexey Milovidov).
- Добавлен тест, чтобы избежать некорректной сортировки десятичных чисел #55662 (Amos Bird).
- Исправлен индикатор прогресса для кластерных функций S3 и Azure с URL-адресами без масок (globs) #55666 (Kruglov Pavel).
- Исправлена проблема с фильтрацией по виртуальным столбцам с использованием фильтра OR в запросе (повторная отправка) #55678 (Azat Khuzhin).
- Исправления и улучшения в хранилище Iceberg #55695 (Kruglov Pavel).
- Исправлена гонка данных в CreatingSetsTransform (v2) #55786 (Azat Khuzhin).
- Генерировать исключение при разборе некорректной строки в число с плавающей запятой, если precise_float_parsing равно true #55861 (李扬).
- Отключено проталкивание предикатов, если CTE содержит функции с сохранением состояния #55871 (Raúl Marín).
- Исправлена нормализация ASTSelectWithUnionQuery, из‑за которой из запроса удалялся
FORMAT#55887 (flynn). - Попытка исправить возможный сбой сегментации (segfault) во входном формате Native ORC #55891 (Kruglov Pavel).
- Исправлена работа оконных функций при разреженных столбцах. #55895 (János Benjamin Antal).
- fix: StorageNull теперь поддерживает подстолбцы #55912 (FFish).
- Не записывать повторяемые ошибки для операций Replicated mutate/merge в журнал ошибок #55944 (Azat Khuzhin).
- Исправлена работа команды
SHOW DATABASES LIMIT <N>#55962 (Raúl Marín). - Исправлена автоматически сгенерированная схема Protobuf для полей с символом подчёркивания в имени #55974 (Kruglov Pavel).
- Исправлена работа dateTime64ToSnowflake64() при использовании масштаба, отличного от значения по умолчанию #55983 (Robert Schulze).
- Исправлены операции ввода/вывода для столбца Arrow со словарём #55989 (Kruglov Pavel).
- Исправлено получение схемы из реестра схем в AvroConfluent #55991 (Kruglov Pavel).
- Исправлена ошибка 'Block structure mismatch' при одновременном выполнении операций ALTER и INSERT в таблице Buffer #55995 (Michael Kolupaev).
- Исправлен некорректный расчет свободного пространства в политике JBOD
least_used#56030 (Azat Khuzhin). - Исправлена ошибка, возникавшая из-за отсутствующего скаляра при вычислении подзапросов в табличных функциях #56057 (Amos Bird).
- Исправлено получение некорректного результата запроса при http_write_exception_in_output_format=1 #56135 (Kruglov Pavel).
- Исправлен кэш схемы для резервного варианта JSON->JSONEachRow при изменённых настройках #56172 (Kruglov Pavel).
- Добавлен обработчик ошибок в компонент odbc-bridge #56185 (Yakov Olkhovskiy).
Релиз ClickHouse 23.9 от 2023-09-28
Несовместимое изменение
- Удалён конфигурационный параметр
status_infoи статус словарей из обработчика Prometheus по умолчанию. #54090 (Alexey Milovidov). - Экспериментальный кэш метаданных частей удалён из кодовой базы. #54215 (Alexey Milovidov).
- Настройка
input_format_json_try_infer_numbers_from_stringsбольше не включена по умолчанию, поэтому мы не пытаемся определять числа по строкам в форматах JSON, чтобы избежать возможных ошибок разбора, когда в примерах данных есть строки, выглядящие как числа. #55099 (Kruglov Pavel).
Новая функция
- Улучшен вывод схемы из форматов JSON: 1) Теперь возможно выводить именованные Tuple из JSON-объектов без экспериментального типа JSON с помощью настройки
input_format_json_try_infer_named_tuples_from_objectsв JSON-форматах. Ранее без экспериментального типа JSON мы могли выводить JSON-объекты только как String или Map, теперь мы можем выводить именованный Tuple. Итоговый тип Tuple будет содержать все ключи объектов, которые были прочитаны в выборке данных во время вывода схемы. Это может быть полезно для чтения структурированных JSON-данных без разреженных объектов. Настройка включена по умолчанию. 2) Разрешён разбор JSON-массива в столбец типа String с помощью настройкиinput_format_json_read_arrays_as_strings. Это может помочь при чтении массивов со значениями разных типов. 3) Разрешено использовать тип String для JSON-ключей со значениями неизвестных типов (null/[]/{}) в выборке данных с помощью настройкиinput_format_json_infer_incomplete_types_as_strings. Теперь в JSON-форматах мы можем читать любое значение в столбец типа String и можем избежать ошибкиCannot determine type for column 'column_name' by first 25000 rows of data, most likely this column contains only Nulls or empty Arrays/Mapsво время вывода схемы, используя тип String для неизвестных типов, так что данные будут успешно прочитаны. #54427 (Kruglov Pavel). - Добавлена поддержка планирования ввода-вывода (IO scheduling) для удалённых дисков. Конфигурация хранилища для типов дисков
s3,s3_plain,hdfsиazure_blob_storageтеперь может содержать элементыread_resourceиwrite_resource, в которых указываются имена ресурсов. Политики планирования для этих ресурсов можно настроить в отдельной секции конфигурации сервераresources. Запросы могут помечаться с помощью настройкиworkloadи классифицироваться с помощью секции конфигурации сервераworkload_classifiersдля достижения различных целей планирования использования ресурсов. Более подробная информация в документации. #47009 (Sergei Trifonov). Добавлен тип узла планирования ввода-выводаbandwidth_limit. Он позволяет задать ограниченияmax_speedиmax_burstна трафик, проходящий через этот узел. #54618 (Sergei Trifonov). - Добавлен новый тип аутентификации на основе SSH-ключей. Он работает только для нативного протокола TCP. #41109 (George Gamezardashvili).
- Добавлен новый столбец
_block_numberдля таблиц MergeTree. #44532. #47532 (SmitaRKulkarni). - Добавлено предложение
IF EMPTYдля запросовDROP TABLE. #48915 (Pavel Novitskiy). - SQL-функции
toString(datetime, timezone)иformatDateTime(datetime, format, timezone)теперь поддерживают неконстантные аргументы часового пояса. #53680 (Yarik Briukhovetskyi). - Добавлена поддержка
ALTER TABLE MODIFY COMMENT. Примечание: нечто подобное было добавлено внешним участником сообщества давно, но функциональность совсем не работала и лишь вводила пользователей в заблуждение. Это закрывает #36377. #51304 (Alexey Milovidov). Примечание: эта команда не распространяется между репликами, поэтому реплики таблицы могут иметь разные комментарии. - Добавлен
GCD, также известный как «greatest common divisor», в качестве нового кодека сжатия данных. Кодек вычисляет GCD всех значений столбца, а затем делит каждое значение на GCD. Кодек GCD является кодеком подготовки данных (аналогично Delta и DoubleDelta) и не может использоваться отдельно. Он работает с целочисленными, десятичными типами данных и типами дата/время. Типичным вариантом применения кодека GCD являются значения столбца, которые изменяются (увеличиваются/уменьшаются) на величину, кратную GCD, например 24 - 28 - 16 - 24 - 8 - 24 (при GCD = 4). #53149 (Alexander Nam). - Добавлены два новых псевдонима типов:
DECIMAL(P)(как сокращённая формаDECIMAL(P, 0)) иDECIMAL(как сокращённая формаDECIMAL(10, 0)). Это делает ClickHouse более совместимым с SQL-диалектом MySQL. #53328 (Val Doroshchuk). - Добавлена новая таблица системного лога
backup_logдля отслеживания всех операцийBACKUPиRESTORE. #53638 (Victor Krasnov). - Добавлена настройка формата вывода
output_format_markdown_escape_special_characters(по умолчанию — false). Эта настройка определяет, экранируются ли специальные символы, такие как!,#,$и т.д. (то есть предваряются обратной косой чертой) в формате выводаMarkdown. #53860 (irenjj). - Добавлена функция
decodeHTMLComponent. #54097 (Bharat Nallan). - В таблицу query_log добавлен
peak_threads_usage. #54335 (Alexey Gerasimchuck). - Добавлена поддержка команды
SHOW FUNCTIONSв clickhouse-client. #54337 (Julia Kartseva). - Добавлена функция
toDaysSinceYearZeroс псевдонимомTO_DAYS(для совместимости с MySQL), которая возвращает количество дней, прошедших с0001-01-01(в пролептическом григорианском календаре). #54479 (Robert Schulze). ФункцияtoDaysSinceYearZeroтеперь поддерживает аргументы типаDateTimeиDateTime64. #54856 (Serge Klochkov). - Добавлены функции
YYYYMMDDtoDate,YYYYMMDDtoDate32,YYYYMMDDhhmmssToDateTimeиYYYYMMDDhhmmssToDateTime64. Они преобразуют дату или дату и время, закодированные в виде целого числа (например, 20230911), в нативный тип даты или даты и времени. Таким образом, они выполняют противоположное преобразование по сравнению с существующими функциямиYYYYMMDDToDate,YYYYMMDDToDateTime,YYYYMMDDhhmmddToDateTime,YYYYMMDDhhmmddToDateTime64. #54509 (Quanfa Fu) (Robert Schulze). - Добавлено несколько функций для вычисления расстояния между строками, включая
byteHammingDistance,editDistance. #54935 (flynn). - Теперь можно указывать дату окончания срока действия и, при необходимости, время для учетных данных пользователя в предложении
VALID UNTIL datetime. #51261 (Nikolay Degterinsky). - Разрешены URL в стиле S3 для табличных функций
s3,gcs,oss. URL автоматически преобразуется в HTTP. Пример:'s3://clickhouse-public-datasets/hits.csv'преобразуется в'https://clickhouse-public-datasets.s3.amazonaws.com/hits.csv'. #54931 (Yarik Briukhovetskyi). - Добавлена новая настройка
print_pretty_type_namesдля красивого вывода глубоко вложенных типов, таких как Tuple/Maps/Arrays. #55095 (Kruglov Pavel).
Повышение производительности
- Ускорено чтение из S3 за счет включения предзагрузки данных по умолчанию. #53709 (Alexey Milovidov).
- Не читать неявно PK и столбцы версий в одиночных частях, если это не требуется для запросов с FINAL. #53919 (Duc Canh Le).
- Оптимизирована группировка по константным ключам. Теперь после https://github.com/ClickHouse/ClickHouse/pull/53529 оптимизируются запросы с GROUP BY
_file/_path. #53549 (Kruglov Pavel). - Улучшена производительность сортировки для столбцов типа
Decimal. Улучшена производительность вставки вMergeTree, если в ORDER BY содержится столбец типаDecimal. Улучшена производительность сортировки для уже отсортированных или почти отсортированных данных. #35961 (Maksim Kita). - Улучшена производительность при анализе очень больших запросов. Исправляет #51224. #51469 (frinkr).
- Оптимизация, позволяющая переписывать
COUNT(DISTINCT ...)и различные варианты функцииuniqвcount, если они выбираются из подзапроса с GROUP BY. #52082 #52645 (JackyWoo). - Удалены ручные вызовы
mmap/mremap/munmap, а вся эта работа делегированаjemalloc, что слегка улучшило производительность. #52792 (Nikita Taranов). - Исправлено высокое потребление CPU при работе с NATS. #54399 (Vasilev Pyotr).
- Так как для выполнения
toStringс аргументом типа DateTime используются отдельные инструкции, можно немного улучшить производительность для аргументов других типов и сделать некоторые участки кода более чистыми. Продолжение работы по задаче #53680. #54443 (Yarik Briukhovetskyi). - Вместо сериализации JSON-элементов в
std::stringstreamрезультат сериализации теперь записывается непосредственно вColumnString. #54613 (lgbo). - Включена оптимизация ORDER BY для чтения данных в соответствующем порядке из таблицы MergeTree, когда эта таблица используется в представлении. #54628 (Vitaly Baranov).
- Улучшены SQL-функции для JSON за счёт повторного использования
GeneratorJSONPathи удаления нескольких разделяемых указателей. #54735 (lgbo). - Keeper пытается объединять запросы на сброс в батчи для повышения производительности. #53049 (Antonio Andelic).
- Теперь
clickhouse-clientобрабатывает файлы параллельно при использованииINFILE 'glob_expression'. Закрыта задача #54218. #54533 (Max K.). - Теперь можно использовать первичный ключ для функции
IN, даже когда типы столбцов первичного ключа отличаются от типов столбцов в правой части функцииIN. Пример:SELECT id FROM test_table WHERE id IN (SELECT '5'). Закрывает #48936. #54544 (Maksim Kita). - Hash JOIN пытается уменьшить внутренние буферы, использующие половину максимально доступного объёма памяти (задаётся настройкой
max_bytes_in_join). #54584 (vdimir). - Соблюдать
max_block_sizeдля array join, чтобы избежать возможного OOM. Закрывает #54290. #54664 (李扬). - Повторное использование HTTP‑соединений в табличной функции
s3. #54812 (Michael Kolupaev). - Линейный поиск в
MergeTreeRangeReader::Stream::ceilRowsToCompleteGranulesзаменён на двоичный. #54869 (usurai).
Экспериментальная функциональность
- Создание индексов
Annoyтеперь может выполняться параллельно с использованием настройкиmax_threads_for_annoy_index_creation. #54047 (Robert Schulze). - Параллельные реплики для распределённых таблиц теперь не читают со всех реплик. #54199 (Igor Nikonov).
Улучшения
- Позволяет заменять длинные имена файлов столбцов в частях данных
MergeTreeна хэши этих имён. Это помогает в некоторых случаях избежать ошибкиFile name too long. #50612 (Anton Popov). - Разбирать данные в формате
JSONкакJSONEachRow, если не удалось разобрать метаданные. Это позволит читать файлы с расширением.json, даже если фактический формат —JSONEachRow. Закрывает #45740. #54405 (Kruglov Pavel). - Выводить корректный JSON/XML при возникновении исключения во время выполнения HTTP-запроса. Добавлена настройка
http_write_exception_in_output_formatдля включения или отключения этого поведения (по умолчанию включено). #52853 (Kruglov Pavel). - Представление
information_schema.tablesтеперь содержит новый столбецdata_length, который показывает приблизительный размер данных на диске. Это изменение необходимо для выполнения запросов, генерируемых Amazon QuickSight. #55037 (Robert Schulze). - Интерфейс MySQL получил минимальную реализацию механизма подготовленных команд, достаточную для подключения Tableau Online к ClickHouse через коннектор MySQL. #54115 (Serge Klochkov). Обратите внимание: реализация подготовленных команд крайне минимальна, привязка аргументов пока не поддерживается, так как она не требуется в данном конкретном сценарии использования Tableau Online. Она будет реализована дополнительно при необходимости после тщательного тестирования Tableau Online, если мы обнаружим проблемы.
- Добавлена поддержка режимов сопоставления без учета регистра и «dot-all» в словарях
regexp_tree. #50906 (Johann Gan). - Улучшение Keeper: добавлена команда
createIfNotExists. #48855 (Konstantin Bogdanov). - Более точное выведение типов целых чисел, исправлена проблема #51236. #53003 (Chen768959).
- Добавлено определение кодировок в строковых литералах для MaterializedMySQL. #53220 (Val Doroshchuk).
- Исправлена неочевидная проблема с редко используемым движком таблицы
EmbeddedRocksDBв крайне редком сценарии: иногда этот движок некорректно закрывал файлы на NFS после выполненияDROP TABLE. #53502 (Mingliang Pan). RESTORE TABLE ON CLUSTERдолжен создавать реплицированные таблицы с одинаковым UUID на всех хостах. В противном случае макрос{uuid}в пути в ZooKeeper не сможет корректно работать после RESTORE. Это реализовано в этом PR. #53765 (Vitaly Baranov).- Добавлена настройка восстановления
restore_broken_parts_as_detached: если она имеет значение true, процесс RESTORE не будет останавливаться на повреждённых частях при восстановлении, вместо этого все повреждённые части будут скопированы в папкуdetachedс префиксомbroken-from-backup'. Если она имеет значение false, процесс RESTORE остановится на первой повреждённой части (если таковая есть). Значение по умолчанию — false. #53877 (Vitaly Baranov). - Добавлено поле
elapsed_nsв HTTP-заголовки X-ClickHouse-Progress и X-ClickHouse-Summary. #54179 (joelynch). - Реализация команд
reconfig(https://github.com/ClickHouse/ClickHouse/pull/49450),syncиexistsв keeper-client. #54201 (pufit). clickhouse-localиclickhouse-clientтеперь позволяют указывать параметр--queryнесколько раз, например./clickhouse-client --query "SELECT 1" --query "SELECT 2". Этот синтаксис немного более интуитивен, чем./clickhouse-client --multiquery "SELECT 1;S ELECT 2", чуть проще для использования в скриптах (например,queries.push_back('--query "$q"')) и в большей степени соответствует поведению уже существующего параметра--queries-file(например,./clickhouse client --queries-file queries1.sql --queries-file queries2.sql). #54249 (Robert Schulze).- Добавлена поддержка субсекундной точности для
formatReadableTimeDelta. #54250 (Andrey Zvonov). - По умолчанию включена настройка
allow_remove_stale_moving_parts. #54260 (vdimir). - Исправлено использование count из кэша и улучшен индикатор прогресса при чтении из архивов. #54271 (Kruglov Pavel).
- Добавлена поддержка учетных данных S3 с использованием SSO. Чтобы задать профиль, который будет использоваться с SSO, установите переменную среды
AWS_PROFILE. #54347 (Antonio Andelic). - Добавлена поддержка значения NULL по умолчанию для вложенных типов данных Array/Tuple/Map во входных форматах. Закрывает #51100. #54351 (Kruglov Pavel).
- Добавлена поддержка чтения некоторых нетипичных конфигураций фрагментов из форматов Arrow/Parquet. #54370 (Arthur Passos).
- Добавлен псевдоним
STDк функцииstddevPopдля обеспечения совместимости с MySQL. Закрывает #54274. #54382 (Nikolay Degterinsky). - Добавлены функции
addDateдля совместимости с MySQL иsubDateдля единообразия. См. #54275. #54400 (Nikolay Degterinsky). - В таблицу
system.detached_partsдобавлен столбецmodification_time. #54506 (Azat Khuzhin). - Добавлена настройка
splitby_max_substrings_includes_remaining_string, которая определяет, включают ли функцииsplitBy*()с аргументомmax_substring> 0 оставшуюся часть строки (если она есть) в результирующий массив (семантика Python/Spark) или нет. Поведение по умолчанию не изменилось. #54518 (Robert Schulze). - Улучшено выведение целочисленных типов для полей
Int64/UInt64. Продолжение #53003. Теперь оно работает и для вложенных типов, таких как массивы массивов, а также для функций вродеmap/tuple. Задача: #51236. #54553 (Kruglov Pavel). - Добавлены операции над массивами для умножения, деления и вычисления остатка от деления на скаляр. Работают в обе стороны, например
5 * [5, 5]и[5, 5] * 5— оба варианта возможны. #54608 (Yarik Briukhovetskyi). - Добавлен необязательный аргумент
versionк командеrmвkeeper-clientдля более безопасного выполнения операций удаления. #54708 (János Benjamin Antal). - Отключено принудительное завершение сервера через systemd, так как это могло приводить к потере данных при использовании таблиц Buffer. #54744 (Azat Khuzhin).
- Добавлено поле
is_deterministicв системную таблицуsystem.functions, которое указывает, остаётся ли результат функции неизменным при двух вызовах с точно такими же входными данными или нет. #54766 #55035 (Robert Schulze). - Представления в схеме
information_schemaсделаны более совместимыми с эквивалентными представлениями в MySQL (то есть изменены и расширены) до такой степени, что Tableau Online может подключаться к ClickHouse. В частности: 1. Тип поляinformation_schema.tables.table_typeизменён с Enum8 на String. 2. В представлениеinformation_schema.tableдобавлены поляtable_commentиtable_collation. 3. Добавлены представленияinformation_schema.key_column_usageиreferential_constraints. 4. В представленияхinformation_schemaпсевдонимы в верхнем регистре заменены на конкретные столбцы с именами в верхнем регистре. #54773 (Serge Klochkov). - Кэш запросов теперь возвращает ошибку, если вы пытаетесь закэшировать результат запроса с недетерминированной функцией, такой как
now,randomStringилиdictGet. По сравнению с предыдущим поведением (результат просто не кэшировался), это снижает путаницу и эффект неожиданности. #54801 (Robert Schulze). - Запрещено использование специальных столбцов, таких как materialized/ephemeral/alias, для хранилищ
file/s3/url/..., исправлена вставка в ephemeral‑столбцы из файлов. Закрывает #53477. #54803 (Kruglov Pavel). - Более настраиваемый сбор метаданных для резервного копирования. #54804 (Vitaly Baranov).
- Файл журнала
clickhouse-local(если включён с помощью флага --server_logs_file) теперь будет префиксовать каждую строку меткой времени, идентификатором потока и т.д., аналогичноclickhouse-server. #54807 (Michael Kolupaev). - Поле
is_obsoleteв таблицеsystem.merge_tree_settings— теперь для устаревших настроек MergeTree его значение равно 1. Ранее об устаревании настройки сообщалось только в описании. #54837 (Robert Schulze). - Добавлена возможность использовать форму множественного числа в литералах интервала.
INTERVAL 2 HOURSдолжен быть эквивалентенINTERVAL 2 HOUR. #54860 (Jordi Villar). - Всегда разрешать создание проекций с первичным ключом (PK) типа
Nullable. Это исправляет #54814. #54895 (Amos Bird). - Повторять операции резервного копирования в S3 после сбоя из‑за разрыва соединения. #54900 (Vitaly Baranov).
- Сделано более точным сообщение об исключении для случая, когда максимальное значение настройки меньше минимального. #54925 (János Benjamin Antal).
- Функции сопоставления
LIKE,matchи другие теперь позволяют выполнять сопоставление с шаблонами, содержащими подстроки, не являющиеся UTF-8, путём перехода к двоичному сопоставлению. Пример: вы можете использоватьstring LIKE '\xFE\xFF%'для обнаружения BOM. Это закрывает #54486. #54942 (Alexey Milovidov). - Добавлено событие профилирования
ContextLockWaitMicroseconds. #55029 (Maksim Kita). - Keeper теперь динамически изменяет уровни логирования. #50372 (helifu).
- Добавлена функция
timestampдля совместимости с MySQL. Закрывает #54275. #54639 (Nikolay Degterinsky).
Улучшение сборки/тестирования/упаковки
- Обновлён компилятор для официальных сборок ClickHouse и сборок в системе непрерывной интеграции с Clang 16 до 17. #53831 (Robert Schulze).
- Перегенерированы данные TLD для поиска (
tldLookup.generated.cpp). #54269 (Bharat Nallan). - Удалена избыточная символьная ссылка
clickhouse-keeper-client. #54587 (Tomas Barton). - Используется
/usr/bin/envдля поиска bash — теперь поддерживается NixOS. #54603 (Fionera). - В CMake добавлена опция
PROFILE_CPU, необходимая для выполненияperf recordбез использования графа вызовов DWARF. #54917 (Maksim Kita). - Если компоновщик отличается от LLD, сборка завершается с фатальной ошибкой. #55036 (Alexey Milovidov).
- Заменена библиотека для обработки (кодирования/декодирования) значений в формате base64 с Turbo-Base64 на aklomp-base64. Обе используют SIMD-ускорение на x86 и ARM, но: 1) лицензия второй (BSD-2) более благоприятна для ClickHouse, тогда как Turbo64 тем временем перешла на GPL-3; 2) с большим числом звёзд на GitHub aklomp-base64 выглядит более перспективной; 3) aklomp-base64 имеет немного более удобный API (что, разумеется, субъективно); и 4) aklomp-base64 не требует обходных решений вокруг багов (например, потоконебезопасной инициализации). Примечание: aklomp-base64 отвергает значения base64 без паддинга, тогда как Turbo-Base64 декодирует их по принципу «best effort». RFC-4648 оставляет открытым вопрос, является ли паддинг обязательным, но в зависимости от контекста это может привести к изменению поведения, о котором следует помнить. #54119 (Mikhail Koviazin).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Исправлены операции REPLACE/MOVE PARTITION при использовании zero-copy replication (примечание: «zero-copy replication» — экспериментальная функция) #54193 (Alexander Tokmakov).
- Исправлены блокировки механизма zero-copy при использовании hardlinks (примечание: «zero-copy replication» — экспериментальная функция) #54859 (Alexander Tokmakov).
- Исправлено накопление мусора в zero copy (примечание: «zero-copy replication» — экспериментальная функция) #54550 (Alexander Tokmakov).
- Передавать таймаут повторных HTTP-запросов в миллисекундах (раньше он передавался некорректно). #54438 (Duc Canh Le).
- Исправлено вводящее в заблуждение сообщение об ошибке OUTFILE при использовании
CapnProto/Protobuf#52870 (Kruglov Pavel). - Исправлено формирование сводной статистики при использовании параллельных реплик с LIMIT #53050 (Raúl Marín).
- Исправлено ограничение скорости выполнения BACKUP-ов при работе с S3 (в случаях, когда не использовалось нативное копирование), а также в некоторых других местах #53336 (Azat Khuzhin).
- Исправлено дросселирование операций ввода-вывода (I/O throttling) при копировании целых каталогов #53338 (Azat Khuzhin).
- Исправление: при переносе действий в условие PREWHERE столбец мог теряться #53492 (Yakov Olkhovskiy).
- Исправлена внутренняя ошибка при замене частей на байтово идентичные #53735 (Pedro Riera).
- Исправлено: теперь требуется наличие столбцов, участвующих в выражении interpolate #53754 (Yakov Olkhovskiy).
- Исправлена инициализация обнаружения кластера и установка точек отказа в конфигурации #54113 (vdimir).
- Исправлены проблемы в функции
accurateCastOrNull#54136 (Salvatore Mesoraca). - Исправлена ошибка в Nullable первичном ключе с модификатором FINAL #54164 (Amos Bird).
- Исправлена ошибка, из-за которой вставка новых данных в реплицируемую materialized view могла завершаться неудачей при наличии дублирующихся данных. #54184 (Pedro Riera).
- Исправление: разрешён
IPv6для bloom-фильтра #54200 (Yakov Olkhovskiy). - исправлено возможное несоответствие типов с
IPv4#54212 (Bharat Nallan). - Исправлена
system.data_skipping_indicesдля заново созданных индексов #54225 (Artur Malchanau). - исправлен конфликт имён для multiple join rewriter v2 #54240 (Tao Wang).
- Исправлены неожиданные ошибки в
system.errorsпосле выполнения JOIN #54306 (vdimir). - Исправлена ошибка в
isZeroOrNull(NULL)#54316 (flynn). - Исправлено: параллельные реплики поверх Distributed при
prefer_localhost_replica= 1 #54334 (Igor Nikonov). - Исправлена логическая ошибка в вертикальном слиянии + ReplacingMergeTree + очистке при
OPTIMIZE#54368 (alesapin). - Исправлена потенциальная ошибка
URI contains invalid charactersв табличной функцииs3#54373 (Kruglov Pavel). - Исправлена ошибка сегментации (segfault) при оптимизации AST функции
arrayExists#54379 (Nikolay Degterinsky). - Проверка переполнения перед сложением в функции
analysisOfVariance#54385 (Antonio Andelic). - Ошибка в removeSharedRecursive воспроизведена и исправлена #54430 (Sema Checherinda).
- Исправлен возможный некорректный результат при использовании SimpleAggregateFunction в PREWHERE и FINAL #54436 (Azat Khuzhin).
- Исправлена фильтрация частей с
indexHintдля случаев без analyzer #54449 (Azat Khuzhin). - Исправлена работа агрегатных проекций с нормализованными состояниями #54480 (Amos Bird).
clickhouse-local: исправление, связанное с параметром multiquery #54498 (CuiShuoGuo).clickhouse-localтеперь поддерживает аргумент командной строки--database#54503 (vdimir).- Исправлена потенциальная ошибка парсинга в форматах
-WithNamesпри отключённомinput_format_with_names_use_header#54513 (Kruglov Pavel). - Исправлен редкий случай возникновения ошибки CHECKSUM_DOESNT_MATCH #54549 (alesapin).
- Исправлена обработка сортировки в
UNION ALLдля уже отсортированных результатов #54564 (Vitaly Baranov). - Исправлена установка снапшота в Keeper #54572 (Antonio Andelic).
- Устранено состояние гонки в
ColumnUnique#54575 (Nikita Taranov). - Индекс Annoy/Usearch: исправлена ошибка LOGICAL_ERROR, возникавшая при построении со значениями по умолчанию #54600 (Robert Schulze).
- Исправлена сериализация для
ColumnDecimal#54601 (Nikita Taranov). - Исправлено определение схемы в функциях *Cluster для имён столбцов, содержащих пробелы #54635 (Kruglov Pavel).
- Исправлено использование структуры таблиц-приёмников в случае значений по умолчанию и явного указания столбцов в INSERT #54655 (Kruglov Pavel).
- Исправление: избегать использования сопоставления с регулярным выражением, которое может содержать альтернативы, в качестве ключевого условия. #54696 (Yakov Olkhovskiy).
- Исправлена проблема в ReplacingMergeTree при вертикальном слиянии и очистке #54706 (SmitaRKulkarni).
- Исправлена проблема, из-за которой виртуальные столбцы получали неверные значения после ORDER BY #54811 (Michael Kolupaev).
- Исправлена фильтрация частей с indexHint для non-analyzer #54825 #54449 (Azat Khuzhin).
- Исправлено падение Keeper из-за ошибки сегментации при завершении работы #54841 (Antonio Andelic).
- Исправлена ошибка
Invalid number of rows in Chunkв MaterializedPostgreSQL #54844 (Kseniia Sumarokova). - Устаревшие настройки форматов перенесены в отдельный раздел #54855 (Kruglov Pavel).
- Теперь
minmax_count_projectionперестраивается при изменении ключа партиции #54943 (Amos Bird). - Исправлено некорректное приведение типа к
ColumnVector<Int128>в функцииif#55019 (Kruglov Pavel). - Предотвращена возможность присоединения частей таблиц с разными проекциями или индексами #55062 (János Benjamin Antal).
- Сохранять NULL в отображении скалярных результатов при пустом результате подзапроса #52240 (vdimir).
- Исправлена ошибка, из-за которой оператор
FINALв редких случаях формировал некорректные диапазоны чтения #54934 (Nikita Taranov). - Исправлено: кворум вставки без повторных попыток ClickHouse Keeper #55026 (Igor Nikonov).
- Исправлено простое состояние с типом Nullable #55030 (Pedro Riera).
Релиз ClickHouse 23.8 LTS, 2023-08-31
Обратное несовместимое изменение
- Если у динамического диска есть имя, его следует указывать в аргументах функции disk как
disk = disk(name = 'disk_name', ...). В предыдущей версии его можно было указывать какdisk = disk_<disk_name>(...), что больше не поддерживается. #52820 (Kseniia Sumarokova). clickhouse-benchmarkбудет устанавливать соединения параллельно, если он запущен с параметром--concurrencyбольше единицы. Ранее он был практически непригоден к использованию, если вы запускали его с 1000 одновременных соединений из Европы в США. Исправлен расчет QPS для соединений с высокой задержкой. Обратное несовместимое изменение: опция выводаclickhouse-benchmarkв формате JSON удалена. Если вы использовали эту опцию, в качестве обходного решения вы можете извлекать данные изsystem.query_logв формате JSON. #53293 (Alexey Milovidov).- Столбец
microsecondsудален изsystem.text_log, а столбецmillisecondsудален изsystem.metric_log, поскольку они избыточны при наличии столбцаevent_time_microseconds. #53601 (Alexey Milovidov). - Механизм кэширования метаданных объявлен устаревшим. Он является экспериментальным, и мы никогда его не использовали. Механизм опасен: #51182. Удалена системная таблица
system.merge_tree_metadata_cache. Кэш метаданных все еще доступен в этой версии, но вскоре будет удален. Это закрывает #39197. #51303 (Alexey Milovidov). - Отключена поддержка 3DES в TLS-соединениях. #52893 (Kenji Noguchi).
Новая функция
- Прямой импорт из архивов форматов zip/7z/tar. Пример:
file('*.zip :: *.csv'). #50321 (nikitakeba). - Добавлен столбец
ptrвsystem.trace_logдляtrace_type = 'MemorySample'. Этот столбец содержит адрес выделенной памяти. Добавлена функцияflameGraph, которая может строить flamegraph с информацией о выделенной и не освобождённой памяти. Доработка #38391. #45322 (Nikolai Kochetov). - Добавлена табличная функция
azureBlobStorageCluster. Набор поддерживаемых возможностей во многом аналогичен табличной функцииs3Cluster. #50795 (SmitaRKulkarni). - Разрешено использовать
cluster,clusterAllReplicas,remoteиremoteSecureбез указания имени таблицы (см. задачу #50808). #50848 (Yangkuan Liu). - Системная таблица для мониторинга потребителей в Kafka. #50999 (Ilya Golshtein).
- Добавлена настройка
max_sessions_for_user. #51724 (Alexey Gerasimchuck). - Новые функции
toUTCTimestamp/fromUTCTimestamp, аналогичные функциям Sparkto_utc_timestamp/from_utc_timestamp. #52117 (KevinyhZou). - Добавлены новые функции
structureToCapnProtoSchema/structureToProtobufSchema, которые преобразуют структуру таблицы ClickHouse в схему формата CapnProto/Protobuf. Эти функции позволяют выполнять ввод/вывод данных в формате CapnProto/Protobuf без внешней схемы формата, используя автоматически сгенерированную схему на основе структуры таблицы (управляется настройкамиformat_capn_proto_use_autogenerated_schema/format_protobuf_use_autogenerated_schema). Также они позволяют экспортировать автоматически сгенерированную схему при вводе/выводе данных с помощью настройкиoutput_format_schema. #52278 (Kruglov Pavel). - Новое поле
query_cache_usageвsystem.query_logтеперь показывает, использовался ли кеш запросов и каким образом. #52384 (Robert Schulze). - Добавлены новые функции
startsWithUTF8иendsWithUTF8. #52555 (李扬). - Разрешено использование переменного числа столбцов в TSV/CustomSeparated/JSONCompactEachRow, определение схемы теперь работает с переменным числом столбцов. Добавлены настройки
input_format_tsv_allow_variable_number_of_columns,input_format_custom_allow_variable_number_of_columns,input_format_json_compact_allow_variable_number_of_columns. #52692 (Kruglov Pavel). - Добавлены запросы
SYSTEM STOP/START PULLING REPLICATION LOG(для тестированияReplicatedMergeTree). #52881 (Alexander Tokmakov). - Разрешено выполнение константных недетерминированных функций в мутациях на сервере-инициаторе. #53129 (Anton Popov).
- Добавлен формат ввода
One, который не читает данные и всегда возвращает одну строку со столбцомdummyтипаUInt8и значением0, какsystem.one. Его можно использовать совместно с виртуальными столбцами_file/_pathдля перечисления файлов в табличных функциях file/s3/url/hdfs/etc без чтения данных. #53209 (Kruglov Pavel). - Добавлена функция
tupleConcat. Закрывает #52759. #53239 (Nikolay Degterinsky). - Добавлена поддержка операции
TRUNCATE DATABASE. #53261 (Bharat Nallan). - Добавлена настройка
max_threads_for_indexesдля ограничения числа потоков, используемых при обработке первичного ключа. #53313 (jorisgio). - Снова добавлены функции SipHash с ключом. #53525 (Salvatore Mesoraca).
- (#52755, #52895) Добавлены функции
arrayRotateLeft,arrayRotateRight,arrayShiftLeft,arrayShiftRight. #53557 (Mikhail Koviazin). - Добавлен столбец
nameв таблицуsystem.clustersв качестве псевдонима столбцаcluster. #53605 (irenjj). - Расширенная панель мониторинга теперь поддерживает массовое редактирование (сохранение/загрузка). #53608 (Alexey Milovidov).
- В расширенной панели мониторинга теперь можно разворачивать графики на весь экран и менять их расположение. #53622 (Alexey Milovidov).
- Добавлена поддержка операций сложения и вычитания для массивов:
[5,2] + [1,7]. Деление и умножение не были реализованы из-за неоднозначности между покомпонентным (точечным) умножением и скалярным произведением аргументов. Закрывает #49939. #52625 (Yarik Briukhovetskyi). - Добавлена поддержка использования строковых литералов в качестве имён таблиц. Закрывает #52178. #52635 (hendrik-m).
Экспериментальная возможность
- Добавлен новый движок таблицы
S3Queueдля потокового импорта данных из S3. Закрывает #37012. #49086 (s-kat). Эта функция пока не готова к использованию. Не используйте её. - Включено параллельное чтение с реплик по distributed таблице. Связано с #49708. #53005 (Igor Nikonov).
- Добавлена экспериментальная поддержка HNSW как метода приближённого поиска ближайших соседей. #53447 (Davit Vardanyan). В настоящий момент предназначено для тех, кто продолжает работать над реализацией. Не используйте её.
Повышение производительности
- Проталкивание фильтра при работе с Parquet (filter pushdown). То есть при чтении файлов Parquet группы строк (фрагменты файла) пропускаются на основе условия WHERE и минимальных/максимальных значений в каждом столбце. В частности, если файл примерно отсортирован по какому-либо столбцу, запросы, которые фильтруют по узкому диапазону значений этого столбца, будут выполняться значительно быстрее. #52951 (Michael Kolupaev).
- Оптимизировано чтение небольших групп строк за счёт их объединения в пакеты в формате Parquet. Исправляет #53069. #53281 (Kruglov Pavel).
- Оптимизировано вычисление COUNT по файлам в большинстве форматов входных данных. Закрывает #44334. #53637 (Kruglov Pavel).
- Перед чтением данных в табличных функциях
url/file/hdfsиспользуйте фильтрацию по имени файла/пути. #53529 (Kruglov Pavel). - Включена JIT-компиляция для архитектур AArch64, PowerPC, SystemZ и RISC-V. #38217 (Maksim Kita).
- Добавлена настройка
rewrite_count_distinct_if_with_count_distinct_implementationдля переписывания выраженийcountDistinctIfс использованиемcount_distinct_implementation. Закрывает #30642. #46051 (flynn). - Ускорено слияние состояний агрегатных функций
uniqиuniqExactза счёт параллельного преобразования перед слиянием. #50748 (Jiebin Sun). - Повышена производительность агрегации по строковому ключу типа Nullable при использовании большого числа ключей переменной длины. #51399 (LiuNeng).
- Добавлен проход в Analyzer для оптимизации временных фильтров с использованием preimage. Результаты экспериментов производительности SSB на устройстве ICX (Intel Xeon Platinum 8380 CPU, 80 ядер, 160 потоков) показывают, что это изменение может улучшить геометрическое среднее по QPS на 8,5% при включённом экспериментальном анализаторе. #52091 (Zhiguo Zhou).
- Оптимизировано слияние в функции
uniqExact(COUNT DISTINCT), когда все хэш‑множества одноуровневые. #52973 (Jiebin Sun). Jointable engine: не клонировать хеш-структуру данных соединения целиком (со всеми столбцами). #53046 (Duc Canh Le).- Реализован собственный входной формат
ORCбез использования библиотеки Apache Arrow для повышения производительности. #53324 (李扬). - Панель управления будет сообщать серверу, что данные нужно сжимать, что полезно для больших временных интервалов при медленном интернет-соединении. Например, один график с 86400 точками может занимать 1,5 МБ в несжатом виде и 60 КБ в сжатом виде с
br. #53569 (Alexey Milovidov). - Улучшено использование пула потоков при выполнении операций BACKUP и RESTORE. #53649 (Nikita Mikhaylov).
- Параллельная загрузка метаданных файлового кэша при запуске. Настраивается параметром конфигурации кэша
load_metadata_threads(по умолчанию: 1). Связано с #52037. #52943 (Kseniia Sumarokova). - Улучшен
move_primary_key_columns_to_end_of_prewhere. #53337 (Han Fei). - Это оптимизирует взаимодействие с ClickHouse Keeper. Ранее вызывающий код мог зарегистрировать один и тот же watch callback несколько раз. В этом случае каждая запись потребляла память, и тот же callback вызывался несколько раз, что не имело большого смысла. Чтобы избежать этого, вызывающий код мог добавлять логику, не позволяющую регистрировать один и тот же watch несколько раз. С этим изменением такая дедупликация выполняется автоматически, если watch callback передаётся через shared_ptr. #53452 (Alexander Gololobov).
- Кэширование количества строк в файлах при выполнении
countв функциях file/s3/url/hdfs/azure. Кэш может быть включён или отключён с помощью настройкиuse_cache_for_count_from_files(по умолчанию включён). Продолжение https://github.com/ClickHouse/ClickHouse/pull/53637. #53692 (Kruglov Pavel). - Более тщательное управление потоками повышает скорость работы табличной функции S3 при обработке большого количества файлов более чем на ~25%. #53668 (pufit).
Улучшения
- Добавлена настройка
stderr_reactionдля управления реакцией (none, log или throw), когда внешняя команда записывает данные в stderr. Это упрощает отладку внешних команд. #43210 (Amos Bird). - Добавлен столбец
partitionвsystem part_logи таблицу-объединение. #48990 (Jianfei Hu). - Размеры кэшей индекса (несжатых данных и mark-данных), mmap и запросов теперь можно динамически настраивать во время работы сервера (без его перезапуска). #51446 (Robert Schulze).
- Если словарь создан со сложным ключом, автоматически выбирается вариант компоновки «complex key». #49587 (xiebin).
- Добавлена настройка
use_concurrency_controlдля улучшенного тестирования нового механизма управления параллелизмом. #49618 (Alexey Milovidov). - Добавлены подсказки по исправлению опечаток в названиях баз данных и таблиц. #49801 (Yarik Briukhovetskyi).
- При чтении небольших файлов из HDFS с помощью Gluten мы обнаружили, что это занимает больше времени по сравнению с непосредственным выполнением запросов в Spark. Мы оптимизировали этот сценарий. #50063 (KevinyhZou).
- После истечения срока действия сессии появлялось слишком много бесполезных сообщений об ошибках в логах, что нас не устраивало. #50171 (helifu).
- Добавлены резервные сессии ZooKeeper с ограниченным временем жизни. Исправлен столбец
indexв system.zookeeper_connection для DNS-адресов. #50424 (Anton Kozlov). - Добавлена возможность записывать в лог достижение max_partitions_per_insert_block. #50948 (Sean Haynes).
- Добавлен набор дополнительных команд в clickhouse-keeper-client (в основном для упрощения отладки ClickHouse). #51117 (pufit).
- Обновлена проверка строки подключения в табличной функции
azureBlobStorage, так как строка подключения с «sas» не всегда начинается с конечной точки по умолчанию, а также обновлён URL подключения: теперь токен «sas» добавляется в URL после контейнера Azure. #51141 (SmitaRKulkarni). - Исправлено описание фильтрации множеств в алгоритме JOIN
full_sorting_merge. #51329 (Tanay Tummalapalli). - Исправлено использование памяти в
Aggregatorпри очень большом значенииmax_block_size. #51566 (Nikita Taranov). - Добавлена команда
SYSTEM SYNC FILESYSTEM CACHE. Она сравнивает состояние кэша файловой системы в памяти с состоянием на диске и при необходимости исправляет состояние в памяти. Она требуется только в случае ручного вмешательства в данные на диске, что крайне не рекомендуется. #51622 (Kseniia Sumarokova). - Попытка реализовать универсальный proxy resolver для ClickHouse при сохранении обратной совместимости с существующим proxy resolver для конфигурации хранилища S3. #51749 (Arthur Passos).
- Добавлена поддержка чтения подстолбцов кортежей из табличных функций file, s3, hdfs, url и azureBlobStorage. #51806 (Kruglov Pavel).
- Функция
arrayIntersectтеперь возвращает значения в порядке следования элементов первого аргумента. Закрывает #27622. #51850 (Yarik Briukhovetskyi). - Добавлены новые запросы, позволяющие создавать и удалять объекты доступа в указанном хранилище доступа либо переносить объекты доступа из одного хранилища доступа в другое. #51912 (pufit).
- Сделать так, чтобы запросы
ALTER TABLE FREEZEне реплицировались в таблицах с движком Replicated. #52064 (Mike Kot). - Добавлена возможность сбрасывать системные таблицы на диск при неожиданном завершении работы. #52174 (Alexey Gerasimchuck).
- Исправлена ошибка, из-за которой табличная функция
s3не работала с предварительно подписанными URL-адресами. Закрывает #50846. #52310 (chen). - Добавлен столбец
name— псевдоним столбцовeventиmetricв таблицахsystem.eventsиsystem.metrics. Закрывает #51257. #52315 (chen). - Добавлена поддержка синтаксиса
CREATE UNIQUE INDEXв парсере как no-op (операции без действия) для лучшей совместимости с SQL. ИндексUNIQUEне поддерживается. Установитеcreate_index_ignore_unique = 1, чтобы игнорировать ключевое словоUNIQUEв запросах. #52320 (Ilya Yatsishin). - Добавлена поддержка использования предопределённых макросов (
{database}и{table}) в ряде настроек движка Kafka: topic, consumer, client_id и т. д. #52386 (Yury Bogomolov). - Отключено обновление кэша файловой системы во время backup/restore. Кэш файловой системы не должен обновляться при выполнении backup/restore, поскольку, по-видимому, это лишь замедляет процесс без какой-либо выгоды (так как команда BACKUP может читать большие объёмы данных, и нет смысла помещать все данные в кэш файловой системы и сразу же их оттуда вытеснять). #52402 (Vitaly Baranov).
- Конфигурация S3-эндпоинта позволяет использовать его от корня и при необходимости автоматически добавляет символ '/'. #47809. #52600 (xiaolei565).
- В clickhouse-local разрешены позиционные аргументы и заполняются глобальные настройки UDF (user_scripts_path и user_defined_executable_functions_config). #52643 (Yakov Olkhovskiy).
system.asynchronous_metricsтеперь включает метрики «QueryCacheEntries» и «QueryCacheBytes» для проверки кэша запросов. #52650 (Robert Schulze).- Добавлена возможность использовать параметр
s3_storage_classв предложенииSETTINGSоператораBACKUPпри создании резервных копий в S3. #52658 (Roman Vasin). - Добавлена утилита
print-backup-info.py, которая разбирает файл метаданных резервной копии и выводит информацию о ней. #52690 (Vitaly Baranov). - Закрывает #49510. В настоящее время имена баз данных и таблиц чувствительны к регистру, но BI‑инструменты выполняют запросы к
information_schemaто в нижнем регистре, то в верхнем. По этой причине у нас есть база данныхinformation_schema, содержащая таблицы в нижнем регистре, такие какinformation_schema.tables, и база данныхINFORMATION_SCHEMA, содержащая таблицы в верхнем регистре, такие какINFORMATION_SCHEMA.TABLES. Но некоторые инструменты выполняют запросы кINFORMATION_SCHEMA.tablesиinformation_schema.TABLES. Предлагаемое решение — продублировать таблицы и в нижнем, и в верхнем регистре в обеих базах данныхinformation_schema(с именами в нижнем и верхнем регистре). #52695 (Yarik Briukhovetskyi). - Запрос
CHECK TABLEимеет более высокую производительность и удобен в использовании (отправляет обновления о ходе выполнения, может быть отменён). #52745 (vdimir). - Добавлена поддержка
modulo,intDiv,intDivOrZeroдля кортежей за счёт применения этих операций к каждому элементу кортежа. #52758 (Yakov Olkhovskiy). - Искать стандартные конфигурации
yamlиymlв clickhouse-client послеxml. #52767 (Alexey Milovidov). - При слиянии с конфигурацией, корневой элемент которой имеет имя, отличное от 'clickhouse', конфигурации с другим именем корневого узла просто пропускались без выбрасывания исключения. #52770 (Yakov Olkhovskiy).
- Теперь можно задавать минимальный (
memory_profiler_sample_min_allocation_size) и максимальный (memory_profiler_sample_max_allocation_size) размеры выделений памяти, которые будут отслеживаться выборочным профилировщиком памяти. #52779 (alesapin). - Добавлена настройка
precise_float_parsingдля переключения методов разбора чисел с плавающей запятой (быстрый/точный). #52791 (Andrey Zvonov). - Использовать те же пути по умолчанию для
clickhouse-keeper(символической ссылки), как дляclickhouse-keeper(исполняемого файла). #52861 (Vitaly Baranov). - Улучшено сообщение об ошибке для табличной функции
remote. Закрывает #40220. #52959 (jiyoungyoooo). - Добавлена возможность указывать пользовательскую политику хранения в секции
SETTINGSдля запросовRESTORE. #52970 (Victor Krasnov). - Добавлена возможность ограничивать частоту запросов к S3 при операциях резервного копирования (теперь команды
BACKUPиRESTOREучитывают параметрыs3_max_[get/put]_[rps/burst]). #52974 (Daniel Pozo Escalona). - Добавлены настройки для игнорирования предложения ON CLUSTER в запросах при управлении реплицируемыми пользовательскими функциями или сущностями управления доступом с реплицируемым хранилищем. #52975 (Aleksei Filatov).
- Действия EXPLAIN для шага JOIN. #53006 (Maksim Kita).
- Функции
hasTokenOrNullиhasTokenCaseInsensitiveOrNullтеперь возвращают null для пустых поисковых строк. #53059 (ltrk2). - Добавлена возможность ограничивать допустимые пути для файловых кешей. В основном это полезно для динамических дисков. Если в конфигурации сервера указан
filesystem_caches_path, все пути файловых кешей будут ограничены этим каталогом. Например, еслиpathв конфигурации кеша относительный — он будет размещён внутриfilesystem_caches_path; еслиpathв конфигурации кеша абсолютный, потребуется, чтобы он находился внутриfilesystem_caches_path. Еслиfilesystem_caches_pathне указан в конфигурации, поведение будет таким же, как в более ранних версиях. #53124 (Kseniia Sumarokova). - Добавлено несколько пользовательских команд (главным образом для упрощения отладки ClickHouse). #53127 (pufit).
- Добавлена диагностическая информация об имени файла при выводе схемы — это помогает при обработке нескольких файлов с использованием glob-шаблонов. #53135 (Alexey Milovidov).
- Клиент будет загружать подсказки через основное соединение, если второму соединению запрещено создавать сессию. #53177 (Alexey Gerasimchuck).
- Добавлено предложение EXCEPT в запрос
SYSTEM STOP/START LISTEN QUERIES [ALL/DEFAULT/CUSTOM], например:SYSTEM STOP LISTEN QUERIES ALL EXCEPT TCP, HTTP. #53280 (Nikolay Degterinsky). - Изменено значение по умолчанию для
max_concurrent_queriesсо 100 на 1000. Допустимо иметь много одновременных запросов, если они не ресурсоёмкие и в основном ожидают сетевых операций. Примечание: не путайте одновременные запросы с QPS: например, сервер ClickHouse может обрабатывать десятки тысяч QPS при менее чем 100 одновременных запросах. #53285 (Alexey Milovidov). - Ограничено количество одновременно выполняющихся фоновых слияний при оптимизации партиций. #53405 (Duc Canh Le).
- Добавлена настройка
allow_moving_table_directory_to_trash, которая позволяет игнорировать ошибкуDirectory for table data already existsпри репликации или восстановлении базы данныхReplicated. #53425 (Alexander Tokmakov). - Если серверные настройки
asynchronous_metrics_update_period_sиasynchronous_heavy_metrics_update_period_sошибочно установлены в 0, теперь это приведёт к корректному завершению с ошибкой вместо аварийного завершения приложения. #53428 (Robert Schulze). - Сервер ClickHouse теперь при перечитывании конфигурации учитывает изменения лимитов памяти, заданных через cgroups. #53455 (Robert Schulze).
- Добавлена возможность отключить сброс distributed таблиц при выполнении команд
DETACH,DROPили при остановке сервера. #53501 (Azat Khuzhin). - Функция
domainRFCтеперь поддерживает IPv6 в квадратных скобках. #53506 (Chen768959). - Увеличен таймаут для запросов S3 CopyObject, используемых при создании резервных копий. #53533 (Michael Kolupaev).
- Добавлена серверная настройка
aggregate_function_group_array_max_element_size. Она используется для ограничения размера массива для функцииgroupArrayпри сериализации. Значение по умолчанию —16777215. #53550 (Nikolai Kochetov). SCHEMAбыл добавлен в качестве псевдонима дляDATABASEдля повышения совместимости с MySQL. #53587 (Daniël van Eeden).- Добавлены асинхронные метрики по таблицам в системной базе данных. Например,
TotalBytesOfMergeTreeTablesSystem. Это закрывает #53603. #53604 (Alexey Milovidov). - SQL-редактор в интерфейсах Play и Dashboard больше не использует Grammarly. #53614 (Alexey Milovidov).
- На уровне экспертных настроек теперь можно (1) задавать
size_ratio(т. е. относительный размер защищённой очереди) кэшей меток [index] и кэшей несжатых данных, (2) настраивать политику кэширования кэшей меток индекса и кэшей несжатых данных. #53657 (Robert Schulze). - Добавлена проверка информации о клиенте в пакет запроса TCPHandler. #53673 (Alexey Gerasimchuck).
- Повторная загрузка частей при сетевых ошибках во время взаимодействия с Microsoft Azure. #53750 (SmitaRKulkarni).
- Стек трассировки для исключений, исключения из материализованных представлений пробрасываются. #53766 (Ilya Golshtein).
- Если имя хоста и порт не указаны, клиент Keeper попытается найти строку подключения в файле config.xml ClickHouse. #53769 (pufit).
- Добавлено профильное событие
PartsLockMicroseconds, которое показывает количество микросекунд, в течение которых удерживается блокировка частей данных в семействе движков таблиц MergeTree. #53797 (alesapin). - Сделано настраиваемым ограничение числа попыток переподключения в RAFT для Keeper. Этот параметр позволяет Keeper быстрее восстанавливать соединение с другими узлами, если текущее соединение разорвано. #53817 (Pengyuan Bian).
- Теперь внешние ключи в определениях таблиц игнорируются для улучшения совместимости с MySQL, чтобы пользователям не приходилось переписывать свои SQL‑запросы, содержащие определения внешних ключей, см. #53380. #53864 (jsc0218).
Улучшения сборки/тестирования/упаковки
- Не экспортировать символы из бинарника ClickHouse динамическому компоновщику. Это может исправить #43933. #47475 (Alexey Milovidov).
- В пакет clickhouse-server добавлена символическая ссылка
clickhouse-keeper-client. #51882 (Mikhail f. Shiryaev). - Добавлен https://github.com/elliotchance/sqltest в CI для отчётности о соответствии стандарту SQL:2016. #52293 (Alexey Milovidov).
- Обновлён PRQL до 0.9.3. #53060 (Maximilian Roos).
- Системные таблицы из проверок CI экспортируются в ClickHouse Cloud. #53086 (Alexey Milovidov).
- Профильные данные компилятора (
-ftime-trace) отправляются в ClickHouse Cloud. #53100 (Alexey Milovidov). - Ускорены сборки Debug и Tidy. #53178 (Alexey Milovidov).
- Ускорена сборка благодаря удалению огромного количества мусора. Один из часто подключаемых заголовочных файлов был «отравлен» Boost. #53180 (Alexey Milovidov).
- Удалено ещё больше ненужного кода. #53182 (Alexey Milovidov).
- Функция
arrayAUCиспользовала тяжёлые шаблоны C++, от которых отказались. #53183 (Alexey Milovidov). - Некоторые единицы трансляции всегда пересобирались, независимо от ccache. Причина была найдена и устранена. #53184 (Alexey Milovidov).
- Данные профиля компилятора (
-ftime-trace) загружаются в ClickHouse Cloud. Вторая попытка после #53100. #53213 (Alexey Milovidov). - Экспорт логов из CI в stateful-тестах в ClickHouse Cloud. #53351 (Alexey Milovidov).
- Экспорт логов из CI в стресс‑тестах. #53353 (Alexey Milovidov).
- Экспорт логов из CI в fuzzer. #53354 (Alexey Milovidov).
- Сохраняются параметры окружения в команде
clickhouse start. Исправлена #51962. #53418 (Mikhail f. Shiryaev). - Продолжение к #53418. Небольшие улучшения в install_check.py, добавлены тесты для корректной передачи параметров окружения (ENV) в основной процесс при
init.d start. #53457 (Mikhail f. Shiryaev). - Перестроено управление файлами в CMake, чтобы избежать возможного дублирования. Например,
indexHint.cppдублировался и вdbms_sources, и вclickhouse_functions_sources. #53621 (Amos Bird). - Обновлена библиотека Snappy до версии 1.1.10. #53672 (李扬).
- Незначительно улучшена сборка CMake за счёт приведения в порядок некоторых зависимостей и удаления дубликатов. Каждый коммит включает краткое описание внесённых изменений. #53759 (Amos Bird).
Исправление ошибки (некорректное поведение, видимое пользователю, в официальном стабильном релизе)
- Не сбрасывать (экспериментальный) индекс Annoy при построении, если имеется более одной метки #51325 (Tian Xinhui).
- Исправлено использование временных каталогов при операции RESTORE #51493 (Azat Khuzhin).
- Исправлена работа бинарной арифметики для Nullable(IPv4) #51642 (Yakov Olkhovskiy).
- Добавлена поддержка типов данных IPv4 и IPv6 в качестве атрибутов словаря #51756 (Yakov Olkhovskiy).
- Исправлено вычисление контрольной суммы маркеров сжатия #51777 (SmitaRKulkarni).
- Исправлена ошибка, из-за которой запятая при разборе CSV в режиме best effort ошибочно интерпретировалась как часть значения datetime #51950 (Kruglov Pavel).
- Не выбрасывать исключение, если исполняемая UDF имеет параметры #51961 (Nikita Taranov).
- Исправлена ошибка пересчёта skip-индексов и проекций в запросах
ALTER DELETE#52530 (Anton Popov). - MaterializedMySQL: Исправлен бесконечный цикл в ReadBuffer::read #52621 (Val Doroshchuk).
- Загружать подсказки только для диалекта
clickhouse#52628 (János Benjamin Antal). - Создавать и уничтожать канал ares по мере необходимости. #52634 (Arthur Passos).
- Исправлена фильтрация по виртуальным столбцам при использовании выражения OR #52653 (Azat Khuzhin).
- Исправлен сбой функции
tupleпри использовании одного разреженного столбца в качестве аргумента #52659 (Anton Popov). - Исправлена работа именованных коллекций в кластере #52687 (Al Korgun).
- Исправлено избыточное чтение лишнего столбца при многостадийном
PREWHERE#52689 (Anton Popov). - Исправлен неожиданный результат сортировки по нескольким столбцам с направлением NULLS FIRST #52761 (copperybean).
- Исправлена гонка данных при перенастройке Keeper #52804 (Antonio Andelic).
- Исправлена сортировка разреженных столбцов с большим лимитом #52827 (Anton Popov).
- clickhouse-keeper: исправлена реализация сервера на poll. #52833 (Andy Fiddaman).
- Теперь анализатор регулярных выражений распознаёт именованные группы захвата #52840 (Han Fei).
- Исправлено возможное срабатывание assert в
~PushingAsyncPipelineExecutorв clickhouse-local #52862 (Kruglov Pavel). - Исправлено чтение пустых значений типа
Nested(Array(LowCardinality(...)))#52949 (Anton Popov). - Добавлены новые тесты для session_log и исправлена несогласованность между операциями входа в систему и выхода из неё. #52958 (Alexey Gerasimchuck).
- Исправлена утечка пароля в выводе
SHOW CREATE TABLEдля таблиц MySQL #52962 (Duc Canh Le). - Разреженный формат столбца в CreateSetAndFilterOnTheFlyStep преобразован в полный #53000 (vdimir).
- Исправлена редкая гонка состояний при удалении каталога с пустым префиксом ключа в fs cache #53055 (Kseniia Sumarokova).
- Исправлена ошибка, из-за которой
ZstdDeflatingWriteBufferиногда усекал выходные данные #53064 (Michael Kolupaev). - Исправлен query_id в part_log при асинхронном выполнении запросов FLUSH #53103 (Raúl Marín).
- Исправлена возможная ошибка при работе с кешем "Read unexpected size" #53121 (Kseniia Sumarokova).
- Отключить новый кодировщик Parquet #53130 (Alexey Milovidov).
- Исправлено исключение «Not-ready Set» #53162 (Nikolai Kochetov).
- Исправлено экранирование символов в движке PostgreSQL #53250 (Nikolay Degterinsky).
- Экспериментальная таблица session_log: добавлены новые тесты для session_log и устранено несоответствие между входом в систему и выходом из системы. #53255 (Alexey Gerasimchuck). Устранено несоответствие между успешным входом и выходом из системы #53302 (Alexey Gerasimchuck).
- Исправлена ошибка при добавлении субсекундных интервалов к DateTime #53309 (Michael Kolupaev).
- Исправлена ошибка «Context has expired» в словарях #53342 (Alexey Milovidov).
- Исправлен некорректный формат AST для обычной проекции #53347 (Amos Bird).
- Запрещено использование настройки use_structure_from_insertion_table_in_table_functions в табличных функциях при выполнении Scalar #53348 (flynn).
- Исправлена загрузка лениво инициализируемой базы данных при выполнении запроса
SELECTкsystem.table#53372 (SmitaRKulkarni). - Исправлена системная таблица
system.data_skipping_indicesдля MaterializedMySQL #53381 (Filipp Ozinov). - Исправлена обработка одиночного символа возврата каретки в движке сегментации TSV‑файлов #53407 (Kruglov Pavel).
- Корректно исправлена обработка ошибки
Context has expired#53433 (Michael Kolupaev). - Исправлен
timeout_overflow_modeпри наличии подзапроса в правой части выражения IN #53439 (Duc Canh Le). - Исправлено неожиданное поведение в #53152 и #53440 (Zhiguo Zhou).
- Исправлена ошибка разбора в функции JSON_QUERY, возникавшая, когда путь состоял только из цифр #53470 (KevinyhZou).
- Исправлен некорректный порядок столбцов для запросов с параллельным FINAL. #53489 (Nikolai Kochetov).
- Исправлено выполнение SELECT из ReplacingMergeTree с do_not_merge_across_partitions_select_final #53511 (Vasily Nemkov).
- Сначала при завершении работы сбрасывать очередь асинхронных вставок #53547 (joelynch).
- Исправлен сбой при выполнении операции JOIN по разреженному столбцу #53548 (vdimir).
- Исправлено возможное неопределённое поведение (UB) в пропускающем индексе для Set при использовании функций с некорректными аргументами #53559 (Azat Khuzhin).
- Исправлено возможное неопределённое поведение (UB) в инвертированных индексах (экспериментальная функциональность) #53560 (Azat Khuzhin).
- Исправление: выражение interpolate использует исходный столбец вместо одноимённого столбца-псевдонима из выражения SELECT. #53572 (Yakov Olkhovskiy).
- Исправлено количество отброшенных гранул в EXPLAIN PLAN index=1 #53616 (wangxiaobo).
- Корректно обрабатывать totals и extremes при работе с
DelayedSource#53644 (Antonio Andelic). - Кэш prepared set в конвейере мутаций зависал #53645 (Nikolai Kochetov).
- Исправлена ошибка при выполнении мутаций с подстолбцами типа JSON в предикатах запросов UPDATE и DELETE. #53677 (VanDarkholme7).
- Исправлено filter pushdown для full_sorting_merge join #53699 (vdimir).
- Попытка исправить ошибку, связанную с
NULL::LowCardinality(Nullable(...)) NOT IN#53706 (Andrey Zvonov). - Исправлено: sorted distinct для разреженных столбцов #53711 (Igor Nikonov).
transform: правильная обработка столбца по умолчанию с несколькими строками #53742 (Salvatore Mesoraca).- Исправлен краш фаззера в parseDateTime #53764 (Robert Schulze).
- MaterializedPostgreSQL: устранено необработанное исключение в getCreateTableQueryImpl #53832 (Kseniia Sumarokova).
- Исправлена возможная ошибка сегментации памяти при использовании движка PostgreSQL #53847 (Kseniia Sumarokova).
- Исправлен алиас named_collection_admin #54066 (Kseniia Sumarokova).
Выпуск ClickHouse 23.7, 2023-07-27
Обратно несовместимые изменения
- Добавлен тип доступа
NAMED COLLECTION(псевдонимыUSE NAMED COLLECTION,NAMED COLLECTION USAGE). Этот PR обратно несовместим, поскольку этот тип доступа по умолчанию отключен (так как родительский тип доступаNAMED COLLECTION ADMINтакже по умолчанию отключен). Предложено в #50277. Для выдачи прав используйтеGRANT NAMED COLLECTION ON collection_name TO userилиGRANT NAMED COLLECTION ON * TO user; чтобы иметь возможность выдавать эти права, в конфигурации требуетсяnamed_collection_admin(ранее он называлсяnamed_collection_control, поэтому останется как псевдоним). #50625 (Kseniia Sumarokova). - Исправлена опечатка в имени столбца
system.partslast_removal_attemp_time. Теперь он называетсяlast_removal_attempt_time. #52104 (filimonov). - Версия distributed_ddl_entry_format_version по умолчанию увеличена до 5 (включает проброс OpenTelemetry и initial_query_idd). Это не позволит обрабатывать существующие записи для распределённого DDL после downgrade (но учтите, что обычно таких необработанных записей быть не должно). #52128 (Azat Khuzhin).
- Проверка метаданных проекций выполняется тем же способом, что и проверка обычных метаданных. Это изменение может помешать запуску сервера, если существует таблица с некорректной проекцией. Пример — проекция, которая создала позиционные столбцы в первичном ключе (например,
projection p (select * order by 1, 4), что не допускается в первичном ключе таблицы и может вызвать сбой при вставке/слиянии). Удалите такие проекции до обновления. Исправляет #52353. #52361 (Nikolai Kochetov). - Экспериментальная функция
hashidудалена из‑за ошибки. Качество реализации изначально было сомнительным, и функция так и не вышла из экспериментального статуса. Это закрывает #52406. #52449 (Alexey Milovidov).
Новая функция
- Добавлен движок базы данных
Overlayдля объединения нескольких баз данных в одну. Добавлен движок базы данныхFilesystemдля представления каталога в файловой системе в виде набора неявно доступных таблиц с автоматически определяемыми форматами и структурами. Новый движок базы данныхS3предоставляет доступ к хранилищу S3 только для чтения, представляя префикс в виде набора таблиц. Новый движок базы данныхHDFSпозволяет взаимодействовать с хранилищем HDFS аналогичным образом. #48821 (alekseygolub). - Добавлена поддержка использования внешних дисков в Keeper для хранения снапшотов и логов. #50098 (Antonio Andelic).
- Добавлена поддержка glob-шаблонов с выбором нескольких каталогов (
{}). #50559 (Andrey Zvonov). - Коннектор Kafka теперь может получать схему Avro из реестра схем с базовой аутентификацией, используя URL-кодированные учетные данные. #49664 (Ilya Golshtein).
- Добавлена функция
arrayJaccardIndex, которая вычисляет коэффициент Жаккара между двумя массивами. #50076 (FFFFFFFHHHHHHH). - Добавлен столбец
is_obsoleteвsystem.settingsи другие аналогичные таблицы. Закрывает #50819. #50826 (flynn). - Реализована поддержка зашифрованных элементов в файле конфигурации. Добавлена возможность использовать зашифрованный текст в листовых элементах файла конфигурации. Текст шифруется с помощью кодеков шифрования из раздела
<encryption_codecs>. #50986 (Roman Vasin). - Алгоритм Grace Hash Join теперь может применяться к операциям FULL и RIGHT JOIN. #49483. #51013 (lgbo).
- Добавлен запрос
SYSTEM STOP LISTENдля более плавного завершения работы. Закрывает #47972. #51016 (Nikolay Degterinsky). - Добавлен параметр
input_format_csv_allow_variable_number_of_columns. #51273 (Dmitry Kardymon). - Еще одна скучная новинка: добавлена функция
substring_index, как в Spark или MySQL. #51472 (李扬). - Системная таблица
jemalloc_binsдля отображения статистики по бинам jemalloc. Пример:SELECT *, size * (nmalloc - ndalloc) AS allocated_bytes FROM system.jemalloc_bins WHERE allocated_bytes > 0 ORDER BY allocated_bytes DESC LIMIT 10. Приятной работы. #51674 (Alexander Gololobov). - Добавлен формат
RowBinaryWithDefaultsс дополнительным байтом перед каждым столбцом в качестве флага использования значения столбца по умолчанию. Закрывает #50854. #51695 (Kruglov Pavel). - Добавлена настройка
default_temporary_table_engine. Аналогичнаdefault_table_engine, но для временных таблиц. #51292. #51708 (velavokr). - Добавлены новые функции
initcap/initcapUTF8, которые преобразуют первую букву каждого слова в верхний регистр, а остальные — в нижний. #51735 (Dmitry Kardymon). - CREATE TABLE теперь поддерживает использование синтаксиса
PRIMARY KEYпри определении столбцов. Столбцы добавляются в первичный индекс в том же порядке, в котором они определены. #51881 (Ilya Yatsishin). - Добавлена возможность использовать спецификаторы формата даты и времени в именах файлов журнала и журнала ошибок, как в конфигурационных файлах (теги
logиerrorlog), так и в параметрах командной строки (--log-fileи--errorlog-file). #51945 (Victor Krasnov). - В HTTP-заголовки добавлена статистика пикового использования памяти. #51946 (Dmitry Kardymon).
- Добавлены новые функции
hasSubsequence(а также их вариантыCaseInsensitiveиUTF8) для поиска подпоследовательностей в строках. #52050 (Dmitry Kardymon). - Добавлен
array_aggв качестве псевдонимаgroupArrayдля совместимости с PostgreSQL. Закрывает #52100. ### Запись в документации об изменениях, затрагивающих пользователей. #52135 (flynn). - Добавлен псевдоним совместимости
any_valueдля агрегатной функцииany. Закрывает #52140. #52147 (flynn). - Добавлена агрегатная функция
array_concat_aggдля совместимости с BigQuery; она является псевдонимом функцииgroupArrayArray. Закрывает #52139. #52149 (flynn). - Добавлен
OCTET_LENGTHв качестве псевдонима дляlength. Закрывает #52153. #52176 (FFFFFFFHHHHHHH). - Добавлена функция
firstLineдля извлечения первой строки из многострочной строки. Тем самым закрывается задача #51172. #52209 (Mikhail Koviazin). - Реализовано форматирование в стиле KQL для типа данных
Interval. Это требуется только для совместимости с языком запросовKusto. #45671 (ltrk2). - Добавлен запрос
SYSTEM FLUSH ASYNC INSERT QUEUE, который выполняет все ожидающие асинхронные вставки в целевые таблицы. Добавлена серверная настройкаasync_insert_queue_flush_on_shutdown(trueпо умолчанию), которая определяет, следует ли при корректном завершении работы выполнять сброс очереди асинхронных вставок. Настройкаasync_insert_threadsтеперь является серверной настройкой. #49160 (Anton Popov). - Псевдонимы
current_databaseи новая функцияcurrent_schemasдля совместимости с PostgreSQL. #51076 (Pedro Riera). - Добавлены псевдонимы для функций
today(теперь также доступна под именамиcurdate/current_date) иnow(current_timestamp). #52106 (Lloyd-Pottiger). - Добавлена поддержка
async_deduplication_tokenдля асинхронной вставки. #52136 (Han Fei). - Добавлена новая настройка
disable_url_encoding, которая позволяет отключить кодирование и декодирование пути в URI в движке URL. #52337 (Kruglov Pavel).
Повышение производительности
- Включён автоматический выбор разреженного формата сериализации по умолчанию. Это улучшает производительность. Формат поддерживается начиная с версии 22.1. После этого изменения понижение версии до версий ранее 22.1 может быть невозможно. Понижение версии может потребовать установки параметра
ratio_of_defaults_for_sparse_serialization=0.937555153. Вы можете отключить использование разреженного формата сериализации, указав параметрratio_of_defaults_for_sparse_serialization = 1для ваших таблиц MergeTree. #49631 (Alexey Milovidov). - По умолчанию включены настройки
move_all_conditions_to_prewhereиenable_multiple_prewhere_read_steps. #46365 (Alexander Gololobov). - Улучшена производительность некоторых запросов за счет настройки аллокатора. #46416 (Azat Khuzhin).
- Теперь в
MergeTreePrefetchedReadPool, как и вMergeTreeReadPool, используются задачи фиксированного размера. Кроме того, теперь для запросов к S3 используется пул подключений. #49732 (Nikita Taranov). - Более агрессивное проталкивание вычислений на правую сторону
JOIN. #50532 (Nikita Taranov). - Улучшена операция grace_hash join за счёт предварительного резервирования памяти под хеш-таблицу (повторная отправка). #50875 (lgbo).
- Ожидание блокировки в
OpenedFileCacheиногда могло заметно сказываться на производительности. Мы разделили его на несколько подотображений (каждое со своей собственной блокировкой), чтобы избежать конкуренции за блокировки. #51341 (Nikita Taranov). - Переместить условия со столбцами первичного ключа в конец цепочки PREWHERE. Идея состоит в том, что такие условия, скорее всего, будут использоваться при анализе PK и почти не повлияют на дополнительную фильтрацию в PREWHERE. #51958 (Alexander Gololobov).
- Ускорена операция
COUNT(DISTINCT)для строкового типа String за счёт встраивания (inlining) SipHash. Результаты экспериментов производительности набора OnTime на устройстве ICX (процессор Intel Xeon Platinum 8380, 80 ядер, 160 потоков) показывают, что это изменение может повысить QPS запроса Q8 на 11,6% без влияния на другие запросы. #52036 (Zhiguo Zhou). - По умолчанию теперь включена настройка
allow_vertical_merges_from_compact_to_wide_parts. Это позволяет сократить использование памяти во время слияний. #52295 (Alexey Milovidov). - Исправлен некорректный анализ PROJECTION, который делал первичные ключи недействительными. Эта проблема возникает только при
query_plan_optimize_primary_key = 1, query_plan_optimize_projection = 1. Исправляет #48823. Исправляет #51173. #52308 (Amos Bird). - Уменьшено количество системных вызовов в
FileCache::loadMetadata, что ускоряет запуск сервера, если настроен кэш файловой системы. #52435 (Raúl Marín). - Позволяет задать жёсткую нижнюю границу для размера сегмента файла за счёт скачивания оставшихся данных в фоновом режиме. Минимальный размер сегмента файла (если фактический размер файла больше) настраивается параметром конфигурации кэша
boundary_alignment, по умолчанию4Mi. Количество фоновых потоков настраивается параметром конфигурации кэшаbackground_download_threads, по умолчанию2. Такжеmax_file_segment_sizeбыл увеличен с8Miдо32Miв этом PR. #51000 (Kseniia Sumarokova). - Уменьшены значения таймаутов по умолчанию для S3 с 30 секунд до 3 секунд, а для других HTTP-запросов ‒ со 180 секунд до 30 секунд. #51171 (Michael Kolupaev).
- Добавлена новая настройка
merge_tree_determine_task_size_by_prewhere_columns. Если установлена в значениеtrue, при определении размера задачи чтения будут учитываться только размеры столбцов, указанных в секцииPREWHERE. В противном случае учитываются размеры всех столбцов из запроса. #52606 (Nikita Taranov).
Улучшения
- Используйте read_bytes/total_bytes_to_read для индикатора прогресса в табличных функциях S3/file/url/... для более точного отображения хода выполнения. #51286 (Kruglov Pavel).
- Добавлена табличная настройка
wait_for_unique_parts_send_before_shutdown_ms, которая задаёт время ожидания, в течение которого реплика будет ждать перед закрытием межсерверного обработчика, отвечающего за реплицируемые отправки. Также устранена несогласованность при завершении работы таблиц и межсерверных обработчиков: теперь сервер сначала отключает таблицы и только после этого завершает работу межсерверных обработчиков. #51851 (alesapin). - Разрешено использование стандартного для SQL
FETCHбезOFFSET. См. https://antonz.org/sql-fetch/. #51293 (Alexey Milovidov). - Добавлена возможность фильтровать HTTP‑заголовки для табличных функций URL/S3 с помощью нового раздела конфигурации
http_forbid_headers. Поддерживаются как точное совпадение, так и фильтры на основе регулярных выражений. #51038 (Nikolay Degterinsky). - Сообщения о
16 EiBсвободного места больше не выводятся в логах, так как они бессмысленны. Закрывает #49320. #49342 (Alexey Milovidov). - Теперь лимит для функции
sleepEachRowкорректно проверяется. Добавлена настройкаfunction_sleep_max_microseconds_per_block. Она нужна для универсального фаззера запросов. #49343 (Alexey Milovidov). - Исправлены две ошибки в функциях
geoHash. #50066 (李扬). - Записывать в журнал запросы сброса асинхронных вставок в
system.query_log. #51160 (Raúl Marín). - Функции
date_diffиageтеперь поддерживают единицы измерения миллисекунд и микросекунд и работают с точностью до микросекунд. #51291 (Dmitry Kardymon). - Улучшен разбор пути в clickhouse-keeper-client. #51359 (Azat Khuzhin).
- Сторонний продукт, зависящий от ClickHouse (Gluten: плагин, вдвое ускоряющий выполнение Spark SQL), содержал ошибку. Это исправление предотвращает переполнение кучи в этом стороннем продукте при чтении из HDFS. #51386 (李扬).
- Добавлена возможность отключать нативное копирование для S3 (настройка для BACKUP/RESTORE
allow_s3_native_copyиs3_allow_native_copyдля дисковs3/s3_plain). #51448 (Azat Khuzhin). - Добавлен столбец
primary_key_sizeв таблицуsystem.partsдля отображения сжатого размера первичного ключа на диске. Закрывает #51400. #51496 (Yarik Briukhovetskyi). - Разрешён запуск
clickhouse-localбез procfs, при отсутствии домашнего каталога и без плагинов разрешения имён из glibc. #51518 (Alexey Milovidov). - Добавлен плейсхолдер
%a, представляющий полное имя файла, в настройку rename_files_after_processing. #51603 (Kruglov Pavel). - Добавлен столбец
modification_timeв таблицуsystem.parts_columns. #51685 (Azat Khuzhin). - Добавлена новая настройка
input_format_csv_use_default_on_bad_valuesдля формата CSV, которая позволяет вставлять значение по умолчанию при ошибке парсинга отдельного поля. #51716 (KevinyhZou). - Добавлен сброс журнала сбоев на диск после непредвиденного сбоя. #51720 (Alexey Gerasimchuck).
- Исправлено поведение страницы дашборда, из-за которого ошибки, не связанные с аутентификацией, не отображались. Также исправлено поведение диаграммы с «перекрытием». #51744 (Zach Naimon).
- Добавлена возможность конвертации UUID в UInt128. #51765 (Dmitry Kardymon).
- Добавлена поддержка функции
rangeдля аргументов типа Nullable. #51767 (Dmitry Kardymon). - Условия вида
toyear(x) = cпреобразуются вc1 <= x < c2. #51795 (Han Fei). - Улучшена совместимость оператора
SHOW INDEXс MySQL. #51796 (Robert Schulze). - Исправлена проблема, из-за которой
use_structure_from_insertion_table_in_table_functionsне работала со столбцамиMATERIALIZEDиALIAS. Закрывает #51817. Закрывает #51019. #51825 (flynn). - Кэшируемый словарь теперь запрашивает у источника только уникальные ключи. Закрывает #51762. #51853 (Maksim Kita).
- Исправлена проблема, из-за которой настройки не применялись для запроса EXPLAIN при указании FORMAT. #51859 (Nikita Taranov).
- Добавлена возможность указывать SETTINGS перед FORMAT в запросе DESCRIBE TABLE для совместимости с запросами SELECT. Закрывает #51544. #51899 (Nikolay Degterinsky).
- Целые числа в кодировке Var-Int (например, используемые нативным протоколом) теперь могут использовать полный 64-битный диапазон. Сторонним клиентам рекомендуется обновить свою реализацию Var-Int соответствующим образом. #51905 (Robert Schulze).
- Сертификаты обновляются при их изменении, без необходимости вручную выполнять SYSTEM RELOAD CONFIG. #52030 (Mike Kot).
- Добавлена настройка
allow_create_index_without_type, которая позволяет игнорировать запросыADD INDEXбез указанногоTYPE. Стандартные SQL-запросы просто будут успешно выполняться без изменения схемы таблицы. #52056 (Ilya Yatsishin). - Сообщения лога записываются в
system.text_logс момента запуска сервера. #52113 (Dmitry Kardymon). - Если HTTP-эндпоинт резолвится в несколько IP-адресов и первый из них недоступен, возникало исключение по таймауту. Реализовано создание сессии с обработкой всех разрешённых адресов. #52116 (Aleksei Filatov).
- Входной формат Avro теперь поддерживает Union, даже если он содержит только один тип. Закрыта задача #52131. #52137 (flynn).
- Добавлена настройка
optimize_use_implicit_projectionsдля отключения неявных проекций (на данный момент — только проекцииmin_max_count). #52152 (Amos Bird). - Раньше можно было использовать функцию
hasTokenдля организации бесконечного цикла. Теперь такой сценарий недоступен. Это закрывает #52156. #52160 (Alexey Milovidov). - Оптимистично создавать родительские узлы ZK. #52195 (Raúl Marín).
- Исправление #50582. Позволяет избежать ошибки
Not found column ... in blockв некоторых случаях упорядоченного чтения и при работе с константами. #52259 (Chen768959). - Проверять геопримитивы S2 на некорректность как можно раньше на стороне ClickHouse. Это закрывает задачу: #27090. #52260 (Nikita Mikhaylov).
- Добавлена обратно отсутствовавшая проекция QueryAccessInfo при
query_plan_optimize_projection = 1. Исправляет #50183. Исправляет #50093. #52327 (Amos Bird). - Когда
ZooKeeperRetriesControlповторно пробрасывает исключение, полезнее видеть его исходный стек вызовов, а не тот, который относится к самомуZooKeeperRetriesControl. #52347 (Vitaly Baranov). - Ожидать блокировку репликации с нулевым копированием данных, даже если некоторые диски её не поддерживают. #52376 (Raúl Marín).
- Теперь межсерверный порт будет закрываться только после остановки таблиц. #52498 (alesapin).
Экспериментальная возможность
- Запись файлов parquet стала в 10 раз быстрее, теперь она многопоточная. Скорость почти такая же, как при чтении. #49367 (Michael Kolupaev). Это контролируется настройкой
output_format_parquet_use_custom_encoder, которая по умолчанию отключена, так как функциональность пока не идеальна. - Добавлена поддержка PRQL в качестве языка запросов. #50686 (János Benjamin Antal).
- Теперь можно задавать имя для настраиваемых дисков. Ранее настраиваемые диски использовали внутреннее автоматически сгенерированное имя. Теперь это можно сделать с помощью
disk = disk_<name>(...)(например, диск будет иметь имяname). #51552 (Kseniia Sumarokova). В этом релизе этот синтаксис может измениться. - (experimental MaterializedMySQL) Исправлен сбой при использовании
mysqlxx::Pool::Entryпосле отключения соединения. #52063 (Val Doroshchuk). - (experimental MaterializedMySQL)
CREATE TABLE ... AS SELECT.. теперь поддерживается в MaterializedMySQL. #52067 (Val Doroshchuk). - (experimental MaterializedMySQL) Введено автоматическое преобразование текстовых типов в utf8 для MaterializedMySQL. #52084 (Val Doroshchuk).
- (experimental MaterializedMySQL) Теперь в DDL для MaterializedMySQL поддерживаются строки UTF-8 без кавычек. #52318 (Val Doroshchuk).
- (experimental MaterializedMySQL) Теперь в MaterializedMySQL поддерживаются комментарии в двойных кавычках. #52355 (Val Doroshchuk).
- Обновлен Intel QPL с v1.1.0 до v1.2.0. 2. Обновлен Intel accel-config с v3.5 до v4.0. 3. Исправлена проблема, при которой промах Device IOTLB существенно снижал производительность ускорителей IAA. #52180 (jasperzhu).
- Настройка
session_timezone(новая в версии 23.6) переведена в разряд экспериментальных. #52445 (Alexey Milovidov). - Поддержка команды ZooKeeper
reconfigдля ClickHouse Keeper с инкрементальной реконфигурацией, которую можно включить с помощью настройкиkeeper_server.enable_reconfiguration. Поддерживается добавление серверов, удаление серверов и изменение приоритетов серверов. #49450 (Mike Kot). Предполагается, что эта функциональность реализована не полностью.
Улучшения сборки/тестирования/упаковки
- Добавлены экспериментальные сборки ClickHouse для Linux RISC-V 64 в CI. #31398 (Alexey Milovidov).
- Добавлена проверка интеграционных тестов при включённом Analyzer. #50926 #52210 (Dmitry Novik).
- Воспроизводимые сборки для Rust. #52395 (Azat Khuzhin).
- Обновлены зависимости Cargo. #51721 (Raúl Marín).
- Функция
CHColumnToArrowColumn::fillArrowArrayWithArrayColumnDataдоработана для работы с nullable-массивами, которые невозможны в ClickHouse, но нужны для Gluten. #52112 (李扬). - Мы обновили библиотеку CCTZ до актуального master, но изменений, заметных пользователям, нет. #52124 (Alexey Milovidov).
- Таблица
system.licensesтеперь включает библиотеку Poco, которая была жёстко форкнута. Это закрывает задачу #52066. #52127 (Alexey Milovidov). - Добавлена проверка на случаи некорректной пунктуации: пробел перед запятой, как в
Hello ,worldвместоHello, world. #52549 (Alexey Milovidov).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Исправлена
syncTablesвMaterializedPostgreSQL#49698 (Kseniia Sumarokova). - Исправлена работа PROJECTION с optimize_aggregators_of_group_by_keys #49709 (Amos Bird).
- Исправлено поведение optimize_skip_unused_shards при использовании JOIN #51037 (Azat Khuzhin).
- Исправлена работа функции formatDateTime() с отрицательными дробными значениями типа DateTime64 #51290 (Dmitry Kardymon).
- Функции
hasToken*работали полностью некорректно. Добавлен тест для #43358 #51378 (Alexey Milovidov). - Исправлена ошибка в оптимизации переноса функций перед сортировкой. #51481 (Nikolai Kochetov).
- Исправлено несоответствие структуры Block в Pipe::unitePipes при использовании FINAL #51492 (Nikita Taranov).
- Исправлен SIGSEGV для кластеров, у которых во всех сегментах нулевой вес (исправляет INSERT INTO FUNCTION clusterAllReplicas()) #51545 (Azat Khuzhin).
- Исправлен таймаут для хеджированных запросов #51582 (Azat Khuzhin).
- Исправлена логическая ошибка при ANTI JOIN с NULL-значениями #51601 (vdimir).
- Исправление проблемы с переносом условий 'IN' в PREWHERE #51610 (Alexander Gololobov).
- Не применять оптимизатор PredicateExpressionsOptimizer для соединений ASOF/ANTI #51633 (vdimir).
- Исправлена проблема с асинхронной вставкой с дедупликацией для ReplicatedMergeTree при использовании алгоритмов слияния #51676 (Antonio Andelic).
- Исправлена ошибка чтения из пустого столбца в
parseSipHashKey#51804 (Nikita Taranov). - Исправлена ошибка сегментации при создании недопустимой таблицы EmbeddedRocksdb #51847 (Duc Canh Le).
- Исправлены операции вставки в таблицы MongoDB #51876 (Nikolay Degterinsky).
- Исправлена взаимная блокировка при остановке DatabaseCatalog #51908 (Alexander Tokmakov).
- Исправлена ошибка в операторах подзапросов #51922 (Alexey Milovidov).
- Исправлено асинхронное подключение к хостам с несколькими IP-адресами #51934 (Kruglov Pavel).
- Не удалять входы после вызова ActionsDAG::merge #51947 (Nikolai Kochetov).
- Проверять
refcountвRemoveManyObjectStorageOperation::finalizeвместоexecute#51954 (vdimir). - Разрешены параметризуемые UDF #51964 (Alexey Milovidov).
- Небольшое исправление работы toDateTime64() с датами после 2283-12-31 #52130 (Andrey Zvonov).
- Исправлен ORDER BY для кортежа WINDOW-функций #52145 (Alexey Milovidov).
- Исправлен некорректный анализ проекций, когда агрегатное выражение содержит монотонные функции #52151 (Amos Bird).
- Исправлена ошибка в функциях
groupArrayMoving#52161 (Alexey Milovidov). - Отключено прямое соединение для диапазонных словарей #52187 (Duc Canh Le).
- Исправлен тест на «липкие» мутации (и крайне редкое состояние гонки) #52197 (alesapin).
- Устранена гонка в Web-диске #52211 (Kseniia Sumarokova).
- Исправлена гонка данных в
Connection::setAsyncCallback, возникавшая при обработке неизвестного пакета от сервера #52219 (Kruglov Pavel). - Исправлено удаление временных данных при запуске, добавлен тест #52275 (vdimir).
- Не используйте проекции minmax_count для подсчёта столбцов с типом Nullable #52297 (Amos Bird).
- MergeTree/ReplicatedMergeTree должны использовать часовой пояс сервера для записей в журнал #52325 (Azat Khuzhin).
- Исправлена работа параметризованного представления с CTE при многократном использовании #52328 (SmitaRKulkarni).
- Отключены шаблоны выражений для временных интервалов #52335 (Alexander Tokmakov).
- Исправлена функция
apply_snapshotв Keeper #52358 (Antonio Andelic). - Обновлён файл build-osx.md #52377 (AlexBykovski).
- Исправлено зависание
countSubstringsпри пустой подстрокеneedleи столбцовомhaystack#52409 (Sergei Trifonov). - Исправлена работа обычной проекции с таблицами Merge #52432 (Amos Bird).
- Исправлена потенциальная ошибка двойного освобождения памяти в Aggregator #52439 (Nikita Taranov).
- Исправлена ошибка вставки в движок Buffer #52440 (Vasily Nemkov).
- Реализация AnyHash не соответствовала спецификации. #52448 (Alexey Milovidov).
- Проверка глубины рекурсии в OptimizedRegularExpression #52451 (Alexey Milovidov).
- Исправлена гонка данных в методах DatabaseReplicated::startupTables()/canExecuteReplicatedMetadataAlter() #52490 (Azat Khuzhin).
- Исправлено аварийное завершение работы функции
transform#52513 (Alexey Milovidov). - Исправлена работа легковесного удаления после удаления проекции #52517 (Anton Popov).
- Исправлена возможная ошибка «Cannot drain connections: cancel first» #52585 (Pavel Kruglov).
Выпуск ClickHouse 23.6, 2023-06-29
Изменения, нарушающие обратную совместимость
- Удалена функциональность
do_not_evict_index_and_mark_filesв fs-кэше. Эта функциональность только ухудшала ситуацию. #51253 (Kseniia Sumarokova). - Удалена поддержка ALTER для экспериментального LIVE VIEW. #51287 (Alexey Milovidov).
- Значения по умолчанию для
http_max_field_value_sizeиhttp_max_field_name_sizeуменьшены до 128 KiB. #51163 (Mikhail f. Shiryaev). - Метрики CGroups, связанные с CPU, заменены одной метрикой
CGroupMaxCPUдля удобства использования. Метрики использования CPUNormalizedбудут нормализоваться по лимитам CGroups вместо общего количества CPU, когда они заданы. Это закрывает #50836. #50835 (Alexey Milovidov).
Новая возможность
- Функция
transform, а такжеCASEс сопоставлением по значению теперь поддерживают все типы данных, что закрывает задачи #29730, #32387, #50827, #31336 и #40493. #51351 (Alexey Milovidov). - Добавлена опция
--rename_files_after_processing <pattern>. Это закрывает задачу #34207. #49626 (alekseygolub). - Добавлена поддержка модификатора
TRUNCATEв предложенииINTO OUTFILE. Рекомендуется использоватьAPPENDилиTRUNCATEдляINTO OUTFILE, если файл уже существует. #50950 (alekar). - Добавлен движок таблицы
Redisи табличная функцияredis. Это позволяет выполнять запросы к внешним серверам Redis. #50150 (JackyWoo). - Добавлена возможность пропускать пустые файлы в табличных функциях
file/s3/url/hdfsс помощью настроекs3_skip_empty_files,hdfs_skip_empty_files,engine_file_skip_empty_files,engine_url_skip_empty_files. #50364 (Kruglov Pavel). - Добавлена новая настройка
use_mysql_types_in_show_columnsдля изменения SQL‑оператораSHOW COLUMNSтак, чтобы он отображал эквивалентные типы MySQL, когда клиент подключён через порт совместимости с MySQL. #49577 (Thomas Panetti). - Теперь
clickhouse-clientможно вызывать с помощью строки подключения вместо параметров "--host", "--port", "--user" и т. д. #50689 (Alexey Gerasimchuck). - Добавлена настройка
session_timezone; она используется как часовой пояс по умолчанию для сессии, если явно не указан другой. #44149 (Andrey Zvonov). - Кодек DEFLATE_QPL теперь управляется серверной настройкой "enable_deflate_qpl_codec" (по умолчанию: false) вместо настройки "allow_experimental_codecs". Это означает, что DEFLATE_QPL больше не считается экспериментальным. #50775 (Robert Schulze).
Повышение производительности
- Улучшено планирование задач выбора слияний и очистки в
ReplicatedMergeTree. Задачи не будут выполняться слишком часто, когда нет данных для слияния или очистки. Добавлены настройкиmax_merge_selecting_sleep_ms,merge_selecting_sleep_slowdown_factor,max_cleanup_delay_periodиcleanup_thread_preferred_points_per_iteration. Это должно закрыть #31919. #50107 (Alexander Tokmakov). - Реализовано проталкивание фильтра (filter push down) через CROSS JOIN. #50605 (Han Fei).
- Улучшена производительность при включённом QueryProfiler за счёт использования thread-local
timer_idвместо глобального объекта. #48778 (Jiebin Sun). - Переписан формат ввода/вывода CapnProto для улучшения его производительности. Имена столбцов и поля CapnProto сопоставляются без учёта регистра, исправлено чтение/запись полей вложенных структур. #49752 (Kruglov Pavel).
- Оптимизирована производительность записи Parquet для параллельных потоков. #50102 (Hongbin Ma).
- Отключён
parallelize_output_from_storagesдля обработки materialized view (MATERIALIZED VIEW) и хранилищ только с одним блоком. #50214 (Azat Khuzhin). - Влит PR #46558. Избегается перестановка блоков при сортировке, если блок уже отсортирован. #50697 (Alexey Milovidov, Maksim Kita).
- Выполнение нескольких запросов на получение списка (list requests) к ZooKeeper в параллель для ускорения чтения из таблицы system.zookeeper. #51042 (Alexander Gololobov).
- Ускорена инициализация lookup-таблиц DateTime для часовых поясов. Это должно сократить время запуска/подключения clickhouse-client, особенно в debug-сборке, так как она довольно тяжёлая. #51347 (Alexander Gololobov).
- Исправлено снижение производительности озёр данных из-за синхронных запросов HEAD (относящихся к медленной работе Iceberg/Deltalake/Hudi при большом количестве файлов). #50976 (Kseniia Sumarokova).
- Не выполняется чтение всех столбцов из правой таблицы GLOBAL JOIN. #50721 (Nikolai Kochetov).
Экспериментальная возможность
- Добавлена поддержка параллельных реплик в анализаторе. #50441 (Raúl Marín).
- Добавлена случайная пауза (
sleep) перед выполнением крупных слияний/мутаций, чтобы распределять нагрузку более равномерно между репликами в случае репликации без копирования. #51282 (alesapin). - Запросы
ALTER PARTITIONи мутации больше не реплицируются через базу данныхReplicated, если она содержит только один сегмент, а лежащая в основе таблица —ReplicatedMergeTree. #51049 (Alexander Tokmakov).
Улучшения
- Ослаблены пороговые значения для «слишком большого количества частей», чтобы соответствовать современным требованиям. Вернули backpressure для длительно выполняющихся запросов INSERT. #50856 (Alexey Milovidov).
- Добавлена возможность приводить IPv6-адрес к IPv4-адресу для CIDR ::ffff:0:0/96 (IPv4-mapped addresses). #49759 (Yakov Olkhovskiy).
- Обновлён протокол MongoDB, теперь поддерживаются версии MongoDB 5.1 и новее. Поддержка версий со старым протоколом (<3.6) сохранена. Закрыты #45621, #49879. #50061 (Nikolay Degterinsky).
- Добавлена настройка
input_format_max_bytes_to_read_for_schema_inferenceдля ограничения числа байт, считываемых при определении схемы. Закрывает #50577. #50592 (Kruglov Pavel). - При определении схемы учитывать настройку
input_format_null_as_default. #50602 (Kruglov Pavel). - Добавлена возможность пропускать завершающие пустые строки в форматах CSV/TSV/CustomSeparated с помощью настроек
input_format_csv_skip_trailing_empty_lines,input_format_tsv_skip_trailing_empty_linesиinput_format_custom_skip_trailing_empty_lines(по умолчанию отключено). Закрывает #49315. #50635 (Kruglov Pavel). - Функции «toDateOrDefault|OrNull» и «accuateCast[OrDefault|OrNull]» теперь корректно интерпретируют числовые аргументы. #50709 (Dmitry Kardymon).
- Добавлена поддержка CSV с разделителями полей — пробелом или
\t; эти разделители поддерживаются в Spark. #50712 (KevinyhZou). - Параметры
number_of_mutations_to_delayиnumber_of_mutations_to_throwтеперь по умолчанию включены со значениями 500 и 1000 соответственно. #50726 (Anton Popov). - Панель мониторинга корректно отображает отсутствующие значения. Исправление закрывает #50831. #50832 (Alexey Milovidov).
- Добавлена возможность использовать аргументы даты и времени в формате временной метки syslog в функциях
parseDateTimeBestEffort*иparseDateTime64BestEffort*. #50925 (Victor Krasnov). - Параметр командной строки «--password» для clickhouse-client теперь можно указывать только один раз. #50966 (Alexey Gerasimchuck).
- Используйте
hash_of_all_filesизsystem.partsдля проверки совпадения частей при кластерном резервном копировании. #50997 (Vitaly Baranov). - В системной таблице zookeeper_connection столбец connected_time показывает время установления соединения (в стандартном формате), а добавленный столбец session_uptime_elapsed_seconds отображает продолжительность сеанса установленного соединения (в секундах). #51026 (郭小龙).
- Улучшен индикатор прогресса для табличных функций file/s3/hdfs/url за счет использования размера фрагмента исходных данных и поэтапного подсчета общего объема данных в каждом потоке. Исправлен индикатор прогресса для функций *Cluster. Закрывает #47250. #51088 (Kruglov Pavel).
- Добавлен total_bytes_to_read в пакет Progress TCP-протокола для улучшения прогресс-бара. #51158 (Kruglov Pavel).
- Улучшена проверка частей данных на дисках с кэшем файловой системы. #51164 (Anton Popov).
- Исправлено иногда некорректное значение current_elements_num в кэше файловой системы. #51242 (Kseniia Sumarokova).
Улучшения сборки/тестирования/упаковки
- Во встроенный keeper добавлен встроенный keeper-client в отдельный исполняемый файл. #50964 (pufit).
- Теперь используется актуальная версия LZ4. #50621 (Nikita Taranov).
- Сервер ClickHouse будет выводить список изменённых настроек при возникновении фатальных ошибок. Это закрывает #51137. #51138 (Alexey Milovidov).
- Разрешена сборка ClickHouse с clang-17. #51300 (Alexey Milovidov).
- Проверка SQLancer считается стабильной, так как вызванные ею ошибки были исправлены. Теперь сбои проверки SQLancer будут отражаться как статус завершения проверки с ошибкой. #51340 (Ilya Yatsishin).
- Огромная команда
RUNв Dockerfile разделена на несколько меньших условных блоков. Необходимые инструменты устанавливаются по требованию в том же слоеRUNи затем удаляются. Обновление ОС выполняется только один раз в начале. Используется современный способ проверки подписанного репозитория. Базовый образ понижен до ubuntu:20.04 для устранения проблем в более старых версиях Docker. Обновлена версия Go для устранения уязвимостей Go. #51504 (Mikhail f. Shiryaev).
Исправление ошибки (заметное для пользователя некорректное поведение в официальном стабильном релизе)
- Корректно отображать статус загрузки исполняемых словарей #48775 (Anton Kozlov).
- Корректная обработка мутаций индексов пропуска и проекций #50104 (Amos Bird).
- Очистка логики перемещения частей #50489 (vdimir).
- Исправлена проблема с обратной совместимостью хеширования IP-типов в агрегатных функциях #50551 (Yakov Olkhovskiy).
- Исправлена ошибка, из-за которой таблица семейства Log возвращала неверное количество строк после операции TRUNCATE #50585 (flynn).
- Исправлена ошибка при параллельном слиянии
uniqExact#50590 (Nikita Taranov). - Откатили недавние изменения в grace hash join #50699 (vdimir).
- Query Cache: Попытка исправить некорректное приведение типов из
ColumnConstкColumnVector<char8_t>#50704 (Robert Schulze). - Исправлена ошибка, из-за которой в Keeper могли сохраняться логи с неизвестной операцией #50751 (Antonio Andelic).
- Поддержка DateTime64 в SummingMergeTree #50797 (Jordi Villar).
- Добавлена настройка совместимости с неконстантными часовыми поясами #50834 (Robert Schulze).
- Исправлено хеширование параметров LDAP в записях кэша #50865 (Julian Maicher).
- Резервный переход к разбору большого целого числа из String вместо генерации исключения в формате Parquet #50873 (Kruglov Pavel).
- Исправлена проблема слишком частой проверки файла блокировки при записи резервной копии #50889 (Vitaly Baranov).
- Не применять проекцию, если включен
read-in-order. #50923 (Nikolai Kochetov). - Устранена гонка состояний в итераторе Azure Blob Storage #50936 (SmitaRKulkarni).
- Исправлена ошибочная передача
sort_descriptionвCreatingSets#50955 (Nikita Taranov). - Исправлена обработка необязательных метаданных Iceberg v2 #50974 (Kseniia Sumarokova).
- MaterializedMySQL: сохранять скобки в пустых переопределениях таблиц #50977 (Val Doroshchuk).
- Исправлен сбой в BackupCoordinationStageSync::setError() #51012 (Vitaly Baranov).
- Исправлена слегка нарушенная реализация механизма copy-on-write для словаря ColumnLowCardinality #51064 (Michael Kolupaev).
- Генерировать безопасные векторы инициализации (IV) #51086 (Salvatore Mesoraca).
- Исправлена неэффективная работа кэша запросов для SELECT с подзапросами #51132 (Robert Schulze).
- Исправлена работа индекса Set при сравнении с константой типа Nullable. #51205 (Nikolai Kochetov).
- Исправлено падение в функциях s3 и s3Cluster #51209 (Nikolay Degterinsky).
- Исправлена ошибка, вызывавшая сбой при использовании скомпилированных выражений #51231 (LiuNeng).
- Исправлена ошибка типа use-after-free в StorageURL при переключении URL #51260 (Michael Kolupaev).
- Обновлена проверка для параметризованного представления #51272 (SmitaRKulkarni).
- Исправлена проблема с многократной записью одного и того же файла в резервную копию #51299 (Vitaly Baranov).
- Исправлен сбой фаззера в ActionsDAG #51301 (Alexey Milovidov).
- Из функции
transformудалён ненужный код #51350 (Alexey Milovidov).
Выпуск ClickHouse 23.5, 2023-06-08
Заметки по обновлению
- По умолчанию сжимаются метки и первичный ключ. Это значительно уменьшает время выполнения холодных запросов. Заметки по обновлению: поддержка сжатых меток и первичного ключа была добавлена в версии 22.9. Если вы включили сжатые метки или первичный ключ либо установили версию 23.5 или новее, где сжатые метки или первичный ключ включены по умолчанию, вы не сможете выполнить откат до версии 22.8 или более ранней. Вы также можете явно отключить сжатые метки или первичный ключ, указав настройки
compress_marksиcompress_primary_keyв секции<merge_tree>конфигурационного файла сервера. Заметки по обновлению: если вы обновляетесь с версий до 22.9, вам следует либо обновить все реплики одновременно, либо отключить сжатие перед обновлением, либо обновляться через промежуточную версию, в которой сжатые метки поддерживаются, но не включены по умолчанию, такую как 23.3. #42587 (Alexey Milovidov). - Обеспечена согласованная работа локального объектного хранилища с объектным хранилищем S3, исправлена проблема с добавлением (закрывает #48465), локальное хранилище можно настраивать как независимое. Изменение несовместимо с предыдущими версиями, поскольку кэш поверх локального объектного хранилища не совместим с ними. #48791 (Kseniia Sumarokova).
- Экспериментальная функция "in-memory data parts" удалена. Формат данных по‑прежнему поддерживается, но настройки ничего не делают, и вместо него будут использоваться компактные или широкие части. Это закрывает #45409. #49429 (Alexey Milovidov).
- Изменены значения по умолчанию настроек
parallelize_output_from_storagesиinput_format_parquet_preserve_order. Это позволяет ClickHouse изменять порядок строк при чтении из файлов (например, CSV или Parquet), что во многих случаях значительно улучшает производительность. Чтобы восстановить прежнее поведение с сохранением порядка, используйтеparallelize_output_from_storages = 0,input_format_parquet_preserve_order = 1. #49479 (Michael Kolupaev). - Проекции сделали готовыми к использованию в продакшене. Добавлена настройка
optimize_use_projectionsдля управления тем, будут ли проекции выбираться для SELECT-запросов. Настройкаallow_experimental_projection_optimizationустарела и больше ничего не делает. #49719 (Alexey Milovidov). - Пометить
joinGetкак недетерминированную (как иdictGet). Это позволяет использовать их в мутациях без дополнительной настройки. #49843 (Azat Khuzhin). - Отменить изменение "
groupArrayreturns cannot be nullable" (из‑за нарушения бинарной совместимости дляgroupArray/groupArrayLast/groupArraySampleнад типамиNullable, что, вероятнее всего, приведёт к ошибкамTOO_LARGE_ARRAY_SIZEилиCANNOT_READ_ALL_DATA). #49971 (Azat Khuzhin). - Настройка
enable_memory_bound_merging_of_aggregation_resultsвключена по умолчанию. Если вы обновляетесь с версии до 22.12, мы рекомендуем установить этот флаг вfalseдо завершения обновления. #50319 (Nikita Taranov).
Новая функциональность
- Добавлен движок хранения AzureBlobStorage и табличная функция azureBlobStorage. Поддерживаемый набор возможностей во многом аналогичен движку/табличной функции S3 [#50604] (https://github.com/ClickHouse/ClickHouse/pull/50604) (alesapin) (SmitaRKulkarni).
- Добавлен встроенный CLI-клиент ClickHouse Keeper; он доступен как команда
clickhouse keeper-client#47414 (pufit). - Добавлена табличная функция
urlCluster. Выполнен рефакторинг всех табличных функций *Cluster для уменьшения дублирования кода. Автоматический вывод схемы теперь работает для всех возможных сигнатур функций *Cluster и для именованных коллекций. Закрывает #38499. #45427 (attack204), Pavel Kruglov. - Кэш запросов теперь можно использовать в производственной среде. #47977 (Robert Schulze). Кэш запросов теперь поддерживает запросы с модификаторами totals и extremes. #48853 (Robert Schulze). Настройка
allow_experimental_query_cacheпомечена как устаревшая для обеспечения обратной совместимости. Она была удалена в https://github.com/ClickHouse/ClickHouse/pull/47977. #49934 (Timur Solodovников). - Географические типы данных (
Point,Ring,PolygonиMultiPolygon) готовы к промышленной эксплуатации. #50022 (Alexey Milovidov). - Добавлено автоматическое определение схемы для движков таблиц PostgreSQL, MySQL, MeiliSearch и SQLite. Закрывает #49972. #50000 (Nikolay Degterinsky).
- Тип пароля в запросах вида
CREATE USER u IDENTIFIED BY 'p'будет автоматически определён согласно настройкеdefault_password_typeвconfig.xmlна сервере. Закрывает #42915. #44674 (Nikolay Degterinsky). - Добавлен тип аутентификации пароля с использованием bcrypt. Закрывает #34599. #44905 (Nikolay Degterinsky).
- Добавлено новое ключевое слово
INTO OUTFILE 'file.txt' APPEND. #48880 (alekar). - Добавлена таблица
system.zookeeper_connection, которая показывает информацию о подключениях к Keeper. #45245 (mateng915). - Добавлена новая функция
generateRandomStructure, которая генерирует случайную структуру таблицы. Её можно использовать совместно с табличной функциейgenerateRandom. #47409 (Kruglov Pavel). - Разрешено использование
CASEбез веткиELSE, а также расширена функцияtransformдля работы с большим числом типов. Также исправлены некоторые проблемы, из-за которыхtransform()возвращал некорректные результаты при смешении десятичных типов с другими числовыми типами. #48300 (Salvatore Mesoraca). Закрывает #2655. Закрывает #9596. Закрывает #38666. - Добавлено шифрование на стороне сервера с использованием ключей KMS в таблицах S3 и добавлена настройка
headerдля дисков S3. Закрывает #48723. #48724 (Johann Gan). - Добавлен MemoryTracker для фоновых задач слияний и мутаций. Введены настройки
merges_mutations_memory_usage_soft_limitиmerges_mutations_memory_usage_to_ram_ratio, представляющие собой мягкий лимит памяти для слияний и мутаций. Если этот лимит достигнут, ClickHouse больше не будет планировать новые задачи слияния или мутации. Также добавлена метрикаMergesMutationsMemoryTracking, которая позволяет отслеживать текущее потребление памяти фоновыми задачами. Повторная отправка #46089. Закрывает #48774. #48787 (Dmitry Novik). - Функция
dotProductподдерживает массивы. #49050 (FFFFFFFHHHHHHH). - Добавлена поддержка оператора
SHOW INDEXдля повышения совместимости с MySQL. #49158 (Robert Schulze). - Добавлена поддержка виртуальных столбцов
_fileи_pathв табличной функцииurl. — Улучшено сообщение об ошибке для табличной функцииurl. — исправляет #49231 — исправляет #49232. #49356 (Ziyi Tan). - Добавлено поле
grantsв файл users.xml, позволяющее назначать привилегии пользователям. #49381 (pufit). - Добавлена поддержка операций FULL/RIGHT JOIN с использованием алгоритма Grace Hash Join. #49483 (lgbo).
- Модификатор
WITH FILLвыполняет заполнение, группируя его по префиксу сортировки. Управляется настройкойuse_with_fill_by_sorting_prefix(включена по умолчанию). Связано с #33203#issuecomment-1418736794. #49503 (Igor Nikonov). - Clickhouse-client теперь принимает запросы, указанные после "--multiquery", если не задан параметр "--query" (или "-q"). Пример: clickhouse-client --multiquery "select 1; select 2;". #49870 (Alexey Gerasimchuk).
- Добавлен отдельный параметр
handshake_timeoutдля получения пакета Hello от реплики. Закрывает #48854. #49948 (Kruglov Pavel). - Добавлена функция "space", которая возвращает строку, состоящую из заданного количества пробелов. #50103 (Robert Schulze).
- Добавлена опция --input_format_csv_trim_whitespaces. #50215 (Alexey Gerasimchuk).
- Разрешить функции
dictGetAllдля словарей-деревьев с регулярными выражениями возвращать значения для нескольких совпадений в виде массивов. Закрывает #50254. #50255 (Johann Gan). - Добавлена функция
toLastDayOfWeekдля округления даты или даты со временем до ближайшей субботы или воскресенья. #50315 (Victor Krasnov). - Возможность игнорировать индексы пропуска данных с помощью параметра
ignore_data_skipping_indices. #50329 (Boris Kuschel). - Добавлена таблица
system.user_processesи запросSHOW USER PROCESSESдля отображения информации о потреблении памяти и ProfileEvents на уровне пользователей. #50492 (János Benjamin Antal). - Добавлены серверные настройки и настройки форматов
display_secrets_in_show_and_selectдля отображения секретов таблиц, баз данных, табличных функций и словарей. Добавлена привилегияdisplaySecretsInShowAndSelect, контролирующая, какие пользователи могут просматривать секреты. #46528 (Mike Kot). - Добавлена возможность настраивать ROW POLICY для всех таблиц, принадлежащих DATABASE. #47640 (Ilya Golshtein).
Повышение производительности
- По умолчанию включено сжатие меток и первичного ключа. Это значительно сокращает время выполнения холодных запросов. Примечание по обновлению: поддержка сжатых меток и первичного ключа была добавлена в версии 22.9. Если вы включили сжатые метки или первичный ключ либо установили версию 23.5 или новее, в которой сжатые метки или первичный ключ включены по умолчанию, вы не сможете откатиться до версии 22.8 или более ранней. Вы также можете явно отключить сжатые метки или первичный ключ, указав настройки
compress_marksиcompress_primary_keyв разделе<merge_tree>файла конфигурации сервера. #42587 (Alexey Milovidov). - Новый параметр s3_max_inflight_parts_for_one_file задаёт ограничение на число одновременно загружаемых частей при multipart-загрузке одного файла. #49961 (Sema Checherinda).
- При чтении из нескольких файлов уменьшено количество потоков параллельного разбора для каждого файла. Исправлено #42192. #46661 (SmitaRKulkarni).
- Используйте агрегирующую PROJECTION только если при её использовании считывается меньше гранул, чем при обычном чтении. Это должно помочь в случае, когда запрос попадает по PK таблицы, но не по PROJECTION. Исправляет #49150. #49417 (Nikolai Kochetov).
- Не хранить блоки в хэш-соединении
ANY, если ничего не вставлено. #48633 (vdimir). - Исправлена работа агрегатного комбинатора
-Ifв режиме JIT-компиляции, а также включена JIT-компиляция для агрегатных функций. Закрывает #48120. #49083 (Igor Nikonov). - Для чтения из удалённых таблиц мы используем более мелкие задачи (вместо чтения всей части), чтобы механизм task stealing работал; размер задач определяется размером столбцов для чтения; для чтения из S3 всегда используются буферы размером 1 МБ; границы сегментов кэша выровнены по 1 МБ, чтобы они имели приемлемый размер даже при небольших задачах. Это также должно предотвратить фрагментацию. #49287 (Nikita Taranov).
- Добавлены настройки: -
merge_max_block_size_bytesдля ограничения объёма памяти, используемой фоновыми операциями. -vertical_merge_algorithm_min_bytes_to_activateчтобы задать дополнительное условие активации вертикальных слияний. #49313 (Nikita Mikhaylov). - Размер буфера чтения по умолчанию при работе с локальной файловой системой изменён на немного более оптимальное значение. Также добавлены две новые настройки:
max_read_buffer_size_local_fsиmax_read_buffer_size_remote_fs. #49321 (Nikita Taranov). - Улучшено использование памяти и скорость работы словарей
SPARSE_HASHED/HASHED(например,SPARSE_HASHEDтеперь потребляет в 2.6 раза меньше памяти и работает примерно в 2 раза быстрее). #49380 (Azat Khuzhin). - Оптимизированы таблицы
system.query_logиsystem.query_thread_logза счет использованияLowCardinalityтам, где это возможно. Запросы к этим таблицам будут выполняться быстрее. #49530 (Alexey Milovidov). - Улучшена производительность чтения локальных файлов
Parquet(за счёт параллельного чтения). #49539 (Michael Kolupaev). - Увеличена производительность
RIGHT/FULL JOINдо 2 раз в некоторых сценариях, особенно при соединении небольшой левой таблицы с большой правой таблицей. #49585 (lgbo). - Улучшена производительность BLAKE3 на 11% за счет включения LTO для Rust. #49600 (Azat Khuzhin). Теперь она сопоставима с реализацией на C++.
- Оптимизирована структура таблицы
system.opentelemetry_span_log. ИспользуйтеLowCardinality, где это уместно. Хотя эта таблица в целом довольно неудачная (она использует тип данных Map даже для общих атрибутов), так будет немного лучше. #49647 (Alexey Milovidov). - Теперь выполняется предварительное резервирование размера хеш-таблицы в соединении
grace_hash. #49816 (lgbo). - Параллельное слияние состояний
uniqExactIf. Закрывает #49885. #50285 (flynn). - Улучшение Keeper: добавлен запрос
CheckNotExistsв Keeper, который повышает производительность реплицируемых таблиц. #48897 (Antonio Andelic). - Улучшения производительности Keeper: избежать повторной сериализации одного и того же запроса при обработке. Кэшировать результаты десериализации больших запросов. Управляется новым параметром координации
min_request_size_for_cache. #49004 (Antonio Andelic). - Снижено количество запросов
Listк ZooKeeper при выборе частей для слияния, если многие партиции не содержат данных для слияния. #49637 (Alexander Tokmakov). - Переработан механизм блокировок кэша файловой системы #44985 (Kseniia Sumarokova).
- Отключает режим полностью параллельных реплик, если возможна тривиальная оптимизация
count. #50594 (Raúl Marín). - Не отправлять HEAD‑запрос для всех ключей при выводе схемы Iceberg, а только для ключей, которые используются для чтения данных. #50203 (Kruglov Pavel).
- Настройка
enable_memory_bound_merging_of_aggregation_resultsвключена по умолчанию. #50319 (Nikita Taranov).
Экспериментальная возможность
- Кодек
DEFLATE_QPLснижает минимальную требуемую версию SIMD до SSE 4.2. изменение документации в qpl – Intel® QPL использует диспетчер ядер, работающий во время выполнения, и проверку CPUID для выбора наилучшей доступной реализации (SSE/AVX2/AVX512); переработан CMake-файл для сборки qpl в ClickHouse в соответствии с последней версией upstream qpl. #49811 (jasperzhu). - Добавлена начальная поддержка выполнения JOIN с чисто параллельными репликами. #49544 (Raúl Marín).
- Больше параллелизма при удалении устаревших частей с использованием "zero-copy replication". #49630 (Alexander Tokmakov).
- Параллельные реплики: 1) Исправлена ошибка
NOT_FOUND_COLUMN_IN_BLOCKпри использовании параллельных реплик с нереплицируемым хранилищем и отключённой настройкойparallel_replicas_for_non_replicated_merge_tree. 2) Теперьallow_experimental_parallel_reading_from_replicasможет принимать 3 значения — 0, 1 и 2. 0 — отключено, 1 — включено, при сбое они тихо отключаются (в случае FINAL или JOIN), 2 — включено, при сбое выбрасывается исключение. 3) Если модификатор FINAL используется в запросе SELECT и параллельные реплики включены, ClickHouse попытается их отключить, еслиallow_experimental_parallel_reading_from_replicasустановлено в 1, и выбросит исключение в противном случае. #50195 (Nikita Mikhaylov). - Когда параллельные реплики включены, они всегда будут пропускать недоступные серверы (поведение контролируется настройкой
skip_unavailable_shards, которая по умолчанию включена и может быть только отключена). Это закрывает: #48565. #50293 (Nikita Mikhaylov).
Улучшения
- Команда
BACKUPне расшифровывает данные с зашифрованных дисков при создании резервной копии. Вместо этого данные сохраняются в резервной копии в зашифрованном виде. Такие резервные копии можно восстановить только на зашифрованный диск с тем же (или расширенным) списком ключей шифрования. #48896 (Vitaly Baranov). - Добавлена возможность использовать временные таблицы в предложении FROM операторов ATTACH PARTITION FROM и REPLACE PARTITION FROM. #49436 (Roman Vasin).
- Добавлена настройка
async_insertдля таблицMergeTree. Она имеет тот же смысл, что и настройка уровня запросаasync_insert, и включает асинхронные вставки для конкретной таблицы. Примечание: она не влияет на запросы вставки изclickhouse-client, в этом случае используйте настройку уровня запроса. #49122 (Anton Popov). - Добавлена поддержка суффиксов размера в параметрах оператора CREATE QUOTA. #49087 (Eridanus).
- Добавлена поддержка значения NULL в функциях
first_valueиlast_value. #46467 (lgbo). - Добавлены алиасы
str_to_mapиmapFromStringдляextractKeyValuePairs. Закрывает https://github.com/clickhouse/clickhouse/issues/47185. #49466 (flynn). - Добавлена поддержка CGroup версии 2 для асинхронных метрик по использованию и доступности памяти. Тем самым закрывается #37983. #45999 (sichenzhao).
- Табличные функции cluster теперь всегда пропускают недоступные сегменты; закрывает #46314. #46765 (zk_kiger).
- Разрешить пустые столбцы в заголовке CSV‑файла. #47496 (你不要过来啊).
- Добавлена табличная функция
gcsдля Google Cloud Storage, совместимого с S3. Как и функцииossиcosn, она является всего лишь псевдонимом для табличной функцииs3и не добавляет новых возможностей. #47815 (Kuba Kaflik). - Добавлена возможность использовать строгий размер частей для S3 (совместимость с хранилищем Cloudflare R2 S3). #48492 (Azat Khuzhin).
- Добавлены новые столбцы с информацией о репликах базы данных
Replicatedв таблицуsystem.clusters:database_shard_name,database_replica_name,is_active. Добавлено необязательное предложениеFROM SHARDк запросуSYSTEM DROP DATABASE REPLICA. #48548 (Alexander Tokmakov). - Добавлен новый столбец
zookeeper_nameв таблицу system.replicas, указывающий, в каком (дополнительном) кластере ZooKeeper хранятся метаданные реплицированной таблицы. #48549 (cangyin). - Оператор
INтеперь поддерживает сравнение значений типовDateиDate32. Закрывает #48736. #48806 (flynn). - Поддержка стирающих кодов в
HDFS, авторы: @M1eyu2018, @tomscut. #48833 (M1eyu). - Реализована команда
SYSTEM DROP REPLICAдля вспомогательных кластеров ZooKeeper, что может закрыть #48931. #48932 (wangxiaobo). - Добавлен тип данных Array для MongoDB. Закрывает #48598. #48983 (Nikolay Degterinsky).
- Добавлена поддержка хранения типов данных
Intervalв таблицах. #49085 (larryluogit). - Теперь можно использовать оконную функцию
ntileбез явного задания рамки окна:ntile(3) OVER (ORDER BY a), закрыта задача #46763. #49093 (vdimir). - Добавлены настройки (
number_of_mutations_to_delay,number_of_mutations_to_throw) для задержки или отклонения запросовALTER, которые создают мутации (ALTER UPDATE,ALTER DELETE,ALTER MODIFY COLUMN, ...), в случае, если в таблице уже есть много незавершённых мутаций. #49117 (Anton Popov). - Перехватывать исключение из
create_directoriesв файловом кэше. #49203 (Kseniia Sumarokova). - Копирует встроенные примеры в новое поле
exampleтаблицыsystem.functions, дополняя полеdescription. #49222 (Dan Roscigno). - Добавлены параметры подключения для словаря MongoDB. Пример:
xml <source> <mongodb> <host>localhost</host> <port>27017</port> <user></user> <password></password> <db>test</db> <collection>dictionary_source</collection> <options>ssl=true</options> </mongodb> </source>### Запись в документации об изменениях, заметных пользователям. #49225 (MikhailBurdukov). - Добавлен псевдоним
asymptoticдля вычислительного методаasympв функцииkolmogorovSmirnovTest. Улучшена документация. #49286 (Nikita Mikhaylov). - Агрегатные функции groupBitAnd/Or/Xor теперь работают с данными знаковых целочисленных типов. Это делает их поведение согласованным с поведением скалярных функций bitAnd/Or/Xor. #49292 (exmy).
- Документация по функциям разбита на более мелкие поля. #49300 (Robert Schulze).
- Используйте несколько потоков, общих для всех таблиц на сервере, для загрузки устаревших частей данных. Размер пула и его очереди управляется настройками
max_outdated_parts_loading_thread_pool_sizeиoutdated_part_loading_thread_pool_queue_size. #49317 (Nikita Mikhaylov). - Больше не завышается оценка размера обработанных данных для столбцов
LowCardinality, когда они используют общие словари между блоками. Это закрывает #49322. См. также #48745. #49323 (Alexey Milovidov). - Parquet writer теперь использует оптимальный размер группы строк при вызове через
OUTFILE. #49325 (Michael Kolupaev). - Разрешено использовать ограниченные ключевые слова, такие как
ARRAY, в качестве псевдонима, если он заключён в кавычки. Исправлена проблема #49324. #49360 (Nikolay Degterinsky). - Задачи загрузки и удаления частей данных были перенесены в общие серверные пулы вместо отдельных пулов для каждой таблицы. Размеры пулов управляются настройками
max_active_parts_loading_thread_pool_size,max_outdated_parts_loading_thread_pool_sizeиmax_parts_cleaning_thread_pool_sizeв конфигурации верхнего уровня. Настройки на уровне таблицыmax_part_loading_threadsиmax_part_removal_threadsпризнаны устаревшими. #49474 (Nikita Mikhaylov). - Разрешено использование
?password=passв URL-адресе интерфейса Play. Пароль подменяется в истории браузера. #49505 (Mike Kot). - Разрешено чтение объектов с нулевым размером из удалённых файловых систем (так как пустые файлы не попадают в резервную копию, в результате в файле метаданных могут оказаться блобы нулевого размера). Закрывает #49480. #49519 (Kseniia Sumarokova).
- Присоединять трекер памяти потока
MemoryTrackerкtotal_memory_trackerпосле отсоединенияThreadGroup. #49527 (Dmitry Novik). - Исправлена работа параметризованных представлений, когда параметр запроса используется несколько раз в запросе. #49556 (Azat Khuzhin).
- Освобождает память, выделенную под последний отправленный снимок ProfileEvents в рамках запроса. Продолжение #47564. #49561 (Dmitry Novik).
- Функция
makeDateтеперь поддерживает MySQL-совместимую перегрузку (аргументы: год и день года). #49603 (Robert Schulze). - Добавлена поддержка табличной функции
dictionaryдляRegExpTreeDictionary. #49666 (Han Fei). - Добавлена политика планирования ввода-вывода с взвешенным справедливым распределением. Добавлен динамический менеджер ресурсов, который позволяет обновлять иерархию планирования ввода-вывода во время работы без перезапуска сервера. #49671 (Sergei Trifonov).
- Добавлен запрос compose после multipart-загрузки в GCS. Это позволяет использовать операцию копирования для объектов, загруженных с помощью multipart-загрузки. Рекомендуется установить
s3_strict_upload_part_sizeв конкретное значение, потому что запрос compose может завершиться неудачей для объектов, собранных из частей разного размера. #49693 (Antonio Andelic). - Для функции
extractKeyValuePairs: улучшена логика парсинга по принципу «best effort», чтобы допускатьkey_value_delimiterкак часть значения. Это также упрощает ветвление и может немного ускорить работу. #49760 (Arthur Passos). - Добавлено поле
initial_query_idв system.processors_profile_log #49777 (helifu). - Теперь для таблиц системных журналов можно задавать пользовательские ключи сортировки. #49778 (helifu).
- Новое поле
partitionsвsystem.query_logиспользуется для указания, какие партиции участвуют в вычислениях. #49779 (helifu). - Добавлена настройка
enable_the_endpoint_id_with_zookeeper_name_prefixдляReplicatedMergeTree(по умолчанию отключена). При включении она добавляет имя кластера ZooKeeper к межсерверной точке взаимодействия таблицы. Это позволяет избежать ошибокDuplicate interserver IO endpointпри наличии реплицируемых таблиц с одинаковым путём, но разными вспомогательными кластерами ZooKeeper. #49780 (helifu). - Добавлена поддержка параметров запроса в
clickhouse-local. Закрывает #46561. #49785 (Nikolay Degterinsky). - Теперь по умолчанию разрешена загрузка словарей и функций из файлов YAML. В предыдущих версиях для этого требовалось отредактировать
dictionaries_configилиuser_defined_executable_functions_configв конфигурационном файле, так как они ожидали файлы*.xml. #49812 (Alexey Milovidov). - Движок таблицы Kafka теперь позволяет использовать столбцы-псевдонимы. #49824 (Aleksandr Musorin).
- Добавлена настройка, ограничивающая максимальное количество пар, создаваемых
extractKeyValuePairs, чтобы предотвратить чрезмерное потребление памяти. #49836 (Arthur Passos). - Добавлена поддержка (необычного) случая, когда аргументы оператора
IN— одноэлементные кортежи. #49844 (MikhailBurdukov). - Теперь функция
bitHammingDistanceподдерживает типы данныхStringиFixedString. Закрывает #48827. #49858 (flynn). - Исправлены ошибки сброса таймаутов в клиенте под OS X. #49863 (alekar).
- Добавлена поддержка больших целых чисел, таких, как UInt128, Int128, UInt256 и Int256, в функции
bitCount. Это позволяет вычислять расстояние Хэмминга над большими битовыми масками в AI-приложениях. #49867 (Alexey Milovidov). - Отпечатки, используемые вместо идентификаторов ключей в зашифрованных дисках. Это упрощает конфигурацию зашифрованных дисков. #49882 (Vitaly Baranov).
- Добавлен тип данных UUID для PostgreSQL. Закрывает #49739. #49894 (Nikolay Degterinsky).
- Функция
toUnixTimestampтеперь принимает аргументы типовDateиDate32. #49989 (Victor Krasnov). - Учитывать для словарей только память сервера. #49995 (Azat Khuzhin).
- Сервер будет допускать использование настроек
SQL_*, таких какSQL_AUTO_IS_NULL, которые не выполняют никаких действий (no-op), для совместимости с MySQL. Это закрывает задачу #49927. #50013 (Alexey Milovidov). - Сохранять initial_query_id для запросов ON CLUSTER, что полезно при интроспекции (при
distributed_ddl_entry_format_version=5). #50015 (Azat Khuzhin). - Сохранена обратная совместимость для переименованных настроек с помощью алиасов (
allow_experimental_projection_optimizationдляoptimize_use_projections,allow_experimental_lightweight_deleteдляenable_lightweight_delete). #50044 (Azat Khuzhin). - Добавлена поддержка передачи FQDN через настройку my_hostname, чтобы регистрировать узел кластера в Keeper. Добавлена настройка invisible для поддержки нескольких групп вычислительных ресурсов (compute groups). Группа вычислительных ресурсов как кластер невидима для других compute-групп. #50186 (Yangkuan Liu).
- Исправлена проблема в PostgreSQL: считывались все данные, даже если был указан
LIMIT n. #50187 (Kseniia Sumarokova). - Добавлены новые события профилирования для запросов с подзапросами (
QueriesWithSubqueries/SelectQueriesWithSubqueries/InsertQueriesWithSubqueries). #50204 (Azat Khuzhin). - Добавлено поле roles в файл users.xml, позволяющее задавать роли с грантами через конфигурационный файл. #50278 (pufit).
- Сообщать
CGroupCpuCfsPeriodиCGroupCpuCfsQuotaв AsynchronousMetrics. Учитывать ограничения памяти cgroup v2 во время запуска сервера. #50379 (alekar). - Добавлен обработчик сигнала SIGQUIT, работающий так же, как SIGINT. Закрыта задача #50298. #50435 (Nikolay Degterinsky).
- При ошибке разбора JSON, вызванной слишком большим размером объекта, выводить последнюю позицию для упрощения отладки. #50474 (Valentin Alexeev).
- Добавлена поддержка десятичных чисел переменного размера. Закрывает #49130. #50586 (Kruglov Pavel).
Улучшения в сборке, тестировании и упаковке
- Новый и улучшенный
keeper-bench. Всё можно настраивать из YAML/XML-файла: - генератор запросов — каждый тип генератора запросов может иметь свой набор полей - несколько запросов можно генерировать, просто описав то же самое под ключомmulti- для каждого запроса или подзапроса вmultiможно задать полеweightдля управления распределением - можно задать деревья, которые нужно подготовить для тестового прогона - хосты можно определять с полностью настраиваемыми таймаутами; можно управлять количеством сессий, создаваемых для каждого хоста - целые числа, заданные полямиmin_valueиmax_value, являются генераторами случайных чисел. #48547 (Antonio Andelic). - Io_uring не поддерживается на macOS, не выбирайте его при локальном запуске тестов, чтобы избежать случайных сбоев. #49250 (Frank Chen).
- Добавлена поддержка именованного внедрения сбоев для тестирования. #49361 (Han Fei).
- Теперь можно запускать ClickHouse в операционных системах, где системный вызов
prctl(process control) недоступен, например в AWS Lambda. #49538 (Alexey Milovidov). - Исправлен конфликт при сборке между contrib/isa-l и isa-l в qpl 49296. #49584 (jasperzhu).
- Утилиты теперь собираются только при явном указании параметра ("-DENABLE_UTILS=1"), а не по умолчанию, что уменьшает время компоновки в типичных сборках для разработки. #49620 (Robert Schulze).
- Вынесено описание сборки idxd-config в отдельный файл CMake, чтобы избежать его случайного удаления в будущем. #49651 (jasperzhu).
- Добавлена проверка CI с включённым анализатором в ветке master. Продолжение #49562. #49668 (Dmitry Novik).
- Переход на LLVM/clang 16. #49678 (Azat Khuzhin).
- Добавлена возможность сборки ClickHouse с помощью clang-17. #49851 (Alexey Milovidov). #50410 (Alexey Milovidov).
- ClickHouse теперь проще интегрировать в другие CMake-проекты. #49991 (Amos Bird). (Что настоятельно не рекомендуется — Alexey Milovidov).
- Исправлено странное дополнительное логирование QEMU после #47151, см. https://s3.amazonaws.com/clickhouse-test-reports/50078/a4743996ee4f3583884d07bcd6501df0cfdaa346/stateless_tests__release__databasereplicated__[3_4].html. #50442 (Mikhail f. Shiryaev).
- В ClickHouse добавлена поддержка Linux RISC-V 6.1.22. Что закрывает #50456. #50457 (Alexey Milovidov).
- Обновлена внутренняя библиотека protobuf до v3.18 (исправляет ошибочно обозначенную уязвимость CVE-2022-1941). #50400 (Robert Schulze).
- Обновлена внутренняя версия libxml2 до v2.10.4 (исправляет ошибочно заявленные уязвимости CVE-2023-28484 и CVE-2023-29469). #50402 (Robert Schulze).
- Обновлён c-ares до версии v1.19.1 (фиктивные CVE-2023-32067, CVE-2023-31130, CVE-2023-31147). #50403 (Robert Schulze).
- Исправлена ошибочная запись об уязвимости CVE-2022-2469 в libgsasl. #50404 (Robert Schulze).
Исправление ошибки (ошибочное поведение, заметное пользователям, в официальном стабильном релизе)
- ActionsDAG: исправлена ошибочная оптимизация #47584 (Salvatore Mesoraca).
- Корректная обработка параллельных снимков в Keeper #48466 (Antonio Andelic).
- MergeTreeMarksLoader теперь содержит DataPart вместо DataPartStorage #48515 (SmitaRKulkarni).
- Исправление состояния последовательности #48603 (Ilya Golshtein).
- Проверка конкурентного выполнения BACKUP/RESTORE с учётом предыдущих неудачных запусков #48726 (SmitaRKulkarni).
- Исправлена ошибка: при присоединении таблицы с несуществующим путем в ZK метрика ReadonlyReplica больше не увеличивается #48954 (wangxiaobo).
- Исправлена возможная ситуация вызова
terminateиз-за неперехваченного исключения в некоторых местах #49112 (Kruglov Pavel). - Исправлена ошибка «key not found» для запросов с несколькими StorageJoin #49137 (vdimir).
- Исправлен ошибочный результат запроса при использовании первичного ключа Nullable #49172 (Duc Canh Le).
- Исправлена работа функций reinterpretAs*() на машинах с порядком байт big-endian #49198 (Suzy Wang).
- (Экспериментальная репликация zero-copy) Более атомарная блокировка частей zero-copy #49211 (alesapin).
- Исправлена гонка состояний при загрузке устаревших частей #49223 (Alexander Tokmakov).
- Исправлена ошибка, из-за которой при всех значениях ключей
nullи использовании группировки сrollupвозвращался неверный результат #49282 (Shuai li). - Исправлено вычисление load_factor для HASHED-словарей с сегментами #49319 (Azat Khuzhin).
- Запрещена настройка кодеков сжатия для столбцов‑псевдонимов #49363 (Timur Solodовников).
- Исправлена ошибка при удалении существующего каталога парта #49365 (alesapin).
- Исправлена работа GCS при использовании HMAC #49390 (Antonio Andelic).
- Исправлена ошибка фаззинга, при которой Set подзапроса не создаётся при чтении из remote() #49425 (Alexander Gololobov).
- Инвертирован
shutdown_wait_unfinished_queries#49427 (Konstantin Bogdanov). - (Экспериментальная zero-copy репликация) Исправлена ещё одна ошибка zero-copy #49473 (alesapin).
- Исправлена настройка базы данных Postgres #49481 (Mal Curtis).
- Исправлена обработка аргументов
s3Cluster#49490 (Antonio Andelic). - Исправлена ошибка в деструкторе
TraceCollector. #49508 (Yakov Olkhovskiy). - Исправлена проблема, из-за которой AsynchronousReadIndirectBufferFromRemoteFS ломался при коротких операциях seek #49525 (Michael Kolupaev).
- Исправлен порядок загрузки словарей #49560 (Alexander Tokmakov).
- Запрещено изменять тип данных столбца Object('json') #49563 (Nikolay Degterinsky).
- Исправлен стресс‑тест (Logical error: Expected 7134 >= 11030) #49623 (Kseniia Sumarokova).
- Исправлена ошибка в DISTINCT #49628 (Alexey Milovidov).
- Исправлено: DISTINCT при использовании сортировки с нулевыми значениями в столбцах, не участвующих в сортировке #49636 (Igor Nikonov).
- Исправлена ошибка на единицу в больших целых числах, обнаруженная UBSan при фаззинге #49645 (Alexey Milovidov).
- Исправлено чтение из разреженных столбцов после перезапуска #49660 (Anton Popov).
- Исправлена проверка assert в SpanHolder::finish() при использовании файберов #49673 (Kruglov Pavel).
- Исправлены функции с коротким замыканием и мутации с разрежёнными аргументами #49716 (Anton Popov).
- Исправлена ошибка записи добавленных файлов в инкрементные бэкапы #49725 (Vitaly Baranov).
- Исправлена ошибка "There is no physical column _row_exists in table", возникающая при выполнении мутации легковесного удаления над таблицей со столбцом типа Object. #49737 (Alexander Gololobov).
- Исправлена проблема с msan в randomStringUTF8(нечётное число) #49750 (Robert Schulze).
- Исправлена агрегатная функция kolmogorovSmirnovTest #49768 (FFFFFFFHHHHHHH).
- Исправлены алиасы настроек в нативном протоколе #49776 (Azat Khuzhin).
- Исправлена работа
arrayMapс массивом кортежей из одного элемента #49789 (Anton Popov). - Исправлены настройки троттлинга IO/BACKUP на уровне запроса #49797 (Azat Khuzhin).
- Исправлена установка значения NULL в определении профиля #49831 (Vitaly Baranov).
- Исправлена ошибка при работе с проекциями и настройкой aggregate_functions_null_for_empty (для query_plan_optimize_projection) #49873 (Amos Bird).
- Исправлена обработка ожидающего пакета для асинхронного
INSERTв таблицуDistributedпосле перезапуска #49884 (Azat Khuzhin). - Исправлена проверка assert в CacheMetadata::doCleanup #49914 (Kseniia Sumarokova).
- исправлен
is_prefixв OptimizeRegularExpression #49919 (Han Fei). - Исправлены метрики
WriteBufferFromS3Bytes,WriteBufferFromS3MicrosecondsиWriteBufferFromS3RequestsErrors#49930 (Aleksandr Musorin). - Исправлена ошибка кодирования IPv6 в protobuf #49933 (Yakov Olkhovskiy).
- Исправлена возможная логическая ошибка при некорректной обработке Nullable в текстовых форматах #49960 (Kruglov Pavel).
- Добавлена настройка output_format_parquet_compliant_nested_types для создания файлов Parquet с лучшей совместимостью #50001 (Michael Kolupaev).
- Исправлена логическая ошибка в стресс‑тесте "Not enough space to add ..." #50021 (Kseniia Sumarokova).
- Устранена взаимоблокировка, возникавшая при запуске таблицы в потоке attach движка
ReplicatedMergeTree#50026 (Antonio Andelic). - Исправлен assert в SpanHolder::finish() при использовании fibers, попытка 2 #50034 (Kruglov Pavel).
- Добавлено корректное экранирование при сериализации контекста OpenTelemetry в DDL #50045 (Azat Khuzhin).
- Исправлено сообщение о повреждённых частях PROJECTION #50052 (Amos Bird).
- Исправление JIT-компиляции операции not equals для NaN #50056 (Maksim Kita).
- Исправлен сбой при использовании базы данных Replicated без аргументов #50058 (Azat Khuzhin).
- Исправлена ошибка, приводившая к сбою при использовании
multiIfс константным условием и Nullable-аргументами #50123 (Anton Popov). - Исправлен некорректный анализ индекса для ключей, связанных с датами #50153 (Amos Bird).
- не разрешать изменять ORDER BY, если нет столбцов ORDER BY #50154 (Han Fei).
- Исправлен некорректный анализ индекса, если бинарный оператор содержит константный аргумент NULL #50177 (Amos Bird).
- clickhouse-client: запрещено использовать
--queryи--queries-fileодновременно #50210 (Alexey Gerasimchuk). - Исправлено неопределённое поведение (UB) в расширениях INTO OUTFILE (APPEND / AND STDOUT) и WATCH EVENTS #50216 (Azat Khuzhin).
- Исправлено игнорирование пробелов в конце строки в формате CustomSeparatedIgnoreSpaces #50224 (Kruglov Pavel).
- Исправлена обработка метаданных Iceberg #50232 (Kseniia Sumarokova).
- Исправлена ошибка во вложенном распределённом SELECT в предложении WITH #50234 (Azat Khuzhin).
- Исправлена проблема MSan в keyed siphash #50245 (Robert Schulze).
- Исправлены ошибки в сокетах Poco в неблокирующем режиме, теперь используются по-настоящему неблокирующие сокеты #50252 (Kruglov Pavel).
- Исправлено вычисление контрольной суммы для записей резервной копии #50264 (Vitaly Baranov).
- Исправление обработки NaN в функциях сравнения #50287 (Maksim Kita).
- Исправление ошибки с Nullable-ключом в JIT-агрегации #50291 (Maksim Kita).
- Исправлена ошибка, из-за которой clickhouse-local аварийно завершался при записи пустого вывода Arrow или Parquet #50328 (Michael Kolupaev).
- Исправлена ошибка, приводившая к аварийному завершению работы при вызове Pool::Entry::disconnect() #50334 (Val Doroshchuk).
- Улучшена операция fetch part за счёт более длительного удержания блокировки каталога #50339 (SmitaRKulkarni).
- Исправлены функции bitShift* при использовании обоих аргументов как констант #50343 (Kruglov Pavel).
- Исправлена взаимоблокировка в Keeper при возникновении исключения во время предварительной обработки запросов. #50387 (frinkr).
- Исправлено хеширование целочисленных констант #50421 (Robert Schulze).
- Исправлена работа параметров
merge_tree_min_rows_for_seekиmerge_tree_min_bytes_for_seekдля индексов пропуска данных #50432 (Azat Khuzhin). - Ограничено количество одновременно выполняющихся задач по загрузке устаревших частей #50450 (Nikita Mikhaylov).
- Исправление Keeper: применять незакоммиченное состояние после установки снимка #50483 (Antonio Andelic).
- Исправлено неправильное свёртывание констант #50536 (Alexey Milovidov).
- Исправлена логическая ошибка в стресс‑тесте (Not enough space to add ...) #50583 (Kseniia Sumarokova).
- Исправлено преобразование Null в LowCardinality(Nullable) при использовании табличной функции values #50637 (Kruglov Pavel).
- Откатили некорректную оптимизацию RegExpTreeDictionary #50642 (Johann Gan).
Выпуск ClickHouse 23.4, 2023-04-26
Обратные несовместимые изменения
- Форматтер
%Mв функцииformatDateTime()теперь выводит название месяца вместо минут. Это делает поведение согласованным с MySQL. Предыдущее поведение можно восстановить с помощью настройкиformatdatetime_parsedatetime_m_is_month_name = 0. #47246 (Robert Schulze). - Это изменение имеет смысл только в том случае, если вы используете кэш виртуальной файловой системы. Если
pathв конфигурации кэша виртуальной файловой системы не пустой и не является абсолютным путём, то он будет размещён в<clickhouse server data directory>/caches/<path_from_cache_config>. #48784 (Kseniia Sumarokova). - Первичные/вторичные индексы и ключи сортировки с идентичными выражениями теперь отклоняются. Это поведение можно отключить с помощью настройки
allow_suspicious_indices. #48536 (凌涛).
Новые возможности
- Добавлена поддержка новой агрегатной функции
quantileGK/quantilesGK, аналогичной функции approx_percentile в Spark. Алгоритм Гринвальда–Ханны описан в статье http://infolab.stanford.edu/~datar/courses/cs361a/papers/quantiles.pdf. #46428 (李扬). - Добавлен оператор
SHOW COLUMNS, который выводит сводную информацию из system.columns. #48017 (Robert Schulze). - Добавлены модификаторы
LIGHTWEIGHTиPULLдля запросаSYSTEM SYNC REPLICA. ВерсияLIGHTWEIGHTожидает только завершения загрузок и drop-ranges (слияния и мутации игнорируются). ВерсияPULLзагружает новые записи из ZooKeeper и не ждёт их обработки. Исправляет #47794. #48085 (Alexander Tokmakov). - Добавлена функция
kafkaMurmurHashдля обеспечения совместимости с Kafka DefaultPartitioner. Закрывает #47834. #48185 (Nikolay Degterinsky). - Теперь можно легко создать пользователя с теми же правами, что и у текущего пользователя, с помощью
GRANT CURRENT GRANTS. #48262 (pufit). - Добавлена статистическая агрегатная функция
kolmogorovSmirnovTest. Закрыта задача #48228. #48325 (FFFFFFFHHHHHHH). - В таблицу
system.replicasдобавлен столбецlost_part_count. Значение столбца показывает общее количество потерянных частей в соответствующей таблице. Значение хранится в ZooKeeper и может использоваться вместо неперсистентного события профилированияReplicatedDataLossдля мониторинга. #48526 (Sergei Trifonov). - Добавлена функция
soundexдля совместимости. Закрывает #39880. #48567 (FriendLey). - Добавлена поддержка типа
Mapв JSONExtract. #48629 (李扬). - Добавлен формат
PrettyJSONEachRowдля вывода читабельного JSON с разделением строк и отступами в 4 пробела. #48898 (Kruglov Pavel). - Добавлен формат входных данных
ParquetMetadataдля чтения метаданных файлов Parquet. #48911 (Kruglov Pavel). - Добавлена функция
extractKeyValuePairsдля извлечения пар ключ–значение из строк. Входные строки могут содержать шум (например, файлы логов / не обязаны быть на 100% отформатированы в виде пар ключ–значение), алгоритм будет искать пары ключ–значение, соответствующие переданным в функцию аргументам. В настоящее время функция принимает следующие аргументы:data_column(обязательный),key_value_pair_delimiter(по умолчанию:),pair_delimiters(по умолчанию\space \, \;) иquoting_character(по умолчанию двойные кавычки). #43606 (Arthur Passos). - Функции replaceOne(), replaceAll(), replaceRegexpOne() и replaceRegexpAll() теперь могут вызываться с неконстантными аргументами шаблона и замены. #46589 (Robert Schulze).
- Добавлены функции для работы со столбцами типа
Map:mapConcat,mapSort,mapExists. #48071 (Anton Popov).
Улучшение производительности
- Чтение файлов в формате
Parquetтеперь значительно быстрее. IO и декодирование выполняются параллельно (управляется настройкойmax_threads), и читаются только необходимые диапазоны данных. #47964 (Michael Kolupaev). - Если мы запускаем мутацию с IN (подзапросом) следующего вида:
ALTER TABLE t UPDATE col='new value' WHERE id IN (SELECT id FROM huge_table)и таблицаtсостоит из нескольких частей, то для каждой части в памяти строится set для подзапросаSELECT id FROM huge_table. При большом количестве частей это может потреблять много памяти (и приводить к OOM) и процессорного времени. Решение — ввести краткоживущий кеш set-ов, которые в данный момент строятся задачами мутации. Если другая задача той же мутации выполняется параллельно, она может найти set в кеше, дождаться окончания его построения и повторно использовать его. #46835 (Alexander Gololobov). - Проверять зависимости только при необходимости при применении запросов
ALTER TABLE. #48062 (Raúl Marín). - Оптимизирована функция
mapUpdate. #48118 (Anton Popov). - Теперь внутренний запрос к локальной реплике отправляется явно, а данные из него принимаются через loopback-интерфейс. Настройка
prefer_localhost_replicaне учитывается для параллельных реплик. Это необходимо для более эффективного планирования и делает код чище: инициатор отвечает только за координацию процесса чтения и слияние результатов, постоянно обрабатывая запросы, в то время как все вторичные запросы читают данные. Замечание: использование loopback-интерфейса само по себе менее эффективно по производительности, но без него некоторые реплики могли бы оставаться без задач, что привело бы к ещё более медленному выполнению запроса и неиспользованию всех доступных ресурсов. Инициализация координатора теперь ещё более отложенная. Все входящие запросы содержат информацию об алгоритме чтения, и мы инициализируем координатор с этим алгоритмом при поступлении первого запроса. Если какая-либо реплика решит читать с другим алгоритмом — будет выброшено исключение и запрос будет прерван. #48246 (Nikita Mikhaylov). - Не строить set для правой части
INс подзапросом, когда он используется только для анализа пропускающих индексов, и они отключены настройкой (use_skip_indexes=0). Ранее это могло отрицательно влиять на производительность запросов. #48299 (Anton Popov). - Обработка запроса параллелизуется сразу после чтения
FROM file(...). Связано с #38755. #48525 (Igor Nikonov). Обработка запроса параллелизуется сразу после чтения из любого источника данных. Затронутые источники данных — в основном простые или внешние хранилища, такие как табличные функцииurl,file. #48727 (Igor Nikonov). Это контролируется настройкойparallelize_output_from_storages, которая по умолчанию отключена. - Снижена конкуренция за мьютекс в ThreadPool (может повысить производительность при огромном количестве маленьких задач). #48750 (Sergei Trifonov).
- Снижено потребление памяти для нескольких мутаций
ALTER DELETE. #48522 (Nikolai Kochetov). - Удалены избыточные попытки подключения, если включена настройка
skip_unavailable_shards. #48771 (Azat Khuzhin).
Экспериментальная функциональность
- Записи в кэше запросов теперь агрегируются до
max_block_sizeи сжимаются. #45912 (Robert Schulze). - Теперь можно задавать квоты на пользователя в кэше запросов. #48284 (Robert Schulze).
- Исправлены некоторые проблемы с параллельными репликами. #48433 (Nikita Mikhaylov).
- Реализована zero-copy-replication (экспериментальная функциональность) на зашифрованных дисках. #48741 (Vitaly Baranov).
Улучшения
- Увеличено значение по умолчанию для
connect_timeout_with_failover_msдо 1000 мс (в связи с добавлением асинхронных подключений в https://github.com/ClickHouse/ClickHouse/pull/47229). Закрывает #5188. #49009 (Kruglov Pavel). - Несколько улучшений, связанных с озерами данных: - Обеспечена работа
Icebergс данными без партиций. - Добавлена поддержка форматаIcebergверсии v2 (ранее поддерживалась только v1). - Добавлена поддержка чтения данных, разбитых на партиции, дляDeltaLake/Hudi. - Ускорено чтение метаданныхDeltaLakeза счёт использования checkpoint-файлов Delta. - Исправлено некорректное чтениеHudi: ранее неправильно выбирались данные для чтения, и поэтому корректно обрабатывались только таблицы небольшого размера. - Эти движки теперь подхватывают обновления изменённых данных (ранее состояние фиксировалось при создании таблицы). - Настроено корректное тестированиеIceberg/DeltaLake/Hudiс использованием Spark. #47307 (Kseniia Sumarokova). - Добавлено асинхронное подключение к сокету и асинхронная запись в сокет. Установка соединений и отправка запроса/внешних таблиц по сегментам сделаны асинхронными. Рефакторинг кода с использованием fibers. Закрывает #46931. После этого PR мы сможем по умолчанию увеличить
connect_timeout_with_failover_ms(https://github.com/ClickHouse/ClickHouse/issues/5188). #47229 (Kruglov Pavel). - Добавлена поддержка секций конфигурации
keeper/keeper_serverв качестве альтернативыzookeeper. Закрыты #34766, #34767. #35113 (李扬). - Теперь можно задавать флаг secure в named_collections для словаря с источником в таблице ClickHouse. Исправляет #38450. #46323 (Ilya Golshtein).
- Функция
bitCountподдерживает типы данныхFixedStringиString. #49044 (flynn). - Добавлены настраиваемые повторные попытки для всех операций с [Zoo]Keeper при выполнении запросов BACKUP. #47224 (Nikita Mikhaylov).
- Включить
use_environment_credentialsдля S3 по умолчанию, так чтобы по умолчанию строилась вся цепочка провайдеров. #47397 (Antonio Andelic). - В настоящее время функция JSON_VALUE во многом аналогична функции Spark get_json_object, которая позволяет получать значение из JSON-строки по пути вида '$.key'. Однако есть отличия: 1) в Spark get_json_object будет возвращено null, если путь не существует, тогда как JSON_VALUE вернёт пустую строку; 2) в Spark get_json_object может быть возвращено значение сложного типа, например объект/массив JSON, тогда как JSON_VALUE в таком случае вернёт пустую строку. #47494 (KevinyhZou).
- Для
use_structure_from_insertion_table_in_table_functionsобеспечено более гибкое распространение структуры таблицы-вставки на табличную функцию. Исправлена проблема с сопоставлением имён и использованием виртуальных столбцов. Больше нет необходимости в настройке 'auto'. #47962 (Yakov Olkhovskiy). - Не продолжать попытки переподключения к Keeper, если запрос был отменён или превысил лимиты. #47985 (Raúl Marín).
- Добавлена поддержка ввода/вывода Enum в
BSONEachRow, разрешены все типы ключей Map и устранены лишние вычисления при выводе. #48122 (Kruglov Pavel). - Поддерживаются дополнительные типы ClickHouse в форматах
ORC/Arrow/Parquet: Enum(8|16), (U)Int(128|256), Decimal256 (для ORC), добавлена возможность чтения IPv4 из значений Int32 (ORC выводит IPv4 как Int32, и мы не могли прочитать его обратно), исправлено чтение Nullable(IPv6) из двоичных данных дляORC. #48126 (Kruglov Pavel). - Добавлены столбцы
perform_ttl_move_on_insert,load_balancingв таблицуsystem.storage_policies, изменён тип столбцаvolume_typeнаEnum8. #48167 (lizhuoyu5). - Добавлена поддержка команды
BACKUP ALL, которая выполняет резервное копирование всех таблиц и баз данных, включая временные и системные. #48189 (Vitaly Baranov). - Функция mapFromArrays поддерживает тип
Mapв качестве входного параметра. #48207 (李扬). - Результат выполнения некоторых команд
SHOW PROCESSLISTтеперь сортируется. #48241 (Robert Schulze). - Ограничение пропускной способности на уровне запроса и сервера для remote IO/local IO/операций BACKUP (серверные настройки:
max_remote_read_network_bandwidth_for_server,max_remote_write_network_bandwidth_for_server,max_local_read_bandwidth_for_server,max_local_write_bandwidth_for_server,max_backup_bandwidth_for_server; настройки:max_remote_read_network_bandwidth,max_remote_write_network_bandwidth,max_local_read_bandwidth,max_local_write_bandwidth,max_backup_bandwidth). #48242 (Azat Khuzhin). - Поддержка дополнительных типов в формате
CapnProto: Map, (U)Int(128|256), Decimal(128|256). Разрешены целочисленные преобразования при вводе и выводе. #48257 (Kruglov Pavel). - Не выбрасывать исключение CURRENT_WRITE_BUFFER_IS_EXHAUSTED при штатной работе. #48288 (Raúl Marín).
- Добавлена новая настройка
keeper_map_strict_mode, которая обеспечивает дополнительные гарантии для операций, выполняемых с таблицамиKeeperMap. #48293 (Antonio Andelic). - Проверяется, что тип первичного ключа для простого словаря — нативный беззнаковый целочисленный тип. Добавлена настройка
check_dictionary_primary_keyдля совместимости (установитеcheck_dictionary_primary_key = false, чтобы отключить проверку). #48335 (lizhuoyu5). - Не реплицируйте мутации для
KeeperMap, поскольку в этом нет необходимости. #48354 (Antonio Andelic). - Добавлена возможность записи и чтения безымянного кортежа как вложенного сообщения Message в формате Protobuf. Элементы кортежа и поля сообщения сопоставляются по порядку. #48390 (Kruglov Pavel).
- Добавлена поддержка настроек
additional_table_filtersиadditional_result_filterв новом планировщике. Также добавлен раздел документации дляadditional_result_filter. #48405 (Dmitry Novik). parseDateTimeтеперь поддерживает спецификатор формата '%f' (дробные секунды). #48420 (Robert Schulze).- Спецификатор формата "%f" в formatDateTime() теперь выводит "000000", если у форматируемого значения нет дробных секунд; предыдущее поведение (один ноль) можно восстановить с помощью настройки "formatdatetime_f_prints_single_zero = 1". #48422 (Robert Schulze).
- Не реплицировать операции DELETE и TRUNCATE для KeeperMap. #48434 (Antonio Andelic).
- Генерировать корректные значения типов Decimal и Bool в функции generateRandom. #48436 (Kruglov Pavel).
- Разрешено использование завершающих запятых в списке выражений запроса SELECT, например
SELECT a, b, c, FROM table. Закрывает #37802. #48438 (Nikolay Degterinsky). - Переменные окружения
CLICKHOUSE_USERиCLICKHOUSE_PASSWORDтеперь переопределяются клиентскими параметрами--userи--password. Закрывает #38909. #48440 (Nikolay Degterinsky). - Добавлены повторные попытки загрузки частей данных в таблицах
MergeTreeпри возникновении повторяемых ошибок. #48442 (Anton Popov). - Добавлена поддержка типов данных
Date,Date32,DateTime,DateTime64в функцияхarrayMin,arrayMax,arrayDifference. Закрыта задача #21645. #48445 (Nikolay Degterinsky). - Добавлена поддержка макроса
{server_uuid}. Он полезен для идентификации реплик в кластерах с автоматическим масштабированием, когда новые реплики постоянно добавляются и удаляются во время работы. Тем самым закрыта #48554. #48563 (Alexey Milovidov). - Теперь скрипт установки создаёт жёсткую ссылку вместо копирования, когда это возможно. #48578 (Alexey Milovidov).
- Добавлена поддержка синтаксиса
SHOW TABLE, эквивалентногоSHOW CREATE TABLE. Закрывает #48580. #48591 (flynn). - Временные буферы HTTP теперь могут работать, вытесняя данные из кэша виртуальной файловой системы. #48664 (Vladimir C).
- Добавлена поддержка автоматического вывода схемы для
CREATE AS SELECT. Закрывает #47599. #48679 (flynn). - Добавлена настройка
replicated_max_mutations_in_one_entryдляReplicatedMergeTree, которая позволяет ограничить количество команд мутации в одной записиMUTATE_PART(значение по умолчанию — 10000). #48731 (Alexander Tokmakov). - В типах AggregateFunction не учитывать неиспользованные байты арены при вычислении
read_bytes. #48745 (Raúl Marín). - Исправлена ситуация, при которой некоторые параметры MySQL не обрабатывались при использовании источника словаря MySQL и именованной коллекции. Закрывает #48402. #48759 (Kseniia Sumarokova).
- Если пользователь задаёт
max_single_part_upload_sizeслишком большим, это может привести к аварийному завершению работы из-за ошибки в AWS S3 SDK. Это исправление решает проблему #47679. #48816 (Alexey Milovidov). - Устранена гонка данных в
RabbitMQ(отчёт), выполнен рефакторинг кода. #48845 (Kseniia Sumarokova). - Добавлены псевдонимы
nameиpart_nameв таблицахsystem.partsиsystem.part_log. Закрыта задача #48718. #48850 (sichenzhao). - Функции "arrayDifferenceSupport()", "arrayCumSum()" и "arrayCumSumNonNegative()" теперь поддерживают входные массивы целочисленных типов расширенной разрядности (U)Int128/256. #48866 (cluster).
- Многострочная история в clickhouse-client больше не выравнивается пробелами. Это делает вставку более естественной. #48870 (Joanna Hulboj).
- Реализовано небольшое улучшение для редкого случая, когда ClickHouse запускается внутри LXC и используется LXCFS. В LXCFS есть проблема: иногда при чтении файла внутри
/procон возвращает ошибку «Transport endpoint is not connected». Эта ошибка корректно записывалась в серверный журнал ClickHouse. Дополнительно реализован обходной путь для этой проблемы: файл повторно открывается. Это минимальное изменение. #48922 (Real). - Улучшен учет памяти для предвыборки. В CI настройки предвыборки случайным образом варьируются. #48973 (Kseniia Sumarokova).
- Теперь заголовки для нативных операций копирования в GCS устанавливаются корректно. #48981 (Antonio Andelic).
- Добавлена поддержка указания имен настроек в командной строке с использованием дефисов вместо символов подчеркивания, например,
--max-threadsвместо--max_threads. Также добавлена поддержка символов дефиса Unicode, таких как—вместо--— это полезно, когда вы взаимодействуете с командой в другой компании, и менеджер из этой команды просто скопировал код из MS Word и вставил его. #48985 (alekseygolub). - Добавлен переход на аутентификацию по паролю при сбое аутентификации по пользовательскому SSL-сертификату. Закрывает #48974. #48989 (Nikolay Degterinsky).
- Улучшена встроенная панель мониторинга. Закрыт #46671. #49036 (Kevin Zhang).
- Добавлены события профилирования для лог-сообщений, чтобы можно было легко увидеть их количество по уровням серьёзности. #49042 (Alexey Milovidov).
- В предыдущих версиях формат
LineAsStringработал непоследовательно при включённом или выключенном параллельном разборе при наличии переводов строк формата DOS или macOS Classic. Исправляет #49039. #49052 (Alexey Milovidov). - Сообщение об исключении о неразобранном параметре запроса теперь также будет содержать имя параметра. Реализовать повторно #48878. Закрыть #48772. #49061 (Alexey Milovidov).
Улучшения сборки/тестирования/упаковки
- Обновлены часовые пояса. Были обновлены следующие зоны: Africa/Cairo, Africa/Casablanca, Africa/El_Aaiun, America/Bogota, America/Cambridge_Bay, America/Ciudad_Juarez, America/Godthab, America/Inuvik, America/Iqaluit, America/Nuuk, America/Ojinaga, America/Pangnirtung, America/Rankin_Inlet, America/Resolute, America/Whitehorse, America/Yellowknife, Asia/Gaza, Asia/Hebron, Asia/Kuala_Lumpur, Asia/Singapore, Canada/Yukon, Egypt, Europe/Kirov, Europe/Volgograd, Singapore. #48572 (Alexey Milovidov).
- Уменьшено количество зависимостей в заголовочных файлах для ускорения сборки. #47984 (Dmitry Novik).
- Сжатие меток и индексов в тестах сделано случайным образом. #48286 (Alexey Milovidov).
- Обновлён внутренний ZSTD с версии 1.5.4 до 1.5.5. #46797 (Robert Schulze).
- Вертикальные слияния из компактных в широкие части в тестах сделаны случайными. #48287 (Raúl Marín).
- Добавлена поддержка контрольной суммы CRC32 в HDFS. Исправлены проблемы с производительностью. #48614 (Alexey Milovidov).
- Удалены оставшиеся элементы поддержки GCC. #48671 (Robert Schulze).
- Добавлен запуск CI с включённой новой инфраструктурой анализатора. #48719 (Dmitry Novik).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Исправлен
system.query_views_logдля материализованных представлений, запускаемых фоновыми потоками #46668 (Azat Khuzhin). - Исправлены несколько ошибок, связанных с
RENAME COLUMN#46946 (alesapin). - Исправлены небольшие проблемы подсветки синтаксиса в clickhouse-format #47610 (Natasha Murashkina).
- Исправлена ошибка в libc++ из LLVM, приводившая к сбою при загрузке в S3 частей, размер которых превышает INT_MAX #47693 (Azat Khuzhin).
- Исправлено переполнение в функции
sparkbar#48121 (Vladimir C). - Исправлено состояние гонки в S3 #48190 (Anton Popov).
- Отключить JIT для агрегатных функций из-за непоследовательного поведения #48195 (Alexey Milovidov).
- Небольшие исправления форматирования ALTER #48289 (Natasha Murashkina).
- Исправлено использование CPU в RabbitMQ (которое увеличилось в 23.2 после #44404) #48311 (Kseniia Sumarokova).
- Исправлено падение в EXPLAIN PIPELINE для Merge over Distributed #48320 (Azat Khuzhin).
- Исправлена проблема с сериализацией LowCardinality в виде словаря Arrow #48361 (Kruglov Pavel).
- Сброс загрузчика сегмента файла кэша в TemporaryFileStream #48386 (Vladimir C).
- Исправлено возможное зависание SYSTEM SYNC REPLICA при выполнении DROP/REPLACE PARTITION #48391 (Azat Khuzhin).
- Исправлена ошибка запуска при загрузке distributed таблицы, зависящей от словаря #48419 (MikhailBurdukov).
- Не проверять зависимости при автоматическом переименовании системных таблиц #48431 (Raúl Marín).
- Обновлять только затронутые изменениями строки в хранилище KeeperMap #48435 (Antonio Andelic).
- Исправлена возможная ошибка сегментации памяти в кэше VFS #48469 (Kseniia Sumarokova).
- Функция
toTimeZoneвызывает ошибку, если не передана строковая константа #48471 (Jordi Villar). - Исправлена логическая ошибка с IPv4 в Protobuf, добавлена поддержка Date32 #48486 (Kruglov Pavel).
- Флаг "changed" в system.settings вычислялся некорректно для параметров с несколькими значениями #48516 (MikhailBurdukov).
- Исправлена работа хранилища
Memoryпри включённом сжатии #48517 (Anton Popov). - Исправлена работа режима bracketed paste, из‑за которого искажался ввод пароля при переподключении клиента #48528 (Michael Kolupaev).
- Исправлен вложенный тип Map для ключей типов IP и UUID #48556 (Yakov Olkhovskiy).
- Исправлено необработанное исключение при использовании параллельного загрузчика для хешированных словарей #48571 (Azat Khuzhin).
- Агрегатная функция
groupArrayкорректно работает для пустого результата над типами Nullable #48593 (lgbo). - Исправлена ошибка в Keeper, из-за которой иногда узел создавался без схемы
authв ACL. #48595 (Aleksei Filatov). - Разрешены операторы сравнения IPv4 с UInt #48611 (Yakov Olkhovskiy).
- Исправлена возможная ошибка, связанная с кэшем #48636 (Kseniia Sumarokova).
- Асинхронные вставки с пустыми данными больше не будут приводить к возникновению исключения. #48663 (Anton Popov).
- Исправлена обработка зависимостей таблиц в случае неудачного выполнения операции RENAME TABLE #48683 (Azat Khuzhin).
- Если первичный ключ содержит повторяющиеся столбцы (что возможно только для проекций PROJECTION), в предыдущих версиях это могло приводить к ошибке #48838 (Amos Bird).
- Исправление состояния гонки в ZooKeeper при присоединении потоков send_thread и receive_thread #48849 (Alexander Gololobov).
- Исправлена ошибка «unexpected part name» при попытке удалить игнорируемую отсоединённую part при zero copy репликации #48862 (Michael Lex).
- Исправлена ошибка, из-за которой столбец
Date32из Parquet/Arrow считывался как столбец другого типа #48864 (Kruglov Pavel). - Исправлена ошибка
UNKNOWN_IDENTIFIERпри выполнении SELECT из таблицы с ROW POLICY и столбцом, имя которого содержит точки #48976 (Kruglov Pavel). - Исправлена агрегация по пустым строкам Nullable #48999 (LiuNeng).
Выпуск ClickHouse 23.3 LTS, 2023-03-30
Заметки по обновлению
- Легковесные удаления (Lightweight DELETE) готовы для промышленного использования и включены по умолчанию. Запрос
DELETEдля таблиц MergeTree теперь доступен по умолчанию. - Поведение функций
*domain*RFCиnetlocнемного изменено: расширен набор символов, разрешённых в части authority URL, для лучшего соответствия стандартам. #46841 (Azat Khuzhin). - Запрещено создание таблиц с движком KafkaEngine с использованием конструкций DEFAULT/EPHEMERAL/ALIAS/MATERIALIZED для столбцов. #47138 (Aleksandr Musorin).
- Удалена функция "asynchronous connection drain". Связанные настройки и метрики также удалены. Это была внутренняя функция, поэтому её удаление не должно повлиять на пользователей, которые никогда о ней не слышали. #47486 (Alexander Tokmakov).
- Добавлена поддержка 256-битного типа данных Decimal (более 38 цифр) в
arraySum/Min/Max/Avg/Product,arrayCumSum/CumSumNonNegative,arrayDifference, конструировании массивов, операторе IN, параметрах запроса,groupArrayMovingSum, статистических функциях,min/max/any/argMin/argMax, протоколе взаимодействия PostgreSQL (wire protocol), движке таблиц MySQL и одноимённой функции,sumMap,mapAdd,mapSubtract,arrayIntersect. Добавлена поддержка больших целых чисел вarrayIntersect. Статистические агрегатные функции, использующие моменты (например,corrили различныеTTest), будут использоватьFloat64в качестве внутреннего представления (ранее использовалсяDecimal128, но это было бессмысленно), и эти функции могут возвращатьnanвместоinfв случае бесконечной дисперсии. Некоторые функции были разрешены для типов данныхDecimal256, но возвращалиDecimal128в предыдущих версиях — теперь это исправлено. Это закрывает #47569. Это закрывает #44864. Это закрывает #28335. #47594 (Alexey Milovidov). - Настройки backup_threads/restore_threads переведены в разряд серверных (вместо пользовательских). #47881 (Azat Khuzhin).
- Запрещено использование константных и недетерминированных вторичных индексов. #46839 (Anton Popov).
Новая функциональность
- Добавлен новый режим распределения работы между репликами с помощью настроек
parallel_replicas_custom_keyиparallel_replicas_custom_key_filter_type. Если кластер состоит из одного сегмента с несколькими репликами, доmax_parallel_replicasреплик будут случайным образом выбраны и логически превращены в сегменты. Для каждого такого сегмента соответствующий фильтр добавляется к запросу на стороне инициатора перед отправкой в сегмент. Если кластер состоит из нескольких сегментов, поведение будет таким же, как уsample_key, но с возможностью задать произвольный ключ. #45108 (Antonio Andelic). - Опция отображения частичного результата при отмене: Добавлена настройка запроса
partial_result_on_first_cancel, позволяющая отменённому запросу (например, из-за Ctrl-C) возвращать частичный результат. #45689 (Alexey Perevyshin). - Добавлена поддержка любых движков таблиц для временных таблиц (за исключением движков Replicated и KeeperMap). Закрыта задача #31497. #46071 (Roman Vasin).
- Добавлена поддержка репликации определяемых пользователем SQL-функций с использованием централизованного хранилища в Keeper. #46085 (Aleksei Filatov).
- Реализована таблица
system.server_settings(аналогичнаяsystem.settings), содержащая настройки сервера. #46550 (pufit). - Добавлена поддержка запроса
UNDROP TABLE. Закрывает #46811. #47241 (chen). - Разрешены отдельные гранты для именованных коллекций (например, чтобы можно было дать доступ
SHOW/CREATE/ALTER/DROP named collectionтолько к определённым коллекциям, а не ко всем сразу). Закрывает #40894. Добавлен новый тип доступаNAMED_COLLECTION_CONTROL, который по умолчанию не выдаётся пользователю, если явно не добавлен в его конфигурацию (требуется для возможности выполнитьGRANT ALL); такжеshow_named_collectionsбольше не обязательно указывать вручную для пользователя по умолчанию, чтобы он имел полный набор прав доступа, как это было в 23.2. #46241 (Kseniia Sumarokova). - Добавлена поддержка вложенных пользовательских дисков. Ранее пользовательские диски поддерживали только плоскую структуру. #47106 (Kseniia Sumarokova).
- Добавлена функция
widthBucket(с алиасомWIDTH_BUCKETдля совместимости). #42974. #46790 (avoiderboi). - Добавлены новые функции
parseDateTime/parseDateTimeInJodaSyntaxдля работы с указанной строкой формата.parseDateTimeпреобразует String в DateTime в синтаксисе MySQL,parseDateTimeInJodaSyntaxвыполняет разбор в синтаксисе Joda. #46815 (李扬). - Используется
dummy UInt8в качестве структуры по умолчанию для табличной функцииnull. Закрывает #46930. #47006 (flynn). - Добавлена поддержка формата даты с запятой, например
Dec 15, 2021, в функцииparseDateTimeBestEffort. Закрывает #46816. #47071 (chen). - Добавлены настройки
http_wait_end_of_queryиhttp_response_buffer_size, соответствующие параметрам URLwait_end_of_queryиbuffer_sizeдля HTTP-интерфейса. Это позволяет изменять эти настройки в профилях. #47108 (Vladimir C). - Добавлена таблица
system.dropped_tables, которая показывает таблицы, удалённые из баз данных типаAtomic, но ещё не окончательно удалённые. #47364 (chen). - Добавлен
INSTRкак псевдоним функцииpositionCaseInsensitiveдля совместимости с MySQL. Закрывает #47529. #47535 (flynn). - Добавлена функция
toDecimalString, позволяющая преобразовывать числа в строковое представление с фиксированной точностью. #47838 (Andrey Zvonov). - Добавлена настройка MergeTree
max_number_of_mutations_for_replica. Она ограничивает количество мутаций частей на одну реплику указанным значением. Ноль означает отсутствие ограничения на количество мутаций на реплику (выполнение по‑прежнему может ограничиваться другими настройками). #48047 (Vladimir C). - Добавлена функция для работы с типом
Map—mapFromArrays, которая позволяет создать отображение из пары массивов. #31125 (李扬). - Добавлено управление сжатием в форматах вывода Parquet/ORC/Arrow, а также поддержка большего числа входных форматов сжатия. Это исправляет #13541. #47114 (Kruglov Pavel).
- Добавлена аутентификация с использованием пользовательских SSL-сертификатов для нативного протокола. Закрывает #47077. #47596 (Nikolay Degterinsky).
- Добавлены варианты функций *OrNull() и *OrZero() для
parseDateTime, а также псевдонимstr_to_dateдля совместимости с MySQL. #48000 (Robert Schulze). - Добавлен оператор
REGEXP(по аналогии с операторами "LIKE", "IN", "MOD" и т. д.) для улучшения совместимости с MySQL #47869 (Robert Schulze).
Повышение производительности
- Метки в памяти теперь хранятся в сжатом виде, что позволяет использовать в 3–6 раз меньше памяти. #47290 (Michael Kolupaev).
- Резервное копирование для очень большого числа файлов в предыдущих версиях было невероятно медленным. Теперь — нет. Теперь оно невероятно быстрое. #47251 (Alexey Milovidov). Добавлен отдельный пул потоков для операций ввода-вывода (I/O) при резервном копировании. Это позволит масштабировать его независимо от других пулов и повысить производительность. #47174 (Nikita Mikhaylov). Теперь для сбора метаданных на финальной стадии обработки резервного копирования используются запрос MultiRead и повторные попытки. #47243 (Nikita Mikhaylov). Если и резервная копия, и восстанавливаемые данные находятся в S3, то теперь должно использоваться серверное копирование. #47546 (Vitaly Baranov).
- Исправлено избыточное считывание данных в запросах с
FINAL. #47801 (Nikita Taranov). - Параметр
max_final_threadsавтоматически устанавливается в значение, равное числу ядер, при запуске сервера (по тому же алгоритму, что используется дляmax_threads). Это улучшает параллелизм выполненияfinalна серверах с большим числом процессорных ядер. #47915 (Nikita Taranov). - Добавлена возможность выполнять конвейер чтения для словаря DIRECT с источником CLICKHOUSE в нескольких потоках. Чтобы включить, установите
dictionary_use_async_executor=1в секцииSETTINGSдля источника в оператореCREATE DICTIONARY. #47986 (Vladimir C). - Оптимизирована производительность агрегации с одним ключом типа Nullable. #45772 (LiuNeng).
- Реализовано использование индекса
tokenbf_v1в нижнем регистре в функцияхhasTokenOrNull,hasTokenCaseInsensitiveиhasTokenCaseInsensitiveOrNull. #46252 (ltrk2). - Оптимизированы функции
positionиLIKEпутём поиска первых двух символов с использованием SIMD. #46289 (Jiebin Sun). - Оптимизированы запросы к
system.detached_parts, которые могут быть существенно большими по объёму. Добавлено несколько источников чтения с учётом ограничения на размер блока; в каждом блоке используется пул потоков ввода-вывода для расчёта размера части, то есть для параллельного выполнения системных вызовов. #46624 (Sema Checherinda). - Увеличено значение по умолчанию параметра
max_replicated_merges_in_queueдля таблиц ReplicatedMergeTree с 16 до 1000. Это позволяет ускорить выполнение фоновых операций слияния в кластерах с очень большим количеством реплик, например в кластерах с общим хранилищем в ClickHouse Cloud. #47050 (Alexey Milovidov). - Обновлён
clickhouse-copier, чтобы использоватьGROUP BYвместоDISTINCTпри получении списка партиций. Для больших таблиц это сократило время выполнения SELECT с более чем 500 с до менее чем 1 с. #47386 (Clayton McClure). - Исправлена деградация производительности в
ASOF JOIN. #47544 (Ongkong). - Ещё больше пакетной обработки в Keeper. Повышена производительность за счёт того, что при запросах на чтение пакеты больше не разбиваются. #47978 (Antonio Andelic).
- Разрешено использовать PREWHERE для Merge при различных выражениях DEFAULT для столбцов. #46831 (Azat Khuzhin).
Экспериментальная возможность
- Параллельные реплики: повышена общая производительность за счет более эффективного использования локальной реплики и по умолчанию запрещено чтение с параллельными репликами из нереплицируемых таблиц MergeTree. #47858 (Nikita Mikhaylov).
- Поддержка проталкивания фильтра (filter push down) в левую таблицу для JOIN с таблицами
Join,DictionaryиEmbeddedRocksDB, если включен экспериментальный Analyzer. #47280 (Maksim Kita). - Теперь ReplicatedMergeTree с репликацией zero copy создает меньшую нагрузку на Keeper. #47676 (alesapin).
- Исправлена ошибка при создании materialized view с MaterializedPostgreSQL. #40807 (Maksim Buren).
Улучшения
- Параметр
input_format_json_ignore_unknown_keys_in_named_tupleвключён по умолчанию. #46742 (Kruglov Pavel). - Разрешено игнорировать ошибки при записи в MATERIALIZED VIEW (добавлена новая настройка
materialized_views_ignore_errors, по умолчанию —false, но для безусловного сброса логов в таблицыsystem.*_logона установлена в значениеtrue). #46658 (Azat Khuzhin). - Отслеживание файловой очереди распределённых отправок в памяти. #45491 (Azat Khuzhin).
- Теперь заголовки
X-ClickHouse-Query-IdиX-ClickHouse-Timezoneдобавляются в ответы для всех запросов по протоколу HTTP. Ранее это делалось только для запросовSELECT. #46364 (Anton Popov). - Внешние таблицы из
MongoDB: добавлена поддержка подключения к набору реплик (replica set) по URI с перечнем хостов и портов (host:port), а также поддержка опции readPreference в словарях MongoDB. Пример URI: mongodb://db0.example.com:27017,db1.example.com:27017,db2.example.com:27017/?replicaSet=myRepl&readPreference=primary. #46524 (artem-yadr). - Это улучшение должно быть незаметным для вас. Перереализован анализ PROJECTION поверх плана запроса. Добавлена настройка
query_plan_optimize_projection=1для переключения между старой и новой версиями. Исправлена проблема #44963. #46537 (Nikolai Kochetov). - По умолчанию в качестве выходного формата используется Parquet v2 вместо v1. Добавлена настройка
output_format_parquet_versionдля управления версией Parquet, возможные значения:1.0,2.4,2.6,2.latest(по умолчанию). #46617 (Kruglov Pavel). - Теперь можно использовать новый синтаксис конфигурации для настройки топиков Kafka с точками (
.) в их именах. #46752 (Robert Schulze). - Исправлены эвристики, которые проверяют шаблоны Hyperscan на наличие проблемных повторов. #46819 (Robert Schulze).
- Не записывать в system.errors о существовании узла ZK, если блок был одновременно создан другой репликой. #46820 (Raúl Marín).
- Увеличен лимит на количество открытых файлов в
clickhouse-local. Теперь он сможет читать из таблицwebна серверах с очень большим количеством ядер CPU. Чтение из движка таблиц URL больше не прекращается при слишком большом количестве открытых файлов. Исправляет #46852. #46853 (Alexey Milovidov). - Исключения, возникающие при ошибке разбора чисел, теперь содержат более понятный текст сообщения. #46917 (Robert Schulze).
- Добавлено обновление таблицы
system.backupsпосле каждой обработанной задачи для отслеживания прогресса создания резервных копий. #46989 (Aleksandr Musorin). - Разрешено преобразование типов во входном формате Native. Добавлена настройка
input_format_native_allow_types_conversion, которая управляет этой возможностью (включена по умолчанию). #46990 (Kruglov Pavel). - Разрешить использование IPv4 в функции
rangeдля генерации диапазонов IP-адресов. #46995 (Yakov Olkhovskiy). - Улучшено сообщение об исключении, возникающем, если невозможно переместить часть с одного тома/диска на другой. #47032 (alesapin).
- Добавлена поддержка типа
Boolв функцииJSONType. Ранее для булевых значений по ошибке возвращался типNull. #47046 (Anton Popov). - Используйте параметр
_request_bodyдля настройки заранее определённых HTTP-запросов. #47086 (Constantine Peresypkin). - Автоматическое добавление отступа во встроенном UI SQL-редакторе при нажатии Enter. #47113 (Alexey Korepanov).
- При самораспаковке под управлением 'sudo' будет предпринята попытка установить uid и gid распакованных файлов на значения текущего пользователя. #47116 (Yakov Olkhovskiy).
- Ранее второй аргумент функции
repeatпринимал только значения типа беззнакового целого числа, поэтому нельзя было передавать, например, -1. Это поведение отличалось от поведения одноимённой функции в Spark. В этом обновлении функцияrepeatбыла изменена, чтобы соответствовать поведению функции в Spark: теперь она принимает те же типы входных данных, включая отрицательные целые числа. Для проверки корректности обновлённой реализации было проведено обширное тестирование. #47134 (KevinyhZou). Примечание: этот пункт журнала изменений был переписан с помощью ChatGPT. - Удалена часть
::__1из стек-трейсов.std::basic_string<char, ...теперь отображается какStringв стек-трейсах. #47171 (Mike Kot). - Пере реализован межсерверный режим для предотвращения атак повторного воспроизведения (обратите внимание, что это изменение обратно совместимо с более старыми серверами). #47213 (Azat Khuzhin).
- Улучшено распознавание групп регулярных выражений и доработан словарь
regexp_tree. #47218 (Han Fei). - Улучшение Keeper: добавлена новая 4LW-команда
clrsдля очистки ресурсов, которые использует Keeper (например, для освобождения неиспользуемой памяти). #47256 (Antonio Andelic). - Добавлены необязательные аргументы к кодекам
DoubleDelta(bytes_size),Gorilla(bytes_size),FPC(level, float_size), что позволяет использовать эти кодеки без указания типа столбца вclickhouse-compressor. Исправлены возможные аварийные завершения работы и арифметические ошибки вclickhouse-compressorпри использовании этих кодеков. Исправления: https://github.com/ClickHouse/ClickHouse/discussions/47262. #47271 (Kruglov Pavel). - Добавлена поддержка типов bigint для функции
runningDifference. Закрывает #47194. #47322 (Nikolay Degterinsky). - Добавлено окно истечения срока действия для S3‑учетных данных с заданным временем истечения, чтобы избежать ошибок
ExpiredTokenв некоторых граничных случаях. Им можно управлять с помощью параметра конфигурацииexpiration_window_seconds, значение по умолчанию — 120 секунд. #47423 (Antonio Andelic). - Добавлена поддержка типов данных Decimal и Date32 в формате
Avro. #47434 (Kruglov Pavel). - Не запускать сервер при обнаружении прерванного преобразования из
OrdinaryвAtomicи выводить более информативное сообщение об ошибке с рекомендациями по устранению неполадок. #47487 (Alexander Tokmakov). - Добавлен новый столбец
kindв таблицуsystem.opentelemetry_span_log. Этот столбец хранит значение SpanKind, определённое в OpenTelemetry. #47499 (Frank Chen). - Стало возможным чтение и запись вложенных массивов в формате
Protobuf, используя в качестве имени столбца только имя корневого поля. Ранее имя столбца должно было содержать все вложенные имена полей (например,a.b.c Array(Array(Array(UInt32))), теперь можно использовать простоa Array(Array(Array(UInt32))). #47650 (Kruglov Pavel). - Добавлен необязательный модификатор
STRICTдляSYSTEM SYNC REPLICA, который заставляет запрос ждать, пока очередь репликации не опустеет (как это работало до https://github.com/ClickHouse/ClickHouse/pull/45648). #47659 (Alexander Tokmakov). - Улучшены названия некоторых логов спанов OpenTelemetry. #47667 (Frank Chen).
- Запрещено использование слишком длинных последовательностей комбинаторов агрегатных функций (они могут приводить к медленным запросам на этапе анализа). Закрывает #47715. #47716 (Alexey Milovidov).
- Добавлена поддержка подзапросов в параметризованных представлениях; исправлены #46741 #47725 (SmitaRKulkarni).
- Исправлена утечка памяти в интеграции с MySQL (воспроизводится при
connection_auto_close=1). #47732 (Kseniia Sumarokova). - Улучшена обработка ошибок в коде, работающем с параметрами Decimal, что привело к более информативным сообщениям об ошибках. Ранее при передаче некорректных параметров Decimal выводилось неясное или мало полезное сообщение об ошибке. В этом обновлении текст сообщения был исправлен так, чтобы предоставлять более подробную и полезную информацию, что упрощает выявление и устранение проблем, связанных с параметрами Decimal. #47812 (Yu Feng). Примечание: эта запись в журнале изменений была переформулирована ChatGPT.
- Параметр
exact_rows_before_limitиспользуется для того, чтобы параметрrows_before_limit_at_leastточно отражал количество строк, возвращённых до достижения лимита. Этот pull request исправляет проблемы, возникавшие, если запрос выполнялся с распределённой обработкой по нескольким сегментам или с операциями сортировки. До этого обновления такие сценарии работали не так, как предполагалось. #47874 (Amos Bird). - Интроспекция метрик пулов потоков. #47880 (Azat Khuzhin).
- Добавлены события профилирования
WriteBufferFromS3MicrosecondsиWriteBufferFromS3RequestsErrors. #47885 (Antonio Andelic). - Добавлены опции
--linkи--noninteractive(-y) при установке ClickHouse. Закрыта задача #47750. #47887 (Nikolay Degterinsky). - Исправлено возникновение исключения
UNKNOWN_TABLEпри выполнении ATTACH для materialized view, у которой есть зависящие от неё, но недоступные таблицы. Это может быть полезно при попытке восстановить состояние из резервной копии. #47975 (MikhailBurdukov). - Исправлена ситуация, когда (необязательный) путь не добавлялся в конфигурацию зашифрованного диска. #47981 (Kseniia Sumarokova).
- Поддержка CTE в параметризованных представлениях. Реализация: добавлена поддержка параметров запроса при вычислении скалярных подзапросов. #48065 (SmitaRKulkarni).
- Добавлена поддержка типов больших целых чисел
(U)Int128/(U)Int256,Mapс ключами любого типа иDateTime64с произвольной точностью (не только 3 и 6). #48119 (Kruglov Pavel). - Добавлена возможность пропускать ошибки, связанные с неизвестными значениями enum, во входных форматах построчного ввода данных. #48133 (Alexey Milovidov).
Улучшения сборки/тестирования/упаковки
- ClickHouse теперь собирается с
C++23. #47424 (Robert Schulze). - Фаззинг запросов
EXPLAINв AST Fuzzer. #47803 #47852 (flynn). - Разделены стресс‑тест и автоматическая проверка обратной совместимости (теперь Upgrade check). #44879 (Kruglov Pavel).
- Обновлён образ Ubuntu для Docker, чтобы «успокоить» некоторые ложные отчёты о безопасности. #46784 (Julio Jimenez). Обратите внимание, что ClickHouse не имеет зависимостей и не требует Docker.
- Добавлена подсказка, позволяющая удалить уже существующий загруженный бинарный файл
clickhouseпри использовании загрузки ClickHouse через "curl | sh". Текст подсказки: "ClickHouse binary clickhouse already exists. Overwrite? [y/N]". #46859 (Dan Roscigno). - Исправлена ошибка при запуске сервера на старых дистрибутивах (например, Amazon Linux 2) и на ARM, когда не находились символы glibc 2.28. #47008 (Robert Schulze).
- Подготовка к clang 16. #47027 (Amos Bird).
- Добавлена проверка в CI, которая гарантирует, что ClickHouse может работать со старой glibc на ARM. #47063 (Robert Schulze).
- Добавлена проверка стиля для предотвращения некорректного использования макроса
NDEBUG. #47699 (Alexey Milovidov). - Незначительно ускорена сборка. #47714 (Alexey Milovidov).
- Обновлён
vectorscanдо версии 5.4.9. #47955 (Robert Schulze). - Добавлен модульный тест, который проверяет, что аварийное логирование Apache Arrow не приводит к аварийному завершению (abort). Он покрывает изменения в ClickHouse/arrow#16. #47958 (Arthur Passos).
- Восстановлена возможность запуска нативной отладочной сборки сервера для macOS. #48050 (Robert Schulze). Примечание: это изменение актуально только для разработки, поскольку официальные сборки ClickHouse собираются с использованием кросс‑компиляции.
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Исправлен некорректный сброс парсера форматов, добавлен тест обработки некорректных сообщений в
Kafka#45693 (Kruglov Pavel). - Исправлен расчет объема данных в Keeper #46086 (Antonio Andelic).
- Исправлена ошибка в автоматических повторных попытках выполнения запроса
DROP TABLEдля таблицReplicatedMergeTreeи баз данныхAtomic. В редких случаях это могло приводить к ошибкамCan't get data for node /zk_path/log_pointerиThe specified key does not exist, если срок действия сессии ZooKeeper истекал во время выполнения DROP, а новая реплицируемая таблица с тем же путём в ZooKeeper создавалась параллельно. #46384 (Alexander Tokmakov). - Исправлена некорректная рекурсия алиасов при нормализации запросов, которая приводила к тому, что некоторые запросы не выполнялись. #46609 (Raúl Marín).
- Исправлены проблемы с сериализацией и десериализацией IPv4/IPv6 в бинарных форматах #46616 (Kruglov Pavel).
- ActionsDAG: не изменять результат операции
andво время оптимизации #46653 (Salvatore Mesoraca). - Улучшена отмена запросов при аварийном завершении работы клиента #46681 (Alexander Tokmakov).
- Исправлены арифметические операции в оптимизации агрегирования #46705 (Duc Canh Le).
- Исправлено возможное аварийное завершение
clickhouse-localпри автоматическом определении схемы JSONEachRow #46731 (Kruglov Pavel). - Исправлена ошибка при изменении истёкшей роли #46772 (Vitaly Baranov).
- Исправлена ошибка комбинированного накопления столбцов PREWHERE из нескольких шагов #46785 (Alexander Gololobov).
- Теперь используется начальный диапазон для определения размера файла в HTTP-буфере чтения. Без этого изменения некоторые удалённые файлы не могли быть обработаны. #46824 (Antonio Andelic).
- Исправлен некорректно работающий индикатор прогресса при использовании URL-таблиц #46830 (Antonio Andelic).
- Исправлен отчет MSan в функции
maxIntersections#46847 (Alexey Milovidov). - Исправлена ошибка в типе данных
Map#46856 (Alexey Milovidov). - Исправлены некорректные результаты некоторых запросов с использованием LIKE, когда шаблон LIKE содержит экранированные символы, которые не подлежат экранированию #46875 (Robert Schulze).
- Исправление:
WITH FILLмог приводить к аварийному завершению работы, когда FillingTransform обрабатывал пустой блок #46897 (Yakov Olkhovskiy). - Исправлен вывод типов
dateиintиз строк в JSON #46972 (Kruglov Pavel). - Исправлена ошибка выбора диска для zero-copy репликации при выполнении fetch #47010 (alesapin).
- Исправлена опечатка в определении службы systemd #47051 (Palash Goel).
- Исправлена ошибка NOT_IMPLEMENTED, возникавшая при использовании CROSS JOIN и algorithm = auto #47068 (Vladimir C).
- Исправлена проблема, из-за которой таблица 'ReplicatedMergeTree' не могла вставить две одинаковые строки данных, когда 'part_type' был настроен в режиме 'InMemory' (экспериментальная функция). #47121 (liding1992).
- External dictionaries / library-bridge: исправлена ошибка "unknown library method 'extDict_libClone'" #47136 (alex filatov).
- Исправлена гонка в grace hash join с ограничением LIMIT #47153 (Vladimir C).
- Исправлена поддержка PREWHERE для отдельных столбцов #47154 (Azat Khuzhin).
- Устранена возможная взаимная блокировка в Query Status #47161 (Kruglov Pavel).
- Запрещён
INSERT SELECTдля одной и той же таблицы типаJoin, так как это приводит к взаимоблокировке #47260 (Vladimir C). - Пропускать уже слитые партиции при слияниях по порогу
min_age_to_force_merge_seconds#47303 (Antonio Andelic). - Изменена функция find_first_symbols, чтобы она корректно работала с find_first_not_symbols #47304 (Arthur Passos).
- Исправлено определение типов для больших чисел в CSV #47410 (Kruglov Pavel).
- Отключена оптимизация логических выражений для выражений с псевдонимами. #47451 (Nikolai Kochetov).
- Исправлена ошибка в
decodeURLComponent#47457 (Alexey Milovidov). - Исправлен граф EXPLAIN при использовании PROJECTION #47473 (flynn).
- Исправлена обработка параметров запроса #47488 (Alexey Milovidov).
- Параметризованное представление: исправление ошибки. #47495 (SmitaRKulkarni).
- Фаззер для форматов данных и соответствующие исправления. #47519 (Alexey Milovidov).
- Исправлена проверка монотонности для типа данных
DateTime64#47526 (Antonio Andelic). - Исправлена ошибка «block structure mismatch» для столбца типа Nullable(LowCardinality) #47537 (Nikolai Kochetov).
- Корректное устранение ошибки в Apache Parquet #45878 #47538 (Kruglov Pavel).
- Исправлен параллельный разбор формата
BSONEachRowпри некорректном размере документа #47540 (Kruglov Pavel). - Сохранять ошибку в
system.distribution_queueпри выполнении командыSYSTEM FLUSH DISTRIBUTED#47541 (Azat Khuzhin). - Проверка наличия дублирующегося столбца в формате
BSONEachRow#47609 (Kruglov Pavel). - Исправлено ожидание блокировки zero-copy при перемещении #47631 (alesapin).
- Исправлена ошибка агрегации по партициям #47634 (Nikita Taranov).
- Исправлена ошибка в сериализации кортежа в виде массива в формате
BSONEachRow#47690 (Kruglov Pavel). - Исправлен сбой в
polygonsSymDifferenceCartesian#47702 (pufit). - Исправлено чтение сжатых файлов из хранилища
Fileс компрессиейzlibиgzip#47796 (Anton Popov). - Улучшено обнаружение пустых запросов для PostgreSQL (для драйвера pgx для Go) #47854 (Azat Khuzhin).
- Исправлена проверка монотонности DateTime для типов LowCardinality #47860 (Antonio Andelic).
- Используйте restore_threads (а не backup_threads) для RESTORE ASYNC #47861 (Azat Khuzhin).
- Исправлена работа DROP COLUMN для таблиц ReplicatedMergeTree с проекциями #47883 (Antonio Andelic).
- Исправлено восстановление реплицированной базы данных #47901 (Alexander Tokmakov).
- Хотфикс слишком подробных HTTP‑предупреждений #47903 (Alexander Tokmakov).
- Исправлена ошибка «Field value too long» в
catboostEvaluate#47970 (Robert Schulze). - Исправление #36971: Watchdog: завершать работу с ненулевым кодом, если завершается дочерний процесс #47973 (Коренберг Марк).
- Исправлена ошибка: «файл индекса
cidxнеожиданно длинный» #48010 (SmitaRKulkarni). - Исправлен запрос MaterializedPostgreSQL для получения атрибутов replica-identity #48015 (Solomatov Sergei).
- parseDateTime(): Исправлено неопределённое поведение (переполнение знакового целого) #48019 (Robert Schulze).
- Используйте уникальные имена для записей (Record) в Avro, чтобы избежать повторного использования их схемы #48057 (Kruglov Pavel).
- Исправлена установка тайм-аутов TCP/HTTP-сокетов в Keeper #48108 (Antonio Andelic).
- Исправлен возможный вызов метода на нулевом указателе в формате
Avro#48184 (Kruglov Pavel).
Релиз ClickHouse 23.2 от 2023-02-23
Обратимое с предыдущими версиями изменение
- Функция
toDayOfWeek()(псевдоним:DAYOFWEEK) расширена аргументом режима, который задаёт, начинается ли неделя с понедельника или воскресенья и начинается ли отсчёт с 0 или с 1. Для согласованности с другими функциями работы с датой и временем аргумент режима был добавлен между аргументами времени и часового пояса. Это ломает существующее использование (ранее недокументированного) синтаксиса с двумя аргументамиtoDayOfWeek(time, time_zone). Чтобы исправить это, перепишите вызов функции какtoDayOfWeek(time, 0, time_zone). #45233 (Robert Schulze). - Настройка
max_query_cache_sizeпереименована вfilesystem_cache_max_download_size. #45614 (Kseniia Sumarokova). - Пользователь
defaultпо умолчанию не будет иметь прав доступа типаSHOW NAMED COLLECTION(например, пользовательdefaultбольше не сможет выдавать ALL другим пользователям, как это было раньше, поэтому этот PR несовместим с предыдущими версиями). #46010 (Kseniia Sumarokova). - Если предложение SETTINGS указано перед предложением FORMAT, настройки также будут применяться к форматированию. #46003 (Azat Khuzhin).
- Удалена поддержка настройки
materialized_postgresql_allow_automatic_update(которая по умолчанию была выключена). #46106 (Kseniia Sumarokova). - Незначительно улучшена производительность
countDigitsна реалистичных наборах данных. Этим закрыта задача #44518. В предыдущих версияхcountDigits(0)возвращала0; теперь она возвращает1, что более корректно и соответствует существующей документации. #46187 (Alexey Milovidov). - Запрещено создание новых столбцов, сжатых комбинацией кодеков
DeltaилиDoubleDeltaс последующими кодекамиGorillaилиFPC. Это ограничение можно обойти, используя настройкуallow_suspicious_codecs = true. #45652 (Robert Schulze).
Новая функция
- Добавлены
StorageIcebergи табличная функцияicebergдля доступа к хранилищу таблиц Iceberg в S3. #45384 (flynn). - Добавлена возможность настраивать хранилище с помощью
SETTINGS disk = '<disk_name>'(вместоstorage_policy), а также с явным созданием дискаSETTINGS disk = disk(type=s3, ...). #41976 (Kseniia Sumarokova). - Добавлены счетчики
ProfileEventsвsystem.part_log. #38614 (Bharat Nallan). - Расширение существующего движка
ReplacingMergeTree, позволяющее вставлять дубликаты. Он объединяет возможностиReplacingMergeTreeиCollapsingMergeTreeв одном движке MergeTree. Удалённые данные не возвращаются при запросах, но при этом не удаляются с диска. #41005 (youennL-cs). - Добавлена функция
generateULID. Закрыта задача #36536. #44662 (Nikolay Degterinsky). - Добавлена агрегатная функция
corrMatrix, вычисляющая корреляцию для каждой пары столбцов. Дополнительно, так как агрегатные функцииcovarSampиcovarPopпохожи наcorr, заодно добавлены агрегатные функцииcovarSampMatrixиcovarPopMatrix. @alexey-milovidov закрывает #44587. #44680 (FFFFFFFHHHHHHH). - Добавлена функция arrayShuffle для случайных перестановок элементов массива. #45271 (Joanna Hulboj).
- Добавлена поддержка типов
FIXED_SIZE_BINARYв Arrow иFIXED_LENGTH_BYTE_ARRAYвParquetи их отображение на типFixedString. Добавлены настройкиoutput_format_parquet_fixed_string_as_fixed_byte_array/output_format_arrow_fixed_string_as_fixed_byte_arrayдля управления типом выходных данных по умолчанию дляFixedString. Закрывает #45326. #45340 (Kruglov Pavel). - Добавлен новый столбец
last_exception_timeв system.replication_queue. #45457 (Frank Chen). - Добавлены две новые функции, которые позволяют использовать заданные пользователем ключи/seed для SipHash128. #45513 (Salvatore Mesoraca).
- Добавлена поддержка версии табличной функции
formatс тремя аргументами. Закрыто #45808. #45873 (FFFFFFFHHHHHHH). - Добавлена поддержка формата
JodaTimeдля спецификаторов 'x', 'w', 'S'. См. https://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html. #46073 (zk_kiger). - Добавлена поддержка оконной функции
ntile. (lgbo). - Добавлена настройка
final, которая неявно применяет модификаторFINALко всем таблицам. #40945 (Arthur Passos). - Добавлены функции
arrayPartialSortиarrayPartialReverseSort. #46296 (Joanna Hulboj). - Новый HTTP-параметр
client_protocol_versionпозволяет задавать версию клиентского протокола в HTTP-ответах при использовании формата Native. #40397. #46360 (Geoff Genz). - Добавлена новая функция
regexpExtract, по аналогии с функцией SparkREGEXP_EXTRACTдля совместимости. Она похожа на существующую функциюextract. #46469 (李扬). - Добавлена новая функция
JSONArrayLength, которая возвращает количество элементов во внешнем JSON-массиве. Функция возвращает NULL, если входная JSON-строка некорректна. #46631 (李扬).
Повышение производительности
- Новая логика работает, если условие PREWHERE является конъюнкцией из нескольких условий (cond1 AND cond2 AND ... ). Она группирует в шаги те условия, для которых требуется чтение одних и тех же столбцов. После каждого шага вычисляется соответствующая часть полного условия, и результирующие строки могут быть отфильтрованы. Это позволяет читать меньше строк на последующих шагах, тем самым экономя пропускную способность ввода-вывода (I/O) и снижая объём вычислений. В настоящее время эта логика по умолчанию отключена. Она будет включена по умолчанию в одном из будущих релизов, как только будет подтверждено отсутствие регрессий, поэтому настоятельно рекомендуется использовать её при тестировании. Управлять ей можно с помощью двух настроек: "enable_multiple_prewhere_read_steps" и "move_all_conditions_to_prewhere". #46140 (Alexander Gololobov).
- Добавлена опция, позволяющая независимо агрегировать партиции, если ключ партиционирования таблицы и ключ GROUP BY совместимы. Управляется настройкой
allow_aggregate_partitions_independently. По умолчанию отключена из‑за ограниченной применимости (см. документацию). #45364 (Nikita Taranov). - Разрешено использовать алгоритм вертикального слияния для частей в формате Compact. Это позволит серверу ClickHouse использовать значительно меньше памяти при фоновых операциях. Это закрывает задачу #46084. #45681 #46282 (Anton Popov).
- Оптимизирован ридер
Parquetза счет использования пакетного ридера. #45878 (LiuNeng). - Добавлено новое значение параметра
local_filesystem_read_method—io_uring, основанное на асинхронной подсистеме Linux io_uring, что практически во всех случаях повышает производительность чтения по сравнению с методомpreadпо умолчанию. #38456 (Saulius Valatka). - Переписывайте агрегатные функции с выражением
ifв качестве аргумента, когда это логически эквивалентно. Например,avg(if(cond, col, null))можно переписать как avgIf(cond, col). Это помогает повысить производительность. #44730 (李扬). - Улучшена производительность функций lower/upper с использованием инструкций AVX-512. #37894 (yaqi-zhao).
- Убрано ограничение, из-за которого на системах с >=32 ядрами и отключённым SMT ClickHouse использует только половину ядер (когда в BIOS отключён Hyper-Threading). #44973 (Robert Schulze).
- Улучшена производительность функции
multiIfза счёт столбцового выполнения, скорость увеличена в 2,3 раза. #45296 (李扬). - Добавлен быстрый путь выполнения для функции
position, когда искомая подстрока пуста. #45382 (李扬). - По умолчанию включена оптимизация
query_plan_remove_redundant_sorting. Оптимизация реализована в #45420. #45567 (Igor Nikonov). - Увеличен размер фрагмента в HTTP Transfer Encoding для повышения производительности выполнения больших запросов через HTTP-интерфейс. #45593 (Geoff Genz).
- Улучшена производительность коротких запросов
SELECT, которые читают данные из таблиц с большим числом столбцов типовArray/Map/Nested. #45630 (Anton Popov). - Повышена производительность фильтрации для больших целых чисел и типов Decimal. #45949 (李扬).
- Это изменение может эффективно снизить накладные расходы на получение фильтра из столбца ColumnNullable(UInt8) и улучшить общую производительность выполнения запросов. Для оценки влияния этого изменения мы использовали бенчмарк TPC-H, предварительно изменив типы столбцов с non-nullable на Nullable, и измеряли QPS его запросов в качестве показателя производительности. #45962 (Zhiguo Zhou).
- Виртуальные столбцы
_partи_partition_idтеперь имеют типLowCardinality(String). Закрывает #45964. #45975 (flynn). - Улучшена производительность преобразования Decimal при неизменном масштабе. #46095 (Alexey Milovidov).
- Позволяет увеличить предвыборку данных при чтении. #46168 (Kseniia Sumarokova).
- Переписали
arrayExists(x -> x = 1, arr)->has(arr, 1), что улучшило производительность в 1,34 раза. #46188 (李扬). - Исправлено чрезмерное использование памяти при вертикальных слияниях на локальном диске. Параметр
max_insert_delayed_streams_for_parallel_writeтеперь учитывается для удалённого диска. #46275 (Nikolai Kochetov). - Обновлена библиотека zstd до версии v1.5.4. В ней есть некоторые незначительные улучшения производительности и коэффициента сжатия. Если вы используете реплики с разными версиями ClickHouse, вы можете увидеть корректные сообщения об ошибках
Data after merge/mutation is not byte-identical to data on another replicas.с пояснением. Эти сообщения ожидаемы и не являются поводом для беспокойства. #46280 (Raúl Marín). - Устранена деградация производительности, вызванная #39737. #46309 (Alexey Milovidov).
- Обработчик
replicas_statusбудет отвечать быстро даже при большой очереди репликации. #46310 (Alexey Milovidov). - Добавлена поддержка AVX-512 для агрегатной функции
sum, унарных арифметических и сравнительных функций. #37870 (zhao zhou). - Переписан код, отвечающий за распределение меток и общую координацию чтения, чтобы добиться максимального прироста производительности. Это закрывает #34527. #43772 (Nikita Mikhaylov).
- Удаляет избыточные предложения
DISTINCTв запросах (подзапросах). Реализовано на основе плана запроса. Выполняет оптимизацию, аналогичнуюoptimize_duplicate_order_by_and_distinctв отношении предложенийDISTINCT. Может быть включено с помощью настройкиquery_plan_remove_redundant_distinct. Связано с #42648. #44176 (Igor Nikonov). - Несколько оптимизаций для переписывания запросов:
sumIf(123, cond) -> 123 * countIf(1, cond),sum(if(cond, 123, 0)) -> 123 * countIf(cond),sum(if(cond, 0, 123)) -> 123 * countIf(not(cond))#44728 (李扬). - Улучшено взаимодействие ограниченного по памяти слияния и агрегации по порядку на верхнем уровне плана запроса. Ранее в некоторых случаях мы переходили к явной сортировке для AIO, хотя в этом не было реальной необходимости. #45892 (Nikita Taranov).
- Одновременные слияния по умолчанию планируются по принципу циклического обхода (round-robin), чтобы обеспечить справедливую работу без «голодания» задач. Ранее в сильно перегруженных сегментах крупные слияния могли «голодать» по сравнению с мелкими из-за использования строгого приоритетного планирования. Добавлен серверный параметр конфигурации
background_merges_mutations_scheduling_policyдля выбора алгоритма планирования (round_robinилиshortest_task_first). #46247 (Sergei Trifonov).
Улучшения
- Включить повторные попытки выполнения INSERT по умолчанию при потере сессии ZooKeeper. Мы уже используем эту настройку в продакшене. #46308 (Alexey Milovidov).
- Добавлена возможность игнорировать неизвестные ключи в объекте JSON для именованных кортежей (
input_format_json_ignore_unknown_keys_in_named_tuple). #45678 (Azat Khuzhin). - Реализована оптимизация условия
whereс переносом выражения ключа сортировки вprewhereдля запросов сfinal. #38893. #38950 (hexiaoting). - Добавлены новые метрики для бэкапов: num_processed_files и processed_files_size, отражающие фактическое количество обработанных файлов и их общий размер. #42244 (Aleksandr).
- Добавлены повторные попытки при межсерверных ошибках DNS. #43179 (Anton Kozlov).
- Улучшение Keeper: добавлена предварительная аллокация места на диске, чтобы избежать неочевидных проблем при нехватке свободного пространства. Введена настройка
max_log_file_sizeдля задания максимального размера файлов журнала Raft в Keeper. #44370 (Antonio Andelic). - Оптимизирована работа логики API задержки реплики, если реплика доступна только для чтения. #45148 (mateng915).
- Запрашивать пароль в clickhouse-client в интерактивном режиме, если пустой пароль не подходит. Закрывает #46702. #46730 (Nikolay Degterinsky).
- Помечать использование сжатия
Gorillaдля столбцов с типом, отличным от Float*, как подозрительное. #45376 (Robert Schulze). - Теперь в столбце
postpone_reasonотображается имя реплики, выполняющей слияние. #45458 (Frank Chen). - Сохранять трассировку стека исключения в
part_log. #45459 (Frank Chen). - Словарь
regexp_treeулучшен и теперь совместим с https://github.com/ua-parser/uap-core. #45631 (Han Fei). - Обновлена проверка
SYSTEM SYNC REPLICA, что решает #45508 #45648 (SmitaRKulkarni). - Переименована настройка
replication_alter_partitions_syncвalter_sync. #45659 (Antonio Andelic). - Табличная функция
generateRandomи движок теперь поддерживают типы данныхLowCardinality. Это полезно для тестирования, например можно выполнить запросINSERT INTO table SELECT * FROM generateRandom() LIMIT 1000. Это понадобилось для отладки #45590. #45661 (Alexey Milovidov). - Экспериментальный кэш результатов запроса теперь поддерживает более модульные настройки конфигурации. #45679 (Robert Schulze).
- Компонент «кэш результатов запросов» переименован в «кэш запросов». #45682 (Robert Schulze).
- Добавлена команда
SYSTEM SYNC FILE CACHE. Она выполняет системный вызовsync. #8921. #45685 (DR). - Добавлен новый параметр S3
allow_head_object_request. В этом PR использование запросаGetObjectAttributesвместоHeadObject, добавленного в https://github.com/ClickHouse/ClickHouse/pull/45288, сделано необязательным (и по умолчанию отключено). #45701 (Vitaly Baranov). - Добавлена возможность переопределять параметры подключения по имени подключения (то есть теперь можно не хранить пароль для каждого подключения отдельно, а просто поместить все параметры в
~/.clickhouse-client/config.xmlи даже использовать для них разные файлы истории, что также может быть полезно). #45715 (Azat Khuzhin). - Формат Arrow: добавлена поддержка типа
duration. Закрывает #45669. #45750 (flynn). - Расширено логирование в кэше запросов (Query Cache) для улучшения анализа его поведения. #45751 (Robert Schulze).
- Настройки кэша запросов на уровне сервера теперь можно изменять во время работы. #45758 (Robert Schulze).
- Скрывать пароль в логах при указании аргументов табличной функции с помощью именованной коллекции. #45774 (Vitaly Baranov).
- Улучшен внутренний S3‑клиент для корректного определения регионов и перенаправлений для различных типов URL-адресов. #45783 (Antonio Andelic).
- Добавлена поддержка типов Map, IPv4 и IPv6 в generateRandom. Прежде всего полезно для тестирования. #45785 (Raúl Marín).
- Добавлена поддержка функций empty/notEmpty для IP-типов. #45799 (Yakov Olkhovskiy).
- Столбец
num_processed_filesбыл разделён на два столбца:num_files(для BACKUP) иfiles_read(для RESTORE). Столбецprocessed_files_sizeбыл разделён на два столбца:total_size(для BACKUP) иbytes_read(для RESTORE). #45800 (Vitaly Baranov). - Добавлена поддержка запроса
SHOW ENGINESдля совместимости с MySQL. #45859 (Filatenkov Artur). - Улучшена работа обфускатора с запросами. #45867 (Raúl Marín).
- Улучшено поведение преобразования в тип Date для граничного значения 65535 (2149-06-06). #46042 #45914 (Joanna Hulboj).
- Добавлена настройка
check_referential_table_dependenciesдля проверки ссылочных зависимостей между таблицами при выполненииDROP TABLE. Этот PR решает проблему #38326. #45936 (Vitaly Baranov). - Исправлена функция
tupleElement, теперь она возвращаетNullпри аргументеNull. Закрывает #45894. #45952 (flynn). - Выдавать ошибку при отсутствии файлов, удовлетворяющих шаблону S3. Закрывает #45587. #45957 (chen).
- Используйте данные о состоянии кластера для проверки одновременного выполнения операций резервного копирования и восстановления. #45982 (SmitaRKulkarni).
- ClickHouse Client: использовать режим сопоставления «exact» для нечеткого поиска, который корректно игнорирует регистр и использует более подходящий алгоритм сопоставления SQL-запросов. #46000 (Azat Khuzhin).
- Запрещён некорректный синтаксис создания представления
CREATE View X TO Y AS SELECT. Закрывает #4331. #46043 (flynn). - Семейство хранилищ
Logтеперь поддерживает настройку параметраstorage_policy. Закрыта задача #43421. #46044 (flynn). - Улучшен формат
JSONColumnsпри пустом результате. Закрывает #46024. #46053 (flynn). - Добавлена эталонная реализация SipHash128. #46065 (Salvatore Mesoraca).
- Добавлена новая метрика для учёта времени и объёмов выделений памяти с использованием mmap. #46068 (李扬).
- В настоящее время для таких функций, как
leftPad,rightPad,leftPadUTF8,rightPadUTF8, второй аргументlengthдолжен иметь тип одной из следующих целочисленных величин: UInt8, UInt16, UInt32, UInt64, UInt128 или UInt256. Это чересчур ограничительно для пользователей ClickHouse и, кроме того, не согласуется с поведением других аналогичных функций, таких какarrayResize,substringи т. д. #46103 (李扬). - Исправлена assert-проверка в функции
welchTTestв отладочной сборке, когда итоговая статистика равна NaN. Поведение унифицировано с другими аналогичными функциями. Изменено поведение функцииstudentTTestтак, чтобы она возвращала NaN вместо выбрасывания исключения, поскольку предыдущее поведение было неудобным. Закрыты #41176 и #42162. #46141 (Alexey Milovidov). - Более удобная работа с большими целыми числами и ORDER BY WITH FILL. Разрешено использовать обычные целые числа для начальных и конечных значений в WITH FILL при ORDER BY по большим (128-битным и 256-битным) целым числам. Исправлен ошибочный результат для больших целых чисел с отрицательными начальными или конечными значениями. Закрывает #16733. #46152 (Alexey Milovidov).
- Добавлены столбцы
parts,active_partsиtotal_marksвsystem.tablesсогласно issue. #46161 (attack204). - Функции "multi[Fuzzy]Match(Any|AnyIndex|AllIndices}" теперь отклоняют регулярные выражения, которые, вероятнее всего, будут очень медленно обрабатываться в vectorscan. #46167 (Robert Schulze).
- Когда
insert_null_as_defaultвключён и для столбца не задано значение по умолчанию, будет использоваться значение по умолчанию для типа столбца. Также этот PR исправляет применение значений по умолчанию к NULL в случае столбцов типа LowCardinality. #46171 (Kruglov Pavel). - Отдавать предпочтение явно заданным ключам доступа для клиентов S3. Если параметр
use_environment_credentialsимеет значениеtrueи пользователь предоставил ключ доступа через запрос или конфигурацию, он будет использован вместо ключей из переменной окружения. #46191 (Antonio Andelic). - Добавлен псевдоним "DATE_FORMAT()" к функции "formatDateTime()" для повышения совместимости с SQL-диалектом MySQL, функция
formatDateTimeрасширена поддержкой подстановок "a", "b", "c", "h", "i", "k", "l", "r", "s", "W". ### Запись в документации об изменениях, видимых пользователю Краткое описание для пользователя:DATE_FORMAT— это псевдонимformatDateTime. Форматирует время в соответствии с заданной строкой формата. Формат — константное выражение, поэтому вы не можете использовать несколько форматов для одного результирующего столбца. (Предоставьте ссылку на formatDateTime). #46302 (Jake Bamrah). - Добавлены
ProfileEventsиCurrentMetricsо задачах обратного вызова для параллельных реплик таблицs3ClusterиMergeTree. #46313 (Alexey Milovidov). - Добавлена поддержка операторов
DELETEиUPDATEдля таблиц, использующих движок храненияKeeperMap. #46330 (Antonio Andelic). - Разрешено выполнение запросов RENAME с параметрами запроса. Исправляет #45778. #46407 (Nikolay Degterinsky).
- Исправлены параметризованные запросы SELECT при использовании трансформера REPLACE. Исправлена проблема #33002. #46420 (Nikolay Degterinsky).
- Исключить внутреннюю базу данных, используемую для временных/внешних таблиц, из расчёта асинхронной метрики "NumberOfDatabases". Это делает поведение единообразным с системной таблицей "system.databases". #46435 (Robert Schulze).
- В таблицу distribution_queue добавлен столбец
last_exception_time. #46564 (Aleksandr). - Поддержка оператора
INс параметром в параметризованных представлениях. #46583 (SmitaRKulkarni). - Не загружать именованные коллекции при запуске сервера (загружать их при первом обращении к ним). #46607 (Kseniia Sumarokova).
Улучшение сборки/тестирования/упаковки
- Внедрён GWP-ASan, реализованный в рантайме LLVM. Это закрывает #27039. #45226 (Han Fei).
- Мы хотим сделать наши тесты менее стабильными и более «flaky»: добавлена рандомизация настроек merge tree в тестах. #38983 (Anton Popov).
- Включена поддержка HDFS на PowerPC, что позволяет исправить следующие функциональные тесты: 02113_hdfs_assert.sh, 02244_hdfs_cluster.sql и 02368_cancel_write_into_hdfs.sh. #44949 (MeenaRenganathan22).
- Добавлен файл службы systemd.service для clickhouse-keeper. Исправляет #44293. #45568 (Mikhail f. Shiryaev).
- Форк библиотеки Poco в ClickHouse был перемещён из "contrib/" в "base/poco/". #46075 (Robert Schulze).
- Добавлена опция для
clickhouse-watchdogдля перезапуска дочернего процесса. Практической пользы от этого немного. #46312 (Alexey Milovidov). - Если переменная окружения
CLICKHOUSE_DOCKER_RESTART_ON_EXITустановлена в значение 1, Docker‑контейнер будет запускатьclickhouse-serverкак дочерний процесс вместо первого процесса и перезапускать его после завершения. #46391 (Alexey Milovidov). - Исправлен файл службы systemd. #46461 (SuperDJY).
- Повышена минимальная версия Clang, необходимая для сборки ClickHouse, с 12 до 15. #46710 (Robert Schulze).
- Обновлён Intel QPL с v0.3.0 до v1.0.0, собран libaccel-config и он статически слинкован с библиотекой QPL вместо динамической линковки. #45809 (jasperzhu).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Сбрасывать данные строго по параметру
rabbitmq_flush_interval_msили по параметруrabbitmq_max_block_sizeвStorageRabbitMQ. Закрывает #42389. Закрывает #45160. #44404 (Kseniia Sumarokova). - Использовать PODArray для отрисовки в функции sparkBar, чтобы контролировать потребление памяти. Закрывает #44467. #44489 (Duc Canh Le).
- Исправлены функции quantilesExactExclusive и quantilesExactInclusive, которые возвращали неотсортированный элемент массива. #45379 (wujunfu).
- Исправлено необработанное исключение в
HTTPHandlerпри включённом OpenTelemetry. #45456 (Frank Chen). - Не следует выводить тип
Dateиз восьмизначных чисел. Это может привести к некорректному чтению данных. #45581 (Kruglov Pavel). - Исправлена логика использования настройки
odbc_bridge_use_connection_pooling. #45591 (Bharat Nallan). - Когда вызывается callback в кэше, возможно, что этот кэш уже уничтожен. Для безопасности мы захватываем поля по значению. Такой подход также безопасен для планировщика задач, потому что он будет деактивирован до уничтожения хранилища. Исправляет #45548. #45601 (Han Fei).
- Исправлена ошибка, приводившая к порче данных при совместном использовании кодеков Delta или DoubleDelta с кодеком Gorilla. #45615 (Robert Schulze).
- Исправлена корректность проверки типов при использовании индекса блум-фильтра N-gram, чтобы избежать некорректных чтений. #45617 (Antonio Andelic).
- Было сообщено о нескольких ошибках сегментации в районе
c-ares. Они появились после моих предыдущих pull request-ов. Я исправил их с помощью Александра Токмакова. #45629 (Arthur Passos). - Исправлено описание ключа при обнаружении дублирующихся значений первичного ключа. Такое может происходить в проекциях. Подробности см. в #45590. #45686 (Amos Bird).
- Установлен метод и уровень сжатия для резервных копий. Закрывает #45690. #45737 (Pradeep Chhetri).
- Следует использовать
select_query_typed.limitByOffsetвместоselect_query_typed.limitOffset. #45817 (刘陶峰). - При использовании экспериментального анализатора запросов запросы вида
SELECT number FROM numbers(100) LIMIT 10 OFFSET 10;возвращают некорректные результаты (пустой результат для этого запроса). Это вызвано лишним шагом OFFSET, добавленным планировщиком. #45822 (刘陶峰). - Обратная совместимость — разрешено неявное сужающее преобразование из UInt64 в IPv4, необходимое для выражения «INSERT ... VALUES ...». #45865 (Yakov Olkhovskiy).
- Исправлена ошибка в IPv6‑парсере для смешанных IPv4-адресов с пропущенным первым октетом (например,
::.1.2.3). #45871 (Yakov Olkhovskiy). - Добавлен столбец
query_kindв таблицуsystem.processesи в запросSHOW PROCESSLIST. Удалён дублирующийся код. Это исправляет ошибку: глобальный параметр конфигурацииmax_concurrent_select_queriesне соблюдался для запросов с цепочкамиINTERSECTилиEXCEPT. #45872 (Alexey Milovidov). - Исправлено падение в функции
stochasticLinearRegression. Обнаружено с помощью WingFuzz. #45985 (Nikolai Kochetov). - Исправлен сбой в запросах
SELECTс модификаторамиINTERSECTиEXCEPT, которые читают данные из таблиц с включёнными разрежёнными столбцами (управляется настройкойratio_of_defaults_for_sparse_serialization). #45987 (Anton Popov). - Исправлена оптимизация чтения по порядку для сортировки по убыванию (DESC) с модификатором FINAL, закрыт #45815. #46009 (Vladimir C).
- Исправлено чтение несуществующих вложенных столбцов с несколькими уровнями в компактных частях. #46045 (Azat Khuzhin).
- Исправлен столбец elapsed в system.processes (значения отличались в 10 раз). #46047 (Azat Khuzhin).
- Дополнительное исправление для Replace domain IP types (IPv4, IPv6) with native https://github.com/ClickHouse/ClickHouse/pull/43221. #46087 (Yakov Olkhovskiy).
- Исправлена подстановка переменных окружения в конфигурации, если параметр уже имеет значение. Исправление закрывает #46131. Также закрывает #9547. #46144 (pufit).
- Исправлено некорректное проталкивание предикатов (predicate push down) с
GROUPING SETS. Закрывает #45947. #46151 (flynn). - Исправлена возможная ошибка, из-за которой конвейер мог зависать в
fulls_sorting_joinпри использовании константных ключей. #46175 (Vladimir C). - Функции
tupleбольше не переписываются в литералы при форматировании, чтобы избежать некорректных результатов. #46232 (Salvatore Mesoraca). - Исправлена возможная ошибка выхода за границы при чтении LowCardinality(Nullable) в формате Arrow. #46270 (Kruglov Pavel).
- Исправлена ошибка, из-за которой запросы
SYSTEM UNFREEZEзавершались с исключениемCANNOT_PARSE_INPUT_ASSERTION_FAILED. #46325 (Aleksei Filatov). - Исправлен возможный сбой, который мог быть вызван переполнением целого числа при десериализации агрегирующего состояния функции, хранящей HashTable. #46349 (Nikolai Kochetov).
- Исправлена возможная
LOGICAL_ERROR, возникающая при асинхронных вставках некорректных данных в форматеVALUES. #46350 (Anton Popov). - Исправлено возникновение LOGICAL_ERROR при попытке выполнить
ALTER ... MOVE PART ... TO TABLE. Такой запрос никогда фактически не поддерживался. #46359 (Alexander Tokmakov). - Исправлено определение схемы s3Cluster в параллельной распределённой операции INSERT SELECT при включённом
parallel_distributed_insert_select. #46381 (Kruglov Pavel). - Исправлена обработка запросов вида
ALTER TABLE ... UPDATE nested.arr1 = nested.arr2 ..., гдеarr1иarr2являются полями одного и того же столбца типаNested. #46387 (Anton Popov). - Планировщик может не суметь запланировать задачу. Если это происходит, весь MulityPartUpload должен быть прерван, а
UploadHelperобязан дождаться уже запланированных задач. #46451 (Dmitry Novik). - Исправление
PREWHEREдля движкаMergeс различающимися типами значений по умолчанию (исправляет некоторые ошибкиNOT_FOUND_COLUMN_IN_BLOCK, возникающие, когда тип значения по умолчанию для столбца отличается; также разрешаетPREWHERE, когда тип столбца одинаков во всех таблицах, и запрещает его, только если они различаются). #46454 (Azat Khuzhin). - Исправлена ошибка, приводившая к аварийному завершению при использовании константных значений в
ORDER BY. Исправляет #46466. #46493 (Nikolai Kochetov). - Не выбрасывать исключение, если параметр
diskбыл указан на уровне запроса, аstorage_policy— в секции настроек MergeTree в конфигурации. В этом случаеdiskпереопределяет настройку из конфигурации. #46533 (Kseniia Sumarokova). - Исправлена некорректная обработка константного аргумента типа
LowCardinalityв функцииarrayMap. Эта ошибка могла приводить к ошибке сегментирования в релизной сборке и логической ошибкеBad castв отладочной сборке. #46569 (Alexey Milovidov). - Исправляет ошибку #46557. #46611 (Alexander Gololobov).
- Исправлены бесконечные перезапуски юнита systemd clickhouse-server, если сервер не может запуститься в течение 1 минуты 30 секунд (отключена логика тайм-аута при запуске clickhouse-server из сервиса systemd). #46613 (Azat Khuzhin).
- Буферы памяти, выделенные при асинхронных вставках, освобождались в глобальном контексте, поэтому счетчики MemoryTracker для соответствующих пользователя и запроса обновлялись некорректно. Это приводило к ложным исключениям OOM. #46622 (Dmitry Novik).
- Обновлено поведение: больше не очищается on_expression из table_join, поскольку он используется последующими запусками анализа, что исправляет #45185. #46487 (SmitaRKulkarni).
Релиз ClickHouse 23.1 от 2023-01-26
Релиз ClickHouse 23.1
Примечания по обновлению
- Запрос
SYSTEM RESTART DISKтеперь не выполняет никаких действий. #44647 (alesapin). - Опция
PREALLOCATEдля словарейHASHED/SPARSE_HASHEDтеперь не выполняет никаких действий. #45388 (Azat Khuzhin). Она больше не даёт существенных преимуществ. - Запрещён кодек
Gorillaдля столбцов типов, отличных от Float32 и Float64. #45252 (Robert Schulze). Его использование было бессмысленным и приводило к несогласованностям. - Параллельные кворумные вставки могут работать некорректно с таблицами
*MergeTree, созданными с использованием устаревшего синтаксиса. Поэтому поддержка параллельных кворумных вставок полностью отключена для таких таблиц. Это не затрагивает таблицы, созданные с использованием нового синтаксиса. #45430 (Alexander Tokmakov). - Для получения размера объекта в AWS S3 используется запрос
GetObjectAttributesвместо запросаHeadObject. Это изменение, в частности, исправляет обработку конечных точек без явного указания региона после обновления AWS SDK. #45288 (Vitaly Baranov). AWS S3 и Minio протестированы, но имейте в виду, что различные S3-совместимые сервисы (GCS, R2, B2) могут иметь тонкие несовместимости. Это изменение также может потребовать скорректировать ACL, чтобы разрешить запросGetObjectAttributes. - Запрещено использование путей в названиях часовых поясов. Например, название часового пояса
/usr/share/zoneinfo/Asia/Adenнедопустимо; следует использовать имя из базы часовых поясов IANA, напримерAsia/Aden. #44225 (Kruglov Pavel). - Запросы, комбинирующие equijoin и константные выражения (например,
JOIN ON t1.x = t2.x AND 1 = 1), запрещены из-за некорректных результатов. #44016 (Vladimir C).
Новая возможность
- Источник словаря, извлекающий ключи при обходе дерева регулярных выражений. Может использоваться для разбора User-Agent. #40878 (Vage Ogannisian). #43858 (Han Fei).
- Добавлена функциональность параметризованных представлений, теперь для движка таблиц View можно задавать параметры запроса. Решает #40907. #41687 (SmitaRKulkarni).
- Добавлены функции
quantileInterpolatedWeightedиquantilesInterpolatedWeighted. #38252 (Bharat Nallan). - Поддержка
ARRAY JOINдля типаMap, аналог функцииexplodeв Spark. #43239 (李扬). - Добавлена поддержка стандартных для SQL двоичных и шестнадцатеричных строковых литералов. #43785 (Mo Xuan).
- Добавлена поддержка форматирования
DateTimeв стиле Joda-Time. См. документацию Joda-Time. #43818 (李扬). - Реализована поддержка формата долей секунды (
%f) вformatDateTime. #44060 (ltrk2). #44497 (Alexander Gololobov). - Добавлена функция
ageдля вычисления разницы между двумя датами или датами со временем, выраженной в количестве полных единиц времени. Закрывает #41115. #44421 (Robert Schulze). - Добавлен источник
Nullдля словарей. Закрыта задача #44240. #44502 (mayamika). - Добавлена возможность настраивать класс хранилища S3 с помощью опции конфигурации
s3_storage_class, например<s3_storage_class>STANDARD/INTELLIGENT_TIERING</s3_storage_class>. Закрывает #44443. #44707 (chen). - Вставлять значения по умолчанию, если в JSON-объекте отсутствуют элементы при разборе именованного кортежа. Добавлена настройка
input_format_json_defaults_for_missing_elements_in_named_tupleдля управления этим поведением. Закрывает #45142#issuecomment-1380153217. #45231 (Kruglov Pavel). - Записывает время запуска сервера в ProfileEvents (
ServerStartupMilliseconds). Исправляет #43188. #45250 (SmitaRKulkarni). - Рефакторинг и улучшение стриминговых движков Kafka/RabbitMQ/NATS и добавление поддержки всех форматов, а также небольшой рефакторинг самих форматов: - Исправлено формирование сообщений в построчных форматах с суффиксами/префиксами. Теперь каждое сообщение полностью форматируется со всеми разделителями и может быть затем снова разобрано с помощью входного формата. - Добавлена поддержка блочных форматów, таких как Native, Parquet, ORC и др. Каждый блок форматируется как отдельное сообщение. Количество строк в одном сообщении зависит от размера блока, поэтому вы можете управлять им с помощью настройки
max_block_size. - Добавлены новые настройки движкаkafka_max_rows_per_message/rabbitmq_max_rows_per_message/nats_max_rows_per_message. Они управляют количеством строк, форматируемых в одном сообщении в построчных форматах. Значение по умолчанию: 1. - Исправлено высокое потребление памяти в табличном движке NATS. - Добавлена поддержка произвольных бинарных данных в продюсере NATS (ранее он работал только со строками, содержавшими \0 в конце). - Добавлены отсутствовавшие настройки движков Kafka/RabbitMQ/NATS в документацию. - Рефакторинг логики отправки и потребления сообщений в Kafka/RabbitMQ/NATS, её отделение от семантики WriteBuffers/ReadBuffers. - Рефакторинг выходных форматов: удалены обратные вызовы на каждую строку, использовавшиеся в Kafka/RabbitMQ/NATS (теперь там callbacks не используются), разрешено непосредственное использование IRowOutputFormat, уточнены разделители конца строки и между строками, появилась возможность сбросить состояние выходного формата, чтобы начать форматирование заново. - Добавлена корректная реализация в функции formatRow (бонус после рефакторинга форматов). #42777 (Kruglov Pavel). - Поддержка чтения и записи таблиц типа
NestedкакListизStructв форматеCapnProto. Чтение и записьDecimal32/64какInt32/64. Закрывает #43319. #43379 (Kruglov Pavel). - Добавлен столбец
message_format_stringвsystem.text_log. Столбец содержит шаблон, который использовался для форматирования сообщения. #44543 (Alexander Tokmakov). Это позволяет выполнять различные виды анализа логов ClickHouse. - Добавлена попытка автоматического определения заголовков с именами столбцов (и, возможно, типами) для форматов ввода CSV/TSV/CustomSeparated. Добавлены настройки input_format_tsv/csv/custom_detect_header, управляющие этим поведением (по умолчанию включено). Закрывает #44640. #44953 (Kruglov Pavel).
Экспериментальные возможности
- Добавлен экспериментальный инвертированный индекс как новый тип вторичного индекса для эффективного поиска по тексту. #38667 (larryluogit).
- Добавлен экспериментальный кэш результатов запросов. #43797 (Robert Schulze).
- Добавлена расширяемая и настраиваемая подсистема планирования для I/O-запросов (пока не интегрирована с самим I/O-кодом). #41840 (Sergei Trifonov). Эта возможность пока совершенно ничего не делает — наслаждайтесь.
- Добавлена команда
SYSTEM DROP DATABASE REPLICA, которая удаляет метаданные неработающей реплики базы данныхReplicated. Закрывает #41794. #42807 (Alexander Tokmakov).
Улучшения производительности
- Не загружать неактивные части при запуске таблиц
MergeTree. #42181 (Anton Popov). - Снижена задержка чтения из хранилища
S3и табличной функцииs3при работе с большим количеством мелких файлов. Теперь параметрыremote_filesystem_read_methodиremote_filesystem_read_prefetchприменяются при чтении из хранилищаS3. #43726 (Anton Popov). - Оптимизация чтения полей структур в файлах Parquet/ORC. Загружаются только необходимые поля. #44484 (lgbo).
- Двухуровневый алгоритм агрегации по ошибке был отключён для запросов по HTTP. Он снова был включён, что привело к значительному росту производительности. #45450 (Nikolai Kochetov).
- Добавлена поддержка mmap для StorageFile, что должно повысить производительность clickhouse-local. #43927 (pufit).
- Добавлена поддержка сегментирования в HashedDictionary для параллельной загрузки (почти линейное масштабирование по числу сегментов). #40003 (Azat Khuzhin).
- Ускорен парсинг запросов. #42284 (Raúl Marín).
- Всегда заменяйте цепочку
ORвидаexpr = x1 OR ... OR expr = xNнаexpr IN (x1, ..., xN), еслиexpr— столбец с типомLowCardinality. Настройкаoptimize_min_equality_disjunction_chain_lengthпри этом игнорируется. #42889 (Guo Wangyang). - Незначительно повышена производительность за счет оптимизации кода, связанного с ThreadStatus. #43586 (Zhiguo Zhou).
- Оптимизирована по-столбцовая обработка тернарной логики за счёт авто-векторизации. В тесте производительности этого микробенчмарка было достигнуто пиковое увеличение производительности в 21 раз на платформе ICX (процессор Intel Xeon Platinum 8380). #43669 (Zhiguo Zhou).
- По возможности избегайте установки блокировок чтения в таблице
system.tables. #43840 (Raúl Marín). - Оптимизирован
ThreadPool. Эксперименты производительности SSB (Star Schema Benchmark) на устройстве ICX (процессор Intel Xeon Platinum 8380, 80 ядер, 160 потоков) показывают, что это изменение позволяет эффективно снизить конкуренцию за мьютексThreadPoolImpl::mutexна 75%, увеличивая утилизацию CPU и улучшая общую производительность на 2,4%. #44308 (Zhiguo Zhou). - Теперь оптимизация предсказания размера хэш-таблицы применяется только в том случае, если закэшированный размер хэш-таблицы достаточно велик (пороговые значения были определены эмпирически и жестко закодированы). #44455 (Nikita Taranov).
- Небольшое улучшение производительности при асинхронном чтении из удалённых файловых систем. #44868 (Kseniia Sumarokova).
- Добавлен быстрый путь обработки для: -
col like '%%'; -col like '%'; -col not like '%'; -col not like '%'; -match(col, '.*'). #45244 (李扬). - Незначительно улучшена оптимизация быстрого пути при фильтрации (оператор WHERE). #45289 (Nikita Taranov).
- Добавлена информация о монотонности для функций
toUnixTimestamp64*, чтобы включить больше алгебраических оптимизаций при анализе индексов. #44116 (Nikita Taranov). - Добавлена возможность настраивать использование временных данных при обработке запросов (выгрузку на диск) так, чтобы оно взаимодействовало с кешем файловой системы (используя пространство диска, выделенное под кеш) #43972 (Vladimir C). В основном это улучшает работу ClickHouse Cloud, но может использоваться и в самоуправляемых развёртываниях, если вы знаете, что делаете.
- Таблица
system.replicasтеперь параллельно запрашивает статусы реплик. Закрывает #43918. #43998 (Nikolay Degterinsky). - Оптимизировано потребление памяти при резервном копировании в S3: файлы в S3 теперь копируются напрямую, без использования
WriteBufferFromS3(который мог использовать много памяти). #45188 (Vitaly Baranov). - Добавлен кэш для идентификаторов асинхронных блоков. Это уменьшит число запросов в ZooKeeper при включении дедупликации асинхронных вставок. #45106 (Han Fei).
Улучшения
- Использовать структуру целевой таблицы вставки в
generateRandomпри вызове без аргументов. #45239 (Kruglov Pavel). - Разрешено неявное преобразование чисел с плавающей запятой, хранящихся в строковых полях JSON, в целые числа в функциях
JSONExtract. Например,JSONExtract('{"a": "1000.111"}', 'a', 'UInt64')->1000, раньше функция возвращала 0. #45432 (Anton Popov). - В таблицу
system.formatsдобавлены поляsupports_parallel_parsingиsupports_parallel_formattingдля улучшения возможностей интроспекции. #45499 (Anton Popov). - Улучшено чтение полей CSV в форматах CustomSeparated и Template. Закрывает #42352 Закрывает #39620. #43332 (Kruglov Pavel).
- Унифицированы измерения времени выполнения запросов. #43455 (Raúl Marín).
- Улучшено автоматическое использование структуры из таблицы, в которую выполняется вставка, в табличных функциях file/hdfs/s3, когда в запросе SELECT присутствуют виртуальные столбцы; это исправляет возможную ошибку
Block structure mismatchилиnumber of columns mismatch. #43695 (Kruglov Pavel). - Добавлена поддержка знаковых аргументов в функции
range. Исправлена ошибка #43333. #43733 (sanyu). - Удалено избыточное сортирование, например сортировки, связанные с предложениями ORDER BY во вложенных запросах. Реализовано на основе плана запроса. Выполняет оптимизацию, аналогичную
optimize_duplicate_order_by_and_distinctв отношении предложенийORDER BY, но более общую, так как применяется к любым избыточным шагам сортировки (не только вызванным предложением ORDER BY) и к подзапросам любой глубины вложенности. Связано с #42648. #43905 (Igor Nikonov). - Добавлена возможность отключать дедупликацию файлов для BACKUP (для резервных копий без дедупликации можно использовать ATTACH вместо полного RESTORE). Например,
BACKUP foo TO S3(...) SETTINGS deduplicate_files=0(значение по умолчанию —deduplicate_files=1). #43947 (Azat Khuzhin). - Рефакторинг и улучшение определения схемы для текстовых форматов. Добавлена новая настройка
schema_inference_make_columns_nullable, которая управляет преобразованием результирующих типов вNullable(включена по умолчанию). #44019 (Kruglov Pavel). - Улучшена поддержка протокола
PROXYv1. #44135 (Yakov Olkhovskiy). - Добавлена информация о последней проверке части, выполняемой потоками очистки, в таблицу
system.parts. #44244 (Dmitry Novik). - Отключены табличные функции в режиме только для чтения для вставок. #44290 (SmitaRKulkarni).
- Добавлена настройка
simultaneous_parts_removal_limit, позволяющая ограничить количество частей, обрабатываемых за одну итерацию CleanupThread. #44461 (Dmitry Novik). - Не инициализируйте ReadBufferFromS3, если в запросе нужны только виртуальные столбцы, что может помочь с #44246. #44493 (chen).
- Предотвращено появление дублирующихся подсказок для имён столбцов. Закрывает #44130. #44519 (Joanna Hulboj).
- Разрешена подстановка макросов в endpoint для дисков. Исправлена проблема #40951. #44533 (SmitaRKulkarni).
- Улучшено определение схемы, когда включён
input_format_json_read_object_as_string. #44546 (Kruglov Pavel). - Добавлена настройка на уровне пользователя
database_replicated_allow_replicated_engine_arguments, которая позволяет запретить создание таблицReplicatedMergeTreeс аргументами вDatabaseReplicated. #44566 (alesapin). - Исключена возможность ошибочного указания пользователями нулевого (недопустимого) значения для
index_granularity. Это закрывает #44536. #44578 (Alexey Milovidov). - Добавлена возможность задавать путь к сервисному keytab-файлу в параметре
keytabсекцииkerberosфайла config.xml. #44594 (Roman Vasin). - Теперь для нечеткого поиска используется уже введённая часть запроса (она передаётся в библиотеку
skim, написанную на Rust и статически связанную с ClickHouse). #44600 (Azat Khuzhin). - Параметр
input_format_json_read_objects_as_stringsтеперь включён по умолчанию, что позволяет считывать вложенные объекты JSON, пока тип JSON Object остаётся экспериментальным. #44657 (Kruglov Pavel). - Улучшена дедупликация асинхронных вставок: при повторных асинхронных вставках мы должны выполнять дедупликацию в памяти до отправки запроса к Keeper. #44682 (Han Fei).
- Формат ввода/вывода
Avroбудет интерпретировать тип bool как тип bool в ClickHouse. #44684 (Kruglov Pavel). - Добавлена поддержка логического типа Bool в форматах Arrow/Parquet/ORC. Закрывает #43970. #44698 (Kruglov Pavel).
- Не выполняйте жадный разбор, выходящий за пределы кавычек, при чтении UUID — это может приводить к тому, что некорректные данные будут ошибочно считаны как корректные. #44686 (Raúl Marín).
- Определять тип UInt64 при переполнении Int64 и исправлять некоторые преобразования при выводе схемы. #44696 (Kruglov Pavel).
- Ранее разрешение зависимостей в базе данных
Replicatedвыполнялось не самым корректным образом, а теперь оно реализовано правильно с использованием явного графа. #44697 (Nikita Mikhaylov). - Исправлена ошибка, из-за которой
output_format_pretty_row_numbersне сохранял счётчик между блоками. Закрывает #44815. #44832 (flynn). - Не учитывать ошибки в
system.errors, возникающие из-за слияния частей, выполняемого параллельно с фоновым процессом очистки. #44874 (Raúl Marín). - Оптимизированы и исправлены метрики для асинхронного
INSERTв таблицахDistributed. #44922 (Azat Khuzhin). - Добавлены настройки для запрета одновременного выполнения резервных копирований и восстановлений, что решает проблему #43891. Реализация: * Добавлены настройки на уровне сервера для запрета одновременного выполнения резервных копирований и восстановлений, которые считываются и устанавливаются при создании BackupWorker в Context. * По умолчанию настройки установлены в значение true. * Перед запуском резервного копирования или восстановления добавлена проверка на наличие других выполняющихся операций резервного копирования/восстановления. Для внутренних запросов проверяется, что запрос поступил с собственного узла с использованием backup_uuid. #45072 (SmitaRKulkarni).
- Добавлен параметр конфигурации
<storage_policy>для системных журналов. #45320 (Stig Bakken).
Улучшения сборки/тестирования/упаковки
- Выполнена статическая линковка с библиотекой
skim(она написана на Rust) для нечеткого поиска в клиенте ClickHouse и локальной истории. #44239 (Azat Khuzhin). - Мы удалили поддержку динамического линкования из‑за Rust. На самом деле Rust — лишь предлог для этого удаления, и мы все равно хотели ее убрать. #44828 (Alexey Milovidov).
- Удалена зависимость от инструмента
adduserиз пакетов, потому что мы его не используем. Это исправляет #44934. #45011 (Alexey Milovidov). - Библиотека
SQLiteобновлена до последней версии. Она используется для интеграционных движков базы данных и таблиц SQLite. Также исправлен ложноположительный отчет TSan. Это закрывает #45027. #45031 (Alexey Milovidov). - Изменения CRC-32 для устранения проблемы коллизий WeakHash на PowerPC. #45144 (MeenaRenganathan22).
- Обновлены подмодули aws-c*. #43020 (Vitaly Baranov).
- Автоматически объединять «зеленые» backport‑PR и «зеленые» одобренные PR. #41110 (Mikhail f. Shiryaev).
- Создан веб‑сайт для отслеживания статуса ClickHouse CI. Source.
Исправления ошибок
- Доменные типы IP (IPv4, IPv6) заменены на встроенные. #43221 (Yakov Olkhovskiy). Это автоматически устраняет некоторые пробелы в реализации кода.
- Исправлен процесс резервного копирования, если мутации принудительно завершаются во время выполнения резервной копии. #45351 (Vitaly Baranov).
- Исправлено сообщение исключения
Invalid number of rows in Chunk. #41404. #42126 (Alexander Gololobov). - Исправлено возможное использование неинициализированного значения при выполнении выражений после сортировки. Закрывает #43386 #43635 (Kruglov Pavel).
- Улучшена обработка NULL в агрегатных комбинаторах, исправлены возможные ошибки: segfault (ошибка сегментации) и логическая ошибка при использовании неочевидной оптимизации
optimize_rewrite_sum_if_to_count_if. Закрывает #43758. #43813 (Kruglov Pavel). - Исправлены ограничения для настроек запросов CREATE USER/ROLE. #43993 (Nikolay Degterinsky).
- Исправлена ошибка с непарсируемым значением по умолчанию для столбца
EPHEMERALв метаданных таблицы. #44026 (Yakov Olkhovskiy). - Исправлен разбор некорректной версии из параметра совместимости. #44224 (Kruglov Pavel).
- Привести операцию вычитания интервалов из значений datetime в соответствие с операцией их добавления. #44241 (ltrk2).
- Сняты ограничения на максимальный размер результата для представлений. #44261 (lizhuoyu5).
- Исправлена возможная логическая ошибка в кэше при
do_not_evict_index_and_mrk_files=1. Закрывает #42142. #44268 (Kseniia Sumarokova). - Исправлено возможное преждевременное прекращение записи в кэш в режиме write-through (кэширование могло останавливаться из-за ошибочного предположения, хотя этого не должно было происходить). #44289 (Kseniia Sumarokova).
- Исправлен возможный сбой при использовании функции
INс константными аргументами в качестве константного аргумента вместе сLowCardinality. Исправляет #44221. #44346 (Nikolai Kochetov). - Исправлена обработка сложных параметров (например, массивов) параметрических агрегатных функций. Это исправление закрывает #30975. Агрегатная функция
sumMapFilteredне могла использоваться в распределённых запросах до этого изменения. #44358 (Alexey Milovidov). - Исправлено чтение ObjectId при определении схемы BSON. #44382 (Kruglov Pavel).
- Исправлена гонка состояний, из-за которой временные части могли преждевременно удаляться до завершения слияния в ReplicatedMergeTree. Эта проблема могла приводить к ошибкам наподобие
No such file or directory: xxx. Исправляет #43983. #44383 (alesapin). - Некоторые некорректные запросы
SYSTEM ... ON CLUSTERвели себя неожиданным образом, если имя кластера не было указано. Это исправлено: теперь такие запросы завершаются с ошибкойSYNTAX_ERROR, как и должно быть. Исправляет #44264. #44387 (Alexander Tokmakov). - Исправлено чтение типа Map в формате ORC. #44400 (Kruglov Pavel).
- Исправлена проблема с чтением столбцов, которые отсутствуют во входных данных в форматах Parquet/ORC. Ранее это могло приводить к ошибке
INCORRECT_NUMBER_OF_COLUMNS. Закрывает #44333. #44405 (Kruglov Pavel). - Ранее функция
barиспользовала один и тот же символ '▋' (U+258B "Left five eighths block") для отображения как столбика 5/8, так и столбика 6/8. Это изменение исправляет это поведение: теперь для отображения столбика 6/8 используется символ '▊' (U+258A "Left three quarters block"). #44410 (Alexander Gololobov). - Размещение настроек профиля в конфигурационном файле после ограничений для этих настроек приводило к тому, что ограничения не применялись. #44411 (Konstantин Bogdanov).
- Исправлена ошибка
SYNTAX_ERRORпри выполнении запросовEXPLAIN AST INSERTс данными. Закрывает #44207. #44413 (save-my-heart). - Исправлено чтение булевого значения при наличии CRLF в формате CSV. Закрывает #44401. #44442 (Kruglov Pavel).
- Не выполнять and/or/if/multiIf над столбцом типа LowCardinality, чтобы тип результата не мог быть LowCardinality. В некоторых случаях это могло приводить к ошибке
Illegal column ColumnLowCardinality. Исправляет #43603. #44469 (Kruglov Pavel). - Исправлена работа мутаций при использовании настройки
max_streams_for_merge_tree_reading. #44472 (Anton Popov). - Исправлена возможная ошибка разыменования нулевого указателя при использовании
GROUPING SETSвASTSelectQuery::formatImpl(#43049). #44479 (Robert Schulze). - Проверять типы в аргументах табличных функций, аргументах функции CAST и при выводе схемы JSONAsObject в соответствии с настройками. #44501 (Kruglov Pavel).
- Исправлена работа функции IN при использовании LowCardinality и константного столбца, закрыта #44503. #44506 (Duc Canh Le).
- Исправлена ошибка при нормализации выражения
DEFAULTв оператореCREATE TABLE. Второй аргумент функцииin(или правый аргумент оператораIN) мог быть заменен результатом его вычисления при выполнении запроса CREATE. Исправляет #44496. #44547 (Alexander Tokmakov). - Проекции не работают при использовании WITH ROLLUP, WITH CUBE и WITH TOTALS. В предыдущих версиях запрос приводил к исключению вместо того, чтобы просто не использовать проекции. Это исправление закрывает #44614. Это исправление закрывает #42772. #44615 (Alexey Milovidov).
- Асинхронные блоки не очищались, потому что функция
get all blocks sorted by timeне возвращала асинхронные блоки. #44651 (Han Fei). - Исправлено появление ошибки
LOGICAL_ERRORThe top step of the right pipeline should be ExpressionStepпри использовании JOIN с подзапросом, UNION и TOTALS. Устранена проблема #43687. #44673 (Nikolai Kochetov). - Предотвращено возникновение исключения
std::out_of_rangeв движке таблиц Executable. #44681 (Kruglov Pavel). - Не применять
optimize_syntax_fuse_functionsк квантилям в AST, закрыта #44712. #44713 (Vladimir C). - Исправлена ошибка, связанная с неверным типом данных в таблице Merge и PREWHERE, закрыт #43324. #44716 (Vladimir C).
- Исправлена возможная аварийная остановка при завершении работы (во время уничтожения TraceCollector). Исправление для #44757. #44758 (Nikolai Kochetov).
- Исправлена возможная аварийная остановка при распределённой обработке запросов. Сбой мог происходить, если запрос с totals или extremes возвращал пустой результат, а типы данных в таблице Distributed и соответствующих локальных таблицах не совпадали. Исправляет #44738. #44760 (Nikolai Kochetov).
- Исправлена работа fsync для операций fetch (
min_compressed_bytes_to_fsync_after_fetch) и небольших файлов (ttl.txt, columns.txt) при выполнении мутаций (min_rows_to_fsync_after_merge/min_compressed_bytes_to_fsync_after_merge). #44781 (Azat Khuzhin). - Была возможна редкая гонка состояний при выполнении запросов к таблицам
system.partsилиsystem.parts_columnsво время перемещения частей между дисками. Ошибка появилась в #41145. Исправлено в #44809 (Alexey Milovidov). - Исправлена ошибка
Context has expired, которая могла возникать при включённой оптимизации проекций. Она воспроизводилась в запросах с определёнными функциями, напримерdictHas/dictGet, использующими контекст во время выполнения. Исправление для #44844. #44850 (Nikolai Kochetov). - Исправление ошибки
Cannot read all data, которая могла возникать при чтении словаряLowCardinalityиз удалённой файловой системы. Исправляет #44709. #44875 (Nikolai Kochetov). - Игнорировать ситуации, когда не удаётся прочитать датчики мониторинга оборудования, и не выводить в логах полное сообщение об исключении. #44895 (Raúl Marín).
- Используйте значение
max_delay_to_insert, если вычисленное время задержки операции INSERT превышает это значение настройки. Связано с #44902. #44916 (Igor Nikonov). - Исправлена ошибка
Different order of columns in UNION subqueryпри выполнении запросов сUNION. Исправляет проблему #44866. #44920 (Nikolai Kochetov). - Задержка для INSERT могла рассчитываться некорректно, из‑за чего в качестве задержки всегда использовалось значение параметра
max_delay_to_insertвместо правильного. Теперь используется простая формулаmax_delay_to_insert * (parts_over_threshold/max_allowed_parts_over_threshold), то есть задержка растёт пропорционально количеству частей сверх порога. Закрывает #44902. #44954 (Igor Nikonov). - Исправлена ошибка
ALTER TABLE TTL, которая возникала, если у широкой части была маска легковесного удаления. #44959 (Mingliang Pan). - Дополнительное исправление к изменению «Replace domain IP types (IPv4, IPv6) with native» #43221. #45024 (Yakov Olkhovskiy).
- Дополнительное исправление к изменению, заменяющему доменные типы IP (IPv4, IPv6) на встроенные https://github.com/ClickHouse/ClickHouse/pull/43221. #45043 (Yakov Olkhovskiy).
- В парсере было возможно переполнение буфера. Найдено фаззером. #45047 (Alexey Milovidov).
- Исправлена потенциальная ошибка cannot-read-all-data в хранилище FileLog. Закрывает #45051, #38257. #45057 (Kseniia Sumarokova).
- Память-эффективная агрегация (настройка
distributed_aggregation_memory_efficient) отключается, когда в запросе присутствуют GROUPING SETS. #45058 (Nikita Taranov). - Исправлен словарь
RANGE_HASHED: диапазонные столбцы теперь учитываются как часть первичного ключа при обновлениях, когда указанupdate_field. Закрывает #44588. #45061 (Maksim Kita). - Исправлена ошибка
Cannot capture columnпри захвате вложенной лямбда-функцией аргумента типаLowCardinality. Исправляет #45028. #45065 (Nikolai Kochetov). - Исправлен неверный результат запроса с использованием
additional_table_filters(дополнительный фильтр не применялся) при использовании проекций minmax/count. #45133 (Nikolai Kochetov). - Исправлена ошибка в функции
histogram, принимавшей отрицательные значения. #45147 (simpleton). - Исправлена неверная NULL-допустимость столбца в
StorageJoin, закрыт #44940. #45184 (Vladimir C). - Исправлена ошибка перезагрузки настройки
background_fetches_pool_sizeпри её увеличении во время работы. #45189 (Raúl Marín). - Теперь корректно обрабатываются
SELECT-запросы для KV-движков (например, KeeperMap, EmbeddedRocksDB), использующие операторINпо ключу с подзапросом, возвращающим значение другого типа. #45215 (Antonio Andelic). - Исправлена логическая ошибка в SEMI JOIN и join_use_nulls в некоторых случаях, закрыты #45163 и #45209. #45230 (Vladimir C).
- Исправлена ошибка использования освобождённой памяти (heap-use-after-free) при чтении из S3. #45253 (Kruglov Pavel).
- Исправлена ошибка, возникающая, когда тип Avro Union имеет вид ['null', Nested type], #45275. Исправлена ошибка, из-за которой тип
bytesнекорректно выводился какFloat. #45276 (flynn). - Теперь выбрасывается корректное исключение, если явный PREWHERE не может быть использован с таблицей с движком
Merge. #45319 (Antonio Andelic). - В Ubuntu под WSL1 самораспаковывающийся дистрибутив ClickHouse не может распаковаться из‑за несоответствия:
/proc/self/mapsсообщает об inode 32‑битного файла, тогда какstat— о 64‑битном inode. #45339 (Yakov Olkhovskiy). - Исправлена гонка при запуске distributed таблицы (которая могла приводить к тому, что файл асинхронного
INSERTобрабатывался несколько раз). #45360 (Azat Khuzhin). - Исправлена возможная аварийная остановка при чтении из хранилища
S3и при использовании табличной функцииs3, если запросListObjectзавершился с ошибкой. #45371 (Anton Popov). - Исправлено исключение при выполнении
SELECT ... FROM system.dictionaries, возникавшее, если существует словарь с некорректной структурой (например, с неправильным типом в XML-конфигурации). #45399 (Aleksei Filatov). - Исправлено определение схемы в s3Cluster при использовании структуры таблицы назначения в запросах
INSERT INTO ... SELECT * FROM s3Cluster. #45422 (Kruglov Pavel). - Исправлена ошибка разбора JSON/BSONEachRow по HTTP, из-за которой для некоторых столбцов могли использоваться значения по умолчанию вместо значений из данных. #45424 (Kruglov Pavel).
- Исправлена ошибка (Code: 632. DB::Exception: Unexpected data ... after parsed IPv6 value ...) при типизированном разборе IP-адресов из текстового источника. #45425 (Yakov Olkhovskiy).
- закрывает #45297 Добавлена проверка на пустые регулярные выражения. #45428 (Han Fei).
- Исправлено возможное зависание распределённого запроса. #45448 (Azat Khuzhin).
- Исправлена возможная взаимоблокировка при включённой настройке
allow_asynchronous_read_from_io_pool_for_merge_treeпри возникновении исключения вThreadPool::schedule. #45481 (Nikolai Kochetov). - Исправлена потенциальная проблема, при которой таблица могла оставаться используемой после DETACH. #45493 (Azat Khuzhin).
- Исправлено редкое аварийное завершение в случае, когда запрос был отменён и при его выполнении использовался параллельный парсинг. #45498 (Anton Popov).
- Исправлено состояние гонки между созданием distributed таблицы и выполнением INSERT в неё (оно могло приводить к ошибке CANNOT_LINK при выполнении INSERT в таблицу). #45502 (Azat Khuzhin).
- Установлено корректное значение по умолчанию (SLRU) для геттера политики кэширования. Закрывает #45514. #45524 (Kseniia Sumarokova).
- Запрещено использование
ARRAY JOINв мутациях, закрывает #42637 #44447 (SmitaRKulkarni). - Исправление обработки квалифицированных звёздочек при использовании псевдонима таблицы и трансформера столбцов. Устраняет #44736. #44755 (SmitaRKulkarni).