Журнал изменений за 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).
Новая возможность
- Реализована поддержка обновляемых материализованных представлений, запрошенных в #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, которая позволяет принудительно применить маску, созданную операцией lightweight delete, и удалить с диска строки, помеченные как удалённые. #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).
Повышение производительности
- Во время обработки FINAL извлекаются диапазоны частей таблицы MergeTree, которые не пересекаются между собой. Таким образом можно избежать дополнительной логики FINAL для этих непересекающихся диапазонов частей. В случае, когда количество дублирующихся значений с одинаковым первичным ключом невелико, производительность будет почти такой же, как без FINAL. Улучшена производительность чтения для MergeTree с FINAL, когда установлена настройка
do_not_merge_across_partitions_select_final. #58120 (Maksim Kita). - Реализовано копирование между дисками S3 с использованием серверного копирования на стороне S3 вместо копирования через буфер. Улучшает операции
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). - Лимит на количество подключений на эндпоинт для фоновых выборок увеличен с
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перенесены на уровень сервера. - Настройкаkeep_alive_timeoutдобавлена в список серверных настроек. #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).
- Вставки в распределённые таблицы теперь корректно обрабатывают обновления конфигурации кластера. Когда список узлов кластера динамически изменяется, Directory Monitor распределённой таблицы обновляет его. #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).
- Добавлена поддержка флага только для чтения при подключении к 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).
- Параллельные реплики (экспериментальная функция): улучшена обработка ответов на объявления #57749 (Igor Nikonov).
- Параллельные реплики (экспериментальная функция): улучшен учет
min_number_of_marksвParallelReplicasReadingCoordinator#57763 (Nikita Taranov). - Параллельные реплики (экспериментальная функция): отключить параллельные реплики для IN (подзапроса) #58133 (Igor Nikonov).
- Параллельные реплики (экспериментальная возможность): добавлено событие профилирования 'ParallelReplicasUsedCount' #58173 (Igor Nikonov).
- Непостовые запросы, такие как 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», обнаруженной Fuzzer. #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при чтении подстолбцов из wide-части в 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. Если вы использовали эту функцию внутри материализованных представлений или проекций с аргументами типаDecimal, свяжитесь с support@clickhouse.com. Исправлена ошибка в агрегатной функции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, аналогичная функции MySQLFROM_DAYS. Например,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). - Экспортирует количество ошибок по каждому коду, возникших на сервере с момента последнего перезапуска, через 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 (CPU 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для чтения из внешнего хранилища по умолчанию используется стандартный пул чтения. Это полезно при включённой опережающей выборке (read prefetch). #57334 (Nikita Taranov). - Keeper improvement: снижено потребление памяти при запуске за счет отложенной предварительной обработки логов. #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 — такие значения лучше подходят для эксплуатации в production-среде при частых небольших вставках. #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 до релиза release-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). - Разрешить создавать бэкап материализованного представления с удалённой внутренней таблицей вместо ошибки при создании бэкапа. #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— это перечислимый тип с тремя значениями, который определяет, как кэш запросов обрабатывает запросы с недетерминированными функциями: a) выбрасывать исключение (поведение по умолчанию), b) сохранять результат недетерминированного запроса в любом случае или c) игнорировать, то есть не выбрасывать исключение и не кэшировать результат. #56519 (Robert Schulze). - Переписывать сравнение с проверкой на
is nullв секции JOIN ON. Экспериментально, только Analyzer. #56538 (vdimir). - Функция
concatтеперь поддерживает аргументы произвольных типов (а не только аргументы типов String и FixedString). Это делает её поведение более похожим на реализациюconcatв MySQL. Например,SELECT concat('ab', 42)теперь возвращаетab42. #56540 (Serge Klochkov). - Добавлена возможность получать конфигурацию кэша из секции 'named_collection' в конфигурации или из созданных через SQL именованных коллекций. #56541 (Kseniia Sumarokova).
- Движок базы данных PostgreSQL: удаление устаревших таблиц стало менее агрессивным при неудачном подключении к Postgres. #56609 (jsc0218).
- Подключение к PG занимало слишком много времени при неверном 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: изменено поведение обработки отказов страниц — теперь выполняется переход на программный путь (SW path). #57291 (jasperzhu). - Увеличено значение по умолчанию параметра MergeTree
replicated_deduplication_windowсо 100 до 1k. #57335 (sichenzhao). - Старайтесь реже использовать
INCONSISTENT_METADATA_FOR_BACKUP. По возможности продолжайте сканирование вместо того, чтобы останавливать его и запускать сканирование для резервного копирования заново с самого начала. #57385 (Vitaly Baranov).
Улучшение сборки/тестирования/упаковки
- Добавлен тест SQLLogic. #56078 (Han Fei).
- Добавлены короткие имена (
ch,chl,chc) для удобного использованияclickhouse-localиclickhouse-client. #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).
- Использовать отладочные символы DWARF 5 для исполняемого файла clickhouse (ранее использовался 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). - Включена temporary_data_in_cache в S3-тестах в CI. #48425 (vdimir).
- Установлен максимальный объём памяти для clickhouse-client (
1G) в CI. #56873 (Nikita Mikhaylov).
Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе)
- Исправлен экспериментальный Analyzer — оператор
INSERT ... SELECTс подзапросом, ссылающимся на таблицу, в которую выполняется вставка, должен обрабатывать только вставляемый блок данных. #50857 (Yakov Olkhovskiy). - Исправлена ошибка в функции
str_to_map. #56423 (Arthur Passos). - Keeper
reconfig: добавить тайм-аут перед отказом от/получением лидерства #53481 (Mike Kot). - Исправлен некорректный заголовок в операциях grace hash join и filter pushdown #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).
- Исправлена ошибка сегментации во время инициализации 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 при выполнении insert into function #56710 (Kruglov Pavel).
- Исправлена обработка текстового представления типа Date в оптимистическом пути #56765 (Kruglov Pavel).
- Исправлен сбой кодека FPC #56795 (Alexey Milovidov).
- DatabaseReplicated: исправлено истечение времени ожидания DDL-запроса после восстановления реплики #56796 (Alexander Tokmakov).
- Исправлена некорректная передача сведений о столбцах с типом Nullable в бинарном протоколе MySQL #56799 (Serge Klochkov).
- Добавлена поддержка файлов метаданных Iceberg для таблиц metastore #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 для столбцов проекций #56948 (Amos Bird).
- Исправлена проверка корректности пути к файлу SQLite #56984 (San).
- S3Queue: исправлен инкремент счётчика ссылок на метаданные #56990 (Kseniia Sumarokova).
- Небольшое исправление в S3Queue #56999 (Kseniia Sumarokova).
- Исправлена проверка пути к файлу для DatabaseFileSystem #57029 (San).
- Исправлен
fuzzBitsпри использованииARRAY JOIN#57033 (Antonio Andelic). - Исправлена ошибка разыменования nullptr при partial 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 и максимального набора для отслеживаемых файлов — теперь это фоновый процесс. Добавлены таблицы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). - Если таблица имеет в своём ключе кривую, заполняющую пространство (space-filling curve), например
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. Реализация первой фазы уже объединена. #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). - Добавлены столбцы
substreamsиfilenamesв таблицуsystem.parts_columns. #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 (на уровне групп строк). #55330 (李扬).
- Улучшена производительность внешней агрегации при большом числе временных файлов. #55489 (Maksim Kita).
- По умолчанию задан разумный размер кэша меток для вторичных индексов, чтобы избежать повторной загрузки меток. #55654 (Alexey Milovidov).
- Избегать ненужной реконструкции гранул индекса при чтении пропускающих индексов. Это устраняет #55653. #55683 (Amos Bird).
- Кэшировать функцию CAST в наборе во время выполнения для повышения производительности функции
IN, когда тип элементов набора не совпадает с типом столбца. #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 могут на заметное время загружать ЦП на 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 будет отклонена на этапе создания (так как срок жизни не имеет смысла для прямых словарей). Исправления: #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).
- На данный момент анализ проекций будет выполняться только на основе плана запроса. Настройка
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", если количество строк равно нулю и при этом было выброшено исключение. #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 проверяет набор частей (parts) на наличие неожиданных частей (существуют локально, но отсутствуют в 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, будучи отключённой, позволяет читать строки, которые были помечены как удалённые легковесными запросами 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(regex), из‑за которой шаблон, содержащий альтернативу, приводил к некорректному ключевому условию. Закрывает #53222. #54696 (Yakov Olkhovskiy). - Исправлена ошибка 'Cannot find column' в оптимизации чтения по порядку (read-in-order) с 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).
- Исправлено отсечение партиций по дополнительным столбцам в наборе. #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). - Исправлена ошибка, из-за которой было невозможно удалить отсоединённую партицию в
ReplicatedMergeTreeповерх S3 без zero copy #55309 (alesapin). - Исправлен сбой в MergeSortingPartialResultTransform (из-за нулевых чанков после
remerge) #55335 (Azat Khuzhin). - Исправлена гонка данных в CreatingSetsTransform (при ошибках) из-за выбрасывания разделяемого исключения #55338 (Azat Khuzhin).
- Исправлена оптимизация очистки мусора (в определённой степени) #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).
- Исправлен индикатор прогресса для функций S3Cluster и AzureCluster при использовании 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). - Попытка исправить возможную ошибку сегментации в формате ввода Native ORC #55891 (Kruglov Pavel).
- Исправлены оконные функции для разрежённых столбцов. #55895 (János Benjamin Antal).
- исправлено: 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).
- В таблицы MergeTree добавлен новый столбец
_block_number. #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 denominator", как новый кодек сжатия данных. Кодек вычисляет НОД всех значений столбца, а затем делит каждое значение на НОД. Кодек GCD является кодеком подготовки данных (аналогично Delta и DoubleDelta) и не может использоваться самостоятельно. Он работает с целочисленными, десятичными и типами данных дата/время. Характерный вариант использования кодека GCD — столбцы, значения которых изменяются (увеличиваются/уменьшаются) кратно НОД, например: 24 - 28 - 16 - 24 - 8 - 24 (предполагая, что НОД = 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 за счет включения опережающей выборки (prefetch) по умолчанию. #53709 (Alexey Milovidov).
- Не считывать неявно столбцы первичного ключа и версии в отдельных партах, если это не требуется для запросов с FINAL. #53919 (Duc Canh Le).
- Оптимизировано
GROUP BYс константными ключами. Оптимизирует запросы сGROUP BYпо_file/_pathпосле https://github.com/ClickHouse/ClickHouse/pull/53529. #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 Taranov). - Исправлено чрезмерное потребление CPU при работе с NATS. #54399 (Vasilev Pyotr).
- Поскольку для выполнения
toStringс аргументом типа DateTime используется отдельная логика, можно немного повысить производительность для аргументов других типов и сделать часть кода чище. Продолжение #53680. #54443 (Yarik Briukhovetskyi). - Вместо сериализации элементов JSON в
std::stringstreamэтот PR записывает результат сериализации напрямую вColumnString. #54613 (lgbo). - Включена оптимизация ORDER BY для чтения данных в соответствующем порядке из таблицы MergeTree, если таблица используется через представление. #54628 (Vitaly Baranov).
- Улучшены SQL‑функции для JSON благодаря переиспользованию
GeneratorJSONPathи удалению нескольких умных указателей с разделяемой собственностью. #54735 (lgbo). - Keeper пытается объединять запросы flush в батчи для повышения производительности. #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). - В режиме parallel replicas при работе с распределёнными таблицами чтение больше не выполняется со всех реплик. #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: в 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). - Добавлен
modification_timeвsystem.detached_parts. #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). - В команду
rmутилитыkeeper-clientдобавлен необязательный аргументversionдля более безопасного удаления. #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). - Всегда разрешать создание проекции с первичным ключом типа
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 до Clang 17. #53831 (Robert Schulze).
- Повторно сгенерированы TLD-данные для поиска (
tldLookup.generated.cpp). #54269 (Bharat Nallan). - Удалена избыточная символьная ссылка
clickhouse-keeper-client. #54587 (Tomas Barton). - Используется
/usr/bin/envдля поиска интерпретатора bash — теперь поддерживается Nix OS. #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 без padding’а, тогда как Turbo-Base64 пытается декодировать их по принципу best effort. RFC-4648 прямо не устанавливает, является ли padding обязательным, но в зависимости от контекста это может быть изменением поведения, о котором следует помнить. #54119 (Mikhail Koviazin).
Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе)
- Исправлена работа REPLACE/MOVE PARTITION с репликацией без копирования данных (примечание: «zero-copy replication» — экспериментальная возможность) #54193 (Alexander Tokmakov).
- Исправлены блокировки zero-copy с помощью жёстких ссылок (примечание: «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).
- Исправлены инициализация обнаружения кластера и настройка fail points (точек отказа) в конфигурации #54113 (vdimir).
- Исправлены ошибки в
accurateCastOrNull#54136 (Salvatore Mesoraca). - Исправлена работа nullable-первичного ключа с модификатором FINAL #54164 (Amos Bird).
- Исправлена ошибка, из-за которой при наличии дубликатов данных не выполнялась вставка новых данных в реплицируемое материализованное представление. #54184 (Pedro Riera).
- Исправлено: добавлена поддержка
IPv6для фильтра Блума #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). - Исправлена ошибка сегментации в оптимизации AST функции
arrayExists#54379 (Nikolay Degterinsky). - Добавлена проверка на переполнение перед сложением в функции
analysisOfVariance#54385 (Antonio Andelic). - Воспроизвести и исправить ошибку в removeSharedRecursive #54430 (Sema Checherinda).
- Исправлена возможная некорректность результата при использовании
SimpleAggregateFunctionвPREWHEREиFINAL#54436 (Azat Khuzhin). - Исправлена фильтрация частей с indexHint для non 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).
- Исправлено использование структуры таблиц для вставки при значениях по умолчанию и явном указании столбцов вставки #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). - Fix: вставка с кворумом без повторных попыток 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 для соединений с высокой задержкой. Обратно несовместимое изменение: опция JSON-выводаclickhouse-benchmarkудалена. Если вы использовали эту опцию, в качестве обходного пути вы можете извлекать данные из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). Он ещё не готов к использованию. Не используйте его. - Добавлена поддержка параллельного чтения с реплик через распределённую таблицу. Связано с #49708. #53005 (Igor Nikonov).
- Добавлена экспериментальная поддержка HNSW как метода приблизительного поиска ближайших соседей. #53447 (Davit Vardanyan). В настоящее время предназначена для тех, кто продолжает работу над реализацией. Не используйте это.
Повышение производительности
- Проталкивание фильтров в Parquet. То есть при чтении файлов формата Parquet группы строк (части файла) пропускаются в зависимости от условия WHERE и min/max значений в каждом столбце. В частности, если файл примерно отсортирован по определённому столбцу, запросы с фильтрацией по короткому диапазону значений этого столбца будут выполняться значительно быстрее. #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). - Оптимизирована производительность агрегации по строковому ключу, допускающему NULL, при использовании большого числа ключей переменной длины. #51399 (LiuNeng).
- Добавлен проход в Analyzer для оптимизации временного фильтра с использованием preimage. Эксперименты по производительности SSB на устройстве ICX (CPU Intel Xeon Platinum 8380, 80 ядер, 160 потоков) показывают, что это изменение может дать повышение геометрического среднего значения QPS на 8,5 % при включённом экспериментальном анализаторе. #52091 (Zhiguo Zhou).
- Оптимизировать операцию слияния в функции
uniqExact(COUNT DISTINCT), если все хеш-наборы одноуровневые. #52973 (Jiebin Sun). - Движок таблицы
Join: не клонировать структуру данных хеш‑соединения со всеми столбцами. #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и таблицу Merge. #48990 (Jianfei Hu). - Размеры кэшей несжатых индексов (index), mark, mmap и query теперь можно динамически конфигурировать во время работы (без перезапуска сервера). #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 может читать большой объём данных, и нет смысла помещать все данные в кэш файловой системы и тут же их вытеснять). #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и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).
- Добавлена возможность отключать выполнение
flushдля 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 попытается найти строку подключения в файле ClickHouse config.xml. #53769 (pufit).
- Добавлено профильное событие
PartsLockMicroseconds, отражающее количество микросекунд, в течение которых удерживается блокировка частей данных в семействе движков таблиц MergeTree. #53797 (alesapin). - Сделан настраиваемым лимит числа попыток переподключения в RAFT для keeper. Этот параметр конфигурации может помочь keeper быстрее восстанавливать соединение с пирами при обрыве текущего соединения. #53817 (Pengyuan Bian).
- Игнорировать внешние ключи в определениях таблиц, чтобы повысить совместимость с MySQL и избавить пользователя от необходимости переписывать часть SQL, связанную с внешними ключами, см. #53380. #53864 (jsc0218).
Улучшение сборки/тестирования/упаковки
- Не экспортировать символы бинарного файла ClickHouse для динамического линковщика. Это может исправить #43933. #47475 (Alexey Milovidov).
- Добавлена символьная ссылка
clickhouse-keeper-clientв пакет clickhouse-server. #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).
- Исправлен ошибочный разбор запятой как части значения datetime при разборе CSV в режиме best effort #51950 (Kruglov Pavel).
- Не выбрасывать исключение при наличии параметров у исполняемой UDF #51961 (Nikita Taranov).
- Исправлен перерасчёт пропускающих индексов и проекций в запросах
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). - Исправлен неожиданный результат сортировки по нескольким столбцам с вариантом размещения NULL-значений сначала (NULLS FIRST) #52761 (copperybean).
- Исправлена гонка данных при перенастройке Keeper #52804 (Antonio Andelic).
- Исправлена сортировка разреженных столбцов с большим значением
LIMIT#52827 (Anton Popov). - clickhouse-keeper: исправлена реализация сервера с использованием poll. #52833 (Andy Fiddaman).
- Анализатор regexp теперь распознаёт именованные группы захвата #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при асинхронном сбросе запросов #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 NORMAL-проекции #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).
- Исправлено возможное неопределённое поведение в пропускающем индексе 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). - Исправлено зависание кэша подготовленных наборов в конвейере мутаций #53645 (Nikolai Kochetov).
- Исправлена ошибка в мутациях с подколонками типа JSON в предикатах запросов UPDATE и DELETE. #53677 (VanDarkholme7).
- Исправлено проталкивание фильтров для соединения full_sorting_merge join #53699 (vdimir).
- Попытка исправить ошибку в
NULL::LowCardinality(Nullable(...)) NOT IN#53706 (Andrey Zvonov). - Исправление: сортированного 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 после понижения версии (но обратите внимание, что обычно таких необработанных записей быть не должно). #52128 (Azat Khuzhin). - Проверка метаданных проекций теперь выполняется так же, как проверка обычных метаданных. Это изменение может помешать запуску сервера в случае, если была таблица с некорректной проекцией. Пример — проекция, которая создала позиционные столбцы в PK (например,
projection p (select * order by 1, 4), что не допускается в PK таблицы и может вызвать сбой при вставке/слиянии). Удалите такие проекции до обновления. Исправляет #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). - В таблицу
system.settingsи аналогичные таблицы добавлен столбецis_obsolete. Закрывает #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). - Расширено проталкивание условий на правую сторону соединения. #50532 (Nikita Taranov).
- Улучшено соединение grace_hash за счёт резервирования размера хеш-таблицы (повторная отправка). #50875 (lgbo).
- Ожидание блокировки в
OpenedFileCacheиногда заметно сказывалось. Мы шардировали его на несколько подотображений (каждое со своей блокировкой), чтобы уменьшить конкуренцию за блокировку. #51341 (Nikita Taranov). - Перемещайте условия со столбцами первичного ключа (PK) в конец цепочки PREWHERE. Идея в том, что условия со столбцами PK, скорее всего, будут использоваться в PK-анализе и не дадут заметного дополнительного эффекта для фильтрации PREWHERE. #51958 (Alexander Gololobov).
- Ускорена операция
COUNT(DISTINCT)для типов String за счёт инлайнинга SipHash. Эксперименты по производительности OnTime на устройстве ICX (процессор Intel Xeon Platinum 8380, 80 ядер, 160 потоков) показывают, что это изменение даёт улучшение на 11.6% по QPS запроса Q8 без влияния на другие запросы. #52036 (Zhiguo Zhou). - По умолчанию включена настройка
allow_vertical_merges_from_compact_to_wide_parts. Это снижает потребление памяти во время слияний. #52295 (Alexey Milovidov). - Исправлен некорректный анализ проекций, который делал первичные ключи недействительными. Эта проблема возникала только при
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). - Разрешено использование оператора
FETCHстандарта SQL без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).
- Исправлено поведение на странице дашборда, при котором ошибки, не связанные с аутентификацией, не отображались. Также исправлено поведение диаграммы в режиме «overlapping». #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).
- Целые числа, кодируемые с помощью VarInt (например, используемого нативным протоколом), теперь могут использовать весь 64-битный диапазон значений. Сторонним клиентам рекомендуется обновить свой код работы с VarInt соответствующим образом. #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-адресов и первый из них недоступен, возникало исключение по таймауту. Реализовано создание сессии с обработкой всех разрешённых 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).
- Возвращён отсутствующий projection QueryAccessInfo при
query_plan_optimize_projection = 1, что исправляет #50183. Это также исправляет #50093. #52327 (Amos Bird). - Когда
ZooKeeperRetriesControlповторно выбрасывает ошибку, гораздо полезнее видеть её исходный стек-трейс, а не тот, который формируется в самомZooKeeperRetriesControl. #52347 (Vitaly Baranov). - Ожидать блокировку zero-copy репликации, даже если некоторые диски её не поддерживают. #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). Этот синтаксис может быть изменён в этом релизе. - (экспериментальный MaterializedMySQL) Исправлен сбой при использовании
mysqlxx::Pool::Entryпосле его отключения. #52063 (Val Doroshchuk). - (экспериментальный MaterializedMySQL)
CREATE TABLE ... AS SELECTтеперь поддерживается в MaterializedMySQL. #52067 (Val Doroshchuk). - (экспериментальный MaterializedMySQL) Введена автоматическая конверсия текстовых типов в UTF-8 для MaterializedMySQL. #52084 (Val Doroshchuk).
- (экспериментальный MaterializedMySQL) Теперь в DDL для MaterializedMySQL поддерживаются строки в UTF-8, не заключённые в кавычки. #52318 (Val Doroshchuk).
- (экспериментальный MaterializedMySQL) Теперь в MaterializedMySQL поддерживаются комментарии в двойных кавычках. #52355 (Val Doroshchuk).
- Обновлён Intel QPL с v1.1.0 до v1.2.0, обновлён Intel accel-config с v3.5 до v4.0, исправлена проблема, при которой пропуск 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).
Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе)
- Исправлена синхронизация таблиц в MaterializedPostgreSQL #49698 (Kseniia Sumarokova).
- Исправлена работа проекций с параметром 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).
- Исправлен таймаут для резервных запросов (hedged requests) #51582 (Azat Khuzhin).
- Исправлена логическая ошибка в соединении ANTI JOIN с NULL #51601 (vdimir).
- Исправлен перенос условий IN в PREWHERE #51610 (Alexander Gololobov).
- Не применять оптимизатор PredicateExpressionsOptimizer к ASOF/ANTI join #51633 (vdimir).
- Исправлена асинхронная вставка с дедупликацией в ReplicatedMergeTree с использованием алгоритмов слияния #51676 (Antonio Andelic).
- Исправлено чтение из пустого столбца в функции
parseSipHashKey#51804 (Nikita Taranov). - Исправлена ошибка сегментации (segfault) при создании некорректной таблицы 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).
- Проверять счётчик ссылок в
RemoveManyObjectStorageOperation::finalizeвместоexecute#51954 (vdimir). - Добавлена поддержка параметрических UDF #51964 (Alexey Milovidov).
- Небольшое исправление функции toDateTime64() для дат после 2283-12-31 #52130 (Andrey Zvonov).
- Исправлен кортеж ORDER BY в оконных функциях #52145 (Alexey Milovidov).
- Исправлен некорректный анализ проекций, когда выражение агрегации содержит монотонные функции #52151 (Amos Bird).
- Исправлена ошибка в функциях
groupArrayMoving#52161 (Alexey Milovidov). - Отключено прямое соединение (direct join) для словаря диапазонов (range dictionary) #52187 (Duc Canh Le).
- Исправлен тест sticky mutations (и крайне редкое условие гонки) #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при пустой подстроке и столбце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). - Исправлена проблема с выполнением операции LIGHTWEIGHT DELETE после удаления проекции #52517 (Anton Popov).
- Исправлена потенциальная ошибка "Cannot drain connections: cancel first" #52585 (Kruglov Pavel).
Релиз 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). - Реализовано проталкивание фильтра через
CROSS JOIN. #50605 (Han Fei). - Повышена производительность при включённом QueryProfiler за счёт использования
thread-localtimer_idвместо глобального объекта. #48778 (Jiebin Sun). - Переписан формат ввода/вывода CapnProto для повышения его производительности. Имена столбцов и поля CapnProto сопоставляются без учёта регистра, исправлено чтение/запись полей вложенных структур. #49752 (Kruglov Pavel).
- Оптимизирована производительность записи в Parquet при работе параллельных потоков. #50102 (Hongbin Ma).
- Отключён
parallelize_output_from_storagesдля обработки материализованных представлений (MATERIALIZED VIEW) и хранилищ только с одним блоком. #50214 (Azat Khuzhin). - Объединён PR #46558. Теперь перестановка блоков при сортировке не выполняется, если блок уже отсортирован. #50697 (Alexey Milovidov, Maksim Kita).
- Выполняются несколько запросов на получение списка в ZooKeeper параллельно для ускорения чтения из таблицы system.zookeeper. #51042 (Alexander Gololobov).
- Ускорена инициализация таблиц поиска значений DateTime для часовых поясов. Это должно сократить время запуска/подключения clickhouse-client, особенно в debug-сборке, так как операция достаточно тяжёлая. #51347 (Alexander Gololobov).
- Исправлено снижение производительности в озёрах данных (data lakes) из‑за синхронных запросов HEAD (связано с медленной работой Iceberg/Deltalake/Hudi при большом количестве файлов). #50976 (Kseniia Sumarokova).
- Не выполняется чтение всех столбцов из правой таблицы
GLOBAL JOIN. #50721 (Nikolai Kochetov).
Экспериментальная функциональность
- Добавлена поддержка параллельных реплик с использованием анализатора (analyzer). #50441 (Raúl Marín).
- Добавлено случайное ожидание перед выполнением крупных слияний/мутаций для более равномерного распределения нагрузки между репликами в случае репликации без копирования (zero-copy replication). #51282 (alesapin).
- Запросы
ALTER PARTITIONи мутации не реплицируются через базу данныхReplicated, если у неё только один шард и базовая таблица —ReplicatedMergeTree. #51049 (Alexander Tokmakov).
Улучшение
- Ослаблены пороги для состояния «too many parts», чтобы соответствовать современным требованиям. Восстановлен механизм обратного давления (backpressure) во время длительных запросов INSERT. #50856 (Alexey Milovidov).
- Разрешено приводить IPv6-адреса к IPv4-адресам для CIDR ::ffff:0:0/96 (IPv4-отображаемые адреса). #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).
Улучшения сборки/тестирования/упаковки
- Во встроенный standalone-бинарник keeper добавлен embedded 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. Обновлена версия golang для устранения уязвимостей golang. #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).
- Кэш запросов: попытка исправить некорректное приведение типов из
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" удалена. Формат данных по‑прежнему поддерживается, но настройки больше не оказывают эффекта, и вместо него будут использоваться compact‑ или wide‑части. Это закрывает #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 для уменьшения дублирования кода. Реализован вывод схемы (schema inference) для всех возможных сигнатур функций *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 Solodovnikov). - Географические типы данных (
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). - Добавлена поддержка полного и правого соединения с использованием алгоритма 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для словарей на основе деревьев regexp возвращать значения для нескольких совпадений в виде массивов. Закрывает #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).
- Используйте агрегирующую проекцию только в том случае, если при чтении она затрагивает меньше гранул, чем обычное чтение таблицы. Это должно помочь, если запрос попадает в первичный ключ (PK) таблицы, но не в проекцию. Исправляет #49150. #49417 (Nikolai Kochetov).
- Не хранить блоки в
ANYhash join, если ничего не вставлено. #48633 (vdimir). - Исправлена работа агрегатного комбинатора
-Ifпри JIT-компиляции и включена JIT-компиляция агрегатных функций. Закрывает #48120. #49083 (Igor Nikonov). - Для чтения из удалённых таблиц мы используем более мелкие задачи (вместо чтения целой части), чтобы эффективнее работал механизм task stealing; * размер задачи определяется размером читаемых столбцов; * всегда используем буферы размером 1 МБ для чтения из S3; * границы сегментов кэша выровнены по 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до двух раз в отдельных сценариях, особенно при соединении небольшой левой таблицы с большой правой. #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, что позволяет повысить производительность реплицируемых таблиц. #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).
- Parallel Replicas: 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на уровне запроса и включает асинхронные вставки для конкретной таблицы. Примечание: она не действует для запросов INSERT, выполняемых черезclickhouse-client; в этом случае используйте настройку на уровне запроса. #49122 (Anton Popov). - Добавлена поддержка суффиксов размеров в параметрах оператора создания квоты. #49087 (Eridanus).
- Расширены функции
first_valueиlast_valueдля поддержки значения NULL. #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, совместимая с S3, для Google Cloud Storage. Как и функцииossиcosn, она является лишь псевдонимом для табличной функцииs3и не добавляет новых возможностей. #47815 (Kuba Kaflik). - Добавлена возможность использовать строгий размер частей для S3 (совместимость с Cloudflare R2 S3 Storage). #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 после многокомпонентной загрузки в GCS. Это позволяет использовать операцию копирования для объектов, загруженных с помощью многокомпонентной загрузки. Рекомендуется задать для
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. Это позволяет вычислять расстояние Хэмминга по большим битовым маскам в приложениях ИИ. #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-групп. Compute-группа, рассматриваемая как кластер, невидима для других 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- для каждого запроса или подзапроса в 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 до версии 1.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).
- Проверка конкурентного выполнения операций Back/Restore при предыдущих сбоях #48726 (SmitaRKulkarni).
- Исправлена ошибка, из-за которой присоединение таблицы с несуществующим ZK-путём не увеличивало метрику ReadonlyReplica #48954 (wangxiaobo).
- Исправлены возможные вызовы функции terminate при необработанных исключениях в некоторых местах #49112 (Kruglov Pavel).
- Исправлена ошибка «ключ не найден» для запросов с несколькими 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-словарей с SHARDS #49319 (Azat Khuzhin). - Запретить настройку кодеков сжатия для столбцов-алиасов #49363 (Timur Solodovnikov).
- Исправлена ошибка при удалении каталога существующей части #49365 (alesapin).
- Исправлена работа GCS при использовании HMAC #49390 (Antonio Andelic).
- Исправлена ошибка fuzz‑тестирования, из‑за которой набор подзапроса не строился при чтении из remote() #49425 (Alexander Gololobov).
- Инвертировано значение настройки
shutdown_wait_unfinished_queries#49427 (Konstantin Bogdanov). - (Экспериментальная репликация с нулевым копированием) Исправлена ещё одна ошибка, связанная с нулевым копированием #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).
- Исправлен стресс-тест (логическая ошибка: Expected 7134 >= 11030) #49623 (Kseniia Sumarokova).
- Исправлена ошибка в операторе DISTINCT #49628 (Alexey Milovidov).
- Исправлено: DISTINCT в ORDER BY с нулевыми значениями в неотсортированных столбцах #49636 (Igor Nikonov).
- Исправлена off-by-one ошибка в больших целых числах, обнаруженная UBSan вместе с фаззером #49645 (Alexey Milovidov).
- Исправлена ошибка чтения разрежённых столбцов после перезапуска #49660 (Anton Popov).
- Исправлен assert в SpanHolder::finish() при работе с fibers #49673 (Kruglov Pavel).
- Исправлены функции с укороченным вычислением и мутации с разрежёнными аргументами #49716 (Anton Popov).
- Исправлена запись добавленных файлов при создании инкрементных резервных копий #49725 (Vitaly Baranov).
- Исправлена ошибка "There is no physical column _row_exists in table", возникающая при выполнении мутации lightweight delete над таблицей с колонкой типа Object. #49737 (Alexander Gololobov).
- Устранена ошибка msan в randomStringUTF8(uneven number) #49750 (Robert Schulze).
- Исправлена агрегатная функция kolmogorovSmirnovTest #49768 (FFFFFFFHHHHHHH).
- Исправлены алиасы настроек в нативном протоколе #49776 (Azat Khuzhin).
- Исправлена работа
arrayMapс массивом кортежей из одного элемента #49789 (Anton Popov). - Исправлены настройки лимитирования ввода-вывода и резервного копирования для отдельных запросов #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).
- Исправлено формирование отчётов о повреждённых частях проекций #50052 (Amos Bird).
- Исправление JIT-компиляции оператора «!= 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). - Исправлено неопределённое поведение в расширениях 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).
- Исправление JIT-агрегации с ключом типа Nullable #50291 (Maksim Kita).
- Исправлена ошибка, из-за которой clickhouse-local падал при записи пустого вывода в форматах Arrow или Parquet #50328 (Michael Kolupaev).
- Исправлено падение при вызове Pool::Entry::disconnect() #50334 (Val Doroshchuk).
- Улучшена операция fetch части за счёт более длительного удержания блокировки каталога #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. Алгоритм Greenwald–Khanna описан в http://infolab.stanford.edu/~datar/courses/cs361a/papers/quantiles.pdf. #46428 (李扬). - Добавлен оператор
SHOW COLUMNS, показывающий сводную информацию из system.columns. #48017 (Robert Schulze). - Добавлены модификаторы
LIGHTWEIGHTиPULLдля запросаSYSTEM SYNC REPLICA. ВерсияLIGHTWEIGHTожидает только загрузки данных (fetches) и операции удаления диапазонов (drop-ranges) (слияния и мутации игнорируются). ВерсияPULLполучает новые записи из ZooKeeper и не дожидается их обработки. Исправлена #47794. #48085 (Alexander Tokmakov). - Добавлена функция
kafkaMurmurHashдля совместимости со стандартным партиционером Kafka (DefaultPartitioner). Закрывает #47834. #48185 (Nikolay Degterinsky). - Добавлена возможность легко создавать пользователя с теми же правами, что и у текущего пользователя, с помощью
GRANT CURRENT GRANTS. #48262 (pufit). - Добавлена статистическая агрегатная функция
kolmogorovSmirnovTest. Закрывает #48228. #48325 (FFFFFFFHHHHHHH). - Добавлен столбец
lost_part_countв таблицуsystem.replicas. Значение столбца показывает общее количество потерянных частей в соответствующей таблице. Значение хранится в 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теперь существенно быстрее. Операции ввода-вывода и декодирование выполняются параллельно (управляется настройкойmax_threads), и считываются только необходимые диапазоны данных. #47964 (Michael Kolupaev). - При запуске мутации с IN (подзапросом) вида:
ALTER TABLE t UPDATE col='new value' WHERE id IN (SELECT id FROM huge_table)и наличии у таблицыtнескольких частей для каждой части в памяти строится множество для подзапросаSELECT id FROM huge_table. Если частей много, это может потреблять значительный объём памяти (и приводить к OOM) и CPU. Решение — ввести краткоживущий кэш множеств, которые в данный момент строятся задачами мутации. Если другая задача той же мутации выполняется параллельно, она может найти множество в кэше, дождаться завершения его построения и переиспользовать его. #46835 (Alexander Gololobov). - Проверять зависимости только при необходимости при выполнении запросов
ALTER TABLE. #48062 (Raúl Marín). - Оптимизирована функция
mapUpdate. #48118 (Anton Popov). - Теперь внутренний запрос к локальной реплике отправляется явно, а данные из него принимаются через loopback-интерфейс. Настройка
prefer_localhost_replicaне учитывается для параллельных реплик. Это нужно для более эффективного планирования и делает код более чистым: инициатор отвечает только за координацию процесса чтения и слияние результатов, непрерывно отвечая на запросы, в то время как все вторичные запросы читают данные. Примечание: использование loopback-интерфейса само по себе менее производительно, но без него некоторые реплики могли бы «голодать» по задачам, что приводило бы к ещё более медленному выполнению запросов и недоиспользованию доступных ресурсов. Инициализация координатора теперь ещё более ленивaя. Все входящие запросы содержат информацию об алгоритме чтения; мы инициализируем координатора этим алгоритмом при поступлении первого запроса. Если какая-либо реплика решит читать с другим алгоритмом — будет выброшено исключение, и запрос будет прерван. #48246 (Nikita Mikhaylov). - Не строить множество для правой части выражения
INс подзапросом, когда оно используется только для анализа skip-индексов и эти индексы отключены настройкой (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с данными без разбиения на разделы (non-partitioned). - Добавлена поддержка форматаIcebergверсии v2 (ранее поддерживалась только v1). - Добавлена поддержка чтения данных с разбиением на разделы (partitioned) дляDeltaLake/Hudi. - Ускорено чтение метаданныхDeltaLakeза счёт использования файлов контрольных точек Delta (checkpoint-файлов). - Исправлено некорректное чтение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 в запросах резервного копирования. #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).
- Ограничение скорости на уровне запроса/сервера для удалённого ввода-вывода, локального ввода-вывода и операций 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). - Добавлена поддержка записи и чтения безымянного Tuple как вложенного Message в формате Protobuf. Элементы Tuple и поля Message сопоставляются по позиции. #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. Closes #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. Дополнительно добавлена поддержка Юникод-символов дефиса, таких как—вместо--— это полезно, когда вы взаимодействуете с командой из другой компании, и менеджер из этой команды скопировал код из Microsoft 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для материализованных представлений (MV), выполняемых в фоновых потоках #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).
- Исправлена ошибка запуска при загрузке распределённой таблицы, зависящей от словаря #48419 (MikhailBurdukov).
- Не проверять зависимости при автоматическом переименовании системных таблиц #48431 (Raúl Marín).
- Обновлять только затронутые строки в хранилище KeeperMap #48435 (Antonio Andelic).
- Исправлена возможная ошибка сегментации (segfault) в кэше 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).
- Исправлена ошибка во вложенном отображении для ключей типов IP и UUID #48556 (Yakov Olkhovskiy).
- Исправлено необработанное исключение при использовании параллельного загрузчика для хешированных словарей #48571 (Azat Khuzhin).
- Агрегатная функция
groupArrayкорректно работает с пустым результатом для типов, допускающих значение NULL #48593 (lgbo). - Исправлена ошибка в Keeper, из-за которой узел иногда не создавался со схемой
authв ACL. #48595 (Aleksei Filatov). - Разрешено использовать операторы сравнения IPv4 с UInt #48611 (Yakov Olkhovskiy).
- Исправлена возможная ошибка кэша #48636 (Kseniia Sumarokova).
- Асинхронные вставки с пустыми данными больше не будут вызывать исключение. #48663 (Anton Popov).
- Исправлены зависимости таблиц при неуспешном выполнении операции RENAME TABLE #48683 (Azat Khuzhin).
- Если первичный ключ содержит дублирующиеся столбцы (что возможно только для проекций), в предыдущих версиях это могло приводить к ошибке #48838 (Amos Bird).
- Исправление условия гонки в ZooKeeper при выполнении join потоков send_thread/receive_thread #48849 (Alexander Gololobov).
- Исправлена ошибка
unexpected part nameпри попытке удалить игнорируемую отсоединённую часть при репликации без копирования данных (zero-copy replication) #48862 (Michael Lex). - Исправлена ошибка чтения столбца
Date32Parquet/Arrow в столбец другого типа, отличного отDate32#48864 (Kruglov Pavel). - Исправлена ошибка
UNKNOWN_IDENTIFIERпри выполнении запросаSELECTиз таблицы с политикой строк и столбцом, в имени которого есть точки #48976 (Kruglov Pavel). - Исправлена агрегация по пустым строкам типа Nullable #48999 (LiuNeng).
Релиз ClickHouse 23.3 LTS, 2023-03-30
Заметки по обновлению
- Легковесные операции 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, движке таблиц и функции 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, которые соответствуют URL-параметрамwait_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, которая позволяет создавать значение типа Map из пары массивов. #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). Введён отдельный пул потоков для операций ввода-вывода резервного копирования. Это позволит масштабировать его независимо от других пулов и повысить производительность. #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для получения списка партиций. Для больших таблиц это сократило время выполнения запроса с более чем 500 до менее чем 1 секунды. #47386 (Clayton McClure). - Исправлена деградация производительности в
ASOF JOIN. #47544 (Ongkong). - Ещё больше батчирования в Keeper. Производительность улучшена за счёт того, что батчи не разбиваются при запросах на чтение. #47978 (Antonio Andelic).
- Разрешено использовать PREWHERE для таблиц Merge с различными выражениями DEFAULT для столбцов. #46831 (Azat Khuzhin).
Экспериментальная возможность
- Параллельные реплики: улучшена общая производительность за счет более эффективного использования локальной реплики и по умолчанию запрещено чтение с использованием параллельных реплик из нереплицируемых таблиц MergeTree. #47858 (Nikita Mikhaylov).
- Добавлена поддержка проталкивания фильтра в левую таблицу для JOIN с таблицами
Join,DictionaryиEmbeddedRocksDB, если включен экспериментальный Analyzer. #47280 (Maksim Kita). - Теперь ReplicatedMergeTree с репликацией без копирования (zero-copy replication) меньше нагружает Keeper. #47676 (alesapin).
- Исправлено создание материализованного представления с 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: поддержка подключения к реплика-сету через 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). - Это улучшение должно быть незаметным для пользователей. Анализ проекций переосуществлён на основе плана запроса. Добавлена настройка
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). - Автоматическое добавление отступов во встроенном SQL-редакторе UI при нажатии 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). - Добавлена поддержка типов big int в функции
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 к материализованному представлению, у которого есть зависимые таблицы, недоступные в данный момент. Это может быть полезно при попытке восстановить состояние из резервной копии. #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 не приводят к аварийному завершению процесса. Он покрывает изменения в 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' не удавалось вставить две похожие записи при настроенном режиме 'InMemory' для параметра 'part_type' (экспериментальная возможность). #47121 (liding1992).
- Внешние словари / 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 с проекциями #47473 (flynn).
- Исправлены параметры запроса #47488 (Alexey Milovidov).
- Параметризованное представление: исправление ошибки. #47495 (SmitaRKulkarni).
- Фаззер для форматов данных и соответствующие исправления. #47519 (Alexey Milovidov).
- Исправлена проверка монотонности для
DateTime64#47526 (Antonio Andelic). - Исправлена ошибка «несоответствие структуры блока» для столбца 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 (Коренберг Марк).
- Исправление ошибки «index file
cidxis unexpectedly long» #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 ... ). Она группирует в шаги те условия, которые требуют чтения одних и тех же столбцов. После каждого шага вычисляется соответствующая часть полного условия, и результирующие строки могут быть отфильтрованы. Это позволяет читать меньше строк на следующих шагах, тем самым экономя пропускную способность ввода-вывода и выполняя меньше вычислений. Эта логика пока по умолчанию отключена. Она будет включена по умолчанию в одном из будущих релизов, когда будет подтверждено отсутствие регрессий, поэтому настоятельно рекомендуется использовать её для тестирования. Её поведение можно контролировать с помощью двух настроек: "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, но изменили типы столбцов с not nullable на nullable и измеряли QPS его запросов в качестве показателя производительности. #45962 (Zhiguo Zhou).
- Виртуальные столбцы
_partи_partition_idтеперь имеют типLowCardinality(String). Закрывает #45964. #45975 (flynn). - Улучшена производительность преобразования Decimal, когда масштаб (scale) не изменяется. #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).
- «query result cache» переименован в «query cache». #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|16|32|64|128|256. Это ограничение слишком жёсткое для пользователей 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. Форматирует время в соответствии с заданной строкой формата. ПараметрFormatявляется константным выражением, поэтому вы не можете использовать несколько форматов для одного результирующего столбца. (Предоставьте ссылку на 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).
- Мы хотим сделать наши тесты менее стабильными и более «хрупкими»: добавлена рандомизация настроек MergeTree в тестах. #38983 (Anton Popov).
- Включена поддержка HDFS на PowerPC, что помогает исправить следующие функциональные тесты: 02113_hdfs_assert.sh, 02244_hdfs_cluster.sql и 02368_cancel_write_into_hdfs.sh. #44949 (MeenaRenganathan22).
- Добавлен файл unit-файла 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как дочерний процесс вместо процесса с PID 1 и перезапускать его при завершении. #46391 (Alexey Milovidov). - Исправлен unit-файл службы 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;возвращают неверные результаты (пустой результат для этого SQL‑запроса). Это вызвано лишним шагом смещения OFFSET, добавленным планировщиком. #45822 (刘陶峰). - Обратная совместимость: разрешено неявное сужающее преобразование из UInt64 в IPv4, необходимое для выражения «INSERT ... VALUES ...». #45865 (Yakov Olkhovskiy).
- Исправлена ошибка в парсере IPv6 для смешанных IPv6/IPv4-адресов с пропущенным первым октетом 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).
- Исправлено чтение несуществующих вложенных столбцов с несколькими уровнями вложенности в compact-частях. #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, но в секции настроек MergeTree в конфигурации была задана настройкаstorage_policy. Настройкаdiskпереопределяет значение из конфигурации. #46533 (Kseniia Sumarokova). - Исправлена некорректная обработка константного аргумента типа
LowCardinalityв функцииarrayMap. Этот баг мог приводить к сбою с ошибкой сегментации (segfault) в релизной сборке и логической ошибке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, так как он используется последующими запусками analyze, что решает #45185. #46487 (SmitaRKulkarni).
Релиз ClickHouse 23.1, 2023-01-26
Релиз ClickHouse 23.1
Примечания к обновлению
- Запрос
SYSTEM RESTART DISKстановится операцией, не выполняющей никаких действий (no-op). #44647 (alesapin). - Опция
PREALLOCATEдля словарейHASHED/SPARSE_HASHEDстановится операцией без эффекта (no-op). #45388 (Azat Khuzhin). Она больше не дает существенных преимуществ. - Кодек
Gorillaзапрещен для столбцов типов, отличных от Float32 или Float64. #45252 (Robert Schulze). Его использование было бессмысленным и приводило к неконсистентности. - Параллельные вставки с кворумом могут работать некорректно с таблицами
*MergeTree, созданными с использованием устаревшего синтаксиса. Поэтому поддержка параллельных вставок с кворумом полностью отключена для таких таблиц. Это не затрагивает таблицы, созданные с использованием нового синтаксиса. #45430 (Alexander Tokmakov). - Вместо запроса
HeadObjectиспользуется запросGetObjectAttributesдля получения размера объекта в AWS S3. Это изменение, в частности, исправляет обработку конечных точек без явного указания региона после обновления 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 и добавление поддержки всех форматов, а также частичный рефакторинг самих форматов: - Исправлена генерация сообщений в построчных форматах с суффиксами/префиксами. Теперь каждое сообщение форматируется полностью со всеми разделителями и может быть прочитано обратно с использованием входного формата. - Добавлена поддержка блочных форматов, таких как 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. - Рефакторинг выходных форматов: удалены обратные вызовы (callbacks) на каждую строку, использовавшиеся в 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).
- Добавлена расширяемая и настраиваемая подсистема планирования для запросов ввода-вывода (пока не интегрирована с самим кодом ввода-вывода). #41840 (Sergei Trifonov). Эта возможность пока ничего не делает — наслаждайтесь.
- Добавлена команда
SYSTEM DROP DATABASE REPLICA, удаляющая метаданные неработающей (dead) реплики базы данных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 Popов). - Добавлены поля
supports_parallel_parsingиsupports_parallel_formattingв таблицуsystem.formatsдля улучшения возможностей анализа. #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). - Оптимизированы и исправлены метрики для Distributed async INSERT. #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).
- Реализовано автоматическое слияние зеленых PR-бэкпортов и зеленых одобренных PR #41110 (Mikhail f. Shiryaev).
- Представлен веб‑сайт для отображения статуса ClickHouse CI. Исходный код.
Исправление ошибок
- Типы 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 части столбика. Это изменение исправляет такое поведение, используя '▊' (U+258A "Left three quarters block") для отображения 6/8 части столбика. #44410 (Alexander Gololobov). - Размещение настроек профиля в конфигурационном файле после ограничений профиля делало эти ограничения неэффективными. #44411 (Konstantin Bogdanov).
- Исправлена ошибка
SYNTAX_ERRORпри выполнении запросовEXPLAIN AST INSERT, содержащих данные. Закрывает #44207. #44413 (save-my-heart). - Исправлено чтение логических значений в формате CSV при использовании CRLF. Закрывает #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 TABLE. Исправляет #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после выборок (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).
- Последующее исправление к замене типов IP-адресов домена (IPv4, IPv6) на нативные #43221. #45024 (Yakov Olkhovskiy).
- Дополнительное исправление к «Replace domain IP types (IPv4, IPv6) with native» 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). - Исправлена ошибка, из-за которой при использовании проекции minmax/count запрос с
additional_table_filtersвозвращал неверный результат (дополнительный фильтр не применялся). #45133 (Nikolai Kochetov). - Исправлена ошибка в функции
histogram, которая принимала отрицательные значения. #45147 (simpleton). - Исправлена неверная nullability столбца в 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). - Под WSL1 Ubuntu самораспаковывающийся дистрибутив ClickHouse не распаковывается из‑за несоответствия: /proc/self/maps сообщает inode 32‑битного файла, тогда как stat — inode 64‑битного. #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).