Журнал изменений за 2022 год
Релиз ClickHouse 22.12, 2022-12-15
Примечание
Этот релиз содержит некорректный комментарий к службе systemd, который может привести к поломке установки ClickHouse при обновлении в некоторых дистрибутивах Linux. Служба systemd изменяет владельца каталога /run/systemd, из-за чего все последующие операции systemd завершаются с ошибкой. Рекомендуется пропустить обновление до этой версии и вместо этого перейти сразу на более новую версию ClickHouse.
Дополнительные сведения см. в этом issue на GitHub: https://github.com/ClickHouse/ClickHouse/issues/48285
Примечания по обновлению
- Исправлена проблема обратной совместимости при (де)сериализации состояний агрегатных функций
min,max,any*,argMin,argMaxсо строковым аргументомString. Несовместимость затрагивает ветки 22.9, 22.10 и 22.11 (исправлено, начиная с 22.9.6, 22.10.4 и 22.11.2 соответственно). Также затронуты некоторые минорные релизы веток 22.3, 22.7 и 22.8: 22.3.13...22.3.14 (исправлено, начиная с 22.3.15), 22.8.6...22.8.9 (исправлено, начиная с 22.8.10), 22.7.6 и новее (в 22.7 исправлено не будет, мы рекомендуем обновиться с 22.7.* до 22.8.10 или более новой версии). Это примечание к релизу не относится к пользователям, которые никогда не использовали затронутые версии. Несовместимые версии добавляют лишний символ'\0'к строкам при чтении состояний указанных выше агрегатных функций. Например, если более старая версия сохранила состояниеanyState('foobar')вstate_column, то несовместимая версия выведет'foobar\0'при выполненииanyMerge(state_column). Также несовместимые версии записывают состояния агрегатных функций без завершающего'\0'. Более новые версии (с исправлением) могут корректно читать данные, записанные всеми версиями, включая несовместимые, за одним особым случаем. Если несовместимая версия сохранила состояние со строкой, которая фактически оканчивается нулевым символом, то более новая версия обрежет завершающий'\0'при чтении состояния затронутой агрегатной функции. Например, если несовместимая версия сохранила состояниеanyState('abrac\0dabra\0')вstate_column, то более новые версии выведут'abrac\0dabra'при выполненииanyMerge(state_column). Проблема также затрагивает распределённые запросы, когда несовместимая версия работает в кластере вместе с более старыми или новыми версиями. #43038 (Alexander Tokmakov, Raúl Marín). Примечание: все официальные сборки ClickHouse уже содержат эти исправления. Это не обязательно верно для неофициальных сторонних сборок, которых следует избегать.
Новая возможность
- Добавлен формат ввода и вывода
BSONEachRow. В этом формате ClickHouse форматирует/парсит каждую строку как отдельный BSON-документ, а каждый столбец — как отдельное поле BSON с именем столбца в качестве ключа. #42033 (mark-polokhov). - Добавлен алгоритм
grace_hashдля JOIN, его можно включить с помощьюSET join_algorithm = 'grace_hash'. #38191 (BigRedEye, Vladimir C). - Добавить возможность настраивать правила и проверки сложности пароля при создании и изменении пользователей. #43719 (Nikolay Degterinsky).
- Маскирует конфиденциальную информацию в логах; маскирует секретные фрагменты в результатах выполнения запросов
SHOW CREATE TABLEиSELECT FROM system.tables. Также исправляет #41418. #43227 (Vitaly Baranov). - Добавлен синтаксис
GROUP BY ALL: #37631. #42265 (刘陶峰). - Добавлен синтаксис
FROM table SELECT column. #41095 (Nikolay Degterinsky). - Добавлены функции
concatWithSeparatorиconcat_wsкак алиас для совместимости со Spark SQL. ФункцияconcatWithSeparatorAssumeInjectiveдобавлена как вариант для включения оптимизации GROUP BY, аналогичноconcatAssumeInjective. #43749 (李扬). - Добавлены функции
multiplyDecimalиdivideDecimalдля выполнения операций с десятичными типами с фиксированной точностью. #42438 (Andrey Zvonov). - Добавлена таблица
system.movesсо списком частей, перемещаемых в данный момент. #42660 (Sergei Trifonov). - Добавлена поддержка встроенного эндпоинта Prometheus для ClickHouse Keeper. #43087 (Antonio Andelic).
- Добавлена поддержка числовых литералов с символом
_в качестве разделителя, например,1_000_000. #43925 (jh0x). - Добавлена возможность использовать массив в качестве второго параметра функции
cutURLParameter, что позволяет удалять несколько параметров. Закрыта #6827. #43788 (Roman Vasin). - Добавлен столбец, содержащий выражение индекса, в таблице
system.data_skipping_indices. #43308 (Guillaume Tassery). - Добавлен столбец
engine_fullв системную таблицуdatabases, чтобы пользователи могли получать полное определение движка базы данных через системные таблицы. #43468 (凌涛). - Добавлена новая хеш-функция xxh3. Также была улучшена производительность
xxHash32иxxHash64на ARM благодаря обновлению библиотеки. #43411 (Nikita Taranov). - Добавлена поддержка задания ограничений для настроек движка MergeTree. Например, можно запретить пользователям переопределять
storage_policy. #43903 (Sergei Trifonov). - Добавлена новая настройка
input_format_json_read_objects_as_strings, позволяющая разбирать вложенные объекты JSON как строки во всех форматах ввода JSON. По умолчанию эта настройка отключена. #44052 (Kruglov Pavel).
Экспериментальная возможность
- Поддержка дедупликации для асинхронных вставок. До этого изменения асинхронные вставки не поддерживали дедупликацию, поскольку несколько небольших вставок объединялись в один пакет. Закрывает #38075. #43304 (Han Fei).
- Добавлена поддержка косинусного расстояния для экспериментального индекса Annoy (поиск сходства векторов). #42778 (Filatenkov Artur).
- Добавлены запросы
CREATE / ALTER / DROP NAMED COLLECTION. #43252 (Kseniia Sumarokova). Эта возможность находится в разработке, и запросы не имеют эффекта в версии 22.12. Эта запись в журнале изменений добавлена только для того, чтобы избежать путаницы. Доступ к именованным коллекциям по умолчанию ограничен пользователем, указанным в конфигурации. Чтобы иметь возможность их просматривать, требуется установитьshow_named_collections = 1. #43325 (Kseniia Sumarokova). Добавлена таблицаsystem.named_collections#43147 (Kseniia Sumarokova).
Улучшение производительности
- Добавлены настройки
max_streams_for_merge_tree_readingиallow_asynchronous_read_from_io_pool_for_merge_tree. Настройкаmax_streams_for_merge_tree_readingограничивает количество потоков чтения для таблиц MergeTree. Настройкаallow_asynchronous_read_from_io_pool_for_merge_treeвключает фоновый пул ввода-вывода для чтения из таблицMergeTree. Это может повысить производительность для запросов, ограниченных по вводу-выводу, при совместном использовании сmax_streams_to_max_threads_ratioилиmax_streams_for_merge_tree_reading. #43260 (Nikolai Kochetov). Это позволяет повысить производительность вплоть до 100 раз в случае хранилища с высокой задержкой, небольшим количеством CPU и большим количеством частей данных. - Настройки
merge_tree_min_rows_for_concurrent_read_for_remote_filesystem/merge_tree_min_bytes_for_concurrent_read_for_remote_filesystemне учитывали адаптивную гранулярность. Широкие строки не уменьшали количество читаемых строк (как это делалось дляmerge_tree_min_rows_for_concurrent_read/merge_tree_min_bytes_for_concurrent_read), что могло приводить к высокому потреблению памяти при использовании удалённых файловых систем. #43965 (Nikolai Kochetov). - Оптимизировано количество запросов на перечисление в ZooKeeper или ClickHouse Keeper при выборе части для слияния. Ранее в некоторых случаях это могло приводить к тысячам запросов. Исправляет #43647. #43675 (Alexander Tokmakov).
- Оптимизация теперь пропускается, если
max_size_to_preallocate_for_aggregationимеет слишком малое значение. Значение по умолчанию для этой настройки увеличено до10^8. #43945 (Nikita Taranov). - Ускорено завершение работы сервера за счёт отказа от очистки старых частей данных, поскольку после https://github.com/ClickHouse/ClickHouse/pull/41145 в этом больше нет необходимости. #43760 (Sema Checherinda).
- Слияние на инициаторе теперь использует тот же подход с ограничением по памяти, что и слияние локальных результатов агрегации, если установлена настройка
enable_memory_bound_merging_of_aggregation_results. #40879 (Nikita Taranov). - Улучшение Keeper: синхронизация журналов на диск выполняется в попытке параллельно с репликацией. #43450 (Antonio Andelic).
- Улучшение Keeper: запросы чаще объединяются в пакеты. Объединение в пакеты можно контролировать с помощью новой настройки
max_requests_quick_batch_size. #43686 (Antonio Andelic).
Улучшение
- Реализованы ссылочные зависимости, которые используются для создания таблиц в правильном порядке при восстановлении из резервной копии. #43834 (Vitaly Baranov).
- Заменяйте UDF-функции в запросе
CREATE, чтобы избежать ошибок загрузки при запуске. Кроме того, UDF-функции теперь можно использовать в качестве выраженийDEFAULTдля столбцов. #43539 (Antonio Andelic). - Изменён механизм удаления партов для следующих запросов: TRUNCATE TABLE, ALTER TABLE DROP PART, ALTER TABLE DROP PARTITION. Теперь эти запросы создают пустые парты, которые перекрывают старые. Это позволяет запросу TRUNCATE выполняться без последующей установки эксклюзивной блокировки, то есть параллельные чтения не блокируются. Также обеспечена надёжная устойчивость к сбоям (durability) для всех этих запросов: если запрос завершается успешно, «воскресшие» парты не появятся позже. Обратите внимание, что атомарность достигается только в рамках транзакции. #41145 (Sema Checherinda).
- Запрос
SET param_xбольше не требует вручную сериализовывать значение параметра в строку. Например, запросSET param_a = '[\'a\', \'b\']'теперь можно записать какSET param_a = ['a', 'b']. #41874 (Nikolay Degterinsky). - Показывать количество прочитанных строк в индикаторе прогресса при чтении клиентом из STDIN. Закрывает #43423. #43442 (Kseniia Sumarokova).
- Показывать индикатор прогресса при чтении из табличной функции или движка S3. #43454 (Kseniia Sumarokova).
- Индикатор прогресса будет показывать как прочитанные, так и записанные строки. #43496 (Ilya Yatsishin).
- Функции
filesystemAvailableи связанные с ней функции поддерживают один необязательный аргумент с именем диска, аfilesystemFreeпереименована вfilesystemUnreserved. Закрыта задача #35076. #42064 (flynn). - Интеграция с LDAP: увеличено значение параметра
search_limitпо умолчанию до 256 и добавлена опция конфигурации сервера LDAP для изменения этого значения на произвольное. Закрывает: #42276. #42461 (Vasily Nemkov). - Разрешить также удалять конфиденциальную информацию (см.
query_masking_rulesв файле конфигурации) из сообщений об исключениях. Исправляет #41418. #42940 (filimonov). - Добавлена поддержка запросов вида
SHOW FULL TABLES ...для обеспечения совместимости с MySQL. #43910 (Filatenkov Artur). - Улучшение в Keeper: добавлена команда 4lw
rqld, которая позволяет вручную назначить узел лидером. #43026 (JackyWoo). - Применять настройки тайм-аута подключения для Distributed async INSERT, заданные в запросе. #43156 (Azat Khuzhin).
- Функция
unhexтеперь поддерживает аргументы типа данныхFixedString. issue42369. #43207 (DR). - В приоритетном порядке удаляются полностью истёкшие части в соответствии с правилами TTL, см. #42869. #43222 (zhongyuankai).
- Более точное и оперативное отображение загрузки CPU в clickhouse-client. #43307 (Sergei Trifonov).
- Добавлена поддержка чтения подколонок вложенных типов из хранилища
S3и табличной функцииs3с форматамиParquet,ArrowиORC. #43329 (chen). - Добавлен столбец
table_uuidв таблицуsystem.parts. #43404 (Azat Khuzhin). - Добавлен параметр клиента для отображения количества локально обработанных строк в неинтерактивном режиме (
--print-num-processed-rows). #43407 (jh0x). - Реализована оптимизация
aggregation-in-orderна уровне плана запроса. Она включена по умолчанию (но работает только вместе сoptimize_aggregation_in_order, который по умолчанию отключен). Установитеquery_plan_aggregation_in_order = 0, чтобы использовать предыдущую версию, основанную на AST. #43592 (Nikolai Kochetov). - Позволяет собирать события профилирования с
trace_type = 'ProfileEvent'вsystem.trace_logпри каждом инкременте с текущим стеком, именем события профилирования и значением инкремента. Это можно включить с помощью настройкиtrace_profile_eventsи использовать для исследования производительности запросов. #43639 (Anton Popov). - Добавлена новая настройка
input_format_max_binary_string_sizeдля ограничения размера строк в формате RowBinary. #43842 (Kruglov Pavel). - Когда ClickHouse отправлял запрос на удалённый HTTP‑сервер и тот возвращал ошибку, числовой код состояния HTTP некорректно отображался в сообщении об исключении. Закрывает #43919. #43920 (Alexey Milovidov).
- Корректно сообщать об ошибках в запросах даже при оптимизации с участием нескольких JOIN-ов. #43583 (Salvatore).
Улучшения сборки/тестирования/упаковки
- Интеграция с systemd теперь корректно уведомляет systemd о том, что служба действительно запущена и готова обрабатывать запросы. #43400 (Коренберг Марк).
- Добавлен вариант сборки ClickHouse с OpenSSL с использованием OpenSSL FIPS Module. Этот тип сборки не был протестирован на соответствие требованиям безопасности и не поддерживается. #43991 (Boris Kuschel).
- Переход на новый кодек сжатия
DeflateQpl, реализованный в предыдущем PR (подробности: https://github.com/ClickHouse/ClickHouse/pull/39494). Этот патч улучшает кодек по следующим аспектам: 1) переход с QPL v0.2.0 на QPL v0.3.0 Intel® Query Processing Library (QPL); 2) улучшен файл CMake для исправления проблем сборки QPL v0.3.0; 3) библиотека QPL линкуется с libaccel-config на этапе сборки вместо динамической загрузки во время выполнения в QPL v0.2.0 (dlopen); 4) исправлена проблема вывода логов в CompressionCodecDeflateQpl.cpp. #44024 (jasperzhu).
Исправление ошибок (заметное пользователю некорректное поведение в официальном стабильном или престабильном релизе)
- Исправлена ошибка, которая могла приводить к взаимоблокировке при использовании асинхронных вставок. #43233 (Anton Popov).
- Исправлена некорректная логика оптимизации на уровне AST
optimize_normalize_count_variants. #43873 (Duc Canh Le). - Исправлена проблема, при которой мутации не продвигаются, если контрольные суммы не совпадают между репликами (например, из‑за изменения формата данных при обновлении). #36877 (nvartolomei).
- Исправлена проблема в оптимизации
skip_unavailable_shards, из-за которой она не работала с табличной функциейhdfsCluster. #43236 (chen). - Исправлена поддержка подстановочного символа
?вs3. Закрывает #42731. #43253 (chen). - Исправлены функции
arrayFirstOrNullиarrayLastOrNull, которые некорректно возвращалиnull, если массив содержал элементы типаNullable. #43274 (Duc Canh Le). - Исправлен некорректный учет
UserTimeMicroseconds/SystemTimeMicrosecondsпри работе с таблицами Kafka. #42791 (Azat Khuzhin). - Не подавлять исключения в дисках
web. Исправить механизм повторных попыток (retries) для дискаweb. #42800 (Azat Khuzhin). - Исправлено (логическое) состояние гонки между вставками и удалением материализованных представлений. Гонка возникала, когда материализованное представление удалялось одновременно с выполнением INSERT: в начале выполнения материализованные представления присутствовали как зависимость вставки, но к моменту, когда цепочка вставки пыталась получить к ним доступ, таблица уже была удалена, что приводило к возникновению исключений
UNKNOWN_TABLEилиTABLE_IS_DROPPEDи остановке вставки. После этого изменения таких исключений удаётся избежать, и вставка просто продолжается, если к этому моменту зависимость уже исчезла. #43161 (AlfVII). - Исправлено неопределённое поведение в функции
quantiles, которое могло приводить к использованию неинициализированной памяти. Обнаружено фаззером. Закрывает #44066. #44067 (Alexey Milovidov). - В
CompressionCodecDeltaдобавлена дополнительная проверка на нулевой размер несжатых данных. #43255 (Nikita Taranov). - Массивы из Parquet теперь разворачиваются (flatten), чтобы избежать проблемы с несогласованными данными в массивах. Такие некорректные файлы могут генерироваться Apache Iceberg. #43297 (Arthur Passos).
- Исправлено некорректное приведение типов из столбца типа
LowCardinalityпри использовании укороченного вычисления функций. #43311 (Kruglov Pavel). - Исправлены запросы с
SAMPLE BYи оптимизациейPREWHEREдля таблиц, использующих движокMerge. #43315 (Antonio Andelic). - Проверьте и сравните содержимое файла
format_versionвMergeTreeData, чтобы можно было загрузить таблицы даже в случае изменения политики хранения. #43328 (Antonio Andelic). - Исправлена возможная (очень маловероятная) логическая ошибка «No column to rollback» при выполнении INSERT в таблицы
Buffer. #43336 (Azat Khuzhin). - Исправлена ошибка, из-за которой парсер мог интерпретировать неограниченное количество круглых скобок как одну функцию, если установлен
allow_function_parameters. #43350 (Nikolay Degterinsky). - Экспериментальная функция
MaterializeMySQLподдерживает DDLdrop table t1, t2и совместима с большинством операторов MySQL DROP. #43366 (zzsmdfj). session_log(экспериментальная функция): Исправлена проблема, из-за которой было невозможно войти в систему (из-за сбоя при создании записи в session_log) в крайне редких случаях некорректных профилей настроек. #42641 (Vasily Nemkov).- Исправлена потенциальная ошибка
Cannot create non-empty column with type Nothingв функцияхif/multiIf. Закрывает #43356. #43368 (Kruglov Pavel). - Исправлена ошибка, возникавшая, когда фильтр на уровне строк использовал значение по умолчанию столбца. #43387 (Alexander Gololobov).
- Запрос с
DISTINCT+LIMIT BY+LIMITможет возвращать меньше строк, чем ожидается. Исправляет проблему #43377. #43410 (Igor Nikonov). - Исправлена ошибка в
sumMapдляNullable(Decimal(...)). #43414 (Azat Khuzhin). - Исправлена работа
date_diffдля часов и минут в macOS. Закрывает #42742. #43466 (zzsmdfj). - Исправлен некорректный учёт памяти из-за слияний/мутаций. #43516 (Azat Khuzhin).
- Исправлен анализ первичного ключа с условиями, включающими
toString(enum). #43596 (Nikita Taranov). Эту ошибку обнаружил @tisonkun. - Обеспечить согласованность при обновлении статуса в
clickhouse-copierи значенияattach_is_doneв Keeper после завершения присоединения партиции. #43602 (lzydmxy). - Во время восстановления потерянной реплики базы данных
Replicated(экспериментальная функция) может возникнуть ситуация, когда требуется атомарно поменять местами имена двух таблиц (с помощью EXCHANGE). Ранее мы пытались использовать два запроса RENAME, что, очевидно, не работало и, более того, приводило к сбою всего процесса восстановления реплики базы данных. #43628 (Nikita Mikhaylov). - Исправлена ситуация, при которой функция
s3Clusterвыбрасывала ошибкуNOT_FOUND_COLUMN_IN_BLOCK. Закрывает #43534. #43629 (chen). - Исправлена возможная логическая ошибка
Array sizes mismatchedпри разборе JSON-объекта, содержащего массивы с одинаковыми именами ключей, но разным уровнем вложенности. Закрывает #43569. #43693 (Kruglov Pavel). - Исправлено возможное исключение при распределённом
GROUP BYсо столбцомALIASсреди ключей агрегации. #43709 (Nikita Taranov). - Исправлена ошибка, которая могла приводить к повреждению проекций, если была включена и использовалась экспериментальная функция zero-copy replication. #43764 (alesapin).
- Исправлено использование многочастичной загрузки для очень крупных объектов в AWS S3. #43824 (ianton-ru).
- Исправлена команда
ALTER ... RESET SETTINGсON CLUSTER: ранее она могла применяться только к одной реплике. Исправляет #43843. #43848 (Elena Torró). - Исправлена логическая ошибка в JOIN с движком таблицы
Joinна правой стороне, при использованииUSING. #43963 (Vladimir C). Исправлена ошибка с неверным порядком ключей в движке таблицыJoin. #44012 (Vladimir C). - Исправление в Keeper: теперь выбрасывается исключение, если межсерверный порт для Raft уже занят. #43984 (Antonio Andelic).
- Исправлена обработка позиционных аргументов ORDER BY (пример:
ORDER BY 1, 2) при отсечении ненужных столбцов в подзапросах. Закрывает #43964. #43987 (Kseniia Sumarokova). - Исправлено исключение, возникавшее, когда подзапрос содержал HAVING, но не содержал реальной агрегации. #44051 (Nikita Taranov).
- Исправлена ошибка состояния гонки при multipart-загрузке в S3. Она могла приводить к ошибке
Part number must be an integer between 1 and 10000, inclusive. (S3_ERROR)при восстановлении из резервной копии. #44065 (Vitaly Baranov).
Релиз ClickHouse 22.11, 2022-11-17
Изменения, нарушающие обратную совместимость
- Семейство функций
JSONExtractтеперь будет пытаться привести значение к запрошенному типу. #41502 (Márcio Martins).
Новая возможность
- Добавлена поддержка повторных попыток при выполнении INSERT в ReplicatedMergeTree при потере сеанса с ClickHouse Keeper. Помимо повышения отказоустойчивости, это улучшает удобство работы пользователя, позволяя не возвращать ошибку во время вставки, если Keeper был перезапущен (например, из‑за обновления). #42607 (Igor Nikonov).
- Добавлены движки таблиц
HudiиDeltaLake, работающие в режиме только для чтения и только для таблиц в S3. #41054 (Daniil Rubin, Kseniia Sumarokova). - Добавлены табличные функции
hudiиdeltaLake. #43080 (flynn). - Поддержка составных временных интервалов. 1. Операции сложения, вычитания и смены знака теперь доступны для интервалов. Если типы интервалов различаются, они преобразуются в Tuple этих типов. 2. Кортеж интервалов можно добавить к полю Date/DateTime или вычесть из него. 3. Добавлен разбор интервалов с различными типами, например:
INTERVAL '1 HOUR 1 MINUTE 1 SECOND'. #42195 (Nikolay Degterinsky). - Добавлена поддержка шаблона-глоба
**для рекурсивного обхода каталогов файловой системы и S3. Решает #36316. #42376 (SmitaRKulkarni). - Введён тип диска
s3_plainдля сценариев «одна запись — многократное чтение». Реализована поддержка операцииATTACHтаблицыMergeTreeдля дискаs3_plain. #42628 (Azat Khuzhin). - В
system.query_logдобавлена информация о применённых политиках на уровне строк. #39819 (Vladimir Chebotaryov). - Добавлена четырёхбуквенная команда
csnpдля ручного создания снимков в ClickHouse Keeper. Кроме того, добавлена командаlgifдля получения информации о Raft для конкретного узла (например, индекс последнего созданного снимка, индекс последней зафиксированной записи журнала). #41766 (JackyWoo). - Добавлена функция
ascii, как в Apache Spark: https://spark.apache.org/docs/latest/api/sql/#ascii. #42670 (李扬). - Добавлена функция
pmod, которая возвращает неотрицательный результат на основе деления по модулю. #42755 (李扬). - Добавлена функция
formatReadableDecimalSize. #42774 (Alejandro). - Добавлена функция
randCanonical, аналогичная функцииrandв Apache Spark или Impala. Функция генерирует псевдослучайные значения с независимо и одинаково распределёнными (равномерно) значениями в диапазоне [0, 1). #43124 (李扬). - Добавлена функция
displayName, что закрывает задачу #36770. #37681 (hongbin). - Добавлена настройка
min_age_to_force_merge_on_partition_onlyдля оптимизации старых кусков только на уровне всего раздела. #42659 (Antonio Andelic). - Добавлена универсальная реализация для произвольных структурированных именованных коллекций, типа доступа и системной таблицы
system.named_collections. #43147 (Kseniia Sumarokova).
Повышение производительности
- Функция
matchможет использовать индекс, если условие задаёт префикс строки. Это закрывает #37333. #42458 (clarkcaoliu). - Ускорены операторы AND и OR при их последовательном выполнении. #42214 (Zhiguo Zhou).
- Добавлена поддержка параллельного разбора для формата ввода
LineAsString. Это слегка улучшает производительность. Это закрывает #42502. #42780 (Kruglov Pavel). - Улучшена производительность ClickHouse Keeper: повышена скорость фиксации (commit) в случаях, когда у многих различных узлов есть незафиксированные состояния. Это должно помочь в ситуациях, когда ведомый (follower) узел не успевает синхронизироваться достаточно быстро. #42926 (Antonio Andelic).
- Условие вида
NOT LIKE 'prefix%'может использовать первичный индекс. #42209 (Duc Canh Le).
Экспериментальная функция
- Добавлена поддержка типа
Objectвнутри других типов, напримерArray(JSON). #36969 (Anton Popov). - Событие SAVEPOINT в MySQL binlog теперь игнорируется для MaterializedMySQL. #42931 (zzsmdfj). Обеспечена обработка (игнорирование) запросов SAVEPOINT в MaterializedMySQL. #43086 (Stig Bakken).
Улучшение
- Простые запросы с небольшим LIMIT теперь корректно оценивают предполагаемое количество строк для чтения, чтобы порог проверялся правильно. Устраняет проблему #7071. #42580 (Han Fei).
- Добавлена поддержка интерактивных параметров в запросах INSERT VALUES. #43077 (Nikolay Degterinsky).
- Добавлено новое поле
allow_readonlyвsystem.table_functions, чтобы разрешить использование табличных функций в режиме только для чтения. Исправляет #42414 Реализация: * Добавлено новое поле allow_readonly в таблицу system.table_functions. * Обновлён код с использованием нового поля allow_readonly, чтобы разрешить использование табличных функций в режиме только для чтения. Тестирование: * Добавлен тест для файловой системы tests/queries/0_stateless/02473_functions_in_readonly_mode.sh Документация: * Обновлена англоязычная документация по табличным функциям. #42708 (SmitaRKulkarni). system.asynchronous_metricsполучает встроенную документацию. Эта документация также экспортируется в Prometheus. Исправлена ошибка в метриках дисковcache— они рассчитывались только для одного произвольного кэш-диска вместо всех. Это исправление закрывает #7644. #43194 (Alexey Milovidov).- Алгоритм ограничения скорости изменён на token bucket. #42665 (Sergei Trifonov).
- Пароли и секретные ключи теперь маскируются как в
system.query_log, так и в/var/log/clickhouse-server/*.log, а также в сообщениях об ошибках. #42484 (Vitaly Baranov). - Удалять перекрываемые части при получении новой части (чтобы избежать возможного увеличения задержки репликации). #39737 (Azat Khuzhin).
- Если доступен
/dev/tty, информация о ходе выполнения в clickhouse-client и clickhouse-local будет выводиться напрямую в терминал, без записи в STDERR. Это позволяет видеть прогресс даже при перенаправлении STDERR в файл, при этом файл не будет засорён управляющими последовательностями терминала. Вывод прогресса можно отключить с помощью--progress false. Это закрывает #32238. #42003 (Alexey Milovidov). - Добавлена поддержка типа
FixedStringво входных данных для функций base64-кодирования. #42285 (ltrk2). - Добавлены столбцы
bytes_on_diskиpathв таблицуsystem.detached_parts. Закрывает #42264. #42303 (chen). - Улучшено использование структуры таблицы, в которую производится вставка, в табличных функциях: теперь настройка
use_structure_from_insertion_table_in_table_functionsимеет новое допустимое значение —2, что означает, что ClickHouse будет пытаться автоматически определить, можно ли использовать структуру таблицы, в которую производится вставка. Закрывает #40028. #42320 (Kruglov Pavel). - Исправлено отсутствие отображения прогресса при INSERT FROM INFILE. Закрывает #42548. #42634 (chen).
- Рефакторинг функции
tokensс добавлением возможности ограничивать максимальное количество возвращаемых токенов для связанных функций (по умолчанию отключено). #42673 (李扬). - Добавлена возможность использовать аргументы типа
Date32в функцияхformatDateTimeиFROM_UNIXTIME. #42737 (Roman Vasin). - Обновлён tzdata до версии 2022f. Мексика отменяет переход на летнее время, за исключением районов, расположенных у границы с США: https://www.timeanddate.com/news/time/mexico-abolishes-dst-2022.html. Чиуауа с 2022-10-30 переходит на круглогодичное использование UTC-6. Фиджи больше не переходит на летнее время. См. https://github.com/google/cctz/pull/235 и https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1995209. #42796 (Alexey Milovidov).
- Добавлена событийная метрика
FailedAsyncInsertQueryдля асинхронных вставок. #42814 (Krzysztof Góralski). - Реализована оптимизация
read-in-orderна уровне плана запроса. По умолчанию она включена. Установитеquery_plan_read_in_order = 0, чтобы использовать предыдущую версию на основе AST. #42829 (Nikolai Kochetov). - Экспоненциально увеличен размер части загрузки при резервном копировании в S3, чтобы избежать ошибок, связанных с ограничением в максимум 10 000 частей при многосегментной загрузке в S3. #42833 (Vitaly Baranov).
- Когда задача слияния постоянно занята и дискового пространства недостаточно, полностью «просроченные» парты не могут быть выбраны и удалены, что приводит к нехватке диска. Я предлагаю, что когда весь парт истёк, нет необходимости дополнительно резервировать дисковое пространство, чтобы обеспечить нормальное выполнение TTL. #42869 (zhongyuankai).
- Добавлены функция
ossи табличный движокOSS(удобно для пользователей).ossполностью совместим с S3. #43155 (zzsmdfj). - Улучшены сообщения об ошибках при сборе информации об ОС для таблицы
system.asynchronous_metrics. #43192 (Alexey Milovidov). - Изменены таблицы
INFORMATION_SCHEMAтаким образом, чтобы ClickHouse мог подключаться к самому себе по протоколу совместимости MySQL. Вместо псевдонимов добавлены столбцы (связано с #9769). Это улучшит совместимость с различными клиентами MySQL. #43198 (Filatenkov Artur). - Добавлены несколько функций для обеспечения совместимости с Power BI при подключении через протокол MySQL #42612 (Filatenkov Artur).
- Улучшено удобство использования дашборда при изменениях #42872 (Vladimir C).
Улучшения сборки/тестирования/упаковки
- Запускать SQLancer для каждого pull request и коммита в master. SQLancer — это open source‑фаззер, ориентированный на автоматическое обнаружение логических ошибок. #42397 (Ilya Yatsishin).
- Обновить до последней версии zlib-ng. #42463 (Boris Kuschel).
- Добавлена поддержка тестирования сервера ClickHouse с помощью Jepsen. Кстати, у нас уже есть поддержка тестирования ClickHouse Keeper с Jepsen. Этот pull request распространяет её на Replicated-таблицы. #42619 (Antonio Andelic).
- Использовать https://github.com/matus-chochlik/ctcache для кэширования результатов clang-tidy. #42913 (Mikhail f. Shiryaev).
- Ранее RPM сохранял пользовательский конфиг в
$file.rpmsave. Этот PR исправляет поведение: пакеты больше не будут заменять пользовательские файлы. #42936 (Mikhail f. Shiryaev). - Удалены некоторые библиотеки из Docker-образа Ubuntu. #42622 (Alexey Milovidov).
Исправление ошибок (заметное пользователю некорректное поведение в официальном стабильном или престабильном релизе)
- Обновлён нормализатор для клонирования AST псевдонима. Исправляет #42452. Реализация: * Обновлён
QueryNormalizerдля клонирования AST псевдонима при его замене. Ранее простое присваивание приводило к исключению вLogicalExpressinsOptimizer, так как один и тот же родительский узел AST вставлялся повторно. * Эта ошибка не проявляется с новым анализатором (allow_experimental_analyzer), поэтому для него изменений нет. Я добавила тест, покрывающий этот случай. #42827 (SmitaRKulkarni). - Исправлена гонка при создании резервных копий таблиц в базах данных
Lazy. #43104 (Vitaly Baranov). - Исправлена проблема с
skip_unavailable_shards: параметр не работал с табличной функциейs3Cluster. #43131 (chen). - Исправлено определение схемы в
s3Clusterи улучшено поведениеhdfsCluster. #41979 (Kruglov Pavel). - Исправлена логика повторных попыток при чтении из движков таблиц URL и табличной функции. (повторяемые ошибки могли приводить к избыточному числу повторных попыток, а неповторяемые — к срабатыванию assert в коде). #42224 (Kseniia Sumarokova).
- Была обнаружена и исправлена ошибка сегментации, связанная с DNS и c-ares. #42234 (Arthur Passos).
- Исправлена ошибка
LOGICAL_ERRORArguments of 'plus' have incorrect data types, которая могла возникать при анализе PK (проверке монотонности). Исправлен некорректный анализ PK для монотонных бинарных функций с первым константным аргументом. #42410 (Nikolai Kochetov). - Исправлен некорректный анализ ключа, когда типы ключей не могут быть Nullable. Это исправляет #42456. #42469 (Amos Bird).
- Исправлена опечатка в названии настройки, которая приводила к некорректному использованию кэша вывода схемы при использовании настройки
input_format_csv_use_best_effort_in_schema_inference. Закрывает #41735. #42536 (Kruglov Pavel). - Исправлена ошибка при создании
Setс некорректным заголовком, когда тип данных —LowCardinality. Закрывает #42460. #42579 (flynn). - Значения
(U)Int128и(U)Int256теперь корректно проверяются вPREWHERE. #42605 (Antonio Andelic). - Исправлена ошибка в парсере функций, которая могла приводить к ошибке сегментации. #42724 (Nikolay Degterinsky).
- Исправлена работа блокировок в
TRUNCATE TABLE. #42728 (flynn). - Исправлено возможное аварийное завершение работы дисков
web, когда файл отсутствует (а также при выполненииOPTIMIZE TABLE FINAL, которая в итоге может приводить к той же ошибке). #42767 (Azat Khuzhin). - Исправлено отображение
auth_typeвsystem.session_logпутем добавленияSSL_CERTIFICATEв значения перечисления. #42782 (Miel Donkers). - Исправлена ошибка stack-use-after-return при сборке с ASAN в парсере запроса Create User. #42804 (Nikolay Degterinsky).
- Исправлена работа
lowerUTF8/upperUTF8в случае, когда символ находился между 16-байтными границами (очень частый случай, если строки длиннее 16 байт). #42812 (Azat Khuzhin). - В процедуру декомпрессии LZ4 была добавлена дополнительная проверка границ, чтобы исправить некорректное поведение в случае повреждённых входных данных. #42868 (Nikita Taranov).
- Исправлено редкое зависание, возникающее при отмене запроса. #42874 (Azat Khuzhin).
- Исправлено некорректное поведение при использовании нескольких дизъюнктов в хеш-соединении; закрыт #42832. #42876 (Vladimir C).
- Будет возникать нулевой указатель при выполнении SELECT IF AS из «three table join». Например, в таком SQL-запросе: #42883 (zzsmdfj).
- Исправлен отчёт санитайзера памяти в Cluster Discovery, закрыт #42763. #42905 (Vladimir C).
- Улучшен вывод схемы DateTime при пустой строке. #42911 (Kruglov Pavel).
- Исправлена редкая ошибка NOT_FOUND_COLUMN_IN_BLOCK, возникавшая, когда можно было использовать проекцию, но подходящая проекция была недоступна. Это исправляет #42771. Ошибка появилась в https://github.com/ClickHouse/ClickHouse/pull/25563. #42938 (Amos Bird).
- Исправлен ATTACH TABLE в движке базы данных
PostgreSQLдля таблиц, содержащих тип данных DATETIME. Закрывает #42817. #42960 (Kseniia Sumarokova). - Исправлен парсинг лямбда-выражений. Закрывает #41848. #42979 (Nikolay Degterinsky).
- Исправлен некорректный анализ ключей, когда nullable-ключи находятся в середине гиперпрямоугольника. Это исправляет #43111. #43133 (Amos Bird).
- Исправлены несколько случаев чтения за пределами буфера при десериализации специально сконструированных состояний агрегатных функций. #43159 (Raúl Marín).
- Исправлена функция
ifдля случая NULL и константных аргументов типа Nullable. Закрывает #43069. #43178 (Kruglov Pavel). - Исправлено переполнение при вычислениях с десятичной арифметикой при разборе значений DateTime алгоритмом «best effort». Закрывает #43061. #43180 (Kruglov Pavel).
- Поле
indent, создаваемое инструментомgit-import, было вычислено неправильно. См. https://clickhouse.com/docs/getting-started/example-datasets/github/. #43191 (Alexey Milovidov). - Исправлено непредвиденное поведение типов
Intervalпри использовании в подзапросах и при приведении типов. #43193 (jh0x).
Релиз ClickHouse 22.10, 2022-10-25
Обратно несовместимое изменение
- Переименованы команды кэша:
show caches->show filesystem caches,describe cache->describe filesystem cache. #41508 (Kseniia Sumarokova). - Удалена поддержка секции
WITH TIMEOUTдляLIVE VIEW. Это закрывает #40557. #42173 (Alexey Milovidov). - Удалена поддержка макроса
{database}в приглашении клиента. Он отображался некорректно, если база данных не была указана, и не обновлялся при выполнении операторовUSE. Это закрывает #25891. #42508 (Alexey Milovidov).
Новая возможность
- Добавлена составная конфигурация протоколов. Теперь различные протоколы можно настраивать с разными хостами для прослушивания. Обёртки протоколов, такие как PROXYv1, можно настраивать поверх любых других протоколов (TCP, TCP secure, MySQL, Postgres). #41198 (Yakov Olkhovskiy).
- Добавлена поддержка
S3как нового типа назначения для резервных копий. Реализована поддержка операций BACKUP в S3 с сохранением исходной структуры путей и данных. #42333 (Vitaly Baranov), #42232 (Azat Khuzhin). - Добавлены функции (
randUniform,randNormal,randLogNormal,randExponential,randChiSquared,randStudentT,randFisherF,randBernoulli,randBinomial,randNegativeBinomial,randPoisson) для генерации случайных значений с указанными распределениями. Тем самым закрыта задача #21834. #42411 (Nikita Mikhaylov). - Улучшение для ClickHouse Keeper: добавлена поддержка выгрузки снапшотов в S3. Параметры S3 можно задать в
keeper_server.s3_snapshot. #41342 (Antonio Andelic). - Добавлена агрегатная функция
analysisOfVariance(anova) для выполнения статистического критерия на нескольких группах нормально распределённых наблюдений, чтобы определить, имеют ли все группы одинаковое среднее значение или нет. Исходный PR #37872. #42131 (Nikita Mikhaylov). - Добавлена поддержка ограничения объёма временных данных, хранимых на диске, с помощью настроек
max_temporary_data_on_disk_size_for_user/max_temporary_data_on_disk_size_for_query. #40893 (Vladimir C). - Добавлена настройка
format_json_object_each_row_column_for_object_nameдля записи и парсинга имени объекта как значения столбца в формате JSONObjectEachRow. #41703 (Kruglov Pavel). - Добавлена хеш-функция BLAKE3 в SQL. #33435 (BoloniniD).
- Функция
javaHashбыла распространена на целые числа. #41131 (JackyWoo). - Добавлена поддержка OpenTelemetry в операциях ON CLUSTER DDL (требуется задать для
distributed_ddl_entry_format_versionзначение 4). #41484 (Frank Chen). - Добавлена системная таблица
asynchronous_insert_log. Она содержит информацию об асинхронных вставках (включая результаты запросов в режиме «fire-and-forget» (сwait_for_async_insert=0)) для более удобного анализа. #42040 (Anton Popov). - Добавлена поддержка методов
lz4,bz2,snappyв HTTP-заголовкеAccept-Encoding, что является нестандартным расширением протокола HTTP. #42071 (Nikolay Degterinsky). - Добавлены функции кодирования и декодирования Morton Coding (ZCurve). #41753 (Constantine Peresypkin).
- Добавлена поддержка конструкции
SET setting_name = DEFAULT. #42187 (Filatenkov Artur).
Экспериментальная функция
- Добавлена новая инфраструктура для анализа и планирования запросов, управляемая настройкой
allow_experimental_analyzer. #31796 (Maksim Kita). - Начальная реализация Kusto Query Language. Пожалуйста, не используйте её. #37961 (Yong Wang).
Улучшение производительности
- Ослаблен порог "Too many parts". Это закрывает #6551. Теперь ClickHouse будет разрешать больше частей в партиции, если средний размер части достаточно велик (как минимум 10 GiB). Это позволяет иметь до петабайт данных в одной партиции одной таблицы на одном сервере, что возможно при использовании дисковых полок или объектного хранилища. #42002 (Alexey Milovidov).
- Реализован парсер элементов с учётом приоритета операторов, чтобы уменьшить требуемый размер стека. #34892 (Nikolay Degterinsky).
- Оптимизация DISTINCT по порядку использует свойства сортировки потоков данных. Это улучшение позволяет выполнять упорядоченное чтение для DISTINCT, если применимо (ранее было необходимо указывать ORDER BY для столбцов в DISTINCT). #41014 (Igor Nikonov).
- ColumnVector: оптимизирован индекс UInt8 с использованием AVX512VBMI. #41247 (Guo Wangyang).
- Оптимизирована конкуренция за блокировку
ThreadGroupStatus::mutex. Эксперименты по производительности SSB (Star Schema Benchmark) на системе ICX (процессор Intel Xeon Platinum 8380, 80 ядер, 160 потоков) показывают, что это изменение может дать 2.95x улучшение геометрического среднего QPS по всем подзадачам. #41675 (Zhiguo Zhou). - Добавлены возможности
ldaprв сборки для AArch64. Поддерживается на инстансах Graviton 2+, Azure и GCP. Появилось только в clang-15 относительно недавно. #41778 (Daniel Kutenin). - Повышена производительность при сравнении строк, когда один из аргументов — пустая константная строка. #41870 (Jiebin Sun).
- Оптимизирован
insertFromдля ColumnAggregateFunction с целью совместного использования Aggregate State в некоторых случаях. #41960 (flynn). - Ускорена запись на диски
azure_blob_storage(учитываетсяmax_single_part_upload_sizeвместо записи отдельного блока для каждого буфера). Неэффективность упомянута в #41754. #42041 (Kseniia Sumarokova). - Идентификаторы потоков в списке процессов и в query_log сделаны уникальными, чтобы избежать избыточных затрат ресурсов. #42180 (Alexey Milovidov).
- Добавлена поддержка полного пропуска кэша (как загрузки в кэш, так и чтения кэшированных данных) в случае, если запрошенный диапазон чтения превышает порог, определённый настройкой кэша
bypass_cache_threashold, требуется включение параметромenable_bypass_cache_with_threshold). #42418 (Han Shukai). Это помогает на медленных локальных дисках.
Улучшение
- Добавлена настройка
allow_implicit_no_password: в сочетании сallow_no_passwordона запрещает создание пользователя без пароля, если явно не указано выражениеIDENTIFIED WITH no_password. #41341 (Nikolay Degterinsky). - Встроенный Keeper всегда будет запускаться в фоновом режиме, что позволяет запускать ClickHouse даже при отсутствии кворума. #40991 (Antonio Andelic).
- Установку нового соединения с ZooKeeper сделали более оперативной в случае истечения срока действия предыдущего. Ранее существовала задача, которая по умолчанию запускалась каждую минуту, и из-за этого таблица могла находиться в режиме только для чтения примерно в течение этого времени. #41092 (Nikita Mikhaylov).
- Теперь проекции могут использоваться с репликацией без копий (репликация без копий не предназначена для использования в продакшене). #41147 (alesapin).
- Добавлена поддержка выражения
(EXPLAIN SELECT ...)в подзапросе. Запросы видаSELECT * FROM (EXPLAIN PIPELINE SELECT col FROM TABLE ORDER BY col)теперь считаются корректными. #40630 (Vladimir C). - Разрешено изменять
async_insert_max_data_sizeилиasync_insert_busy_timeout_msв пределах одного запроса. Например, пользователь выполняет вставку данных нечасто и не имеет доступа к конфигурации сервера для настройки значений по умолчанию. #40668 (Nikita Mikhaylov). - Улучшено чтение из удалённых файловых систем, добавлена возможность настраивать размер пула потоков для операций чтения и записи. Закрывает #41070. #41011 (Kseniia Sumarokova).
- Теперь поддерживаются все комбинации комбинаторов при версионировании функций WindowTransform/arratReduce*/initializeAggregation/aggregate. Ранее такие комбинаторы, как
ForEach/Resample/Map, не работали в этих местах, их использование приводило к исключению видаState function ... inserts results into non-state column. #41107 (Kruglov Pavel). - Добавлена функция
tryDecrypt, которая возвращает NULL при неудачной расшифровке (например, при расшифровке с некорректным ключом) вместо выбрасывания исключения. #41206 (Duc Canh Le). - Добавлен столбец
unreserved_spaceв таблицуsystem.disksдля проверки объёма незарезервированного места на каждом диске. #41254 (filimonov). - Добавлена поддержка заголовков авторизации S3 в аргументах табличной функции. #41261 (Kseniia Sumarokova).
- Добавлена поддержка MultiRead в Keeper и во внутреннем клиенте ZooKeeper (это расширение протокола ZooKeeper, доступное только в ClickHouse Keeper). #41410 (Antonio Andelic).
- Добавлена поддержка типа
Decimalпри сравнении с литералом числа с плавающей запятой в оператореIN. #41544 (liang.huang). - Добавлена поддержка человекочитаемых значений размера (например,
1TB) в конфигурации кэша. #41688 (Kseniia Sumarokova). - ClickHouse мог кэшировать устаревшие DNS-записи в течение некоторого времени (15 секунд по умолчанию), пока кэш асинхронно не обновлялся. В течение этих периодов ClickHouse тем не менее мог пытаться установить соединение и приводить к ошибкам. Это поведение исправлено. #41707 (Nikita Mikhaylov).
- Добавлен интерактивный поиск по истории команд с утилитой, подобной fzf (fzf/sk), для
clickhouse-client/clickhouse-local(обратите внимание, что вы можете использоватьFZF_DEFAULT_OPTS/SKIM_DEFAULT_OPTIONSдля дополнительной настройки поведения). #41730 (Azat Khuzhin). - Разрешать клиентам подключение к защищённому серверу с недействительным сертификатом только при указании флага '--accept-certificate'. #41743 (Yakov Olkhovskiy).
- Добавлена функция
tryBase58Decode, аналогичная существующей функцииtryBase64Decode. #41824 (Robert Schulze). - Улучшены сообщения при замене партиции с другим первичным ключом. Исправляет #34798. #41838 (Salvatore).
- Исправлен параллельный парсинг: сегментатор теперь проверяет
max_block_size. Это устранило чрезмерное выделение памяти при параллельном парсинге и небольшом LIMIT. #41852 (Vitaly Baranov). - Не добавлять исключение "TABLE_IS_DROPPED" в
system.errors, если оно произошло во время SELECT из системной таблицы и было проигнорировано. #41908 (AlfVII). - Опция
enable_extended_results_for_datetime_functionsулучшена и теперь возвращает результаты типа DateTime64 для функцийtoStartOfDay,toStartOfHour,toStartOfFifteenMinutes,toStartOfTenMinutes,toStartOfFiveMinutes,toStartOfMinuteиtimeSlot. #41910 (Roman Vasin). - Улучшено определение типа
DateTimeдля текстовых форматов. Теперь оно учитывает настройкуdate_time_input_formatи не пытается интерпретировать числа как временные метки при выводе значений типаDateTime. Закрывает #41389 Закрывает #42206. #41912 (Kruglov Pavel). - Удалено сбивающее с толку предупреждение при вставке, когда
perform_ttl_move_on_insert= false. #41980 (Vitaly Baranov). - Добавлена возможность использовать
countState(*)аналогичноcount(*). Это закрывает #9338. #41983 (Amos Bird). - Исправлено переполнение размера в функции
rankCorr. #42020 (Duc Canh Le). - Добавлена возможность указывать произвольную строку в качестве имени окружения в конфигурации Sentry для более удобной отчетности. #42037 (Nikita Mikhaylov).
- Исправлена обработка значений типа Date, выходящих за допустимый диапазон, при разборе CSV. #42044 (Andrey Zvonov).
parseDataTimeBestEffortтеперь поддерживает использование запятой между датой и временем. Закрывает #42038. #42049 (flynn).- Улучшен процесс восстановления отставших реплик для
ReplicatedMergeTree. Если потерянная реплика содержит некоторые части данных, которые отсутствуют на здоровой реплике, но эти части должны появиться в будущем в соответствии с очередью репликации этой реплики, то потерянная реплика сохранит такие части вместо их отсоединения. #42134 (Alexander Tokmakov). - Добавлена возможность использовать аргументы типа
Date32в функции date_diff. Исправлена проблема в функции date_diff при использовании аргументов типа DateTime64 с начальной датой до эпохи Unix и конечной датой после эпохи Unix. #42308 (Roman Vasin). - При загрузке больших частей в Minio операция 'Complete Multipart Upload' может занимать много времени. Minio отправляет сигналы heartbeat каждые 10 секунд (см. https://github.com/minio/minio/pull/7198). Но ClickHouse раньше разрывает соединение по тайм-ауту, потому что значение тайм-аута отправки/получения по умолчанию установлено в 5 секунд. #42321 (filimonov).
- Исправлено редко возникающее некорректное приведение типов состояний агрегатных функций для сложных типов, таких как Decimal. Исправляет #42408. #42417 (Amos Bird).
- Теперь можно использовать аргументы типа
Date32в функцииdateName. #42554 (Roman Vasin). - Теперь фильтры с литералами NULL будут использоваться при анализе индексов. #34063. #41842 (Amos Bird).
- Сливать части, если все части в диапазоне старше заданного порога. Порог задаётся с помощью
min_age_to_force_merge_seconds. Это закрывает #35836. #42423 (Antonio Andelic). Это продолжение #39550i от @fastio, который реализовал большую часть логики. - Добавлена новая инфраструктура для анализа и планирования запросов, управляемая настройкой
allow_experimental_analyzer. #31796 (Maksim Kita). - Сокращено время восстановления потерянных соединений Keeper. #42541 (Raúl Marín).
Улучшения сборки/тестирования/упаковки
- Добавлен фаззер для определений таблиц #40096 (Anton Popov). Это крупнейший прогресс в тестировании ClickHouse в этом году на текущий момент.
- Выпущена бета-версия сервиса ClickHouse Cloud: https://console.clickhouse.cloud/. Это самый простой способ использования ClickHouse (даже немного проще, чем установка одной командой).
- Добавлена поддержка генерации предложения WHERE в AST Fuzzer и возможность добавлять или удалять предложения ORDER BY и WHERE. #38519 (Ilya Yatsishin).
- Бинарные файлы для Aarch64 теперь требуют как минимум ARMv8.2, выпущенный в 2016 году. Наиболее существенно то, что это позволяет использовать ARM LSE, то есть нативные атомарные операции. Также добавлена опция сборки CMake
NO_ARMV81_OR_HIGHER, позволяющая компилировать бинарные файлы для более старого оборудования ARMv8.0, например Raspberry Pi 4. #41610 (Robert Schulze). - Добавлена возможность сборки ClickHouse с Musl (небольшие изменения после того, как поддержка уже была добавлена, но сломалась). #41987 (Alexey Milovidov).
- Добавлена проверка наличия файла
$CLICKHOUSE_CRONFILE, чтобы избежать запуска командыsedи получения ошибкиfile not foundпри установке. #42081 (Chun-Sheng, Li). - Обновлён cctz до версии
2022eдля поддержки последних изменений часовых поясов. Переходы в Палестине теперь происходят по субботам в 02:00. Три часовые зоны Украины объединены в одну. Иордания и Сирия переходят с режима +02/+03 с сезонным переводом часов на круглогодичный +03. (https://data.iana.org/time-zones/tzdb/NEWS). Это закрывает #42252. #42327 (Alexey Milovidov). #42273 (Dom Del Nano). - Добавлена поддержка кода на Rust в ClickHouse на примере библиотеки хеш-функций BLAKE3. #33435 (BoloniniD).
Исправление ошибок (заметное пользователям некорректное поведение в официальном стабильном или предстабильном релизе)
- Теперь используется корректный метод агрегации для
LowCardinalityс целочисленными типами большого размера. #42342 (Duc Canh Le). - Несколько исправлений для диска
web. #41652 (Kseniia Sumarokova). - Исправляет проблему, из‑за которой
docker runзавершался с ошибкой, если в конфигурации отсутствовалhttps_port. #41693 (Yakov Olkhovskiy). - Мутации некорректно отменялись при остановке сервера или выполнении запроса
SYSTEM STOP MERGES, из-за чего процесс отмены мог занимать много времени; проблема исправлена. #41699 (Alexander Tokmakov). - Исправлен неверный результат выполнения запросов с
ORDER BYилиGROUP BYпо столбцам из префикса ключа сортировки, обёрнутым в монотонные функции, при включённой оптимизации «чтение по порядку» (настройкиoptimize_read_in_orderиoptimize_aggregation_in_order). #41701 (Anton Popov). - Исправлено возможное аварийное завершение при выполнении запроса
SELECTк таблицеMergeпри включённой настройкеoptimize_monotonous_functions_in_order_by. Исправление для #41269. #41740 (Nikolai Kochetov). - Исправлена ошибка «Part ... intersects part ...», которая могла возникать в крайне редких случаях, если реплика перезапускалась сразу после отсоединения части как повреждённой. #41741 (Alexander Tokmakov).
- Запрещено создавать или изменять таблицы MergeTree со столбцом
_row_exists, который зарезервирован для легковесного удаления. Исправлено #41716. #41763 (Jianmei Zhang). - Исправлена ошибка, из-за которой в некоторых HTTP-ответах отсутствовали заголовки CORS. #41792 (Frank Chen).
- 22.9 могла не запуститься с таблицей
ReplicatedMergeTree, если эта таблица была создана в версии 20.3 или более ранней и ни разу не изменялась, теперь это исправлено. Исправляет #41742. #41796 (Alexander Tokmakov). - Когда по какой-то причине отправка пакета завершается неудачей, она не может быть автоматически восстановлена. Если ошибка не будет обработана своевременно, это приведёт к накоплению, сообщение об ошибке, выводимое в лог, будет становиться всё длиннее и длиннее, что вызовет блокировку HTTP-потока. #41813 (zhongyuankai).
- Исправлена настройка компактных частей с сжатыми метками. Исправлены #41783 и #41746. #41823 (alesapin).
- Старые версии реплицированной базы данных не содержат специального маркера в [Zoo]Keeper. Нужно лишь проверить, содержит ли узел какие‑то непонятные данные, а не специальную метку. #41875 (Nikita Mikhaylov).
- Исправлено возможное исключение в файловом кеше. #41884 (Kseniia Sumarokova).
- Исправлен параметр
use_environment_credentialsдля табличной функции s3. #41970 (Kseniia Sumarokova). - Исправлена ошибка «Directory already exists and is not empty» при отсоединении повреждённой части, из‑за которой могла не запускаться репликация таблицы
ReplicatedMergeTree. Исправляет #40957. #41981 (Alexander Tokmakov). toDateTime64теперь возвращает одинаковый результат для отрицательных целочисленных и вещественных аргументов. #42025 (Robert Schulze).- Исправлена запись в
azure_blob_storage. Частично закрыта задача #41754. #42034 (Kseniia Sumarokova). - Исправлена ошибка декодирования
bzip2для некоторых файловbzip2. #42046 (Nikolay Degterinsky). - Исправлена SQL-функция
toLastDayOfMonthс включённой настройкойenable_extended_results_for_datetime_functions = 1в начале расширенного диапазона (январь 1900 года). - Исправлена SQL-функцияtoRelativeWeekNum()с включённой настройкойenable_extended_results_for_datetime_functions = 1в конце расширенного диапазона (декабрь 2299 года). - Повышена производительность SQL-функцийtoISOYear(),toFirstDayNumOfISOYearIndex()иtoYearWeekOfNewyearMode()за счёт устранения лишней арифметики с индексами. #42084 (Roman Vasin). - Максимальный размер выборок для каждой таблицы по ошибке был зафиксирован на уровне 8, хотя размер пула мог быть больше. Теперь максимальный размер выборок для таблицы равен размеру пула. #42090 (Nikita Mikhaylov).
- Ранее перед проверкой, можно ли удалить таблицу без нарушения зависимостей между таблицами, сама таблица могла быть остановлена, а словарь — отсоединён; это исправлено. Исправляет #41982. #42106 (Alexander Tokmakov).
- Устранена серьезная неэффективность
remote_filesystem_read_method=readпри работе с файловым кешем. Закрывает #42125. #42129 (Kseniia Sumarokova). - Исправлено возможное исключение по таймауту для распределённых запросов при use_hedged_requests = 0. #42130 (Azat Khuzhin).
- Исправлена незначительная ошибка в функции
runningDifferenceпри использовании её с типомDate32. Ранее использовалсяDate, что могло приводить к логическим ошибкам видаBad cast from type DB::ColumnVector<int> to DB::ColumnVector<unsigned short>'. #42143 (Alfred Xu). - Исправлено повторное использование файлов размером более 4 ГБ из базовой резервной копии. #42146 (Azat Khuzhin).
- DISTINCT с ORDER BY приводил к LOGICAL_ERROR, если первый столбец в ключе сортировки содержал функцию. #42186 (Igor Nikonov).
- Исправлена ошибка в проекциях при использовании настройки
aggregate_functions_null_for_empty. Эта ошибка встречается очень редко и проявляется только в том случае, если вы включили настройкуaggregate_functions_null_for_emptyв конфигурации сервера. Закрыта задача #41647. #42198 (Alexey Milovidov). - Исправлено чтение из таблиц
Bufferпри чтении в порядке убывания (DESC). #42236 (Duc Canh Le). - Исправлена ошибка, из-за которой не удаётся запустить ClickHouse, когда параметр
background_pool_sizeзадан в профилеdefault, аbackground_merges_mutations_concurrency_ratio— нет. #42315 (nvartolomei). ALTER UPDATEприсоединённой части (с колонками, отличающимися от схемы таблицы) мог приводить к созданию некорректных метаданныхcolumns.txtна диске. Чтение из такой части могло завершиться ошибкой или вернуть некорректные данные. Исправляет #42161. #42319 (Nikolai Kochetov).- Настройка
additional_table_filtersне применялась для табличного движкаDistributed. Исправлена проблема #41692. #42322 (Nikolai Kochetov). - Устранена гонка данных при завершении и отмене запроса. Это закрывает #42346. #42362 (Alexey Milovidov).
- Отменяет #40217, из-за которого появилась регрессия в функциях работы с датой и временем. #42367 (Alexey Milovidov).
- Исправлена проверка assert cast в
JOINпри ложном условии; закрывает #42380. #42407 (Vladimir C). - Исправлено переполнение буфера при обработке значений типа Decimal. Это закрывает #42451. #42465 (Alexey Milovidov).
AggregateFunctionQuantileтеперь корректно работает со столбцами типаUInt128. Ранее состояние квантиля интерпретировало столбцыUInt128какInt128, что могло приводить к некорректным результатам. #42473 (Antonio Andelic).- Исправлено срабатывание assert bad_cast при выполнении INSERT в индексы
Annoyдля столбцов не типа Float32. ИндексыAnnoyявляются экспериментальной возможностью. #42485 (Robert Schulze). - Арифметический оператор с
DateилиDateTimeи 128- или 256-битным целым числом обращался к неинициализированной памяти. #42453. #42573 (Alexey Milovidov). - Исправлена неожиданная ошибка загрузки таблицы при обновлении сервера, возникающая, если ключ партиционирования содержит имена функций-псевдонимов. #36379 (Amos Bird).
Релиз ClickHouse 22.9, 2022-09-22
Обратно несовместимые изменения
- Обновление с версий 20.3 и более старых до 22.9 и новее должно выполняться через промежуточную версию, если существуют какие-либо таблицы
ReplicatedMergeTree, иначе сервер с новой версией не запустится. #40641 (Alexander Tokmakov). - Удалены функции
accurate_Castиaccurate_CastOrNull(они отличаются отaccurateCastиaccurateCastOrNullналичием символа подчеркивания в имени и не зависят от значения настройкиcast_keep_nullable). Эти функции не были документированы, не покрывались тестами, не использовались и не были нужны. Они сохранялись в коде из‑за его обобщения. #40682 (Alexey Milovidov). - Добавлен тест, гарантирующий, что каждая новая табличная функция будет документирована. См. #40649. Табличная функция
MeiliSearchпереименована вmeilisearch. #40709 (Alexey Milovidov). - Добавлен тест, гарантирующий, что каждая новая функция будет документирована. См. #40649. Функции
lemmatize,synonyms,stemпо ошибке работали без учета регистра. Теперь они чувствительны к регистру. #40711 (Alexey Milovidov). - По соображениям безопасности и стабильности модели catboost больше не вычисляются внутри сервера ClickHouse. Вместо этого вычисление теперь выполняется в clickhouse-library-bridge — отдельном процессе, который загружает библиотеку catboost и взаимодействует с серверным процессом по HTTP. #40897 (Robert Schulze).
- Интерпретация YAML-конфигураций сделана более общепринятой. #41044 (Vitaly Baranov).
Новые возможности
- Поддержка
insert_quorum = 'auto'для использования большинства реплик. #39970 (Sachin). - Добавлены встроенные дашборды в сервер ClickHouse. Это демонстрационный проект о том, как достичь 90% результата, затратив 1% усилий, используя возможности ClickHouse. #40461 (Alexey Milovidov).
- Добавлен новый тип ограничения изменяемости настроек
changeable_in_readonly. #40631 (Sergei Trifonov). - Добавлена поддержка
INTERSECT DISTINCTиEXCEPT DISTINCT. #40792 (Duc Canh Le). - Добавлен новый формат ввода/вывода
JSONObjectEachRow— поддержка импорта для форматовJSON/JSONCompact/JSONColumnsWithMetadata. Добавлена новая настройкаinput_format_json_validate_types_from_metadata, которая управляет тем, нужно ли проверять соответствие типов данных из метаданных типам данных из заголовка. — Добавлена настройкаinput_format_json_validate_utf8, при включении которой все форматыJSONбудут проверять корректность UTF-8-последовательностей. По умолчанию она отключена. Обратите внимание, что эта настройка не влияет на форматы выводаJSON/JSONCompact/JSONColumnsWithMetadata, они всегда проверяют UTF-8-последовательности (это исключение сделано по причинам совместимости). — Добавлена настройкаinput_format_json_read_numbers_as_strings, которая позволяет разбирать числа в столбец типа String, по умолчанию настройка отключена. — Добавлена настройкаoutput_format_json_quote_decimals, которая позволяет выводить значения типа Decimal в двойных кавычках, по умолчанию отключена. — Разрешён разбор значений типа Decimal в двойных кавычках при импорте данных. #40910 (Kruglov Pavel). - Поддерживаются параметры запроса в запросе DESCRIBE TABLE. #40952 (Nikita Taranov).
- Добавлена поддержка Parquet Time32/64 путём преобразования их в DateTime64. В Parquet time32/64 представляет собой время, прошедшее с полуночи, тогда как DateTime32/64 представляет собой фактическую метку времени Unix. Преобразование просто смещает значение относительно
0. #41333 (Arthur Passos). - Реализованы операции над множествами для Apache Datasketches. #39919 (Fangyuan Deng). Примечание: нет смысла использовать Apache Datasketches, они уступают ClickHouse и имеют смысл только для интеграции с другими системами.
- Разрешена запись ошибок в указанный файл при чтении текстовых форматов (
CSV,TSV). #40516 (zjial).
Экспериментальные возможности
- Добавлен ANN (approximate nearest neighbor) индекс на основе
Annoy. #40818 (Filatenkov Artur). #37215 (VVMak). - Добавлен новый движок хранения
KeeperMap, который использует ClickHouse Keeper или ZooKeeper как key-value хранилище. #39976 (Antonio Andelic). Этот движок хранения предназначен для хранения небольшого объёма метаданных. - Улучшения для частей данных в памяти: полностью обработанные WAL-файлы удаляются. #40592 (Azat Khuzhin).
Повышение производительности
- Реализовано сжатие меток и первичного ключа. Закрывает #34437. #37693 (zhongyuankai).
- Добавлена возможность предварительно загружать метки с использованием пула потоков. Регулируется настройкой
load_marks_asynchronously(по умолчанию: 0). #40821 (Kseniia Sumarokova). - Виртуальная файловая система поверх S3 будет использовать случайные имена объектов, распределённые по нескольким префиксам пути для повышения производительности в AWS. #40968 (Alexey Milovidov).
- Учитывать значение параметра
max_block_sizeпри вычислении результатов одноуровневой агрегации. Это позволяет выполнять последующие шаги плана запроса с использованием большего числа потоков. #39138 (Nikita Taranov). - Программная предварительная выборка используется при агрегации для ускорения операций с хеш-таблицами. Управляется настройкой
enable_software_prefetch_in_aggregation, которая по умолчанию включена. #39304 (Nikita Taranov). - Улучшена поддержка
optimize_read_in_orderв случае, когда некоторые столбцы ключа сортировки после применения условияWHEREвсегда имеют константное значение. Например, запросSELECT ... FROM table WHERE a = 'x' ORDER BY a, b, где таблица описана как:MergeTree ORDER BY (a, b). #38715 (Anton Popov). - Взаимно фильтровать объединённые потоки для
full_sorting_joinперед сортировкой. #39418 (Vladimir C). - Декомпрессия LZ4 оптимизирована за счёт пропуска обработки пустых литералов. #40142 (Nikita Taranov).
- Ускорен процесс резервного копирования за счёт использования встроенного оператора
COPY, когда это возможно, вместо копирования через память процессаclickhouse-server. #40395 (alesapin). - Не получать снимок хранилища для каждого блока операции INSERT (незначительно улучшает производительность). #40638 (Azat Khuzhin).
- Реализована пакетная обработка агрегатных функций с несколькими аргументами, допускающими NULL. #41058 (Raúl Marín).
- Ускорено чтение UniquesHashSet (например,
uniqStateс диска). #41089 (Raúl Marín). - Исправлено повышенное потребление памяти при выполнении мутаций компактных частей в таблицах с очень большим числом столбцов. #41122 (lthaooo).
- Включена поддержка библиотеки vectorscan на архитектуре ARM, что ускоряет обработку регулярных выражений. #41033 (Robert Schulze).
- Обновлена vectorscan до версии 5.4.8 с множеством оптимизаций производительности для ускорения обработки регулярных выражений. #41270 (Robert Schulze).
- Исправлен некорректный фолбэк, из-за которого при очень высокой конкурентной нагрузке для VFS (например, S3) пропускалось использование локального файлового кэша. #40420 (Kseniia Sumarokova).
- Если фильтр политики по строкам всегда ложно оценивается, немедленно возвращать пустой результат без чтения данных. Это закрывает #24012. #40740 (Amos Bird).
- Параллельный хеш-JOIN для типов данных Float может быть неэффективен. Улучшите его. #41183 (Alexey Milovidov).
Улучшение
- При запуске и вызове ATTACH таблицы
ReplicatedMergeTreeбудут доступны только для чтения до установления соединения с ZooKeeper и завершения инициализации. #40148 (Antonio Andelic). - Добавлена опция
enable_extended_results_for_datetime_functions, позволяющая функциям toStartOfYear, toStartOfISOYear, toStartOfQuarter, toStartOfMonth, toStartOfWeek, toMonday и toLastDayOfMonth возвращать значения типа Date32, если аргумент имеет тип Date32 или DateTime64; в противном случае возвращаются значения типа Date. По соображениям совместимости значение по умолчанию — '0'. #41214 (Roman Vasin). - По соображениям безопасности и стабильности модели CatBoost больше не оцениваются внутри сервера ClickHouse. Вместо этого оценка теперь выполняется в отдельном процессе
clickhouse-library-bridge, который загружает библиотеку CatBoost и взаимодействует с серверным процессом по протоколу HTTP. ФункцияmodelEvaluate()была заменена наcatboostEvaluate(). #40897 (Robert Schulze). #39629 (Robert Schulze). - Добавлены дополнительные метрики для временных данных на диске, закрыта задача #40206. #40239 (Vladimir C).
- Добавлена опция конфигурации
warning_supress_regexp, закрыт #40330. #40548 (Vladimir C). - Добавлена настройка, позволяющая отключить ограничение на kafka_num_consumers. Закрывает #40331. #40670 (Kruglov Pavel).
- Добавлена поддержка
SETTINGSв запросеDELETE .... #41533 (Kseniia Sumarokova). - Детализированные профильные события S3
DiskS3*по каждому вызову S3 API для S3 ObjectStorage. #41532 (Sergei Trifonov). - В
system.asynchronous_metricsпоявились две новые метрики:NumberOfDetachedPartsиNumberOfDetachedByUserParts. #40779 (Sema Checherinda). - Разрешены ограничения CONSTRAINT для таблиц ODBC и JDBC. #34551 (Alexey Milovidov).
- Не выводите ключевое слово
SETTINGSболее одного раза при форматировании запроса, если оно не встречалось несколько раз в исходном запросе. #38900 (Raúl Marín). - Улучшено распространение контекста трассировки (OpenTelemetry) между потоками. #39010 (Frank Chen).
- ClickHouse Keeper: добавлять слушатели для
interserver_listen_hostтолько в Keeper, если параметр задан. #39973 (Antonio Andelic). - Улучшено восстановление реплицированного хранилища доступа пользователей после ошибок. #39977 (Vitaly Baranov).
- Добавлена поддержка TTL для
EmbeddedRocksDB. #39986 (Lloyd-Pottiger). - Добавлена поддержка автоматического определения схемы в
clickhouse-obfuscator, поэтому аргумент--structureбольше не требуется. #40120 (Nikolay Degterinsky). - Улучшена и исправлена работа словарей в формате
Arrow. #40173 (Kruglov Pavel). - Более естественное преобразование
Date32,DateTime64,Dateк более узким типам: при выходе значения за допустимый диапазон берётся верхняя или нижняя граница допустимого значения. #40217 (Andrey Zvonov). - Исправлен случай, когда таблица
Mergeповерх представленияViewне могла использовать индекс. #40233 (Duc Canh Le). - Пользовательские имена ключей в JSON-журналах сервера. #40251 (Mallik Hassan).
- Теперь можно задать пользовательский код ошибки для исключения, выбрасываемого функцией
throwIf. #40319 (Robert Schulze). - Улучшено кэширование вывода схемы, учитываются настройки формата, которые могут изменить схему. #40414 (Kruglov Pavel).
- Добавлена возможность разбирать
DateкакDateTimeиDateTime64. Реализовано улучшение, предложенное в #36949. #40474 (Alexey Milovidov). - Разрешено преобразование значения типа
String, содержащегоDateTime64(например,2022-08-22 01:02:03.456), вDateиDate32. Разрешено преобразование значения типаString, содержащегоDateTime(например,2022-08-22 01:02:03), вDate32. Это закрывает #39598. #40475 (Alexey Milovidov). - Улучшена поддержка вложенных структур данных в формате Parquet #40485 (Arthur Passos).
- Реализована поддержка чтения Array(Record) в развёрнутую вложенную таблицу при работе с Avro. #40534 (Kruglov Pavel).
- Добавлена поддержка режима только чтения для
EmbeddedRocksDB. #40543 (Lloyd-Pottiger). - Проверка параметра метода сжатия для движка таблицы URL. #40600 (Frank Chen).
- Улучшено определение формата для табличной функции/движка
urlпри наличии параметров запроса после имени файла. Закрывает #40315. #40636 (Kruglov Pavel). - Отключена проекция при использовании grouping set, так как она приводила к неверному результату. Это исправляет #40635. #40726 (Amos Bird).
- Исправлен некорректный формат преобразователя столбца
APPLY, который при использовании в определении таблицы мог приводить к повреждению метаданных. Это исправляет #37590. #40727 (Amos Bird). - Добавлена поддержка дескриптора
%zдля форматирования смещения часового пояса вformatDateTime. #40736 (Cory Levy). - Интерактивный режим в
clickhouse-clientтеперь интерпретирует символы.и/как «выполнить последнюю команду». #40750 (Robert Schulze). - Исправлена ошибка при передаче тайм-аутов MySQL для движка базы данных MySQL и табличной функции MySQL. Закрывает #34168. #40751 (Kseniia Sumarokova).
- Создан файл статуса для каталога файлового кеша, чтобы гарантировать, что каталоги кеша не используются совместно разными серверами или кешами. #40820 (Kseniia Sumarokova).
- Добавлена поддержка операторов
DELETEиUPDATEдля хранилищаEmbeddedRocksDB. #40853 (Antonio Andelic). - ClickHouse Keeper: исправлено некорректное завершение работы во время длительного коммита и увеличен допустимый размер запроса. #40941 (Antonio Andelic).
- Исправлена гонка данных в WriteBufferFromS3, добавлены аннотации TSA. #40950 (Kseniia Sumarokova).
- Grouping sets с
group_by_use_nullsдолжны преобразовывать только столбцы-ключи вNullable. #40997 (Duc Canh Le). - Улучшена наблюдаемость операций INSERT для распределённой таблицы. #41034 (Frank Chen).
- Дополнительные низкоуровневые метрики для взаимодействия с S3. #41039 (mateng915).
- Добавлена поддержка относительного пути в заголовке Location после HTTP‑перенаправления. Закрывает #40985. #41162 (Kruglov Pavel).
- Применять изменения в HTTP-обработчиках на лету, без перезапуска сервера. #41177 (Azat Khuzhin).
- ClickHouse Keeper: корректное завершение активных сессий при остановке. #41215 (Antonio Andelic). Это уменьшает время, в течение которого возникают ошибки «table is read-only».
- Добавлена возможность автоматически комментировать SQL-запросы в clickhouse-client/local (с помощью
Alt-#, аналогично readline). #41224 (Azat Khuzhin). - Исправлена несовместимость кэша, возникавшая при переключении настройки
do_no_evict_index_and_mark_filesмежду значениями 0 и 1. #41330 (Kseniia Sumarokova). - Добавлена настройка
allow_suspicious_fixed_string_types, запрещающая пользователям создавать столбцы типа FixedString с размером > 256. #41495 (Duc Canh Le). - В таблицу system.parts добавлен столбец
has_lightweight_delete. #41564 (Kseniia Sumarokova).
Улучшение сборки/тестирования/упаковки
- Сделать документацию обязательной для каждого параметра. #40644 (Alexey Milovidov).
- Теперь для каждой текущей метрики требуется документация. #40645 (Alexey Milovidov).
- Требовать наличие документации для каждого счетчика событий профилирования. Добавить недостающую документацию. #40646 (Alexey Milovidov).
- Сделана возможной минимальная сборка
clickhouse-localза счёт исправления некоторых зависимостей. #40460 (Alexey Milovidov). Теперь она занимает менее 50 MiB. - Подсчитывать и отображать покрытие SQL‑функций в тестах. #40593. #40647 (Alexey Milovidov).
- Обеспечить наличие документации для каждого параметра MergeTree. #40648 (Alexey Milovidov).
- Прототип встроенной справочной документации для высокоуровневых унифицированных компонентов сервера. #40649 (Alexey Milovidov).
- Мы проверим все запросы из изменённых perf-тестов, чтобы убедиться, что все изменённые запросы были покрыты тестами. #40322 (Nikita Taranov).
- Исправлены пакеты TGZ. #40681 (Mikhail f. Shiryaev).
- Исправлены отладочные символы. #40873 (Azat Khuzhin).
- Расширена конфигурация CI для создания сборки x86 только с SSE2. Полезно для старого или встраиваемого оборудования. #40999 (Robert Schulze).
- Переход на llvm/clang 15. #41046 (Azat Khuzhin).
- Продолжение #40938. Устраняет нарушение правила ODR для класса
Loggers. Устраняет #40398, #40937. #41060 (Dmitry Novik). - Добавлены бинарные файлы для macOS в ресурсы релизов на GitHub, что исправляет #37718. #41088 (Mikhail f. Shiryaev).
- Библиотека c-ares теперь включена в систему сборки ClickHouse. #41239 (Robert Schulze).
- Исключено использование
dlopenиз основного кода ClickHouse. Он остаётся в library-bridge и odbc-bridge. #41428 (Alexey Milovidov). - Не допускайте использование
dlopenв основном исполняемом файле ClickHouse, потому что это вредно и небезопасно. Мы его не используем. Но он может использоваться некоторыми библиотеками для реализации «плагинов». Мы категорически не рекомендуем устаревший подход загрузки неконтролируемых сторонних опасных библиотек в адресное пространство процесса, потому что это безумие. #41429 (Alexey Milovidov). - Добавлено поле
sourceв deb-пакеты, обновлёнnfpm. #41531 (Mikhail f. Shiryaev). - Поддержка DWARF-5 во внутреннем парсере DWARF. #40710 (Azat Khuzhin).
- Добавлена возможность инъекции сбоев в клиент ZooKeeper для тестирования #30498 (Alexander Tokmakov).
- Добавлены stateless-тесты с хранилищем S3 в режимах debug и tsan #35262 (Kseniia Sumarokova).
- Пробуем стресс‑тест поверх S3 #36837 (alesapin).
- Включена проверка
concurrency-mt-unsafeвclang-tidy#40224 (Alexey Milovidov).
Исправление ошибок
- Исправлена потенциальная потеря данных из‑за ошибки в AWS SDK. Ошибка может проявляться только при использовании ClickHouse с S3. #40506 (alesapin). Эта ошибка оставалась открытой в AWS SDK в течение 5 лет и была закрыта после нашего отчёта.
- Злонамеренные данные в формате Native могут привести к сбою. #41441 (Alexey Milovidov).
- Агрегатная функция
categorialInformationValueбыла определена с некорректными свойствами, что могло привести к разыменованию нулевого указателя во время выполнения. Это исправляет #41443. #41449 (Alexey Milovidov). - Запись данных в формате Apache
ORCмогла привести к переполнению буфера. #41458 (Alexey Milovidov). - Исправлены проблемы с безопасностью работы с памятью в функциях
encryptиcontingencyпри использовании массива типа Array(Nullable(..)) в качестве аргумента. Это исправляет #41004. #40195 (Alexey Milovidov). - Исправлены ошибки в MergeJoin, когда значение 'not_processed' не равно NULL. #40335 (liql2007).
- Исправлена ошибка, приводившая к некорректному результату при потере точности чисел Decimal в операторе IN, см. #41125. #41130 (Vladimir C).
- Исправлено заполнение пропущенных многоуровневых столбцов типа
Nested. #37152 (Anton Popov). - Исправлен запрос SYSTEM UNFREEZE для устаревшей базы данных Ordinary. Исправление для https://github.com/ClickHouse/ClickHouse/pull/36424. #38262 (Vadim Volodin).
- Исправлены неиспользуемые неизвестные столбцы, добавленные оператором WITH. Данное изменение устраняет #37812. #39131 (Amos Bird).
- Исправлен анализ запросов с ORDER BY при наличии оконных функций. Исправлены #38741 и #24892. #39354 (Dmitry Novik).
- Исправлено исключение
Unknown identifier (aggregate-function), возникающее при попытке вычислить выражения WINDOW ORDER BY/PARTITION BY над агрегатными функциями. #39762 (Vladimir Chebotaryov). - Количество этапов анализа для одного запроса ограничивается настройкой
max_analyze_depth. Это предотвращает экспоненциальный рост времени анализа для запросов с чрезвычайно большим количеством подзапросов. #40334 (Vladimir C). - Исправлена редкая ошибка с TTL столбца в семействе движков MergeTree: в случае повторного вертикального слияния могла возникать ошибка
Cannot unlink file ColumnName.bin ... No such file or directory.. #40346 (alesapin). - Используйте DNS-записи для IPv4 и IPv6, если они доступны. #40353 (Maksim Kita).
- Добавлена поддержка чтения файлов из Hadoop, сжатых Snappy. #40482 (Kruglov Pavel).
- Исправлен сбой при разборе значений типа
Object(экспериментальная возможность), содержащих массивы переменной размерности. #40483 (Duc Canh Le). - Исправлена настройка
input_format_tsv_skip_first_lines. #40491 (mini4). - Исправлена ошибка (состояние гонки) при запуске движка базы данных/таблицы MaterializedPostgreSQL. #40262. Исправлена ошибка при достижении предела слотов relcache_callback_list. #40511 (Maksim Buren).
- Исправлена возможная ошибка «Decimal math overflow» при разборе DateTime64. #40546 (Kruglov Pavel).
- Исправлено вертикальное слияние частей с легковесно удалёнными строками. #40559 (Alexander Gololobov).
- Исправлена ошибка сегментирования при записи данных в движок таблицы URL при включённом сжатии. #40565 (Frank Chen).
- Исправлена возможная логическая ошибка «Invalid Field get from type UInt64 to type String» в функции arrayElement при работе с типом Map. #40572 (Kruglov Pavel).
- Исправлена потенциальная гонка в файловом кэше. #40586 (Kseniia Sumarokova).
- Убран пропуск мутаций в не затронутых партициях таблиц
MergeTree, так как эта функциональность никогда не работала корректно и могла приводить к «воскрешению» завершённых мутаций. #40589 (Alexander Tokmakov). - Сервер ClickHouse аварийно завершит работу, если во время работы мы добавим в конфигурацию gRPC-порт, который уже занят. #40597 (何李夫).
- Исправлена обработка ведущих 0 и '1' в
base58Encode / base58Decode. #40620 (Andrey Zvonov). - keeper-fix: исправление гонки при доступе к логам во время установки снапшота. #40627 (Antonio Andelic).
- Исправлено short-circuit-выполнение функции toFixedString. Частично решает #40622. #40628 (Kruglov Pavel).
- Исправлена ошибка преобразования столбца SQLite int8 в столбец int64 в ClickHouse. Исправляет #40639. #40642 (Barum Rho).
- Исправлено переполнение стека в рекурсивных таблицах типа
Buffer. Это закрывает #40637. #40643 (Alexey Milovidov). - При добавлении нового запроса в
ProcessListпроисходят выделения памяти. Если во время этих выделений достигается лимит памяти, мы не можем использоватьOvercommitTracker, потому чтоProcessList::mutexуже захвачен. Исправляет #40611. #40677 (Dmitry Novik). - Исправлена ошибка LOGICAL_ERROR при чтении меток с max_read_buffer_size=0. #40705 (Azat Khuzhin).
- Исправлена утечка памяти при записи в материализованные представления без контекста запроса (из Kafka/...). #40732 (Azat Khuzhin).
- Исправлена возможная ошибка «Attempt to read after eof» при определении схемы CSV. #40746 (Kruglov Pavel).
- Исправлена логическая ошибка в кэше сквозной записи («File segment completion can be done only by downloader»). Закрывает #40748. #40759 (Kseniia Sumarokova).
- Результат работы функции GROUPING сделан таким же, как в SQL и других СУБД. #40762 (Dmitry Novik).
- В #40595 сообщалось, что функция
host_regexpнекорректно работала при разрешении имени в адрес через/etc/hosts. Ошибка исправлена. #40769 (Arthur Passos). - Исправлена работа инкрементных резервных копий для семейства таблиц Log. #40827 (Vitaly Baranov).
- Исправлена крайне редкая ошибка, которая могла приводить к потере данных при zero-copy репликации. #40844 (alesapin).
- Исправлено падение при анализе ключевого условия, когда одно и то же выражение множества формируется из разных столбцов. #40850 (Duc Canh Le).
- Исправлен вывод схемы для вложенных JSON-объектов. #40851 (Kruglov Pavel).
- Исправлена проблема, из-за которой каталоги с 3-значным префиксом для файлов кэша файловой системы не удалялись, если были пустыми. Закрывает #40797. #40867 (Kseniia Sumarokova).
- Исправлена необработанная ошибка DNS_ERROR при сбое подключения к репликам. #40881 (Robert Coelho).
- Исправлена ошибка при удалении ненужных столбцов в подзапросе. #40884 (luocongkai).
- Исправлено избыточное выделение памяти для буферов удалённого чтения. #40896 (Kseniia Sumarokova).
- Исправлено поведение, при котором пользователь с явно отозванным правом на удаление баз данных всё ещё мог их удалять. #40906 (Nikita Mikhaylov).
- Исправление в ClickHouse Keeper: теперь пути в запросах на запись корректно сравниваются с путями внутренних системных узлов Keeper. #40918 (Antonio Andelic).
- Исправлен дедлок в WriteBufferFromS3. #40943 (Kseniia Sumarokova).
- Исправлены права доступа для
DESCRIBE TABLE url()и некоторых других вызововDESCRIBE TABLE <table_function>(). #40975 (Vitaly Baranov). - Удалена некорректная логика работы парсера для
WITH GROUPING SETS, которая могла приводить к разыменованию нулевого указателя. #41049 (Duc Canh Le). - Исправление для ClickHouse Keeper: исправлена возможная ошибка сегментации памяти при завершении работы Keeper. #41075 (Antonio Andelic).
- Исправлены возможные сегфолты, использование кучи после освобождения (use-heap-after-free) и утечки памяти в комбинаторах агрегатных функций. Закрыта задача #40848. #41083 (Kruglov Pavel).
- Исправлен журнал query_views_log для оконных представлений. #41132 (Raúl Marín).
- По умолчанию отключена настройка optimize_monotonous_functions_in_order_by, что уменьшает влияние проблемы: #40094. #41136 (Denny Crane).
- Исправлена ошибка «possible deadlock avoided» при автоматическом преобразовании движка базы данных из Ordinary в Atomic. #41146 (Alexander Tokmakov).
- Исправлена ошибка SIGSEGV в SortedBlocksWriter в случае пустого блока (возможна при использовании
optimize_aggregation_in_orderиjoin_algorithm=auto). #41154 (Azat Khuzhin). - Исправлен некорректный результат запроса при включённой оптимизации trivial count в сочетании с оператором ARRAY JOIN. Это исправляет #39431. #41158 (Denny Crane).
- Исправлена ошибка stack-use-after-return в GetPriorityForLoadBalancing::getPriorityFunc(). #41159 (Azat Khuzhin).
- Исправлено исключение «Positional argument out of bounds» при использовании позиционных аргументов. Закрывает #40634. #41189 (Kseniia Sumarokova).
- Исправлена фоновая очистка повреждённых отсоединённых частей. #41190 (Kseniia Sumarokova).
- Исправлено экспоненциальное переписывание запроса при большом числе операций CROSS JOIN с WHERE; закрыт #21557. #41223 (Vladimir C).
- Исправлена возможная логическая ошибка в write-through кэше, которая возникала из-за того, что некоторые типы исключений обрабатывались ненадлежащим образом. Закрывает #41208. #41232 (Kseniia Sumarokova).
- Исправлена запись журнала в system.filesystem_cache_log с типом String. #41233 (jmimbrero).
- Запросы с оператором
OFFSETво вложенном подзапросе и операторомWHEREво внешнем запросе могли возвращать некорректный результат; проблема исправлена. Исправлена #40416. #41280 (Alexander Tokmakov). - Исправлен потенциально некорректный результат выполнения запроса при включённом
query_plan_optimize_primary_key. Устраняет проблему #40599. #41281 (Nikolai Kochetov). - Не допускать влияния некорректных последовательностей на другие строки в lowerUTF8/upperUTF8. #41286 (Azat Khuzhin).
- Исправлена работа запросов
ALTER <table> ADD COLUMNсо столбцами типаObject. #41290 (Anton Popov). - Исправлена ошибка «No node» при выполнении запроса SELECT из
system.distributed_ddl_queue, когда в конфигурации отсутствуетdistributed_ddl.path. Исправляет #41096. #41296 (young scott). - Исправлена некорректная логическая проверка
Expected relative pathв дисковом объектном хранилище. Связано с #41246. #41297 (Kseniia Sumarokova). - Добавлена проверка типа столбца перед вставкой UUID в формате MsgPack. #41309 (Kruglov Pavel).
- Исправлено возможное аварийное завершение работы после асинхронной вставки (при включённой настройке
async_insert) некорректных данных в столбцы типаObject. Это могло происходить, если JSON во всех батчах асинхронных вставок были некорректными и не удавалось их разобрать. #41336 (Anton Popov). - Исправлена возможная взаимоблокировка при использовании async_socket_for_remote/use_hedged_requests и параллельном выполнении KILL. #41343 (Azat Khuzhin).
- По умолчанию отключена optimize_rewrite_sum_if_to_count_if, что устраняет проблемы: #38605 #38683. #41388 (Denny Crane).
- Начиная с версии 22.8 оператор
ON CLUSTERигнорировался, если база данных —Replicated, а имя кластера и имя базы данных совпадают. Из‑за этогоDROP PARTITION ON CLUSTERработал не так, как ожидалось, сReplicated. Это исправлено: теперь операторON CLUSTERигнорируется только для запросов, которые реплицируются на уровне базы данных. Исправление #41299. #41390 (Alexander Tokmakov). - Исправлено возможное зависание/взаимная блокировка при отмене запроса (
KILL QUERYили остановке сервера). #41467 (Azat Khuzhin). - Исправлен потенциальный сбой сервера при использовании функции JBOD. Устраняет #41365. #41483 (Amos Bird).
- Исправлено преобразование из Nullable(FixedString) в String. #41541 (Duc Canh Le).
- Предотвращён сбой при передаче некорректных состояний агрегации в функции groupBitmap*. #41563 (Raúl Marín).
- Запросы с
ORDER BYи1500 <= LIMIT <= max_block_sizeмогли возвращать некорректный результат с пропущенными строками в начале. Исправлена ошибка #41182. #41576 (Nikolai Kochetov). - Исправлены данные о прочитанных байтах и строках в X-ClickHouse-Summary при использовании материализованных представлений. #41586 (Raúl Marín).
- Исправлено возможное исключение
pipeline stuckдля запросов сOFFSET. Ошибка проявлялась приenable_optimize_predicate_expression = 0и всегда ложном условии вWHERE. Исправляет #41383. #41588 (Nikolai Kochetov).
Релиз ClickHouse 22.8, 2022-08-18
Обратно несовместимое изменение
- Расширен диапазон
Date32иDateTime64для поддержки дат с 1900 по 2299 год. В предыдущих версиях поддерживаемый интервал составлял только с 1925 по 2283 год. Реализация использует пролептический григорианский календарь (который соответствует ISO 8601:2004 (пункт 3.2.1 The Gregorian calendar)) вместо учета исторических переходов от юлианского к григорианскому календарю. Это изменение влияет на специфичное для реализации поведение для аргументов вне диапазона. Например, если в предыдущих версиях значение1899-01-01ограничивалось до1925-01-01, то в новой версии оно будет ограничиваться до1900-01-01. Это изменяет поведение округления с помощьюtoStartOfInterval, если вы передаетеINTERVAL 3 QUARTER, на величину до одного квартала, поскольку интервалы отсчитываются от специфичной для реализации точки во времени. Закрывает #28216, улучшает #38393. #39425 (Roman Vasin). - Теперь все соответствующие источники словарей учитывают настройку
remote_url_allow_hosts. Это уже было сделано для HTTP, Cassandra, Redis. Добавлены ClickHouse, MongoDB, MySQL, PostgreSQL. Хост проверяется только для словарей, созданных из DDL. #39184 (Nikolai Kochetov). - Готовые x86-бинарные файлы ClickHouse теперь требуют поддержки инструкций AVX, то есть CPU не старше Intel Sandy Bridge / AMD Bulldozer, обе архитектуры выпущены в 2011 году. #39000 (Robert Schulze).
- Кэш удаленной файловой системы сделан композиционным, добавлена возможность не вытеснять определенные файлы (idx, mrk и т. д.), а также удалена старая версия кэша. Теперь можно настраивать кэш поверх диска Azure blob storage, поверх локального диска, поверх диска StaticWeb и т. п. Этот PR помечен как обратно несовместимый, поскольку изменилась конфигурация кэша, и для работы кэша необходимо обновить конфигурационный файл. Старый кэш по-прежнему будет использоваться с новой конфигурацией. Сервер успешно запустится со старой конфигурацией кэша. Закрывает https://github.com/ClickHouse/ClickHouse/issues/36140. Закрывает https://github.com/ClickHouse/ClickHouse/issues/37889. (Kseniia Sumarokova). #36171)
Новая возможность
- Поддержка стандартного SQL-синтаксиса
DELETE FROMдля таблиц семейства MergeTree и реализация легковесных операций удаления для семейств MergeTree. #37893 (Jianmei Zhang) (Alexander Gololobov). Примечание: эта новая возможность не делает ClickHouse HTAP-СУБД. - Параметры запроса могут быть заданы в интерактивном режиме как
SET param_abc = 'def'и переданы через нативный протокол как настройки. #39906 (Nikita Taranov). - Ключ квоты может быть задан в нативном протоколе (Yakov Olkhovsky).
- Добавлена настройка
exact_rows_before_limit(0/1). При включении ClickHouse будет возвращать точное значение статистикиrows_before_limit_at_least, но ценой того, что данные доLIMITпридётся прочитать полностью. Закрывает #6613. #25333 (kevin wan). - Добавлена поддержка параллельного распределённого
INSERT SELECTс табличной функциейs3Clusterв таблицы с движкамиDistributedиReplicated#34670. #39107 (Nikita Mikhaylov). - Добавлены новые настройки для управления определением схемы из текстовых форматов: -
input_format_try_infer_dates— пытаться определять даты из строк. -input_format_try_infer_datetimes— пытаться определять значения datetime из строк. -input_format_try_infer_integers— пытаться определятьInt64вместоFloat64. -input_format_json_try_infer_numbers_from_strings— пытаться определять числа из строк JSON в форматах JSON. #39186 (Kruglov Pavel). - Добавлена опция вывода логов в формате JSON. Цель — упростить ингестию и выполнение запросов в инструментах анализа логов. #39277 (Mallik Hassan).
- Добавлена функция
nowInBlock, которая позволяет получать текущее время во время длительных и непрерывных запросов. Закрывает #39522. Примечания: функцийnow64InBlockиtodayInBlockне существует. #39533 (Alexey Milovidov). - Добавлена возможность указывать настройки для табличной функции
executable(). #39681 (Constantine Peresypkin). - Реализовано автоматическое преобразование движка базы данных из
OrdinaryвAtomic. Создайте пустой файлconvert_ordinary_to_atomicв директорииflags, и все базы данных типаOrdinaryбудут автоматически преобразованы при следующем запуске сервера. Решает #39546. #39933 (Alexander Tokmakov). - Поддержка
SELECT ... INTO OUTFILE '...' AND STDOUT. #37490. #39054 (SmitaRKulkarni). - Добавлены форматы
PrettyMonoBlock,PrettyNoEscapesMonoBlock,PrettyCompactNoEscapes,PrettyCompactNoEscapesMonoBlock,PrettySpaceNoEscapes,PrettySpaceMonoBlock,PrettySpaceNoEscapesMonoBlock. #39646 (Kruglov Pavel).
Повышение производительности
- Улучшено использование памяти при эффективном по памяти слиянии результатов агрегации. #39429 (Nikita Taranov).
- Добавлена логика управления уровнем параллелизма для ограничения общего числа одновременных потоков, создаваемых запросами. #37558 (Sergei Trifonov). Добавлен параметр
concurrent_threads_soft_limitдля повышения производительности при высоком QPS за счёт ограничения общего числа потоков для всех запросов. #37285 (Roman Vasin). - Добавлена политика кэширования
SLRUдля кэша несжатых данных и кэша меток. (Kseniia Sumarokova). #34651 (alexX512). Разделены локальная функция кэша и алгоритм кэширования #38048 (Han Shukai). - Аппаратный ускоритель Intel® In-Memory Analytics Accelerator (Intel® IAA) будет доступен в следующем поколении процессоров Intel® Xeon® Scalable ("Sapphire Rapids"). Его цель — ускорять типичные операции в аналитических нагрузках, такие как (де)сжатие данных и фильтрация. В ClickHouse появился новый кодек сжатия "DeflateQpl", который использует технологию аппаратного ускорения Intel® IAA для обеспечения высокопроизводительной реализации алгоритма DEFLATE. Кодек использует Intel® Query Processing Library (QPL), которая абстрагирует доступ к аппаратному ускорителю, а при отсутствии аппаратного ускорителя — к программной реализации. В целом DEFLATE обеспечивает более высокую степень сжатия, чем стандартный кодек ClickHouse LZ4, и, как результат, уменьшает дисковый ввод-вывод и снижает потребление оперативной памяти. #36654 (jasperzhu). #39494 (Robert Schulze).
DISTINCTв сочетании сORDER BY: определять порядок сортировки на основе описания сортировки входного потока. Пропускать сортировку, если входной поток уже отсортирован. #38719 (Igor Nikonov). Существенно улучшить использование памяти и время выполнения запроса + использоватьDistinctSortedChunkTransformдля финальногоDISTINCT, когда столбцыDISTINCTсовпадают со столбцамиORDER BY, но переименовать его вDistinctSortedStreamTransformвEXPLAIN PIPELINE→ это существенно улучшает использование памяти + убрать ненужные выделения памяти в горячем цикле вDistinctSortedChunkTransform. #39432 (Igor Nikonov). ИспользоватьDistinctSortedTransformтолько когда описание сортировки применимо к столбцамDISTINCT, иначе откатываться к обычной реализацииDISTINCT+ это позволяет выполнять меньше проверок во время работыDistinctSortedTransform. #39528 (Igor Nikonov). Исправление:DistinctSortedTransformне использовал преимущества сортировки. Он никогда не очищал HashSet, посколькуclearing_columnsопределялись некорректно (всегда как пустые). По сути, он работал как обычныйDISTINCT(DistinctTransform). Исправление существенно снижает использование памяти. #39538 (Igor Nikonov).- В первую очередь использовать локальный узел для получения структуры удалённой таблицы при выполнении табличных функций
clusterи им подобных. #39440 (Mingliang Pan). - Оптимизирована фильтрация по числовым столбцам с помощью операции AVX512VBMI2 compress store. #39633 (Guo Wangyang). Для систем с AVX512 VBMI2 этот PR улучшает производительность примерно на 6% для запросов бенчмарка SSB 3.1, 3.2 и 3.3 (SF=100). Тестирование выполнено на двухсокетной системе на базе Intel Ice Lake Xeon 8380. #40033 (Robert Schulze).
- Оптимизирован анализ индексов с использованием функциональных выражений в многопоточном режиме. #39812 (Guo Wangyang).
- Оптимизации для сложных запросов: не обходить AST для UDF, если ни одна из них не зарегистрирована. #40069 (Raúl Marín). Оптимизировать выделение и освобождение памяти в CurrentMemoryTracker. #40078 (Raúl Marín).
- Улучшено кодирование и декодирование Base58. #39292 (Andrey Zvonov).
- Улучшено преобразование байтовой маски в битовую для SSE/AVX/AVX512. #39586 (Guo Wangyang).
Улучшение
- Нормализованы типы
AggregateFunctionи представления их состояний, поскольку оптимизации вроде #35788 будут рассматриватьcount(not null columns)какcount(), что может приводить к путанице в распределённых интерпретаторах и вызывать следующую ошибку:Conversion from AggregateFunction(count) to AggregateFunction(count, Int64) is not supported. #39420 (Amos Bird). Функции с идентичными состояниями могут взаимозаменяемо использоваться в материализованных представлениях. - Переработана и упрощена таблица
system.backups, удалён столбецinternal, добавлена возможность задавать пользователем ID операции, добавлены столбцыnum_files,uncompressed_size,compressed_size,start_time,end_time. #39503 (Vitaly Baranov). - Улучшена структура таблицы результатов DDL-запроса для базы данных
Replicated(отдельные столбцы с именами шарда и реплики, более понятный статус) — запросыCREATE TABLE ... ON CLUSTERмогут сначала нормализовываться на инициаторе, еслиdistributed_ddl_entry_format_versionустановлен в значение 3 (значение по умолчанию). Это означает, что запросыON CLUSTERмогут не работать, если инициатор не принадлежит кластеру, который указан в запросе. Исправляет #37318, #39500 — игнорировать клаузуON CLUSTER, если база данных —Replicatedи имя кластера совпадает с именем базы данных. Связано с #35570 — прочие незначительные исправления для движка базы данныхReplicated— проверять согласованность метаданных при запуске базы данныхReplicated, запускать восстановление реплики в случае несоответствия локальных метаданных и метаданных в Keeper. Решает #24880. #37198 (Alexander Tokmakov). - Добавлены result_rows и result_bytes в отчёты о ходе выполнения (
X-ClickHouse-Summary). #39567 (Raúl Marín). - Улучшен анализ первичного ключа для MergeTree. #25563 (Nikolai Kochetov).
timeSlotsтеперь работает с DateTime64; при работе с DateTime64 доступны длительность и размер слота с точностью до долей секунды. #37951 (Andrey Zvonov).- Добавлена поддержка прямых соединений типов
LEFT SEMIиLEFT ANTIс таблицамиEmbeddedRocksDB. #38956 (Vladimir C). - Добавлены события профилирования для операций fsync. #39179 (Azat Khuzhin).
- Добавлен второй аргумент к обычной функции
file(path[, default]), который функция возвращает, если файл не существует. #39218 (Nikolay Degterinsky). - Небольшие исправления чтения по HTTP, добавлена возможность повторного запроса частичного содержимого в случае ответа 200 OK. #39244 (Kseniia Sumarokova).
- Добавлена поддержка запросов
CREATE TEMPORARY TABLE ... (<list of columns>) AS .... #39462 (Kruglov Pavel). - Добавлена поддержка символов
!/*(восклицательный знак/звёздочка) в пользовательских доменах верхнего уровня (TLD) (cutToFirstSignificantSubdomainCustom()/cutToFirstSignificantSubdomainCustomWithWWW()/firstSignificantSubdomainCustom()). #39496 (Azat Khuzhin). - Добавлена поддержка TLS‑подключений к NATS. Реализация задачи #39525. #39527 (Constantine Peresypkin).
clickhouse-obfuscator(инструмент для обфускации данных в базе данных для тестирования и генерации нагрузки) теперь поддерживает новые параметры--saveи--loadдля работы с предобученными моделями. Это закрывает #39534. #39541 (Alexey Milovidov).- Исправлено некорректное поведение ротации логов при перезапуске. #39558 (Nikolay Degterinsky).
- Исправлена сборка агрегатных проекций при включённой внешней агрегации. Отнесено к улучшениям, так как ситуация редкая и существует простой обходной путь — изменить настройки. Это исправляет #39667. #39671 (Amos Bird).
- Добавлена поддержка выполнения хеш‑функций с аргументами типа
Map. #39685 (Anton Popov). - Добавлен параметр конфигурации, позволяющий скрывать адреса в трассировках стека. Это может немного повысить безопасность, но в целом является вредной практикой и не должно использоваться. #39690 (Alexey Milovidov).
- Изменён размер префикса в AggregateFunctionDistinct для выравнивания сегмента памяти с данными вложенной функции. #39696 (Pxl).
- Обеспечить корректное экранирование учетных данных, передаваемых инструменту
clickhouse-diagnostic. #39707 (Dale McDiarmid). - Улучшение в ClickHouse Keeper: создание снимка при завершении работы. Поведение настраивается параметром конфигурации
keeper_server.create_snapshot_on_exit, по умолчанию имеет значениеtrue. #39755 (Antonio Andelic). - Добавлена поддержка анализа первичного ключа для
row_policy_filterиadditional_filter. Это также помогает решить проблемы, такие как #37454. #39826 (Amos Bird). - Исправлены две проблемы с удобством использования в Play UI: — интерфейс на iPad не был пиксельно точным из-за лишнего скругления углов и отступов; — после первого запроса индикатор прогресса больше не отображался. Это закрывает #39957. Это закрывает #39960. #39961 (Alexey Milovidov).
- Play UI: добавить номера строк; добавить выделение ячеек по клику; добавить гистерезис для ячеек таблицы. #39962 (Alexey Milovidov).
- Play UI: распознавать нажатие клавиши Tab в textarea, но при этом не ломать навигацию по интерфейсу по клавише Tab. #40053 (Alexey Milovidov).
- Клиент теперь будет отображать время выполнения на стороне сервера. Это важно для сравнения производительности сервисов ClickHouse в удалённых дата-центрах. Это закрывает #38070. См. также это для обоснования мотивации. #39968 (Alexey Milovidov).
- Добавлены функции
parseDateTime64BestEffortUS,parseDateTime64BestEffortUSOrNull,parseDateTime64BestEffortUSOrZero, что позволяет закрыть задачу #37492. #40015 (Tanya Bragin). - В
system.processors_profile_logдобавлена дополнительная информация, например число входных строк. #40121 (Amos Bird). - Отображать серверное время в
clickhouse-benchmarkпо умолчанию, если оно доступно (начиная с версии ClickHouse 22.8). Это необходимо для корректного сравнения производительности облаков. Это поведение можно изменить с помощью новой опции командной строки--client-side-time. Изменить опцию командной строки--randomizeс--randomize 1на форму без аргумента. #40193 (Alexey Milovidov). - Добавлены счётчики (ProfileEvents) для случаев, когда ограничение сложности запроса было задано и достигнуто (отдельный счётчик для
overflow_mode=breakиthrow). Например, если вы настроилиmax_rows_to_readсread_overflow_mode = 'break', по значению счётчикаOverflowBreakможно отличать неполные результаты. #40205 (Alexey Milovidov). - Исправлен учёт памяти в случае ошибок "Memory limit exceeded" (ранее при расчёте [peak] использования памяти учитывались неуспешные выделения). #40249 (Azat Khuzhin).
- Добавлены метрики файлового кэша:
FilesystemCacheSizeиFilesystemCacheElements. #40260 (Kseniia Sumarokova). - Добавлена поддержка защищённой передачи RPC в Hadoop (hadoop.rpc.protection=privacy и hadoop.rpc.protection=integrity). #39411 (michael1589).
- Исключён непрерывный рост потребления памяти кэшем шаблонов при использовании функций multi(Fuzzy)Match(Any|AllIndices|AnyIndex)(). #40264 (Robert Schulze).
Улучшение сборки/тестирования/упаковки
- ClickFiddle: новый инструмент для тестирования версий ClickHouse в режимах чтения и записи (Igor Baliuk).
- Бинарный файл ClickHouse теперь является самораспаковывающимся #35775 (Yakov Olkhovskiy, Arthur Filatenkov).
- Обновите tzdata до версии 2022b для поддержки новых изменений часовых поясов. См. https://github.com/google/cctz/pull/226. Начало летнего времени в Чили в 2022 году перенесено с 4 сентября на 11 сентября. Иран планирует навсегда прекратить использование летнего времени после перехода обратно на стандартное время 2022-09-21. Исправлены сведения об историческом часовом поясе Asia/Tehran за 1977 год: Иран перешёл на стандартное время в 1935 году, а не в 1946. В 1977 году он использовал летнее время с 03-21 23:00 до 10-20 24:00; переходы в 1978 году были 03-24 и 08-05, а не 03-20 и 10-20; весенний переход 1979 года произошёл 05-27, а не 03-21 (https://data.iana.org/time-zones/tzdb/NEWS). (Alexey Milovidov).
- Ранее пакеты устанавливали файл
systemd.serviceв/etc. Файлы в этом каталоге помечены какconf, поэтому они не удаляются и не обновляются автоматически. Этот PR удаляет эти файлы. #39323 (Mikhail f. Shiryaev). - Обеспечена корректная работа LSan. #39430 (Azat Khuzhin).
- У TSAN есть проблемы с clang-14 (https://github.com/google/sanitizers/issues/1552, https://github.com/google/sanitizers/issues/1540), поэтому здесь мы собираем бинарные файлы TSAN с помощью clang-15. #39450 (Mikhail f. Shiryaev).
- Удалена опция сборки инструментов ClickHouse как отдельных исполняемых программ. Это исправляет проблему #37847. #39520 (Alexey Milovidov).
- Небольшие подготовительные изменения для сборки под s390x (big-endian). #39627 (Harry Lee). #39656 (Harry Lee). Исправлена проблема с порядком байт (endian) в BitHelpers для s390x. #39656 (Harry Lee). Реализован фрагмент кода, связанный с SipHash, для архитектуры s390x (не поддерживаемой ClickHouse). #39732 (Harry Lee). Исправлена проблема с порядком байт (endian) в коде snapshot'а Coordination для архитектуры s390x (не поддерживаемой ClickHouse). #39931 (Harry Lee). Исправлены проблемы с порядком байт (endian) в коде Codec для архитектуры s390x (не поддерживаемой ClickHouse). #40008 (Harry Lee). Исправлены проблемы с порядком байт (endian) при чтении и записи двоичных данных в формате BigEndian в коде ReadHelpers и WriteHelpers для архитектуры s390x (не поддерживаемой ClickHouse). #40179 (Harry Lee).
- Добавлена поддержка сборки с
clang-16(trunk). Это закрывает #39949. #40181 (Alexey Milovidov). - Подготовить сборку под RISC-V 64 для запуска в CI. Это для #40141. #40197 (Alexey Milovidov).
- Упрощённый интерфейс макросов регистрации функций (
FUNCTION_REGISTER*), который устраняет необходимость добавлять и вызывать extern-функцию в registerFunctions.cpp, а также ускоряет инкрементальную сборку новой функции. #38615 (Li Yin). - Docker: Теперь
entrypoint.shв Docker-образе создаёт и выполняет командуchownдля всех каталогов, найденных в конфигурации многодискового размещения #17717. #39121 (Nikita Mikhaylov).
Исправление ошибки
- Исправлен возможный сегфолт в формате ввода
CapnProto. Этот баг был обнаружен и сообщён через программу bug bounty ClickHouse пользователем kiojj. #40241 (Kruglov Pavel). - Исправлен крайне редкий случай некорректного поведения оператора обращения к массиву по индексу. Это закрывает #28720. #40185 (Alexey Milovidov).
- Исправлена недостаточная проверка аргументов для функций шифрования (обнаружено фаззером запросов
query fuzzer). Это закрывает #39987. #40194 (Alexey Milovidov). - Исправлена проблема, при которой порядок столбцов мог нарушаться, если оператор
INиспользовался с таблицей сENGINE = Set, содержащей несколько столбцов. Это исправляет #13014. #40225 (Alexey Milovidov). - Исправлено перемещение указателя при чтении с зашифрованного диска. Этот PR исправляет #38381. #39687 (Vitaly Baranov).
- Исправлены дубликаты столбцов в плане
JOIN. Наконец-то решена задача #26809. #40009 (Vladimir C). - Исправлено зависание в запросах SELECT с ORDER BY WITH FILL при использовании различных типов даты/времени. #37849 (Yakov Olkhovskiy).
- Исправлено поведение ORDER BY при совпадении с ORDER BY проекций (раньше он просто возвращал результат без сортировки). #38725 (Azat Khuzhin).
- Не оптимизировать функции в выражениях GROUP BY, если они маскируют один из столбцов таблицы или выражений. Исправлено #37032. #39103 (Anton Kozlov).
- Исправлена ошибка с некорректным именем таблицы в логах после RENAME TABLE. Исправляет #38018. #39227 (Amos Bird).
- Исправлены позиционные аргументы при отсечении столбцов во время оптимизации запроса. Закрывает #38433. #39293 (Kseniia Sumarokova).
- Исправлена ошибка при выводе схемы в случае пустых сообщений в форматах Protobuf/CapnProto, которая позволяла создавать столбец с пустым типом
Tuple. Закрывает #39051. Добавлены две новые настройкиinput_format_{protobuf/capnproto}_skip_fields_with_unsupported_types_in_schema_inference, которые позволяют пропускать поля с неподдерживаемыми типами при выводе схемы для форматов Protobuf и CapnProto. #39357 (Kruglov Pavel). - (Window View — экспериментальная функция) Исправлена ошибка сегментации при выполнении запроса
CREATE WINDOW VIEW .. ON CLUSTER ... INNER. Закрывает #39363. #39384 (Kseniia Sumarokova). - Исправлена финализация
WriteBufferпри отмене вставки черезinsert into function(в предыдущих версиях это могло приводить кstd::terminate). #39458 (Kruglov Pavel). - Исправлено сохранение столбцов типа
Objectв формате разрежённой сериализации. #39464 (Anton Popov). - Исправлено потенциальное исключение «Not found column in block» при использовании проекций. Исправление закрывает задачу #39469. #39470 (小路).
- Исправлена ошибка, приводившая к возникновению исключения при гонке между DROP и INSERT с материализованными представлениями. #39477 (Azat Khuzhin).
- Исправлена ошибка в библиотеке Apache Avro: устранена гонка данных и возможный выход за границы буфера в куче (heap-buffer-overflow) в формате Avro. Закрывает #39094 и #33652. #39498 (Kruglov Pavel).
- Исправлена редкая ошибка при асинхронном чтении (при
local_filesystem_read_method='pread_threadpool') при включённомO_DIRECT(включается путём установкиmin_bytes_to_use_direct_io). #39506 (Anton Popov). - (только на FreeBSD) Исправлена ошибка "Code: 49. DB::Exception: FunctionFactory: the function name '' is not unique. (LOGICAL_ERROR)", наблюдаемая на FreeBSD при запуске ClickHouse. #39551 (Alexander Gololobov).
- Исправлена ошибка с недавно добавленным аргументом «maxsplit» функции
splitByChar, который работал некорректно. #39552 (filimonov). - Исправлена ошибка в операторе ASOF JOIN при
enable_optimize_predicate_expression, закрыт #37813. #39556 (Vladimir C). - Исправлены запросы
CREATE/DROP INDEXсON CLUSTERили в базе данныхReplicatedиReplicatedMergeTree. Ранее они выполнялись на всех репликах (что приводило к ошибке или зависанию очереди DDL). Исправление для #39511. #39565 (Alexander Tokmakov). - Исправлена ошибка «column not found» при push down с join, закрыта #39505. #39575 (Vladimir C).
- Исправлен некорректный псевдоним
REGEXP_REPLACE. Это устраняет https://github.com/ClickHouse/ClickBench/issues/9. #39592 (Alexey Milovidov). - Фиксированная точка отсчёта для оконных функций экспоненциального затухания изменена на последнее значение в окне. Ранее затухание вычислялось по формуле
exp((t - curr_row_t) / decay_length), что некорректно, когда правая граница окна неCURRENT ROW. Формула была изменена на:exp((t - last_row_t) / decay_length). Результаты не меняются для окон сROWS BETWEEN (smth) AND CURRENT ROW. #39593 (Vladimir Chebotaryov). - Исправлено переполнение при делении значений типа
Decimal, которое можно выявить по масштабам операндов. #39600 (Andrey Zvonov). - Исправлена работа настроек
output_format_arrow_string_as_stringиoutput_format_arrow_low_cardinality_as_dictionaryпри совместном использовании. Закрывает #39624. #39647 (Kruglov Pavel). - Исправлена ошибка в определении базы данных по умолчанию при чтении из распределённых таблиц. #39674 (Anton Kozlov).
- (Только для устаревшего типа баз данных Ordinary)
SELECTмог читать данные удалённой таблицы, если использовался кэш ввода-вывода через mmap, движок базы данных был Ordinary, а затем была создана новая таблица с тем же именем, что и у удалённой. Исправлено. #39708 (Alexander Tokmakov). - Исправлена возможная ошибка
Invalid column type for ColumnUnique::insertRangeFrom. Expected String, got ColumnLowCardinality. Исправление для #38460. #39716 (Arthur Passos). - Имена полей в секции
metaформата JSON были по ошибке дважды экранированы. Это закрывает #39693. #39747 (Alexey Milovidov). - Исправлен ошибочный анализ индекса с кортежами и оператором
IN, который мог приводить к неправильному результату запроса. #39752 (Anton Popov). - Исправлена фильтрация таблиц
EmbeddedRocksDBпо ключу при использовании параметров. #39757 (Antonio Andelic). - Исправлена ошибка
Invalid number of columns in chunk pushed to OutputPort, которая была вызвана оптимизацией ARRAY JOIN. Исправляет #39164. #39799 (Nikolai Kochetov). - Обходной путь для ошибки в ядре Linux. Исправляет исключение
CANNOT_READ_ALL_DATAприlocal_filesystem_read_method=pread_threadpool. Согласно man, эта ошибка затрагивала только версии ядра Linux 5.9 и 5.10. #39800 (Anton Popov). - (Только для NFS) Исправлена некорректная работа mkdir по NFS для томов с root-squash. #39898 (Constantine Peresypkin).
- Удалены словари из метрик Prometheus при DETACH/DROP. #39926 (Azat Khuzhin).
- Исправлено чтение StorageFile с виртуальными столбцами. Закрывает #39907. #39943 (flynn).
- Устранено чрезмерное потребление памяти при выборках. Исправляет #39915. #39990 (Nikolai Kochetov).
- (экспериментальная функция) Исправлен сбой
hashIdи проблема с тем, что параметр salt не использовался. #40002 (Raúl Marín). - Операторы
EXCEPTиINTERSECTмогли приводить к сбою при использовании определённой комбинации константных и неконстантных столбцов. #40020 (Duc Canh Le). - Исправлены ошибки "Part directory doesn't exist" и "
tmp_<part_name>... No such file or directory", возникавшие при слишком медленном INSERT или слишком длительных операциях merge/mutation. Также исправлена проблема, из-за которой некоторые записи в очереди репликации могли оставаться зависшими без каких-либо ошибок или предупреждений в логах, если предыдущая попытка получить part завершилась неудачно, но директорияtmp-fetch_<part_name>не была очищена. #40031 (Alexander Tokmakov). - Исправлены редкие ошибки при разборе массивов кортежей в формате
Values. #40034 (Anton Popov). - Исправлено преобразование формата ArrowColumn Dictionary(X) и Dictionary(Nullable(X)) в ClickHouse LowCardinality(X) и LowCardinality(Nullable(X)) соответственно. #40037 (Arthur Passos).
- Исправлена потенциальная взаимоблокировка при записи в S3 во время сбоя планирования задач. #40070 (Maksim Kita).
- Исправлена ошибка в
collectFilesToSkip(): добавлены корректные расширения файлов (.idx и .idx2) для индексов, которые нужно пересчитать, во избежание некорректных жестких ссылок. Исправлено в #39896. #40095 (Jianmei Zhang). - Исправление обратного DNS-разрешения. #40134 (Arthur Passos).
- Исправлен неожиданный результат работы функции
arrayDifferenceдляArray(UInt32). #40211 (Duc Canh Le).
Релиз ClickHouse 22.7, 2022-07-21
Примечания к обновлению
- По умолчанию включена настройка
enable_positional_arguments. Она позволяет выполнять запросы видаSELECT ... ORDER BY 1, 2, где 1 и 2 — это ссылки на выражения в секции SELECT. Если вам нужно вернуть старое поведение, отключите эту настройку. #38204 (Alexey Milovidov). - По умолчанию отключена настройка
format_csv_allow_single_quotes. См. #37096. (Kruglov Pavel). - Движок базы данных
Ordinaryи старый синтаксис определения хранилища для таблиц*MergeTreeобъявлены устаревшими. По умолчанию создание новых баз данных с движкомOrdinaryневозможно. Если база данныхsystemиспользует движокOrdinary, он будет автоматически преобразован вAtomicпри запуске сервера. Существуют настройки для сохранения старого поведения (allow_deprecated_database_ordinaryиallow_deprecated_syntax_for_merge_tree), но они могут быть удалены в будущих релизах. #38335 (Alexander Tokmakov). - По умолчанию запятые в списке таблиц в секции FROM переписываются в INNER JOIN (установлено значение по умолчанию
cross_to_inner_join_rewrite = 2). Чтобы вернуть старое поведение, задайтеcross_to_inner_join_rewrite = 1. #39326 (Vladimir C). Если вы столкнётесь с какой-либо несовместимостью, вы можете вернуть настройке прежнее значение.
Новая возможность
- Добавлена поддержка выражений с оконными функциями. Закрывает #19857. #37848 (Dmitry Novik).
- Добавлен новый алгоритм соединения
directдля таблицEmbeddedRocksDB, см. #33582. #35363 (Vladimir C). - Добавлен алгоритм соединения слиянием с полной сортировкой. #35796 (Vladimir C).
- Реализован табличный движок NATS, который позволяет использовать pub/sub в NATS. Закрывает #32388. #37171 (tchepavel). (Kseniia Sumarokova)
- Реализована табличная функция
mongodb. Добавлена поддержка записи в хранилище / табличную функциюMongoDB. #37213 (aaapetrenko). (Kseniia Sumarokova) - Добавлен формат вывода
SQLInsert. Закрывает #38441. #38477 (Kruglov Pavel). - Добавлена настройка
additional_table_filters. С ее помощью можно задать дополнительное условие фильтрации для таблицы, которое будет применено сразу после чтения. Пример:select number, x, y from (select number from system.numbers limit 5) f any left join (select x, y from table_1) s on f.number = s.x settings additional_table_filters={'system.numbers : 'number != 3', 'table_1' : 'x != 2'}. Добавлена настройкаadditional_result_filter, которая задает дополнительное условие фильтрации для результата запроса. Закрывает #37918. #38475 (Nikolai Kochetov). - Добавлена настройка
compatibilityи системная таблицаsystem.settings_changes, содержащая сведения об изменениях настроек в разных версиях ClickHouse. Закрывает #35972. #38957 (Kruglov Pavel). - Добавлены функции
translate(string, from_string, to_string)иtranslateUTF8(string, from_string, to_string). Они выполняют замену одних символов на другие. #38935 (Nikolay Degterinsky). - Добавлена поддержка функции
parseTimeDelta. Ее можно использовать следующим образом:;-+,:могут использоваться как разделители, например1yr-2mo,2m:6s:SELECT parseTimeDelta('1yr-2mo-4w + 12 days, 3 hours : 1 minute ; 33 seconds'). #39071 (jiahui-97). - Добавлен запрос
CREATE TABLE ... EMPTY AS SELECT. Он автоматически определяет структуру таблицы по запросу SELECT, но не заполняет таблицу после создания. Исправляет #38049. #38272 (Alexander Tokmakov). - Добавлены настройки для ограничения операций ввода-вывода при работе с удалённым хранилищем:
max_remote_read_network_bandwidth_for_serverиmax_remote_write_network_bandwidth_for_server. #39095 (Sergei Trifonov). - Добавлена настройка
group_by_use_nulls, позволяющая делать столбцы ключей агрегации допускающими значениеNULLв случаеROLLUP,CUBEиGROUPING SETS. Закрывает #37359. #38642 (Dmitry Novik). - Добавлена возможность указывать уровень сжатия при экспорте данных. #38907 (Nikolay Degterinsky).
- Добавлена опция, требующая явной выдачи прав на SELECT из базы данных
system. Подробности: #38970 (Vitaly Baranov). - Функции
multiMatchAny,multiMatchAnyIndex,multiMatchAllIndicesи их неточные (fuzzy) варианты теперь принимают в качестве аргумента неконстантный массив шаблонов. #38485 (Robert Schulze). SQL‑функцияmultiSearchAllPositionsтеперь принимает неконстантные аргументыneedle. #39167 (Robert Schulze). - Добавлена настройка
zstd_window_log_maxдля задания максимального объёма памяти, используемой при декодировании zstd при импорте внешних файлов. Закрывает #35693. #37015 (wuxiaobai24). - Добавлена настройка
send_logs_source_regexp. Она позволяет отправлять серверные текстовые логи, имя источника которых соответствует указанному регулярному выражению. Пустое значение означает все источники. #39161 (Amos Bird). - Добавлена поддержка
ALTERдля таблицHive. #38214 (lgbo). - Добавлена поддержка функции
isNullable. Эта функция проверяет, имеет ли её аргумент тип Nullable, и возвращает 1 или 0. Закрывает #38611. #38841 (lokax). - Добавлены функции для кодирования и декодирования в base58. #38159 (Andrey Zvonov).
- Добавлена визуализация графиков в интерфейс Play UI. #38197 (Alexey Milovidov).
- Добавлены функции квадратичного L2-расстояния и L2-нормы для массивов и кортежей. #38545 (Julian Gilyadov).
- Добавлена поддержка передачи HTTP-заголовков в табличную функцию / движок таблицы
urlчерез SQL. Закрывает #37897. #38176 (Kseniia Sumarokova). - В состав пакетов добавлен бинарный файл
clickhouse-diagnostics. #38647 (Mikhail f. Shiryaev).
Экспериментальная функциональность
- Добавлена новая настройка
implicit_transactionдля запуска отдельных запросов внутри транзакции. Она автоматически выполняет как создание, так и завершение транзакции (через COMMIT, если запрос выполнен успешно, или ROLLBACK, если нет). #38344 (Raúl Marín).
Повышение производительности
- Отдельная оптимизация для отсортированных столбцов. Используется специализированное преобразование DISTINCT, если входной поток отсортирован по столбцам, участвующим в DISTINCT. Оптимизация может применяться к pre-distinct, final distinct или обоим этапам. Исходная реализация от @dimarub2000. #37803 (Igor Nikonov).
- Улучшена производительность
ORDER BY, слиянийMergeTreeи оконных функций за счет использования пакетной версииBinaryHeap. #38022 (Maksim Kita). - Более высокий уровень параллелизма при выполнении запросов с
FINAL#36396 (Nikita Taranov). - Исправлена существенная регрессия производительности операций
JOIN, которая появилась в #35616. Примечательно, что типичные запросы сJOIN, такие как ssb-запросы, оказались в 10 раз медленнее почти в течение 3 месяцев, при этом никто не пожаловался. #38052 (Amos Bird). - Переход с библиотеки Intel hyperscan на vectorscan, что позволяет ускорить многие операции сопоставления строк на не-x86-платформах. #38171 (Robert Schulze).
- Увеличен параллелизм выполнения шагов плана запроса после агрегации. #38295 (Nikita Taranov).
- Улучшена производительность вставки данных в столбцы типа
JSON. #38320 (Anton Popov). - Оптимизированы операции вставки и поиска в HashTable. #38413 (Nikita Taranov).
- Исправлена деградация производительности из-за #32493. #38417 (Alexey Milovidov).
- Улучшена производительность JOIN по числовым столбцам с использованием SIMD-инструкций. #37235 (zzachimed). #38565 (Maksim Kita).
- Функции Norm и Distance для массивов ускорены в 1,2–2 раза. #38740 (Alexander Gololobov).
- Добавлена оптимизированная под AVX-512 VBMI функция
copyOverlap32Shuffleдля декомпрессии LZ4, что повышает производительность декомпрессии LZ4. #37891 (Guo Wangyang). ORDER BY (a, b)даёт все те же преимущества, что иORDER BY a, b. #38873 (Igor Nikonov).- Выровнять ветвления по границе в 32 байта для повышения стабильности бенчмарка. #38988 (Guo Wangyang). Это улучшает производительность в среднем на 1–2% для процессоров Intel.
- Исполняемые UDF, исполняемые словари и Executable-таблицы больше не будут тратить лишнюю секунду на ожидание завершения подпроцесса. #38929 (Constantine Peresypkin).
- Оптимизированы обращения к таблице
system.stack_trace, если выбираются не все столбцы. #39177 (Azat Khuzhin). - Повышена производительность функций
isNullable/isConstant/isNull/isNotNullдля аргументаLowCardinality. #39192 (Kruglov Pavel). - Оптимизировано выполнение ORDER BY в оконных функциях. #34632 (Vladimir Chebotarev).
- Таблица
system.asynchronous_metric_logдополнительно оптимизирована с точки зрения использования дискового пространства. Это закрывает #38134. См. видео на YouTube. #38428 (Alexey Milovidov).
Улучшение
- Добавлена поддержка синтаксиса стандартного SQL для
CREATE INDEXиDROP INDEX. #35166 (Jianmei Zhang). - Отправка профильных событий для запросов INSERT (ранее поддерживались только SELECT). #37391 (Azat Khuzhin).
- Реализована агрегация по порядку (
optimize_aggregation_in_order) для полностью материализованных проекций. #37469 (Azat Khuzhin). - Удалён запуск подпроцесса для инициализации Kerberos. Добавлен новый интеграционный тест. Закрывает #27651. #38105 (Roman Vasin).
-
- Добавлена настройка
multiple_joins_try_to_keep_original_names, чтобы не переименовывать идентификаторы при переписывании запросов с несколькими JOIN, закрыта задача #34697. #38149 (Vladimir C).
- Добавлена настройка
- Улучшен UX визуализатора трассировок. #38169 (Sergei Trifonov).
- Включён сбор трассировок стека и профилирование запросов для AArch64. #38181 (Maksim Kita).
- Не пропускать символические ссылки в каталоге
user_definedпри загрузке определённых пользователем SQL-функций. Закрывает #38042. #38184 (Maksim Kita). - Добавлена фоновая очистка подкаталогов в
store/. В некоторых случаях clickhouse-server мог оставлять лишние подкаталоги вstore/(например, при неудачном создании таблицы), и эти каталоги никогда не удалялись. Исправляет #33710. #38265 (Alexander Tokmakov). - Добавлен запрос
DESCRIBE CACHEдля отображения настроек кэша из конфигурации. Добавлен запросSHOW CACHESдля отображения списка доступных файловых кэшей. #38279 (Kseniia Sumarokova). - Добавлена проверка прав доступа для
system drop filesystem cache. Добавлена поддержка для ON CLUSTER. #38319 (Kseniia Sumarokova). - Исправлена несовместимость движка базы данных PostgreSQL при обновлении с версии 21.3 до 22.3. Закрывает #36659. #38369 (Kseniia Sumarokova).
- Функции
filesystemAvailableи подобные теперь работают вclickhouse-local. Это исправляет #38423. #38424 (Alexey Milovidov). - Добавлена функция
revision. #38555 (Azat Khuzhin). - Исправлена работа с GCS через прокси-туннель. #38726 (Azat Khuzhin).
- Добавлена поддержка
\i fileв clickhouse client / local (аналогично psql \i). #38813 (Kseniia Sumarokova). - Новая опция
optimize = 1вEXPLAIN AST. Если она включена, показывает AST после его преобразования, иначе — AST исходного запроса. По умолчанию отключена. #38910 (Igor Nikonov). - Разрешена завершающая запятая в списке столбцов. Закрывает #38425. #38440 (chen).
- Исправления ошибок и улучшения производительности для метода JOIN
parallel_hash. #37648 (Vladimir C). - Добавлена поддержка безопасной передачи RPC в Hadoop (hadoop.rpc.protection=privacy и hadoop.rpc.protection=integrity). #37852 (Peng Liu).
- Добавлена поддержка типа данных
structвStorageHive. #38118 (lgbo). - Отдельные объекты в S3 теперь удаляются с помощью
RemoveObjectRequest. Реализована совместимость с GCP, где нельзя было эффективно использоватьremoveFileIfExists, что фактически ломало примерно половину функциональностиremove. Добавлено автоматическое определение поддержки S3 APIDeleteObjects, который не поддерживается GCS. Это позволит использовать GCS без явного указанияsupport_batch_delete=0в конфигурации. #37882 (Vladimir Chebotarev). - Предоставить базовые данные мониторинга для ClickHouse Keeper (через ProfileEvents и CurrentMetrics). #38072 (lingpeng0314).
- Добавлена поддержка опции
auto_closeдля соединения движка PostgreSQL. Исправляет #31486. #38363 (Kseniia Sumarokova). - Разрешено использовать модификатор
NULLв объявлении столбцов табличных функций. #38816 (Kruglov Pavel). - Деактивируйте
mutations_finalizing_taskперед завершением работы, чтобы избежать безвредных ошибокTABLE_IS_READ_ONLYпри завершении работы. #38851 (Raúl Marín). - Исключено лишнее ожидание выполнения запросов SELECT после запросов ALTER при одновременном выполнении запросов INSERT в устаревших базах данных типа Ordinary. #38864 (Azat Khuzhin).
- Новая опция
rewriteвEXPLAIN AST. Если включена, показывает AST после его преобразования, иначе — AST исходного запроса. По умолчанию отключена. #38910 (Igor Nikonov). - Прекратить записывать ожидаемые исключения ZooKeeper «Node exists» в таблицу system.errors. #38961 (Raúl Marín).
clickhouse-keeper: добавлена поддержка вычисления и проверки дайджеста в реальном времени. По умолчанию функция отключена. #37555 (Antonio Andelic).- Добавлена поддержка глоб-шаблонов
*или{expr1, expr2, expr3}внутри ключа для инструментаclickhouse-extract-from-config. #38966 (Nikita Mikhaylov). - clearOldLogs: Не сообщать о KEEPER_EXCEPTION при параллельных удалениях. #39016 (Raúl Marín).
- улучшение clickhouse-keeper: сохранять метаинформацию о серверах keeper на диск. #39069 (Antonio Andelic). Это упростит администрирование при одновременном выключении или перезапуске всех узлов keeper.
- Продолжать работу без выбрасывания исключения при нехватке дискового пространства при использовании файлового кеша. #39106 (Kseniia Sumarokova).
- Обработка сигналов SIGTERM от k8s. #39130 (Timur Solodovnikov).
- В таблицу system.part_log добавлен столбец
merge_algorithm(Undecided, Horizontal, Vertical). #39181 (Azat Khuzhin). - Не увеличивать счётчик в
system.errors, если диск не является ротационным. #39216 (Raúl Marín). - Метрика
result_bytesдля запросовINSERTвsystem.query_logотображает количество вставленных байт. Ранее значение было некорректным и сохранялось таким же, как уresult_rows. #39225 (Ilya Yatsishin). - Метрика загрузки CPU в clickhouse-client теперь отображается более наглядно. Исправляет #38756. #39280 (Sergei Trifonov).
- Повторно выбрасывать исключение при инициализации файлового кэша на этапе запуска сервера, улучшено сообщение об ошибке. #39386 (Kseniia Sumarokova).
- OpenTelemetry теперь по умолчанию собирает трейсы без спанов Processors (их слишком много). Чтобы включить сбор спанов Processors, установите настройку
opentelemetry_trace_processors. #39170 (Ilya Yatsishin). - Функции
multiMatch[Fuzzy](AllIndices/Any/AnyIndex)больше не вызывают логическую ошибку, если аргументneedleпустой. #39012 (Robert Schulze). - Добавлена возможность объявлять очередь
RabbitMQбез стандартных аргументовx-max-lengthиx-overflow. #39259 (rnbondarenko).
Улучшения сборки/тестирования/пакетирования
- Применены аннотации анализа потокобезопасности Clang (Thread Safety Analysis, TSA) к ClickHouse. #38068 (Robert Schulze).
- Адаптирован универсальный скрипт установки для FreeBSD. #39302 (Alexey Milovidov).
- Подготовка к сборке на платформе
s390x. #39193 (Harry Lee). - Исправлена ошибка в библиотеке
jemalloc. #38757 (Azat Khuzhin). - Тест производительности оборудования теперь поддерживает автоматическую загрузку результатов. #38427 (Alexey Milovidov).
- Системная таблица "system.licenses" теперь корректно заполняется на macOS (Darwin). #38294 (Robert Schulze).
- Изменены пакеты
all|noarchна зависящие от архитектуры — исправлена часть документации по ним — добавлены пакеты aarch64|arm64 в Artifactory и релизные артефакты — исправлено #36443. #38580 (Mikhail f. Shiryaev).
Исправление ошибки (видимая пользователю некорректная работа в официальном стабильном или предварительном релизе)
- Исправлено округление для
Decimal128/Decimal256при масштабе более 19 знаков. #38027 (Igor Nikonov). - Исправлен сбой, вызванный гонкой данных в хранилище
Hive(табличном движке интеграции). #38887 (lgbo). - Исправлена ошибка, вызывавшая сбой при выполнении GRANT ALL ON . с ON CLUSTER. Она была внесена в https://github.com/ClickHouse/ClickHouse/pull/35767. Закрывает #38618. #38674 (Vitaly Baranov).
- Корректное раскрытие glob-шаблонов вида
{0..10}. Исправляет #38498. Текущая реализация аналогична тому, как это делает оболочка shell, как упоминал @rschu1ze здесь. #38502 (Heena Bansal). - Исправлено падение функций
mapUpdate,mapFilterпри использовании с константным аргументом map. Закрывает #38547. #38553 (hexiaoting). - Исправлена информация о монотонности функции
toHourдля оптимизации запросов, что могло приводить к некорректным результатам (неправильному анализу индексов). Это исправляет #38333. #38675 (Amos Bird). - Исправлена проверка поддержки параллельной записи в хранилище S3, из-за ошибки в которой параллельная запись в S3 не работала. #38792 (chen).
- Исправлены произвольные (seekable) чтения из S3 с использованием параллельного буфера чтения (что влияло на потребление памяти при выполнении запроса). Закрывает #38258. #38802 (Kseniia Sumarokova).
- Обновлён
simdjson. Это исправляет #38621 — переполнение буфера на машинах с новейшими процессорами Intel, поддерживающими AVX-512 VBMI. #38838 (Alexey Milovidov). - Исправлена возможная логическая ошибка в вертикальных слияниях. #38859 (Maksim Kita).
- Исправлен профиль настроек, использующий секунды в качестве единицы измерения. #38896 (Raúl Marín).
- Исправлено некорректное отсечение партиций (partition pruning), когда используется ключ партиционирования, допускающий значение
NULL. Примечание: скорее всего, вы не используете такие ключи партиционирования — это малоизвестная функция, которой не стоит пользоваться. Ключи, допускающиеNULL, лишены смысла, и эта возможность нужна только для каких‑то совершенно безумных сценариев использования. Это исправляет #38941. #38946 (Amos Bird). - Улучшена работа
fsync_part_directoryпри fetch-операциях. #38993 (Azat Khuzhin). - Исправлена возможная взаимная блокировка внутри
OvercommitTracker. Исправление для #37794. #39030 (Dmitry Novik). - Исправлена ошибка в файловом кеше, которая могла возникать в редких пограничных случаях, когда емкость кеша достигала предельного значения. Закрывает #39066. #39070 (Kseniia Sumarokova).
- Исправлены некоторые граничные случаи интерпретации аргументов оконных выражений. Исправление #38538. Разрешено использование функций высшего порядка в оконных выражениях. #39112 (Dmitry Novik).
- Сохраняется тип
LowCardinalityв функцииtuple. Ранее типLowCardinalityотбрасывался, и элементы создаваемого кортежа имели базовый тип (безLowCardinality). #39113 (Anton Popov). - Исправлена ошибка
Block structure mismatch, которая могла возникать при выполнении INSERT в таблицу с присоединённым материализованным представлением при включённой настройкеextremes = 1. Закрывает #29759 и #38729. #39125 (Nikolai Kochetov). - Исправлен неожиданный результат запроса, когда параметры
optimize_trivial_count_queryиempty_result_for_aggregation_by_empty_setодновременно установлены в true. Исправляет #39140. #39155 (Amos Bird). - Исправлена ошибка
Not found column Type in blockв запросах SELECT сPREWHEREи оптимизациями чтения в заданном порядке. #39157 (Yakov Olkhovskiy). - Исправлено крайне редкое условие гонки при создании жёстких ссылок в удалённой файловой системе. Единственный способ его воспроизвести — одновременный запуск резервных копий. #39190 (alesapin).
- (репликация с нулевым копированием — экспериментальная функция, которую не следует использовать в промышленной эксплуатации) Исправлена загрузка части, находящейся в памяти, при использовании
allow_remote_fs_zero_copy_replication. #39214 (Azat Khuzhin). - (MaterializedPostgreSQL — экспериментальная возможность). Исправлена ошибка сегментации в движке базы данных MaterializedPostgreSQL, которая могла возникать, если во время инициализации репликации происходило исключение. Закрывает #36939. #39272 (Kseniia Sumarokova).
- Исправлено некорректное получение метаданных таблиц из движка базы данных PostgreSQL. Закрывает #33502. #39283 (Kseniia Sumarokova).
- Исправлено исключение при работе с проекциями, возникавшее, когда ключи агрегации были обёрнуты в другие функции. Это исправляет #37151. #37155 (Amos Bird).
- Исправлена потенциальная логическая ошибка
... with argument with type Nothing and default implementation for Nothing is expected to return result with type Nothing, got ...в некоторых функциях. Закрывает: #37610 Закрывает: #37741. #37759 (Kruglov Pavel). - Исправлен неверный порядок столбцов в подзапросах UNION (в случае дублирующихся столбцов в подзапросах это могло приводить к некорректному результату). #37887 (Azat Khuzhin).
- Исправлена некорректная работа ALTER MODIFY COLUMN с именами столбцов, содержащими точки. Закрывает #37907. #37971 (Kruglov Pavel).
- Исправлена ошибка чтения разрежённых столбцов из таблиц
MergeTree, которые хранят свои данные в S3. #37978 (Anton Popov). - Исправлена возможная аварийная остановка при асинхронной вставке в таблицу
Distributedпри удалении реплики из конфигурации. #38029 (Nikolai Kochetov). - Исправлена ошибка "Missing columns" для GLOBAL JOIN с CTE без псевдонима. #38056 (Azat Khuzhin).
- Преобразовывать вызовы функций tuple в литералы в режиме обратной совместимости. #38096 (Anton Kozlov).
- Исправлено избыточное резервирование памяти под выходной блок при выполнении
ORDER BY. #38127 (iyupeng). - Исправлена возможная логическая ошибка
Bad cast from type DB::IColumn* to DB::ColumnNullable*в функциях, отображающих массивы (array mapped functions). Закрывает #38006. #38132 (Kruglov Pavel). - Исправлен временный конфликт имён в
partial merge join, закрыт #37928. #38135 (Vladimir C). - Незначительная проблема с запросами вида
CREATE TABLE nested_name_tuples (aTuple(x String, y Tuple(i Int32, j String))) ENGINE = Memory;#38136 (lgbo). - Исправлена ошибка во вложенных функциях с коротким замыканием, из‑за которой происходило вычисление аргументов, даже если условие ложно. Закрывает #38040. #38173 (Kruglov Pavel).
- (Window View — экспериментальная возможность) Исправлена ошибка LOGICAL_ERROR для WINDOW VIEW с некорректной структурой. #38205 (Azat Khuzhin).
- Обновлён подмодуль librdkafka для исправления аварийного завершения работы при установленном обратном вызове обновления OAUTHBEARER. #38225 (Rafael Acevedo).
- Исправлено зависание операции
INSERTв таблицуDistributedиз-заProfileEvents. #38307 (Azat Khuzhin). - Исправлена обработка повторных попыток в движке PostgreSQL. #38310 (Kseniia Sumarokova).
- Исправлена оптимизация в PartialSortingTransform (приводившая к SIGSEGV и возможному некорректному результату). #38324 (Azat Khuzhin).
- Исправлена работа RabbitMQ с форматами на основе PeekableReadBuffer. Закрывает #38061. #38356 (Kseniia Sumarokova).
- MaterializedPostgreSQL — экспериментальная возможность. Исправлена возможная ошибка
Invalid number of rows in Chunkв MaterializedPostgreSQL. Закрывает #37323. #38360 (Kseniia Sumarokova). - Исправлена конфигурация RabbitMQ, связанная с параметром строки подключения. Закрывает #36531. #38365 (Kseniia Sumarokova).
- Исправлена проблема в движке PostgreSQL, который не использовал схему PostgreSQL при получении размерности массива. Закрывает #36755. Закрывает #36772. #38366 (Kseniia Sumarokova).
- Исправлены потенциально некорректные результаты распределённых запросов с
DISTINCTиLIMIT. Исправляет проблему #38282. #38371 (Anton Popov). - Исправлены некорректные результаты
countSubstrings()иposition()для шаблонов, содержащих нулевые байты. #38589 (Robert Schulze). - Теперь можно запускать clickhouse-server и подключать/отключать таблицы даже для таблиц с некорректным представлением значений IPv4/IPv6. Исправление ошибки #35156. #38590 (alesapin).
- Функция
rankCorrтеперь корректно работает, если некоторые аргументы — NaN. Это закрывает #38396. #38722 (Alexey Milovidov). - Исправлена работа
parallel_view_processing=1сoptimize_trivial_insert_select=1. Исправленmax_insert_threadsпри вставке в представления. #38731 (Azat Khuzhin). - Исправлена ошибка use-after-free для агрегатных функций с комбинатором
Map, приводившая к некорректным результатам. #38748 (Azat Khuzhin).
Релиз ClickHouse 22.6, 2022-06-16
Изменения, нарушающие обратную совместимость
- Удалена поддержка восьмеричных числовых литералов в SQL. В предыдущих версиях они интерпретировались как Float64. #37765 (Yakov Olkhovskiy).
- Изменён разбор настроек с типом
seconds, чтобы поддерживать значения с плавающей запятой (например,max_execution_time=0.5). Значения Infinity или NaN будут приводить к исключению. #37187 (Raúl Marín). - Изменён формат бинарной сериализации столбцов экспериментального типа
Object. Новый формат удобнее для реализации сторонними клиентами. #37482 (Anton Popov). - Настройка
output_format_json_named_tuples_as_objectsтеперь включена по умолчанию. Это позволяет сериализовать именованные кортежи как объекты JSON в JSON-форматах. #37756 (Anton Popov). - Шаблоны LIKE с завершающим символом экранирования ('\') теперь запрещены (в соответствии со стандартом SQL). #37764 (Robert Schulze).
- Если вы запускаете разные версии ClickHouse в кластере с процессором AArch64 или смешиваете AArch64 и amd64 в одном кластере и используете распределённые запросы с GROUP BY по нескольким ключам типа фиксированного размера, которые помещаются в 256 бит, но не помещаются в 64 бита, и результат имеет очень большой размер, данные не будут полностью агрегированы в результатах таких запросов во время обновления. Обходной путь: выполняйте обновление с простоем вместо поочерёдного (rolling) обновления.
Новая возможность
- Добавлена функция
GROUPING. Она позволяет однозначно различать строки в запросах сROLLUP,CUBEилиGROUPING SETS. Закрывает #19426. #37163 (Dmitry Novik). - Новый алгоритм кодека FPC для сжатия чисел с плавающей запятой. #37553 (Mikhail Guzov).
- Добавлены новые колоночные JSON-форматы:
JSONColumns,JSONCompactColumns,JSONColumnsWithMetadata. Закрыты #36338 и #34509. #36975 (Kruglov Pavel). - Добавлен инструмент визуализации трассировок OpenTelemetry на базе D3.js. #37810 (Sergei Trifonov).
- Добавлена поддержка операций
INSERTв таблицуsystem.zookeeper. Закрывает #22130. #37596 (Han Fei). - Добавлена поддержка неконстантного аргумента шаблона для функций
LIKE,ILIKEиmatch. #37251 (Robert Schulze). - Исполняемые пользовательские функции теперь поддерживают параметры. Пример:
SELECT test_function(parameters)(arguments). Закрывает задачу #37578. #37720 (Maksim Kita). - Добавлен столбец
merge_reasonв таблицу system.part_log. #36912 (Sema Checherinda). - Добавлена поддержка Maps и Records в формате Avro. Добавлена новая настройка
input_format_avro_null_as_default, которая позволяет вставлять null в качестве значения по умолчанию при работе с форматом Avro. Закрывает #18925, #37378, #32899. #37525 (Kruglov Pavel). - Добавлен инструмент
clickhouse-disksдля анализа и управления виртуальными файловыми системами, сконфигурированными для ClickHouse. #36060 (Artyom Yurkov). - Добавляет функции однонаправленных рёбер H3. #36843 (Bharat Nallan).
- Добавлена поддержка вычисления Hashids на основе беззнаковых целых чисел. #37013 (Michael Nutt).
- Разрешено явное указание
SALTдляCREATE USER <user> IDENTIFIED WITH sha256_hash. #37377 (Yakov Olkhovskiy). - Добавлены два новых параметра
input_format_csv_skip_first_lines/input_format_tsv_skip_first_lines, позволяющих пропускать заданное количество строк в начале CSV/TSV-файла. #37537 (Kruglov Pavel). - Функция
showCertificateотображает текущий SSL-сертификат сервера. #37540 (Yakov Olkhovskiy). - Поддерживается HTTP‑источник для словарей данных в именованных коллекциях. #37581 (Yakov Olkhovskiy).
- Добавлена новая оконная функция
nonNegativeDerivative(metric_column, timestamp_column[, INTERVAL x SECOND]). #37628 (Andrey Zvonov). - Добавлена поддержка изменения комментария для таблиц
ReplicatedMergeTree. #37416 (Vasily Nemkov). - Добавлен запрос
SYSTEM UNFREEZE, который удаляет всю резервную копию независимо от того, была ли соответствующая таблица удалена или нет. #36424 (Vadim Volodin).
Экспериментальная возможность
- Добавлена поддержка
POPULATEдляWINDOW VIEW. #36945 (vxider). - Добавлена поддержка
ALTER TABLE ... MODIFY QUERYдляWINDOW VIEW. #37188 (vxider). - Этот PR изменяет поведение синтаксиса
ENGINEвWINDOW VIEW, чтобы оно стало таким же, как вMATERIALIZED VIEW. #37214 (vxider).
Повышение производительности
- Добавлено множество оптимизаций для ARM NEON #38093 (Daniel Kutenin), (Alexandra Pilipyuk). Примечание: если вы запускаете различные версии ClickHouse в кластере с ARM CPU и используете распределённые запросы с GROUP BY по нескольким ключам фиксированного размера, которые помещаются в 256 бит, но не помещаются в 64 бита, результаты агрегатного запроса во время обновления будут некорректными. Обходной путь: выполняйте обновление с простоем вместо поэтапного (rolling) обновления.
- Улучшена производительность и использование памяти при выборке подмножества столбцов для форматов Native, Protobuf, CapnProto, JSONEachRow, TSKV, а также всех форматов с суффиксами WithNames/WithNamesAndTypes. Ранее при выборе только подмножества столбцов из файлов в этих форматах все столбцы читались и хранились в памяти. Теперь читаются только необходимые столбцы. Этот PR устанавливает настройку
input_format_skip_unknown_fieldsпо умолчанию, потому что иначе при выборке подмножества столбцов будет возникать исключение. #37192 (Kruglov Pavel). - Теперь можно проталкивать больше фильтров в операции JOIN. #37472 (Amos Bird).
- Загружать метки только для необходимых столбцов при чтении широких частей. #36879 (Anton Kozlov).
- Повышена производительность операций агрегации, если в качестве аргументов агрегатных функций используются разреженные столбцы (их можно включить экспериментальной настройкой
ratio_of_defaults_for_sparse_serializationв таблицахMergeTree). #37617 (Anton Popov). - Оптимизирована функция
COALESCEс двумя аргументами. #37666 (Anton Popov). - Замените
multiIfнаifв случае, когда вmultiIfтолько одно условие, поскольку функцияifработает быстрее. #37695 (Anton Popov). - Улучшена производительность функций
dictGetDescendants,dictGetChildren: временный родительско-дочерний иерархический индекс теперь создаётся на уровне запроса, а не при каждом вызове функции в ходе запроса. Добавлена возможность указыватьBIDIRECTIONALдля атрибутов типаHIERARHICAL, в этом случае словарь будет поддерживать родительско-дочерний индекс в памяти, и функцииdictGetDescendants,dictGetChildrenне будут создавать временный индекс для каждого запроса. Закрывает #32481. #37148 (Maksim Kita). - Теперь освобождение состояния агрегатов может выполняться в пуле потоков. Для запросов с LIMIT и большим состоянием это обеспечивает значительный прирост скорости, например,
select uniq(number) from numbers_mt(1e7) group by number limit 100стал примерно в 2,5 раза быстрее. #37855 (Nikita Taranov). - Улучшена производительность сортировки по одному столбцу. #37195 (Maksim Kita).
- Улучшена производительность сортировки по одному столбцу с помощью специализаций очереди сортировки. #37990 (Maksim Kita).
- Производительность функций нормы и расстояния для массивов улучшена в 2–4 раза. #37394 (Alexander Gololobov).
- Улучшена производительность функций сравнения чисел с помощью динамической диспетчеризации. #37399 (Maksim Kita).
- Улучшена производительность ORDER BY при использовании LIMIT. #37481 (Maksim Kita).
- Улучшена производительность функции
hasAllза счёт использования инфраструктуры динамической диспетчеризации. #37484 (Maksim Kita). - Улучшена производительность функций
greatCircleAngle,greatCircleDistance,geoDistance. #37524 (Maksim Kita). - Улучшена производительность вставок в MergeTree, если в ORDER BY указано несколько столбцов. #35762 (Maksim Kita).
- Исправлено чрезмерное потребление CPU в фоновом режиме при большом количестве таблиц. #38028 (Maksim Kita).
- Повышена производительность функции
notза счёт динамической диспетчеризации. #38058 (Maksim Kita). - Оптимизировано внутреннее кэширование шаблонов re2, которые используются, например, в функциях LIKE и MATCH. #37544 (Robert Schulze).
- Улучшена единая функция генерации битовой маски фильтра с использованием инструкций AVX-512. #37588 (yaqi-zhao).
- Использовать метод чтения
threadpoolдля движка интеграции с Hive. Это значительно ускорит чтение. #36328 (李扬). - Когда все считываемые столбцы являются ключами партиционирования, создавать столбцы по номеру строки файла без фактического чтения Hive-файла. #37103 (lgbo).
- Поддержка нескольких дисков для кэширования файлов Hive. #37279 (lgbo).
- Ограничение максимального объёма кэша, используемого одним запросом, может эффективно предотвратить засорение пула кэша. Связанные задачи. #37859 (Han Shukai).
- В настоящее время ClickHouse напрямую загружает все удалённые файлы в локальный кэш (даже если они читаются всего один раз), что часто приводит к интенсивным операциям ввода-вывода на локальном жёстком диске. В некоторых сценариях такие операции ввода-вывода могут оказаться лишними и приводить к ухудшению производительности. Как показано на рисунке ниже, при выполнении SSB Q1–Q4 использование кэша ухудшило производительность. #37516 (Han Shukai).
- Добавлена возможность отфильтровать список файлов с помощью виртуальных столбцов, таких как
_fileи_path, при чтении из S3. Реализовано для #37174, #23494. #37356 (Amos Bird). - В функции CompressedWriteBuffer::nextImpl() есть лишний шаг записи с копированием, который часто выполняется при вставке данных. Ниже показано отличие с этим патчем: - До: 1. Сжать "working_buffer" в "compressed_buffer" 2. выполнить запись с копированием в "out" - После: напрямую сжимать "working_buffer" в "out". #37242 (jasperzhu).
Улучшение
- Добавлена поддержка типов с нестандартными значениями по умолчанию в ROLLUP, CUBE, GROUPING SETS. Закрывает #37360. #37667 (Dmitry Novik).
- Исправлен сбор стеков трассировки на ARM. Закрывает #37044. Закрывает #15638. #37797 (Maksim Kita).
- Клиент будет по очереди пытаться подключиться ко всем IP-адресам, возвращённым DNS, пока соединение не будет установлено. #37273 (Yakov Olkhovskiy).
- Позволяет использовать тип String вместо Binary в форматах Arrow/Parquet/ORC. Этот PR добавляет для этого 3 новые настройки:
output_format_arrow_string_as_string,output_format_parquet_string_as_string,output_format_orc_string_as_string. Значение по умолчанию для всех настроек —false. #37327 (Kruglov Pavel). - Применять настройку
input_format_max_rows_to_read_for_schema_inferenceк общему числу прочитанных строк по всем файлам, подходящим под glob-шаблон. Ранее настройкаinput_format_max_rows_to_read_for_schema_inferenceприменялась к каждому файлу в glob отдельно, и в случае большого количества значений NULL мы могли прочитать первыеinput_format_max_rows_to_read_for_schema_inferenceстрок из каждого файла и так и не получить схему. Также увеличено значение по умолчанию для этой настройки до 25000. #37332 (Kruglov Pavel). - Добавлен отдельный грант
CLUSTER(и конфигурационная директиваaccess_control_improvements.on_cluster_queries_require_cluster_grantдля обеспечения обратной совместимости, по умолчанию —false). #35767 (Azat Khuzhin). - Добавлена поддержка автоматического определения схемы для
hdfsCluster. #35812 (Nikita Mikhaylov). - Реализован алгоритм балансировки нагрузки
least_usedмежду дисками внутри тома (конфигурация с несколькими дисками). #36686 (Azat Khuzhin). - Изменён HTTP-эндпоинт, чтобы возвращать полную статистику в заголовке
X-ClickHouse-Summary, когдаsend_progress_in_http_headers=0(ранее возвращались только нули). - Изменён HTTP-эндпоинт, чтобы возвращать заголовокX-ClickHouse-Exception-Code, когда прогресс уже был отправлен (send_progress_in_http_headers=1). - Изменён HTTP-эндпоинт, чтобы возвращатьHTTP_REQUEST_TIMEOUT(408) вместоHTTP_INTERNAL_SERVER_ERROR(500) при ошибкахTIMEOUT_EXCEEDED. #36884 (Raúl Marín). - Разрешить пользователю просматривать привилегии, предоставленные его назначенным ролям. #36941 (nvartolomei).
- Не вычисляйте интеграл численно — вместо этого используйте функции CDF. Это ускорит выполнение и повысит точность. Это исправляет #36714. #36953 (Nikita Mikhaylov).
- Добавлена реализация по умолчанию для типа Nothing в функциях. Теперь большинство функций будут возвращать столбец с типом Nothing в случае, если один из их аргументов имеет тип Nothing. Это также решает проблему с функциями вроде arrayMap/arrayFilter и аналогичными, когда в качестве аргумента используется пустой массив. Ранее запросы вида
select arrayMap(x -> 2 * x, []);завершались с ошибкой, потому что функция внутри лямбда-выражения не могла работать с типомNothing, теперь такие запросы возвращают пустой массив с типомArray(Nothing). Также добавлена поддержка массивов типов, допускающих NULL, в функциях вроде arrayFilter/arrayFill. Ранее запросы видаselect arrayFilter(x -> x % 2, [1, NULL])завершались с ошибкой, теперь они выполняются (если результат лямбда-выражения равен NULL, то это значение не будет включено в результат). Закрывает #37000. #37048 (Kruglov Pavel). - Теперь, если у шарда есть локальная реплика, мы создаём локальный план и план чтения со всех удалённых реплик. У них есть общий инициатор, который координирует чтение. #37204 (Nikita Mikhaylov).
- Запуск сервера больше не прерывается, если параметр конфигурации "mark_cache_size" явно не задан. #37326 (Robert Schulze).
- Добавлена возможность указывать
NULL/NOT NULLсразу после типа в объявлении столбца. #37337 (Igor Nikonov). - оптимизировано получение буфера чтения для сегмента файла PARTIALLY_DOWNLOADED. #37338 (xiedeyantu).
- Попытка улучшить обработку функций с коротким вычислением, чтобы устранить проблемы в стресс‑тестах. #37384 (Kruglov Pavel).
- Закрывает задачу #37395. #37415 (Memo).
- Исправлена крайне редкая взаимоблокировка при получении части при репликации с нулевым копированием данных. Исправляет #37423. #37424 (metahys).
- Не разрешать создавать хранилище с неизвестным форматом данных. #37450 (Kruglov Pavel).
- Значение по умолчанию параметра
global_memory_usage_overcommit_max_wait_microsecondsустановлено в 5 секунд. В сообщение об исключении OOM добавлена информация обOvercommitTracker. Добавлено событие профилированияMemoryOvercommitWaitTimeMicroseconds. #37460 (Dmitry Novik). - Не отображать значение
-0.0для времени CPU в clickhouse-client. Оно может появляться из-за погрешностей округления. Это закрывает #38003. Это закрывает #38038. #38064 (Alexey Milovidov). - Интерфейс Play: элементы управления остаются на месте при горизонтальной прокрутке страницы. Это делает редактирование удобным, даже если таблица широкая и была прокручена далеко вправо. Функцию предложил Maksym Tereshchenko из компании CaspianDB. #37470 (Alexey Milovidov).
- Изменён div с запросом в play.html, чтобы его высоту можно было увеличивать более чем на 20%. В случае очень длинных запросов полезно растягивать элемент textarea, но сейчас, поскольку у div фиксированная высота, растянутая textarea перекрывает расположенный под ней div с данными. С этим исправлением увеличение textarea будет сдвигать div с данными вверх/вниз, так что растянутая textarea не будет его скрывать. Также ширина блока с запросом остаётся 100% даже при изменении пользователем размера textarea запроса. #37488 (guyco87).
- Добавлены
ProfileEventsдля анализа типов записываемых (вставленных или объединённых) частей (Inserted{Wide/Compact/InMemory}Parts,MergedInto{Wide/Compact/InMemory}Parts). В таблицуsystem.part_logдобавлен столбецpart_type. Исправляет #37495. #37536 (Anton Popov). - Улучшение в clickhouse-keeper: перемещение повреждённых логов в каталог с отметкой времени. #37565 (Antonio Andelic).
- Не записывать столбцы с истекшим TTL при последующих слияниях (ранее только первое слияние/OPTIMIZE части не записывало столбцы с истекшим TTL, все последующие это делали). #37570 (Azat Khuzhin).
- Более точный результат работы служебной функции
dumpColumnStructureпри наличии столбцов типов LowCardinality или Sparse. В предыдущих версиях эта функция преобразовывала аргумент в полный столбец перед возвратом результата. Это изменение необходимо для предоставления ответа в #6935. #37633 (Alexey Milovidov). - clickhouse-keeper: хранить только уникальные идентификаторы сеансов для наблюдений. #37641 (Azat Khuzhin).
- Исправлена возможная проблема "Cannot write to finalized buffer". #37645 (Azat Khuzhin).
- Добавлена настройка
support_batch_deleteдляDiskS3для отключения вызовов пакетного удаления объектов, которые не поддерживает Google Cloud Storage. #37659 (Fred Wulff). - Добавлен параметр, позволяющий отключать пул соединений в ODBC bridge. #37705 (Anton Kozlov).
- Функции
dictGetHierarchy,dictIsIn,dictGetChildren,dictGetDescendantsтеперь поддерживают nullable-атрибутHIERARCHICALв словарях. Закрыта задача #35521. #37805 (Maksim Kita). - В таблице
system.build_optionsтеперь доступна информация о версии BoringSSL. #37850 (Bharat Nallan). - Теперь clickhouse-server при запуске сервера удаляет каталоги
delete_tmp. Исправлено #26503. #37906 (alesapin). - Очистка повреждённых отсоединённых частей по истечении тайм-аута. Закрывает #25195. #37975 (Kseniia Sumarokova).
- Теперь в семействе движков таблиц MergeTree части, которые не удалось переместить, будут немедленно удаляться. #37994 (alesapin).
- Теперь, если настройка
always_fetch_merged_partвключена, при слияниях ReplicatedMergeTree поиск частей на других репликах будет выполняться реже, с меньшей нагрузкой на [Zoo]Keeper. #37995 (alesapin). - Добавлены также неявные привилегии с правом передачи. Например,
GRANT CREATE TABLE ON test.* TO A WITH GRANT OPTIONтеперь позволяет пользователюAвыполнять командуGRANT CREATE VIEW ON test.* TO B. #38017 (Vitaly Baranov).
Улучшения сборки/тестирования/упаковки
- Используем
clang-14и инфраструктуру LLVM версии 14 для сборок. Это закрывает #34681. #34754 (Alexey Milovidov). Примечание: вclang-14есть ошибка в ThreadSanitizer, которая ухудшает работу нашей CI. - Добавлена возможность сбрасывать привилегии при запуске. Это упрощает Docker-образы. Закрывает #36293. #36341 (Alexey Milovidov).
- Добавлена проверка орфографии документации в CI. #37790 (Vladimir C).
- Исправлен чрезмерно агрессивный stripping, из-за которого удалялся встроенный хэш, необходимый для проверки целостности исполняемого файла. #37993 (Robert Schulze).
Исправление ошибки
- Исправлена обработка операторов
SELECT ... INTERSECTиEXCEPT SELECTв случаях с константными строковыми типами. #37738 (Antonio Andelic). - Исправлена обработка
GROUP BYдля типаAggregateFunction(то есть когда вы выполняетеGROUP BYпо столбцу с типомAggregateFunction). #37093 (Azat Khuzhin). - (экспериментальный WINDOW VIEW) Исправлена функция
addDependencyв WindowView. Эту ошибку можно воспроизвести как в #37237. #37224 (vxider). - Исправлена некорректная работа функции ORDER BY ... WITH FILL. Запрос, содержащий ORDER BY ... WITH FILL, мог генерировать лишние строки при наличии нескольких столбцов WITH FILL. #38074 (Yakov Olkhovskiy).
- Этот PR переносит
addDependencyиз конструктора вstartup(), чтобы избежать добавления зависимости к уже удалённой таблице, и тем самым исправляет #37237. #37243 (vxider). - Исправлена вставка значений по умолчанию для отсутствующих столбцов в колоночных форматах. Ранее отсутствующие столбцы заполнялись значениями по умолчанию для типов, а не для столбцов. #37253 (Kruglov Pavel).
- (экспериментальный тип Object) Исправлены некоторые случаи вставки вложенных массивов в столбцы типа
Object. #37305 (Anton Popov). - Исправлены неожиданные ошибки, вызванные конфликтом константных строк в агрегатной функции,
PREWHEREиJOIN. Закрывает #36891. #37336 (Vladimir C). - Исправлены проекции с GROUP/ORDER BY в запросе и настройка optimize_aggregation_in_order (раньше результат был некорректным, так как выполнялась только финальная сортировка). #37342 (Azat Khuzhin).
- Исправлена ошибка обработки символов в имени ключа в S3. Исправляет #33009. #37344 (Vladimir Chebotarev).
- Выбрасывать исключение при использовании GROUPING SETS совместно с ROLLUP или CUBE. #37367 (Dmitry Novik).
- Исправлена ошибка LOGICAL_ERROR в getMaxSourcePartsSizeForMerge во время слияний (если нестандартные, повышенные значения
background_pool_size/background_merges_mutations_concurrency_ratioбыли заданы вconfig.xml(новый способ), а не вusers.xml(устаревший способ)). #37413 (Azat Khuzhin). - Прекращено удаление UTF-8 BOM в формате RowBinary. #37428 (Paul Loyd). #37428 (Paul Loyd).
- исправление ошибки в clickhouse-keeper: исправлено принудительное восстановление для одноузлового кластера. #37440 (Antonio Andelic).
- Исправлена логическая ошибка в функциях normalizeUTF8. Закрывает #37298. #37443 (Maksim Kita).
- Исправлено приведение lowcard для Nullable в JoinSwitcher; закрыт #37385. #37453 (Vladimir C).
- Исправлен вывод именованных кортежей в форматах ORC/Arrow/Parquet. #37458 (Kruglov Pavel).
- Исправлена оптимизация монотонных функций в предложении ORDER BY при использовании GROUPING SETS. Устраняет проблему #37401. #37493 (Dmitry Novik).
- Исправлена ошибка при выполнении
JOINсо словарём в некоторых условиях. Закрывает #37386. #37530 (Vladimir C). - Запретить использование
optimize_aggregation_in_orderсGROUPING SETS(исправляетLOGICAL_ERROR). #37542 (Azat Khuzhin). - Исправлены некорректные данные дампа ActionsDAG. #37587 (zhanglistar).
- Исправлено преобразование типов для запросов UNION (могло приводить к ошибке LOGICAL_ERROR). #37593 (Azat Khuzhin).
- Исправлена работа модификатора
WITH FILLс отрицательными интервалами в предложенииSTEP. Исправлено #37514. #37600 (Anton Popov). - Устранено некорректное использование массивов в
joinGetприjoin_use_nulls = 1. Это исправляет #37562. #37650 (Amos Bird). - Устранено несоответствие числа столбцов в
cross join, закрыт #37561. #37653 (Vladimir C). - Исправлена ошибка сегментации в запросе
SHOW CREATE TABLEдля базы данных MySQL, настроенной с использованием именованных коллекций. Закрывает #37683. #37690 (Kseniia Sumarokova). - Исправлена проблема, из‑за которой RabbitMQ Storage не удавалось запустить после перезапуска сервера, если хранилище было создано без оператора SETTINGS. Закрывает #37463. #37691 (Kseniia Sumarokova).
- Пользовательские SQL-функции запрещают выполнение операций CREATE/DROP в режиме только для чтения. Исправляет #37280. #37699 (Maksim Kita).
- Исправлено форматирование аргументов Nullable для исполняемых пользовательских функций. Закрывает #35897. #37711 (Maksim Kita).
- Исправлена ошибка в оптимизации, включаемой параметром
optimize_monotonous_functions_in_order_byв распределённых запросах. Устраняет проблему #36037. #37724 (Anton Popov). - Исправлена потенциальная логическая ошибка:
Invalid Field get from type UInt64 to type Float64в табличной функцииvalues. Закрыта #37602. #37754 (Kruglov Pavel). - Исправлена возможная ошибка сегментации при выводе схемы при возникновении исключения в конструкторе SchemaReader. Закрывает #37680. #37760 (Kruglov Pavel).
- Исправлена работа настройки cast_ipv4_ipv6_default_on_conversion_error для внутренней функции CAST. Закрывает #35156. #37761 (Maksim Kita).
- Исправлена ошибка в функции toString для DataTypeDate32. #37775 (LiuNeng).
- Настройка clickhouse-keeper
dead_session_check_period_msбыла преобразована в микросекунды (умножена на 1000), что приводило к тому, что «мертвые» сессии очищались только через несколько минут (вместо 500 мс). #37824 (Michael Lex). - Исправлена возможная ошибка с сообщением "No more packets are available" для распределённых запросов (в случае, если
async_socket_for_remote/use_hedged_requestsотключены). #37826 (Azat Khuzhin). - (экспериментальный WINDOW VIEW) Внутренняя целевая таблица больше не удаляется при выполнении
ALTER TABLE ... MODIFY QUERYв WindowView. #37879 (vxider). - Исправлены права владельца каталога координации в Docker-образе clickhouse-keeper. Исправляет #37914. #37915 (James Maidment).
- В словарях исправлен пользовательский запрос с полем update и
{condition}. Закрывает #33746. #37947 (Maksim Kita). - Исправлена возможная ошибка в результате выполнения
SELECT ... WITH FILLв случае, когдаORDER BYдолжен применяться послеWITH FILL(например, во внешнем запросе). Некорректный результат был вызван оптимизацией выраженийORDER BY(#35623). Закрывает #37904. #37959 (Yakov Olkhovskiy). - (экспериментальный WINDOW VIEW) Добавлено автоматическое добавление отсутствующих столбцов со значениями по умолчанию при записи в целевую таблицу из WindowView, исправлена #37815. #37965 (vxider).
- Исправлен слишком большой кадр стека, из-за которого компиляция завершалась с ошибкой. #37996 (Han Shukai).
- При включении параметра enable_filesystem_query_cache_limit возникает ошибка «Reserved cache size exceeds the remaining cache size». #38004 (xiedeyantu).
- Исправлено преобразование типов в запросах UNION (могло приводить к LOGICAL_ERROR). #34775 (Azat Khuzhin).
- Слияние по TTL может не быть повторно запланировано, если BackgroundExecutor занят. --merges_with_ttl_counter увеличивается в selectPartsToMerge() --задача слияния будет проигнорирована, если BackgroundExecutor занят --merges_with_ttl_counter не будет уменьшен. #36387 (lthaooo).
- Исправлена проблема с переопределением значения настройки
normalize_function_names. #36937 (李扬). - Исправление оконных функций с экспоненциальным затуханием по времени. Теперь корректно учитываются границы окна. #36944 (Vladimir Chebotarev).
- Исправлена потенциальная ошибка heap-use-after-free при чтении таблиц system.projection_parts и system.projection_parts_columns. Это исправляет #37184. #37185 (Amos Bird).
- Исправлено поведение дробной части секунд в
DateTime64для дат до эпохи Unix. #37697 (Andrey Zvonov). #37039 (李扬).
Релиз ClickHouse 22.5, 2022-05-19
Заметки по обновлению
- Теперь фоновые слияния, мутации и
OPTIMIZEне будут увеличивать метрикиSelectedRowsиSelectedBytes. Они (по‑прежнему) будут увеличиватьMergedRowsиMergedUncompressedBytes, как это было раньше. Это влияет только на значения метрик и делает их более корректными. Это изменение не вносит никаких несовместимостей, но у вас могут возникнуть вопросы по изменениям метрик, поэтому мы поместили его в эту категорию. #37040 (Nikolai Kochetov). - Модуль BoringSSL обновлён до официальной FIPS‑совместимой версии. Это делает ClickHouse соответствующим требованиям FIPS. #35914 (Meena-Renganathan). Шифры
aes-192-cfb128иaes-256-cfb128были удалены, так как они не входят в FIPS‑сертифицированную версию BoringSSL. - Настройка
max_memory_usageудалена из профиля пользователя по умолчанию вusers.xml. Это позволяет использовать гибкие лимиты памяти для запросов вместо старого жёсткого лимита в 10 ГБ. - По умолчанию отключена настройка
log_query_threads. Она управляет логированием статистики о каждом потоке, участвующем в выполнении запроса. После добавления поддержки асинхронного чтения общее количество различных идентификаторов потоков стало слишком большим, и логирование вquery_thread_logстало слишком ресурсоёмким. #37077 (Alexey Milovidov). - Удалена функция
groupArraySorted, в которой была ошибка. #36822 (Alexey Milovidov).
Новая функция
- Включен
memory overcommitпо умолчанию. #35921 (Dmitry Novik). - Добавлена поддержка
GROUPING SETSв предложенииGROUP BY. Эта реализация поддерживает параллельную обработку наборов группировки. #33631 (Dmitry Novik). - Добавлена таблица
system.certificates. #37142 (Yakov Olkhovskiy). - Добавлены функции
h3Line,h3Distanceиh3HexRing. #37030 (Bharat Nallan). - Новый диагностический инструмент в виде одного бинарного файла (
clickhouse-diagnostics). #36705 (Dale McDiarmid). - Добавлен формат вывода
Prometheus#36051. #36206 (Vladimir C). - Добавлен входной формат
MySQLDump. Он читает все данные из запросовINSERT, относящихся к одной таблице в дампе. Если таблиц больше одной, по умолчанию читаются данные из первой. #36667 (Kruglov Pavel). - Поля
total_rowsиtotal_bytesвsystem.tablesтеперь отображаются и для временных таблиц. #36401. #36439 (xiedeyantu). - Разрешено переопределять
parts_to_delay_insertиparts_to_throw_insertнастройками на уровне запроса. Если они заданы, они переопределяют настройки на уровне таблицы. #36371 (Memo).
Экспериментальная возможность
- Реализованы функции расстояния L1, L2, Linf, Cosine для массивов и функции нормы L1, L2, Linf для массивов. #37033 (qieqieplus). Предупреждение: функции будут переименованы.
- Улучшен запрос
WATCHв WindowView: 1. Снижена задержка предоставления результатов запроса за счёт вызова сигналаfire_condition. 2. Операция отмены запроса (Ctrl+C) стала быстрее за счёт более частой проверкиisCancelled(). #37226 (vxider). - Интроспекция для удаления кэша файловой системы. #36802 (Han Shukai).
- Добавлена новая хеш-функция
wyHash64для SQL. #36467 (olevino). - Улучшение для реплицируемых баз данных: добавлен запрос
SYSTEM SYNC DATABASE REPLICA, который позволяет синхронизировать метаданные таблиц внутри реплицируемой базы данных, поскольку в настоящее время синхронизация выполняется асинхронно. #35944 (Nikita Mikhaylov). - Улучшение для кэша удалённой файловой системы: более эффективное чтение из кэша. #37054 (Kseniia Sumarokova). Улучшен запрос
SYSTEM DROP FILESYSTEM CACHE: добавлены опции<path>иFORCE. #36639 (Kseniia Sumarokova). - Улучшение для полуструктурированных данных: разрешено приводить столбцы типа
Object(...)кObject(Nullable(...)). #36564 (awakeljw). - Улучшение для параллельных реплик: мы создаём локальный интерпретатор, если хотим выполнить запрос на реплике на localhost. Но при выполнении запроса на нескольких репликах мы полагаемся на существование подключения, чтобы реплики могли обмениваться данными с координатором. Теперь поведение улучшено, и реплика на localhost может общаться с координатором напрямую в том же процессе. #36281 (Nikita Mikhaylov).
Улучшение производительности
- Улучшена производительность агрегатных функций
avg,sum, если они используются без выражения GROUP BY. #37257 (Maksim Kita). - Улучшена производительность унарных арифметических функций (
bitCount,bitNot,abs,intExp2,intExp10,negate,roundAge,roundDuration,roundToExp2,sign) за счёт динамической диспетчеризации. #37289 (Maksim Kita). - Улучшена производительность ORDER BY, MergeJoin и вставки в MergeTree с помощью JIT‑компиляции компаратора столбцов сортировки. #34469 (Maksim Kita).
- Изменена структура
system.asynchronous_metric_log. Журнал будет занимать примерно в 10 раз меньше места. Это закрывает #36357. Полеevent_time_microsecondsбыло удалено как бесполезное. #36360 (Alexey Milovidov). - При чтении широких кусков теперь загружаются метки только для необходимых столбцов. #36879 (Anton Kozlov).
- Улучшена производительность кэша дескрипторов файлов за счёт сужения областей действия мьютексов. #36682 (Anton Kozlov).
- Улучшена производительность чтения из хранилища
Fileи табличных функцийfileв случае, когда путь содержит glob‑шаблоны, а соответствующий каталог содержит большое количество файлов. #36647 (Anton Popov). - Применён параллельный разбор для входного формата
HiveText, что может ускорить разбор HiveText в 2 раза при чтении локального файла. #36650 (李扬). - HashJoin по умолчанию не является потокобезопасным для вставки строк правой таблицы, поэтому вставка выполняется в одном потоке. Когда правая таблица большая, операция соединения выполняется слишком медленно при низкой загрузке CPU. #36415 (lgbo).
- Добавлена возможность переписывать
select countDistinct(a) from tвselect count(1) from (select a from t groupBy a). #35993 (zhanglistar). - Цепочка условий OR LIKE преобразована в multiMatchAny. Оптимизация будет включена по умолчанию, когда мы будем более уверены в корректности её работы. #34932 (Daniel Kutenin).
- Улучшена производительность некоторых функций с помощью инлайнинга. #34544 (Daniel Kutenin).
- Добавлена ветка кода, чтобы избежать ненужного memcpy в readBig, что несколько улучшает производительность. #36095 (jasperzhu).
- Реализован частичный ключ GROUP BY для optimize_aggregation_in_order. #35111 (Azat Khuzhin).
Улучшение
- Показывать имена файлов с ошибками в случае ошибок разбора при выполнении табличных функций
file,s3иurl. #36314 (Anton Popov). - Добавлена возможность увеличивать количество потоков для выполнения фоновых операций (слияний, мутаций, перемещений и загрузок) во время работы, если они указаны в конфигурации верхнего уровня. #36425 (Nikita Mikhaylov).
- Теперь функции преобразования даты и времени, которые генерируют значения до 1970-01-01 00:00:00 в часовых поясах с дробными часами/минутами, будут ограничиваться нулём вместо переполнения. Это продолжение https://github.com/ClickHouse/ClickHouse/pull/29953, которое касается https://github.com/ClickHouse/ClickHouse/pull/29953#discussion_r800550280. Отмечено как улучшение, поскольку это поведение, определяемое реализацией (и очень редкий случай), и мы можем позволить себе его изменить. #36656 (Amos Bird).
- Добавлено предупреждение при запуске clickhouse-server с уровнем логирования "test". Уровень логирования "test" был добавлен недавно и не может использоваться в продакшене из-за неизбежного, неустранимого, фатального и угрожающего жизни снижения производительности. #36824 (Alexey Milovidov).
- Разбирать правила сортировки в
CREATE TABLE, выбрасывать исключение или игнорировать их. Закрывает #35892. #36271 (yuuch). - Настройка
compatibility_ignore_auto_increment_in_create_tableпозволяет игнорировать ключевое словоAUTO_INCREMENTв определении столбца, чтобы упростить миграцию с MySQL. #37178 (Igor Nikonov). - Добавлены алиасы
JSONLinesиNDJSONдляJSONEachRow. Закрывает #36303. #36327 (flynn). - Ограничьте максимальное число партиций, которые можно запрашивать для каждой таблицы Hive, чтобы избежать перерасхода ресурсов. #37281 (lgbo).
- Добавлено неявное приведение типа для второго аргумента функции
h3kRingдля улучшения удобства использования. Закрывает #35432. #37189 (Maksim Kita). - Исправлена индикация прогресса для
INSERT SELECTвclickhouse-localдля всех запросов, а также прогресса чтения файлов в клиенте; индикация прогресса по файлам стала более точной. #37075 (Kseniia Sumarokova). - Исправлена ошибка, которая могла приводить к оставлению устаревших частей в семействе движков таблиц MergeTree в случае сбоев файловой системы во время их удаления. До исправления они удалялись только после первой перезагрузки сервера. #37014 (alesapin).
- Реализован новый режим обработки политик на уровне строк, который можно включить в основной конфигурации и который позволяет пользователям без разрешающих политик на уровне строк читать данные. #36997 (Vitaly Baranov).
- Интерфейс Play: числа в колонках типа Nullable будут выравниваться по правому краю в ячейках таблицы. Это закрывает #36982. #36988 (Alexey Milovidov).
- Play UI: если результат состоит из одной строки и большого числа столбцов, отображать его вертикально. Продолжение #36811. #36842 (Alexey Milovidov).
- Наведен порядок в CSS интерфейса Play. Элементы интерфейса выровнены по пикселям. Улучшено удобство работы с длинным содержимым в ячейках таблицы. #36569 (Alexey Milovidov).
- Завершать буферы записи при возникновении исключения, чтобы не делать это в деструкторах. Надеюсь, это исправит проблему: #36907. #36979 (Kruglov Pavel).
- После #36425 такие настройки, как
background_fetches_pool_size, стали устаревшими, но могли появляться в конфигурации на верхнем уровне, однако ClickHouse выдавал исключение видаError updating configuration from '/etc/clickhouse-server/config.xml' config.: Code: 137. DB::Exception: A setting 'background_fetches_pool_size' appeared at top level in config /etc/clickhouse-server/config.xml.Это исправлено. #36917 (Nikita Mikhaylov). - Добавлена передача дополнительной диагностической информации (если применимо) при отправке исключения на другой сервер. #36872 (tavplubix).
- Добавлена возможность выполнять хеш-функции с аргументами типа
Array(Tuple(..)). #36812 (Anton Popov). - Добавлен параметр конфигурации
user_defined_path. #36753 (Maksim Kita). - Разрешено использование макроса cluster в табличной функции
s3Cluster. #36726 (Vadim Volodin). - Обеспечена корректная отмена запросов INSERT в
clickhouse-client/clickhouse-local. #36710 (Azat Khuzhin). - Добавлена возможность отменять запрос при сохранении корректного идентификатора запроса в
MySQLHandler. #36699 (Amos Bird). - Добавлен столбец
is_all_data_sentвsystem.processesи на его основе улучшена внутренняя проверка надёжности тестов. #36649 (Azat Khuzhin). - Метрики по времени, затраченному на чтение из S3, теперь рассчитываются корректно. Закрыта #35483. #36572 (Alexey Milovidov).
- Разрешено использование файловых дескрипторов в табличной функции file при выполнении в clickhouse-local. #36562 (wuxiaobai24).
- Разрешены имена элементов кортежа, которые начинаются с цифр. #36544 (Anton Popov).
- Теперь clickhouse-benchmark может считывать информацию об аутентификации из переменных окружения. #36497 (Anton Kozlov).
- Улучшение
clickhouse-keeper: добавлена поддержка принудительного восстановления, которое позволяет перенастроить кластер без кворума. #36258 (Antonio Andelic). - Улучшено определение схемы для JSON-объектов. #36207 (Kruglov Pavel).
- Рефакторинг кода, связанного с выводом схемы при использовании glob-шаблонов. Теперь к следующему файлу из glob переходим только если это имеет смысл (ранее мы переходили к следующему файлу при любой ошибке). Также это исправляет #36317. #36205 (Kruglov Pavel).
- Добавлен отдельный грант
CLUSTER(и конфигурационная директиваaccess_control_improvements.on_cluster_queries_require_cluster_grantдля обеспечения обратной совместимости, по умолчанию имеет значениеfalse). #35767 (Azat Khuzhin). - Если требуемый объём памяти оказывается доступен до остановки выбранного запроса, все ожидающие запросы продолжают выполняться. Теперь мы не останавливаем ни один запрос, если память освобождается до того момента, когда выбранный запрос узнаёт об отмене. #35637 (Dmitry Novik).
- Определение Nullable-значений в protobuf. В proto3 значения по умолчанию не передаются «по проводу». Из‑за этого становится нетривиально отличать
nullот значений по умолчанию для Nullable-столбцов. Стандартный способ решить эту проблему — использовать Google wrappers, чтобы вложить целевое значение во внутреннее сообщение (см. https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/wrappers.proto). В этом случае отсутствующее поле интерпретируется как значениеnull, поле с пустым значением интерпретируется как значение по умолчанию, а поле с обычным значением интерпретируется как обычное значение. Однако ClickHouse интерпретирует Google wrappers как вложенные столбцы. Мы предлагаем ввести специальное поведение для распознавания Google wrappers и интерпретации их так, как описано выше. Например, чтобы сериализовать значения для Nullable-столбцаtest, мы будем использоватьgoogle.protobuf.StringValue testв нашей .proto-схеме. Обратите внимание, что эти типы — так называемые «well-known types» в Protobuf, реализованные в самой библиотеке. #35149 (Jakub Kuklis). - Добавлена поддержка указания
content_typeв конфигурации предопределённых и статических HTTP-обработчиков. #34916 (Roman Nikonov). - Корректно выводить предупреждение при использовании clickhouse-client с параметром --file без предварительно указанного --external. Закрывает #34747. #34765 (李扬).
- Улучшен движок базы данных MySQL для обеспечения совместимости с типом данных binary(0). #37232 (zzsmdfj).
- Улучшен JSON-отчет утилиты
clickhouse-benchmark. #36473 (Tian Xinhui). - Сервер мог не запускаться, если не удавалось разрешить имя хоста внешнего словаря ClickHouse. Это исправлено. Исправляет #36451. #36463 (tavplubix).
Улучшения сборки/тестирования/упаковки
- Теперь
clickhouse-keeperдля архитектурыx86_64статически слинкован с musl и больше не зависит от системных библиотек. #31833 (Alexey Milovidov). - Сборки ClickHouse для архитектуры
PowerPC64LEтеперь доступны в универсальном скрипте установкиcurl https://clickhouse.com/ | shи по прямой ссылкеhttps://builds.clickhouse.com/master/powerpc64le/clickhouse. #37095 (Alexey Milovidov). - Генерация кода для PowerPC ограничена архитектурой Power8 для улучшения совместимости. Это закрывает #36025. #36529 (Alexey Milovidov).
- Упрощён тест производительности, чтобы им можно было пользоваться. #36769 (Alexey Milovidov).
- Сравнение производительности теперь завершается с ошибкой при наличии ошибок в отчёте. #34797 (Mikhail f. Shiryaev).
- Добавлена поддержка ZSTD для Arrow. Это исправляет #35283. #35486 (Sean Lafferty).
Исправление ошибок
- Извлекает идентификатор версии (Version ID) из URI, если он присутствует, и добавляет запрос к AWS HTTP URI. Закрывает #31221. - [x] Извлечь
Version IDиз URI, если он присутствует, и пересобрать URI без него. - [x] Настроить объектAWS HTTP URIс запросом. - [x] Модульные тесты:gtest_s3_uri- [x] Удалить коммит инструментирования. #34571 (Saad Ur Rahman). - Исправлен псевдоним attribute.values в system.opentelemetry_span_log: теперь он указывает на values вместо keys. #37275 (Aleksandr Razumov).
- Исправлена ошибка преобразования Nullable(String) в Nullable(Bool/IPv4/IPv6). Закрывает #37221. #37270 (Kruglov Pavel).
- Экспериментальная функция: Исправлено выполнение мутаций в таблицах, в которых есть столбцы типа
Object. Использование подстолбцов типаObjectв выраженииWHEREзапросовUPDATEилиDELETEпока не разрешено, а также операции над отдельными подстолбцами (DROP,MODIFY). Исправлена ошибка #37205. #37266 (Anton Popov). - Kafka не требует
group.idна стороне продюсера. В журнале консоли вы можете найти предупреждение, описывающее это:2022.05.15 17:59:13.270227 [ 137 ] {} <Warning> StorageKafka (topic-name): [rdk:CONFWARN] [thrd:app]: Configuration property group.id is a consumer property and will be ignored by this producer instance. #37228 (Mark Andreev). - Экспериментальная функция (WindowView): обновлять
max_fired_watermarkпосле фактического срабатывания блоков, чтобы учитывать возможное удаление данных, для которых срабатывание ещё не произошло. #37225 (vxider). - Исправлена ошибка "Cannot create column of type Set" для распределённых запросов с LIMIT BY. #37193 (Azat Khuzhin).
- Экспериментальная возможность: теперь запрос
WATCH EVENTSWindowView не будет завершаться из-за непустого Chunk, создаваемого вWindowViewSource.h:58. #37182 (vxider). - Включена настройка
enable_global_with_statementдля подзапросов, закрыт #37141. #37166 (Vladimir C). - Исправлено неявное приведение типов для optimize_skip_unused_shards_rewrite_in. #37153 (Azat Khuzhin).
- Функция ILIKE по столбцам FixedString могла возвращать неверные результаты (т. е. находить меньше совпадений, чем должна). #37117 (Robert Schulze).
- Исправлен
GROUP BYдля типаAggregateFunction(т.е. когда вы выполняетеGROUP BYпо столбцу типаAggregateFunction). #37093 (Azat Khuzhin). - Экспериментальная возможность: исправлена
optimize_aggregation_in_orderдля префиксногоGROUP BYи агрегатных функций семейства*Array. #37050 (Azat Khuzhin). - Исправлена деградация производительности некоторых запросов INSERT SELECT с неявной агрегацией. Исправляет #36792. #37047 (tavplubix).
- Экспериментальная функция: исправлена работа упорядоченного
GROUP BY(optimize_aggregation_in_order=1) с агрегатными функциями*Array(groupArrayArray/...). #37046 (Azat Khuzhin). - Исправлена ошибка некорректной генерации выходных данных при преобразовании LowCardinality в ArrowDictionary, когда тип индексов отличается от UInt8. Закрывает #36832. #37043 (Kruglov Pavel).
- Исправлена проблема со значениями inf в
quantileTDigest. Исправляет #32107. #37021 (Vladimir Chebotarev). - Исправлена отправка данных внешних таблиц в HedgedConnections при значении max_parallel_replicas, отличном от 1. #36981 (Kruglov Pavel).
- Устранена логическая ошибка при выполнении запроса
TRUNCATEв базе данныхReplicated. Решает проблему #33747. #36976 (tavplubix). - Экспериментальная функция: исправлена проблема зависания при удалении исходной таблицы в WindowView. Closes #35678. #36967 (vxider).
- Экспериментальная возможность (кэш RocksDB): исправлена проблема #36671. #36929 (李扬).
- Экспериментальная функциональность: исправлены ошибки при использовании нескольких столбцов в WindowView за счёт добавления действий преобразования, позволяющих вызывать
writeIntoWindowViewс немного иной схемой. #36928 (vxider). - Исправлена ошибка в clickhouse-keeper, которая могла приводить к повреждению сжатых файлов журнала при малой нагрузке и перезапусках. #36910 (alesapin).
- Исправлен некорректный результат запроса при выполнении константной агрегации. Это исправляет #36728. #36888 (Amos Bird).
- Экспериментальная возможность: исправлен счетчик
current_sizeв кэше. #36887 (Kseniia Sumarokova). - Экспериментальная возможность: исправление ошибки в window view с hop window #34044. #36861 (vxider).
- Экспериментальная функция: исправлено некорректное приведение типов в кэшированном буфере из удалённой файловой системы. #36809 (Kseniia Sumarokova).
- Исправлена ошибка при создании таблиц с
flatten_nested = 0. Ранее неразвёрнутые столбцы типаNestedмогли разворачиваться после перезапуска сервера. #36803 (Anton Popov). - Исправлены некоторые проблемы с асинхронным чтением из удалённой файловой системы, которые возникали при чтении столбцов LowCardinality. #36763 (Kseniia Sumarokova).
- Экспериментальная возможность: Исправлена проблема вставки в столбцы типа
Objectиз нескольких файлов, например, через табличную функциюfileс шаблонами путей (globs). #36762 (Anton Popov). - Исправлены тайм-ауты в hedged-запросах. Зависание соединения сразу после отправки удалённого запроса могло приводить к бесконечному ожиданию ответа. #36749 (Kruglov Pavel).
- Экспериментальная возможность: исправлена ошибка
groupBitmapAndState/groupBitmapOrState/groupBitmapXorStateв распределённых таблицах. #36739 (Zhang Yifan). - Экспериментальная функция: во время теста в PR я обнаружил, что один класс кэша был инициализирован дважды, что привело к возникновению исключения. Хотя причина этой проблемы пока неясна, в ClickHouse, по-видимому, есть логика повторной загрузки диска, поэтому необходимо добавить специальную проверку для этой ситуации. #36737 (Han Shukai).
- Исправлены вертикальные слияния в широких частях. Ранее во время слияния могло возникать исключение с сообщением
There is no column. #36707 (Anton Popov). - Исправлена перезагрузка сервера при изменении порта (не дожидаться завершения текущих соединений из контекста запроса). #36700 (Azat Khuzhin).
- Экспериментальная возможность: в предыдущем PR я обнаружил, что тестирование (stateless tests, flaky check (address, actions)) завершается по тайм-ауту. Более того, локальный запуск тестов также может приводить к нестабильным взаимным блокировкам системы. Эта проблема всё ещё существует при использовании последней версии исходного кода ветки master. #36697 (Han Shukai).
- Экспериментальная функция: исправлена ошибка перезапуска сервера при изменении конфигурации кэша. #36685 (Kseniia Sumarokova).
- Исправлена возможная ошибка heap-use-after-free при выводе схемы. Закрывает #36661. #36679 (Kruglov Pavel).
- Исправлен разбор настроек в запросе
CREATE, если движок не указан. Исправление для https://github.com/ClickHouse/ClickHouse/pull/34187#issuecomment-1103812419. #36642 (tavplubix). - Экспериментальная функция: исправлено слияние широких частей с типом
Object. #36637 (Anton Popov). - Исправлено падение при форматировании, когда выражение по умолчанию следует за EPHEMERAL, а не за литералом. Закрывает #36618. #36633 (flynn).
- Исправлено исключение
Missing column, которое могло возникнуть при использованииINTERPOLATEв таблице сENGINE = MergeTree. #36549 (Yakov Olkhovskiy). - Исправлена потенциальная ошибка с литералами в условии
WHEREдля запросов с JOIN. Закрывает #36279. #36542 (Vladimir C). - Исправлено обновление смещения в ReadBufferFromEncryptedFile, которое могло приводить к неопределенному поведению. #36493 (Kseniia Sumarokova).
- Исправлены проверки корректности имён хостов в конфигурации кластера Keeper. Добавлен параметр конфигурации
keeper_server.host_checks_enabledдля включения или отключения этих проверок. #36492 (Antonio Andelic). - Исправлено использование исполняемых пользовательских функций в GROUP BY. Ранее исполняемые пользовательские функции не могли использоваться как выражения в GROUP BY. Исправление закрывает задачу #36448. #36486 (Maksim Kita).
- Исправлено возможное возникновение исключения при получении клиентом неизвестного пакета от сервера. #36481 (Kseniia Sumarokova).
- Экспериментальная функциональность (пожалуйста, никогда не используйте
system.session_log, он будет удалён): добавлены отсутствующие значения перечисления enum в таблицу system.session_log. Закрывает #36474. #36480 (Memo). - Исправлена ошибка в определении схемы s3Cluster, из-за которой при выполнении запроса SELECT к s3Cluster считывались не все данные. Ошибка появилась в https://github.com/ClickHouse/ClickHouse/pull/35544. #36434 (Kruglov Pavel).
- Исправлено разыменование nullptr в сопоставителях JOIN и COLUMNS. Исправляет #36416. Это для https://github.com/ClickHouse/ClickHouse/pull/36417. #36430 (Amos Bird).
- Исправлена перезагрузка словаря для
ClickHouseDictionarySource, если он содержит скалярные подзапросы. #36390 (lthaooo). - Исправлена ассерция в JOIN, закрыт #36199. #36201 (Vladimir C).
- Запросы с псевдонимами внутри специальных операторов возвращали ошибку разбора (не работали в 22.1). Пример:
SELECT substring('test' AS t, 1, 1). #36167 (Maksim Kita). - Экспериментальная функция: Исправлена проблема с вставкой сложных JSON-документов с вложенными массивами в столбцы типа
Object. #36077 (Anton Popov). - Исправлена операция
ALTER DROP COLUMNдля вложенного столбца с компактными частями (т.е.ALTER TABLE x DROP COLUMN n, когда существует столбецn.d). #35797 (Azat Khuzhin). - Исправлена ошибка вычисления длины диапазона в функции
substring, когдаoffsetиlength— отрицательные константы, аsне является константой. #33861 (RogerYK).
Релиз ClickHouse 22.4, 2022-04-19
Изменение, нарушающее обратную совместимость
- Запрещено указывать SETTINGS после FORMAT для запросов INSERT (существует параметр совместимости
allow_settings_after_format_in_insert, позволяющий принимать такие запросы, но по умолчанию он ВЫКЛЮЧЕН). #35883 (Azat Khuzhin). - Функция
yandexConsistentHash(алгоритм консистентного хеширования Константина «kostik» Oblakov) переименована вkostikConsistentHash. Старое имя оставлено в качестве псевдонима (alias) для совместимости. Хотя это изменение обратно совместимо, в последующих релизах псевдоним может быть удалён, поэтому рекомендуется обновить использование этой функции в ваших приложениях. #35553 (Alexey Milovidov).
Новая функциональность
- Добавлено расширение INTERPOLATE к синтаксису ORDER BY ... WITH FILL. Закрывает задачу #34903. #35349 (Yakov Olkhovskiy).
- Профилирование на уровне процессоров (при включённой настройке
log_processors_profilesClickHouse будет записывать время, которое процессор потратил на выполнение/ожидание данных, в таблицуsystem.processors_profile_log). #34355 (Azat Khuzhin). - Добавлены функции makeDate(year, month, day), makeDate32(year, month, day). #35628 (Alexander Gololobov). Реализованы функции makeDateTime() и makeDateTime64(). #35934 (Alexander Gololobov).
- Добавлена поддержка нового типа квоты
WRITTEN BYTESдля ограничения объёма записанных байт во время INSERT-запросов. #35736 (Anton Popov). - Добавлена функция
flattenTuple. Она принимает вложенный именованныйTupleв качестве аргумента и возвращает «плоский»Tuple, элементы которого представляют собой пути из исходногоTuple. Например:Tuple(a Int, Tuple(b Int, c Int)) -> Tuple(a Int, b Int, c Int).flattenTupleможно использовать для выбора всех путей из типаObjectкак отдельных столбцов. #35690 (Anton Popov). - Добавлены функции
arrayFirstOrNull,arrayLastOrNull. Закрывают задачу #35238. #35414 (Maksim Kita). - Добавлены функции
minSampleSizeContinousиminSampleSizeConversion. Автор achimbab. #35360 (Maksim Kita). - Новые функции minSampleSizeContinous и minSampleSizeConversion. #34354 (achimbab).
- Добавлен формат
ProtobufList(все записи представлены повторяющимися сообщениями в выходном Protobuf-сообщении). Закрывает #16436. #35152 (Nikolai Kochetov). - Добавлены функции
h3PointDistM,h3PointDistKm,h3PointDistRads,h3GetRes0Indexes,h3GetPentagonIndexes. #34568 (Bharat Nallan). - Добавлена функция
toLastDayOfMonth, которая округляет дату или дату-время до последнего дня месяца. #33501. #34394 (Habibullah Oladepo). - Добавлена настройка балансировки нагрузки для клиента [Zoo]Keeper. Закрывает #29617. #30325 (小路).
- Добавлен новый тип политик строк с названием
simple. До этого PR существовало два типа политик строк:permissiveиrestrictive. Политика строк типаsimpleдобавляет для таблицы новый фильтр без каких-либо побочных эффектов, в отличие от политикpermissiveиrestrictive. #35345 (Vitaly Baranov). - Добавлена возможность указывать секрет кластера в реплицируемой базе данных. #35333 (Nikita Mikhaylov).
- Добавлены проверки корректности при запуске сервера (доступная память и дисковое пространство, максимальное количество потоков и т. д.). #34566 (Sergei Trifonov).
- Улучшение INTERVAL — его теперь можно использовать с
[MILLI|MICRO|NANO]SECOND. Добавлены функцииtoStartOf[Milli|Micro|Nano]second(). Добавлены функции[add|subtract][Milli|Micro|Nano]seconds(). #34353 (Andrey Zvonov).
Экспериментальная функция
- Добавлена поддержка транзакций для простых таблиц
MergeTree. Эта возможность находится на ранней экспериментальной стадии и не рекомендуется для использования в продакшене. Часть #22086. #24258 (tavplubix). - Добавлена поддержка автоматического определения схемы для типа
Objectв форматеJSONEachRow. Позволяет преобразовывать столбцы типаMapв столбцы типаObject. #35629 (Anton Popov). - Разрешена запись в кэш удалённой файловой системы при всех операциях записи. Добавлена таблица
system.remote_filesystem_cache. Добавлен запросdrop remote filesystem cache. Добавлена возможность просмотра метаданных S3 с помощью таблицыsystem.remote_data_paths. Закрывает #34021. Добавлена опция кэширования для слияний путём добавления режимаread_from_filesystem_cache_if_exists_otherwise_bypass_cache(по умолчанию включён для слияний и может также быть включён настройкой запроса с тем же именем). Переименованы настройки, связанные с кэшем (remote_fs_enable_cache -> enable_filesystem_cacheи т.д.). #35475 (Kseniia Sumarokova). - Добавлена опция хранения метаданных частей в RocksDB. Ускорена загрузка частей MergeTree для сокращения времени запуска clickhouse-server. Благодаря этому улучшению clickhouse-server смог сократить время запуска с 75 минут до 20 секунд при 700k частей MergeTree. #32928 (李扬).
Улучшение производительности
- Новая оптимизация плана запроса. По возможности функции вычисляются после
ORDER BY. Например, для запросаSELECT sipHash64(number) FROM numbers(1e8) ORDER BY number LIMIT 5функцияsipHash64будет вычисляться послеORDER BYиLIMIT, что даёт ускорение примерно в 20 раз. #35623 (Nikita Taranov). - Размеры хеш-таблиц, используемых во время агрегации, теперь собираются и используются в последующих запросах, чтобы избежать их переразмеривания. #33439 (Nikita Taranov).
- Улучшение для функции
hasAllс использованием SIMD‑инструкций (SSE и AVX2). #27653 (youennL-cs). #35723 (Maksim Kita). - Множество изменений для улучшения производительности ASOF JOIN (ускорение в 1,2–1,6 раза). Также добавлена поддержка больших целых чисел. #34733 (Raúl Marín).
- Улучшена производительность ASOF JOIN, если ключ имеет нативный целочисленный тип. #35525 (Maksim Kita).
- Параллелизация многокомпонентной (multipart) загрузки в хранилище S3. #35343 (Sergei Trifonov).
- Движок хранилища URL теперь загружает несколько фрагментов файла параллельно, если конечная точка поддерживает HTTP Range. Добавлены две дополнительные настройки,
max_download_threadsиmax_download_buffer_size, которые контролируют максимальное количество потоков, которое один запрос может использовать для загрузки файла, и максимальное количество байт, обрабатываемых каждым потоком. #35150 (Antonio Andelic). - Используются несколько потоков для загрузки объектов из S3. Загрузка управляется настройками
max_download_threadsиmax_download_buffer_size. #35571 (Antonio Andelic). - Сужена область действия мьютекса при взаимодействии с HDFS. Связано с #35292. #35646 (shuchaome).
- Мутации для TTL на уровне таблицы требуются только при изменении TTL. #35953 (Azat Khuzhin).
Улучшение
- Много улучшений для определения схемы. Используются дополнительные доработки и эвристики для определения чисел, строк, массивов, кортежей и отображений (Map) в форматах данных CSV, TSV и TSVRaw. Добавлена настройка
input_format_csv_use_best_effort_in_schema_inferenceдля формата CSV, которая включает/отключает использование этих эвристик; если она отключена, всё обрабатывается как строка. Добавлена аналогичная настройкаinput_format_tsv_use_best_effort_in_schema_inferenceдля форматов TSV/TSVRaw. Эти настройки включены по умолчанию. - Добавлена поддержка Map при определении схемы в формате Values. - Исправлена возможная ошибка сегфолта при определении схемы в формате Values. - Разрешено пропускать столбцы с неподдерживаемыми типами в форматах Arrow/ORC/Parquet. Для этого добавлены соответствующие настройки:input_format_{parquet|orc|arrow}_skip_columns_with_unsupported_types_in_schema_inference. Эти настройки отключены по умолчанию. - Разрешено преобразовывать столбец с типом Null в Nullable-столбец со всеми значениями NULL в форматах Arrow/Parquet. - Разрешено указывать имена столбцов при определении схемы с помощью настройкиcolumn_names_for_schema_inferenceдля форматов, которые не содержат имена столбцов (таких как CSV, TSV, JSONCompactEachRow и т. д.). - Исправлено определение схемы в форматах ORC/Arrow/Parquet в части работы с Nullable-столбцами. Ранее все выводимые типы были не Nullable, и это блокировало чтение Nullable-столбцов из данных; теперь это исправлено, и все выводимые типы всегда Nullable (поскольку по схеме мы не можем понять, является столбец Nullable или нет). - Исправлено определение схемы в формате Template с правилами экранирования CSV. #35582 (Kruglov Pavel). - Добавлен параллельный разбор и определение схемы для формата
JSONAsObject. #35592 (Anton Popov). - Добавлена поддержка автоматического определения схемы в табличной функции
s3Cluster. Сигнатурыs3иs3Clusterприведены к одному виду. #35544 (Nikita Mikhaylov). - Добавлена поддержка автоматического определения схемы для
hdfsCluster. #35602 (Nikita Mikhaylov). - Добавлена новая настройка
input_format_json_read_bools_as_numbers, которая позволяет интерпретировать логические значения (bool) как числа во входных JSON-форматах. По умолчанию она включена. Предложена @alexey-milovidov. #35735 (Kruglov Pavel). - Улучшен порядок столбцов при автоматическом определении схемы для форматов TSKV и JSONEachRow, что закрывает #35640. Автоматическое определение схемы больше не прерывается при чтении пустой строки для форматов TSKV и JSONEachRow. #35724 (Kruglov Pavel).
- Добавлены настройки
input_format_orc_case_insensitive_column_matching,input_format_arrow_case_insensitive_column_matchingиinput_format_parquet_case_insensitive_column_matching, которые позволяют ClickHouse использовать регистронезависимое сопоставление столбцов при чтении данных из файлов ORC, Arrow или Parquet. #35459 (Antonio Andelic). - Добавлен столбец
is_secureвsystem.query_log, который указывает, использует ли клиент защищённое соединение по TCP или HTTP. #35705 (Antonio Andelic). - Теперь
kafka_num_consumersможет превышать количество физических ядер в случае малоресурсной машины (менее 16 ядер). #35926 (alesapin). - Добавлены базовые метрики для мониторинга таблиц с движком ENGINE=Kafka. #35916 (filimonov).
- Теперь нельзя выполнять
ALTER TABLE ... RESET SETTINGдля несуществующих настроек в семействе движков MergeTree. Исправлена ошибка #35816. #35884 (alesapin). - Теперь некоторые запросы
ALTER MODIFY COLUMNдля типовArrayиNullableмогут выполняться на уровне метаданных без мутаций. Например, изменениеArray(Enum8('Option1'=1))наArray(Enum8('Option1'=1, 'Option2'=2)). #35882 (alesapin). - Добавлена анимация значка песочных часов, чтобы пользователь видел, что запрос выполняется. #35860 (peledni).
- добавлена поддержка
ALTER TABLE t DETACH PARTITION (ALL). #35794 (awakeljw). - Улучшен анализ проекций для оптимизации тривиальных запросов, таких как
count(). #35788 (Amos Bird). - Добавлена поддержка вывода схемы для
INSERT SELECTс использованием табличной функцииinput. Теперь схема берётся из целевой таблицы вставки вместо вывода её из данных в случаеINSERT SELECTиз табличных функций, поддерживающих вывод схемы. Закрывает #35639. #35760 (Kruglov Pavel). - Учитывается параметр
remote_url_allow_hostsдля таблиц Hive. #35743 (李扬). - Реализована поддержка
send_logs_levelв clickhouse-local. Закрывает #35653. #35716 (Kseniia Sumarokova). - Закрывает #35641: разрешает использование столбцов
EPHEMERALбез явного выражения по умолчанию. #35706 (Yakov Olkhovskiy). - Добавлен счётчик события профилирования
AsyncInsertBytes, показывающий объём данных асинхронных INSERT-запросов. #35644 (Alexey Milovidov). - Улучшено описание конвейера выполнения JOIN. #35612 (何李夫).
- Определять абсолютный путь к файлу конфигурации HDFS. #35572 (李扬).
- Улучшена производительность и совместимость вставки в clickhouse-client. Это решает проблему #35501. #35541 (Amos Bird).
- В распределённых запросах могло происходить переполнение стека, если одна из настроек
async_socket_for_remoteилиuse_hedged_requestsбыла включена при разборе очень глубоко вложенного типа данных (как минимум в отладочной сборке). Закрывает #35509. #35524 (Kruglov Pavel). - Добавлены размеры подстолбцов в таблицу
system.parts_columns. #35488 (Anton Popov). - Добавлена явная информация о таблице в узел сканирования плана запроса и конвейера. #35460 (何李夫).
- Разрешить серверу привязываться к портам с низкими номерами (например, 443). Скрипт установки ClickHouse добавит capability
cap_net_bind_serviceисполняемому файлу. #35451 (Alexey Milovidov). - Исправлена проблема с INSERT INTO table FROM INFILE: индикатор прогресса не отображался. #35429 (xiedeyantu).
- Добавлены аргументы
--user,--password,--host,--portдля утилитыclickhouse-diagnostics. #35422 (李扬). - Добавлена поддержка UUID в движках Postgres. Закрывает #35384. #35403 (Kseniia Sumarokova).
- Для табличных функций
s3cluster,HDFSClusterиhiveневозможно корректно определитьAccessTypeс помощьюStorageFactory::instance().getSourceAccessType(getStorageTypeName()). Этот PR это исправляет. #35365 (李扬). - Удалена опция
--testmodeдля clickhouse-client, тестовый режим теперь включён всегда. #35354 (Kseniia Sumarokova). - Запретить операцию
wchc(четырёхбуквенная команда) для clickhouse-keeper. #35320 (zhangyuli1). - Добавлена функция
getTypeSerializationStreams. Для указанного типа (который определяется по столбцу) она возвращает массив со всеми путями подпотоков сериализации. Эта функция в основном полезна разработчикам. #35290 (李扬). - Если
portне указан в конфигурации кластера, будет использован стандартный порт сервера. Это исправляет проблему #34769. #34772 (Alexey Milovidov). - Использовать индекс
minmaxдля файлов ORC/Parquet в движке Hive. Связанный PR: https://github.com/ClickHouse/arrow/pull/10. #34631 (李扬). - В системных таблицах логов теперь можно указывать COMMENT в определении ENGINE. Закрыта задача #33768. #34536 (Maksim Kita).
- Корректная обработка параметра
max_rows_to_readпри чтении в порядке ключа сортировки и заданномLIMIT. Ранее исключениеLimit for rows or bytes to read exceededмогло возникать, даже если запрос фактически требовал прочитать меньшее количество строк. #33230 (Anton Popov). - Учитывать только quota и period cgroups, игнорируя shares (они на самом деле не ограничивают количество используемых ядер). #35815 (filimonov).
Улучшения сборки/тестирования/упаковки
- Добавлена очередная партия настроек рандомизации в функциональные тесты. #35047 (Kruglov Pavel).
- Добавлена проверка обратной совместимости в стресс‑тесте. Закрывает #25088. #27928 (Kruglov Pavel).
- Миграция сборки пакетов на
nfpm— скриптreleaseобъявлен устаревшим в пользуpackages/build— Сборка всего в образе clickhouse/binary-builder (очистка: clickhouse/deb-builder) — Добавлено удаление символов в CMake (todo: использовать bin_dir/clickhouse/$binary.debug) — Исправлена проблема с символами DWARF — Добавлены пакеты Alpine APK —alienпереименован вadditional_pkgs. #33664 (Mikhail f. Shiryaev). - Добавлено ночное сканирование и загрузка результатов в Coverity. #34895 (Boris Kuschel).
- Выделен отдельный небольшой пакет для
clickhouse-keeper. #35308 (Mikhail f. Shiryaev). - Запуск с Podman завершался сбоем: он жаловался на повторное указание одного и того же тома. #35978 (Roman Nikonov).
- Незначительно улучшена конфигурация сборки contrib/krb5. #35832 (Anton Kozlov).
- Добавлена метка для идентификации задачи сборки для каждого образа. #35583 (Mikhail f. Shiryaev).
- Применён форматтер
blackк коду на Python и добавлена покоммитная проверка. #35466 (Mikhail f. Shiryaev). - Пересобран Alpine‑образ с использованием «чистого» Dockerfile. Создан скрипт в tests/ci для сборки как Ubuntu‑, так и Alpine‑образов. Добавлен образ clickhouse-keeper (cc @nikitamikhaylov). Добавлена проверка сборки в PullRequestCI. Добавлена задача в ReleaseCI. Добавлена задача в MasterCI для сборки и публикации образов
clickhouse/clickhouse-server:headиclickhouse/clickhouse-keeper:headдля каждого слитого PR. #35211 (Mikhail f. Shiryaev). - Исправлен отчёт стресс‑теста в CI, теперь мы загружаем runlog с информацией о запущенных стресс‑тестах только один раз. #35093 (Mikhail f. Shiryaev).
- Переход на libcxx / libcxxabi из LLVM 14. #34906 (Raúl Marín).
- Обновлён unixODBC для устранения CVE-2018-7485. Примечание: эта уязвимость неактуальна для ClickHouse, так как он реализует собственный слой изоляции для ODBC. #35943 (Mikhail f. Shiryaev).
Исправление ошибок
- Добавлены настройки
input_format_ipv4_default_on_conversion_error,input_format_ipv6_default_on_conversion_error, позволяющие при ошибке преобразования вставлять некорректные значения IP-адресов в таблицы как значения по умолчанию. Закрыта задача #35726. #35733 (Maksim Kita). - Не удалять столбцы из блока при чтении данных из Hive, если соответствующий столбец отсутствует. #35393 (lgbo).
- Добавлена проверка типов при создании материализованного представления. Закрыта: #23684. #24896 (hexiaoting).
- Исправлено форматирование запросов INSERT INFILE (добавлены отсутствующие кавычки). #35886 (Azat Khuzhin).
- Отключён
session_log, так как при фаззинг-тестировании была обнаружена проблема, связанная с безопасностью памяти. См. #35714. #35873 (Alexey Milovidov). - Исключена повторная обработка TTL для отдельных столбцов. #35820 (Azat Khuzhin).
- Исправлены вставки в столбцы типа
Objectв случае, когда в запросе INSERT присутствуют данные для нескольких партиций. #35806 (Anton Popov). - Исправлена ошибка в индексах отсутствующих в данных столбцов в форматах -WithNames, приводившая к ошибке
INCORRECT_NUMBER_OF_COLUMNS, когда число столбцов превышало 256. Закрывает #35793. #35803 (Kruglov Pavel). - Исправлена проблема #35751. #35799 (Nikolay Degterinsky).
- Исправлено чтение из HDFS в формате Snappy. #35771 (shuchaome).
- Исправлена ошибка при преобразовании пользовательских типов в строку, которая могла приводить к сегфолту или неожиданным сообщениям об ошибках. Закрывает #35752. #35755 (Kruglov Pavel).
- Исправлена реализация операторов any/all в подзапросах. Закрывает #35489. #35727 (Kseniia Sumarokova).
- Исправлена ошибка удаления непустой базы данных в clickhouse-local. Закрывает #35692. #35711 (Kseniia Sumarokova).
- Исправлена ошибка при создании материализованного представления с подзапросом после перезапуска сервера. После перезапуска сервера такое материализованное представление не обновлялось при вставках в базовую таблицу. Закрывает #35511. #35691 (Kruglov Pavel).
- Исправлено возможное возникновение исключения
Can't adjust last granuleпри чтении подстолбцов экспериментального типаObject. #35687 (Anton Popov). - Включена сборка с JIT-компиляцией по умолчанию. #35683 (Maksim Kita).
- Исправлена потенциальная потеря подстолбцов в экспериментальном типе
Object. #35682 (Anton Popov). - Исправлена проверка допустимости значений NULL у ключа ASOF JOIN, закрыт #35565. #35674 (Vladimir C).
- Исправлена логика проверки частей, содержащих проекции. Ошибка возникала, когда проекция и основная часть имели разные типы. Это похоже на https://github.com/ClickHouse/ClickHouse/pull/33774. Проблема устранена @caoyang10. #35667 (Amos Bird).
- Исправлена ошибка, вызывавшая падение сервера при передаче большого количества аргументов в функцию
format. См. тестовый файл, чтобы узнать, как воспроизвести падение. #35651 (Amos Bird). - Исправлена работа квот с асинхронными вставками. #35645 (Anton Popov).
- Исправлена обработка позиционных аргументов с алиасами. Закрывает #35600. #35620 (Kseniia Sumarokova).
- Проверка
remote_url_allow_hostsперед определением схемы в движке URL. Закрывает #35064. #35619 (Kruglov Pavel). - Исправлена работа
HashJoinпри использовании столбцов типаLowCardinality. Тем самым закрывается #35548. #35616 (Antonio Andelic). - Исправлена возможная ошибка сегментации в MaterializedPostgreSQL, возникавшая, если во время синхронизации данных, собранных в памяти, с базовыми таблицами происходило исключение. Закрывает #35611. #35614 (Kseniia Sumarokova).
- Параметр
database_atomic_wait_for_drop_and_detach_synchronouslyработал некорректно для запросаATTACH TABLE, если ранее отсоединённая таблица всё ещё использовалась. Это исправлено. #35594 (tavplubix). - Исправлены HTTP-заголовки при использовании именованных коллекций, добавлен параметр
compression_method. Закрыты #35273 и #35269. #35593 (Kseniia Sumarokova). - Исправлена работа движка S3 при получении виртуальных столбцов. Закрывает #35411. #35586 (Kseniia Sumarokova).
- Исправлено выведение типа возвращаемого значения для
caseWithExpression. Теперь корректно учитывается тип ветки ELSE. #35576 (Antonio Andelic). - Исправлена ошибка разбора IPv6-адресов длиной более 39 символов. Закрывает #34022. #35539 (Maksim Kita).
- Исправлено приведение к адресам IPv4 и IPv6 в операторе IN. Исправляет #35528. #35534 (Maksim Kita).
- Исправлен сбой при вычислении функций с укороченной оценкой, когда один из аргументов является константой типа Nullable. Закрывает #35497. Закрывает #35496. #35502 (Maksim Kita).
- Исправлена ошибка, приводившая к сбою функции
throwIfс константными аргументами. #35500 (Maksim Kita). - Исправлена ошибка в Keeper, которая могла приводить к нестабильности клиентских подключений. Ошибка была внесена в #35031. #35498 (alesapin).
- Исправлена ошибка в функции
if, когда тип результирующего столбца отличался от типа результирующих данных, что приводило к логическим ошибкам видаLogical error: 'Bad cast from type DB::ColumnVector<int> to DB::ColumnVector<long>'.. Закрывает #35367. #35476 (Kruglov Pavel). - Исправлено избыточное логирование при использовании S3 в качестве бэкенда для MergeTree или в качестве отдельного движка таблицы/табличной функции. Исправляет #30559. #35434 (alesapin).
- Теперь при слияниях, выполняемых с использованием репликации без копирования (экспериментальная функция), логи не будут засоряться сообщением
Found parts with the same min block and with the same max block as the missing part _ on replica _. Hoping that it will eventually appear as a result of a merge.. #35430 (alesapin). - Пропускать возможное исключение при появлении пустых чанков в GroupingAggregatedTransform. #35417 (Nikita Taranov).
- Исправлена обработка столбцов, которые не используются в запросе, в форматах Arrow/Parquet/ORC. Это предотвращает возможные ошибки вида
Unsupported <format> type <type> of an input column <column_name>, когда файл содержит столбец с неподдерживаемым типом, а данный столбец не используется в запросе. #35406 (Kruglov Pavel). - Исправлена работа локального кэша для удалённой файловой системы (экспериментальная функция) при высоком уровне конкурентного доступа в пограничных случаях. #35381 (Kseniia Sumarokova). Исправлено возможное взаимоблокирование в кэше. #35378 (Kseniia Sumarokova).
- Исправлено отсечение партиций в случае сравнения с константой в
WHERE. Если столбец и константа имели разные типы, могло произойти переполнение. Запрос мог возвращать ошибочный пустой результат. Это исправляет #35304. #35334 (Amos Bird). - Исправлено определение схемы для формата TSKV при использовании малого значения параметра max_read_buffer_size. #35332 (Kruglov Pavel).
- Исправлены мутации в таблицах с включёнными разрежёнными столбцами. #35284 (Anton Popov).
- Не откладывать запись финальной части по умолчанию (исправляет возможную ошибку
Memory limit exceededво время выполненияINSERTза счёт добавленияmax_insert_delayed_streams_for_parallel_writeсо значением по умолчанию 1000 для записей в S3 и отключённым, как и раньше, в остальных случаях). #34780 (Azat Khuzhin).
Релиз ClickHouse v22.3-lts, 2022-03-17
Обратно несовместимое изменение
- Функция
arrayCompactтеперь ведёт себя как другие функции высшего порядка: выполняет «уплотнение» не результатов лямбда-функции, а исходного массива. Если вы используете нетривиальные лямбда-функции вarrayCompact, вы можете восстановить старое поведение, обернув аргументыarrayCompactвarrayMap. Закрывает #34010 #18535 #14778. #34795 (Alexandre Snarskii). - Изменено специфичное для реализации поведение при переполнении функции
toDatetime. Теперь результат будет ограничиваться ближайшим минимальным/максимальным поддерживаемым значением DateTime вместо перехода по кругу при переполнении. Это изменение помечено как «обратно несовместимое», потому что кто-то мог неявно полагаться на старое поведение. #32898 (HaiBo Li). - Функции
cast(value, 'IPv4'),cast(value, 'IPv6')теперь ведут себя так же, как функцииtoIPv4,toIPv6. Изменено поведение при передаче некорректного IP-адреса в функцииtoIPv4,toIPv6: теперь, если в эти функции передан некорректный IP-адрес, будет выброшено исключение, тогда как ранее функция возвращала значение по умолчанию. Добавлены функцииIPv4StringToNumOrDefault,IPv4StringToNumOrNull,IPv6StringToNumOrDefault,IPv6StringOrNull,toIPv4OrDefault,toIPv4OrNull,toIPv6OrDefault,toIPv6OrNull. ФункцииIPv4StringToNumOrDefault,toIPv4OrDefault,toIPv6OrDefaultследует использовать, если предыдущая логика опиралась на то, чтоIPv4StringToNum,toIPv4,toIPv6возвращают значение по умолчанию для некорректного адреса. Добавлена настройкаcast_ipv4_ipv6_default_on_conversion_error; если эта настройка включена, функции преобразования IP-адресов будут вести себя как раньше. Закрывает #22825. Закрывает #5799. Закрывает #35156. #35240 (Maksim Kita).
Новая функциональность
- Поддержка локального кэширования данных для удалённых файловых систем. Может быть включена для дисков
s3. Закрывает #28961. #33717 (Kseniia Sumarokova). За это время мы включили прогон тестового набора на файловой системе s3, и о каких‑либо известных проблемах больше не сообщается, поэтому её можно считать готовой к использованию в продакшене. - Добавлена новая табличная функция
hive. Её можно использовать следующим образом:hive('<hive metastore url>', '<hive database>', '<hive table name>', '<columns definition>', '<partition columns>'), например:SELECT * FROM hive('thrift://hivetest:9083', 'test', 'demo', 'id Nullable(String), score Nullable(Int32), day Nullable(String)', 'day'). #34946 (lgbo). - Поддержка аутентификации пользователей, подключающихся по SSL, по их сертификату X.509. #31484 (eungenue).
- Добавлена поддержка автоматического вывода схемы при вставке в табличные функции
file/hdfs/s3/url. #34732 (Kruglov Pavel). - Теперь таблицу
system.zookeeperможно читать без ограничений по пути или с использованием выраженияlike. Такие чтения могут создавать довольно высокую нагрузку на zookeeper, поэтому, чтобы включить эту возможность, необходимо установить настройкуallow_unrestricted_reads_from_keeper. #34609 (Sergei Trifonov). - Добавлено отображение метрик CPU и памяти в clickhouse-local. Закрывает #34545. #34605 (李扬).
- Реализованы функции
startsWithиendsWithдля массивов, что закрывает #33982. #34368 (usurai). - Добавлены три функции для типа данных Map: 1.
mapReplace(map1, map2)— заменяет значения по ключам в map1 на значения соответствующих ключей из map2; добавляет ключи из map2, которые отсутствуют в map1. 2.mapFilter3.mapMap. mapFilter и mapMap — это функции высшего порядка, принимающие два аргумента: первый аргумент — лямбда‑функция с парой k, v в качестве аргументов, второй аргумент — столбец типа Map. #33698 (hexiaoting). - Разрешено получать пользователя и пароль по умолчанию для clickhouse-client из переменных окружения
CLICKHOUSE_USERиCLICKHOUSE_PASSWORD. Закрывает #34538. #34947 (DR).
Экспериментальная возможность
- Новый тип данных
Object(<schema_format>), который поддерживает хранение полуструктурированных данных (пока только JSON). Данные записываются в такие типы как строка. Затем все пути извлекаются в соответствии с форматом полуструктурированных данных и записываются в отдельные столбцы в наиболее подходящих типах, которые могут хранить все их значения. Эти столбцы могут запрашиваться по именам, соответствующим путям в исходных данных, напримерdata.key1.key2или с оператором приведения типовdata.key1.key2::Int64. - Добавлена настройка
database_replicated_allow_only_replicated_engine. При включении она разрешает создавать только таблицыReplicatedили таблицы с движками без состояния в базах данныхReplicated. #35214 (Nikolai Kochetov). Обратите внимание, что база данныхReplicatedвсё ещё является экспериментальной возможностью.
Улучшение производительности
- Улучшена производительность вставки в таблицы
MergeTreeза счёт оптимизации сортировки. На реалистических бенчмарках наблюдается ускорение до 2 раз. #34750 (Maksim Kita). - Отсечение столбцов при чтении файлов Parquet, ORC и Arrow по URL и из S3. Закрывает #34163. #34849 (Kseniia Sumarokova).
- Отсечение столбцов при чтении файлов Parquet, ORC и Arrow из Hive. #34954 (lgbo).
- Набор оптимизаций производительности от «супергероя производительности». Улучшена производительность обработки запросов с большим списком значений в
IN. Повышена производительность словаряdirect, если его источник —ClickHouse. Улучшена производительность функцийdetectCharset,detectLanguageUnknown. #34888 (Maksim Kita). - Повышена производительность агрегатной функции
anyза счёт более активного использования пакетной обработки. #34760 (Raúl Marín). - Несколько улучшений производительности
clickhouse-keeper: меньше блокировок #35010 (zhanglistar), более низкое потребление памяти за счёт потокового чтения и записи snapshot вместо полной копии #34584 (zhanglistar), оптимизация компакции хранилища лога в реализации RAFT #34534 (zhanglistar), версионирование внутренней структуры данных #34486 (zhanglistar).
Улучшения
- Добавлена поддержка асинхронных вставок в табличные функции. Исправляет #34864. #34866 (Anton Popov).
- Неявное приведение типа ключевого аргумента для функций
dictGetHierarchy,dictIsIn,dictGetChildren,dictGetDescendants. Закрывает #34970. #35027 (Maksim Kita). - Запрос
EXPLAIN ASTможет выводить AST в виде графа в формате Graphviz:EXPLAIN AST graph = 1 SELECT * FROM system.parts. #35173 (李扬). - При записи больших файлов с использованием табличной функции
s3или табличного движка тип содержимого этих файлов из‑за ошибки в AWS SDK ошибочно устанавливался вapplication/xml. Это исправляет проблему #33964. #34433 (Alexey Milovidov). - Немного изменены ограничительные политики строк, чтобы сделать их более удобной альтернативой разрешающим политикам в простых случаях. Если для конкретной таблицы существуют только ограничительные политики (без разрешающих политик), пользователи смогут увидеть некоторые строки. Также
SHOW CREATE ROW POLICYвсегда будет показыватьAS permissiveилиAS restrictiveв определении политики строк. #34596 (Vitaly Baranov). - Улучшено определение схемы с использованием шаблонов путей (globs) в движках File/S3/HDFS/URL. В случае ошибки при определении схемы пробовать использовать следующий путь. #34465 (Kruglov Pavel).
- Интерфейс Play теперь корректно определяет предпочитаемую светлую или тёмную тему, заданную в ОС. #35068 (peledni).
- Добавлен параметр
date_time_input_format = 'best_effort_us'. Закрывает #34799. #34982 (WenYao). - В конфигурацию сервера добавлены новые параметры
allow_plaintext_passwordиallow_no_password, которые включают или отключают типы аутентификации, потенциально небезопасные в некоторых средах. По умолчанию они включены. #34738 (Heena Bansal). - Поддержка типа данных
DateTime64в форматеArrow, закрывает #8280 и #28574. #34561 (李扬). - Перезагружать параметр
remote_url_allow_hosts(фильтрация исходящих подключений) при обновлении конфигурации. #35294 (Nikolai Kochetov). - Добавлена поддержка параметра
--testmodeдляclickhouse-local. Этот параметр включает интерпретацию тестовых подсказок, которые используются в функциональных тестах. #35264 (Kseniia Sumarokova). - Добавлено поле
distributed_depthв журнал запросов. Оно представляет собой более детализированный вариантis_initial_query#35207 (李扬). - Учитывать настройку
remote_url_allow_hostsдля табличных функцийMySQLиPostgreSQL. #35191 (Heena Bansal). - Добавлено поле
disk_nameв таблицуsystem.part_log. #35178 (Artyom Yurkov). - Не повторять ошибки, не подлежащие повторной попытке, при выполнении запросов к удалённым URL-адресам. Закрывает #35161. #35172 (Kseniia Sumarokova).
- Добавлена поддержка распределённых запросов INSERT SELECT (настройка
parallel_distributed_insert_select) для табличной функцииview(). #35132 (Azat Khuzhin). - Более точное отслеживание памяти при выполнении
INSERTв таблицуBufferсAggregateFunction. #35072 (Azat Khuzhin). - Избегать деления на ноль в Query Profiler при наличии ошибки в ядре Linux. Закрывает #34787. #35032 (Alexey Milovidov).
- Добавлены дополнительные проверки корректности конфигурации keeper: теперь нельзя одновременно использовать localhost и удалённые серверы, а также добавлены проверки на совпадение значений внутреннего порта Raft и клиентского порта keeper. #35004 (alesapin).
- В настоящее время если пользователь меняет настройки системных таблиц, будет создаваться огромное количество записей в журналах, а ClickHouse будет переименовывать таблицы каждую минуту. Это исправляет #34929. #34949 (Nikita Mikhaylov).
- Используется пул подключений для клиента Hive Metastore. #34940 (lgbo).
- Игнорировать
TTLдля отдельных столбцов вCREATE TABLE AS, если движок новой таблицы его не поддерживает (то есть если движок не относится к семействуMergeTree). #34938 (Azat Khuzhin). - Разрешить строки типа
LowCardinalityдля индексовngrambf_v1/tokenbf_v1. Закрывает #21865. #34911 (Lars Hiller Eidnes). - Позволяет открывать пустую базу данных SQLite, если файл не существует. Закрывает #33367. #34907 (Kseniia Sumarokova).
- Реализована статистика памяти для FreeBSD, что необходимо для корректной работы
max_server_memory_usage. #34902 (Alexandre Snarskii). - В предыдущих версиях индикатор прогресса в clickhouse-client мог без видимой причины перепрыгивать вперёд примерно до отметки 50%. Это исправление закрывает #34324. #34801 (Alexey Milovidov).
- Теперь запросы
ALTER TABLE DROP COLUMN columnXдля движков таблиц семействаMergeTreeвыполняются мгновенно, еслиcolumnXявляется столбцом типаALIAS. Исправляет #34660. #34786 (alesapin). - Показывать подсказки при опечатке в имени индекса пропуска данных. Закрывает #29698. #34764 (flynn).
- Добавлена поддержка табличных функций
remote()/cluster()дляparallel_distributed_insert_select. #34728 (Azat Khuzhin). - Не сбрасывать настройки логирования, заданные через параметры командной строки
--log-file/--errorlog-file, при пустой конфигурации в файле конфигурации. #34718 (Amos Bird). - Извлекать схему только один раз — при создании таблицы — и не читать локальные файлы/внешние источники для извлечения схемы при каждом запуске сервера. #34684 (Kruglov Pavel).
- Добавлена возможность указывать имена аргументов для исполняемых UDF. Это необходимо для форматов, в которых имя аргумента является частью сериализации, таких как
Native,JSONEachRow. Закрывает #34604. #34653 (Maksim Kita). MaterializedMySQL(экспериментальная возможность) теперь поддерживаетmaterialized_mysql_tables_list(список таблиц базы данных MySQL, разделённых запятыми, которые будут реплицироваться движком базы данных MaterializedMySQL. Значение по умолчанию: пустой список — означает, что будут реплицироваться все таблицы), упомянуто в #32977. #34487 (zzsmdfj).- Улучшены логи спанов OpenTelemetry для операции INSERT в распределённую таблицу. #34480 (Frank Chen).
- Обеспечить согласованность значений
ctimeиmtimeznode между серверами в ClickHouse Keeper. #33441 (小路).
Улучшения сборки/тестирования/упаковки
- Репозиторий пакетов перенесён в JFrog Artifactory (Mikhail f. Shiryaev).
- Рандомизированы некоторые настройки в функциональных тестах, чтобы было протестировано больше возможных комбинаций настроек. Это ещё один метод фаззинга для обеспечения лучшего покрытия тестами. Таким образом закрыт #32268. #34092 (Kruglov Pavel).
- Удалён PVS-Studio из нашего CI. #34680 (Mikhail f. Shiryaev).
- Добавлена возможность собирать «обрезанные» бинарники с помощью CMake. В предыдущих версиях это выполнялось dh-tools. #35196 (alesapin).
- Более компактная, «обезжиренная» сборка
clickhouse-keeper. #35031 (alesapin). - Использовать @robot-clickhouse в качестве автора и коммитера для PR, подобных https://github.com/ClickHouse/ClickHouse/pull/34685. #34793 (Mikhail f. Shiryaev).
- Ограничить версию DWARF для отладочной информации максимум до 4-й, так как наш внутренний символизатор стека не может разобрать DWARF версии 5. Это актуально, если вы компилируете ClickHouse с clang-15. #34777 (Alexey Milovidov).
- Удалён Debian-пакет
clickhouse-testкак ненужное усложнение. CI использует тесты из репозитория, и автономное тестирование через deb-пакет больше не поддерживается. #34606 (Ilya Yatsishin).
Исправление ошибок (заметное пользователям некорректное поведение в официальном стабильном или предстабильном релизе)
- Исправление для интеграции с HDFS: когда размер внутреннего буфера слишком мал, NEED_MORE_INPUT в
HadoopSnappyDecoderвызывается многократно (>=3 раз) для одного и того же сжатого блока. Это приводит к тому, что входные данные копируются в неверное место вHadoopSnappyDecoder::buffer. #35116 (lgbo). - Устаревшие привилегии в операторах ATTACH GRANT теперь игнорируются. Этот PR исправляет #34815. #34855 (Vitaly Baranov).
- Исправлена ошибка сегментации (segfault) в базе данных Postgres при получении запроса
CREATE TABLE, если база данных была создана с использованием именованных коллекций. Закрывает #35312. #35313 (Kseniia Sumarokova). - Исправлена ошибка дублирования строк в partial merge join, закрыт #31009. #35311 (Vladimir C).
- Исправлена возможная ошибка
Assertion 'position() != working_buffer.end()' failedпри использовании сжатия bzip2 с небольшим значением параметраmax_read_buffer_size. Ошибка была обнаружена в https://github.com/ClickHouse/ClickHouse/pull/35047. #35300 (Kruglov Pavel). При использовании сжатия lz4 с небольшим значением параметра max_read_buffer_size. #35296 (Kruglov Pavel). При использовании сжатия lzma с небольшим значением параметраmax_read_buffer_size. #35295 (Kruglov Pavel). При использовании сжатияbrotliс небольшим значением параметраmax_read_buffer_size. Ошибка была обнаружена в https://github.com/ClickHouse/ClickHouse/pull/35047. #35281 (Kruglov Pavel). - Исправлена возможная ошибка сегментации при выводе схемы для формата
JSONEachRow. #35291 (Kruglov Pavel). - Исправлен запрос
CHECK TABLE, если в таблице включены разрежённые столбцы. #35274 (Anton Popov). - Не вызывать std::terminate при возникновении исключения во время чтения из удалённой VFS. #35257 (Azat Khuzhin).
- Исправлено чтение порта из конфигурации, закрыт #34776. #35193 (Vladimir C).
- Исправлена ошибка в запросе с
WITH TOTALSв случае, когдаHAVINGвозвращал пустой результат. Это исправляет #33711. #35186 (Amos Bird). - Исправлен частный случай в
replaceRegexpAll, закрыт #35117. #35182 (Vladimir C). - Вывод схемы некорректно работал в случае
INSERT INTO FUNCTION s3(...) FROM ...: вместо запросаSELECTон пытался прочитать схему из файла в S3. #35176 (Kruglov Pavel). - Исправлены
table overridesдля MaterializedPostgreSQL (экспериментальная возможность) дляpartition byи др. Закрывает #35048. #35162 (Kseniia Sumarokova). - Исправлена работа экспериментальной возможности MaterializedPostgreSQL при повторном добавлении таблицы в репликацию (ATTACH TABLE) после её ручного открепления (DETACH TABLE). Закрывает #33800. Закрывает #34922. Закрывает #34315. #35158 (Kseniia Sumarokova).
- Исправлена ошибка отсечения разделов при использовании немонотонной функции с оператором IN. Она устраняет #35136. #35146 (Amos Bird).
- Исправлено слегка некорректное преобразование конфигураций YAML в XML. #35135 (Miel Donkers).
- Исправлено
optimize_skip_unused_shards_rewrite_inдля столбцов со знаком и отрицательных значений. #35134 (Azat Khuzhin). - Параметр конфигурации внешнего словаря
update_lagбыло невозможно использовать: он вызывал сообщение об ошибкеUnexpected key `update_lag` in dictionary source configuration. #35089 (Jason Chu). - Предотвращена возможная взаимоблокировка при остановке сервера. #35081 (Azat Khuzhin).
- Исправлена проблема, из‑за которой пропадал псевдоним после оптимизации функции в подстолбец при включённой настройке
optimize_functions_to_subcolumns. Закрывает #33798. #35079 (qieqieplus). - Исправлено чтение из таблицы
system.asynchronous_insertsв случае асинхронной вставки в табличную функцию. #35050 (Anton Popov). - Исправлено возможное исключение
Reading for MergeTree family tables must be done with last position boundary(относящееся к операциям с удалённой VFS). Закрывает #34979. #35001 (Kseniia Sumarokova). - Исправлена ошибка, приводившая к неожиданному результату при использовании агрегатных функций типа -State в оконной рамке. #34999 (metahys).
- Исправлена возможная ошибка сегментации в FileLog (экспериментальная возможность). Закрывает #30749. #34996 (Kseniia Sumarokova).
- Исправлена потенциальная редкая ошибка
Cannot push block to port which already has data. #34993 (Nikolai Kochetov). - Исправлено некорректное определение схемы для дат в CSV, не заключённых в кавычки. Закрывает #34768. #34961 (Kruglov Pavel).
- Интеграция с Hive: исправлен неожиданный результат при использовании
INвWHEREв запросе Hive. #34945 (lgbo). - Избегайте активного опроса ClickHouse Keeper при поиске файлов журнала изменений для удаления. #34931 (Azat Khuzhin).
- Исправлено преобразование
DateTime64из PostgreSQL. Закрывает #33364. #34910 (Kseniia Sumarokova). - Исправлена возможная ошибка "Part directory doesn't exist" при выполнении операции
INSERTв таблицу MergeTree, работающую через VFS поверх S3. #34876 (Azat Khuzhin). - Добавлена поддержка выполнения операторов DDL (например, CREATE USER) на кросс-реплицируемом кластере. #34860 (Jianmei Zhang).
- Исправлены ошибки в группировке по нескольким столбцам в
WindowView(экспериментальная возможность). #34859 (vxider). - Исправлены возможные сбои в функциях S2 при выполнении запросов с константными столбцами. #34745 (Bharat Nallan).
- Исправлена ошибка в функциях H3 при использовании константных столбцов, которая приводила к сбоям запросов. #34743 (Bharat Nallan).
- Исправлена ошибка
No such file or directoryпри включённомfsync_part_directoryи вертикальном слиянии. #34739 (Azat Khuzhin). - Исправлена сериализация/вывод для системных запросов
RELOAD MODEL,RELOAD FUNCTION,RESTART DISKпри использовании в сочетании сON CLUSTER. Закрывает #34514. #34696 (Maksim Kita). - Исправлена настройка
allow_experimental_projection_optimizationсовместно сenable_global_with_statement(раньше это могло приводить к ошибкеStack size too largeв случае нескольких выражений в секцииWITH, а также к многократному выполнению скалярных подзапросов, теперь же оно работает более оптимально). #34650 (Azat Khuzhin). - Прекращать выбор части для операции
MUTATE, если другая реплика уже обновила журнал транзакций для движкаReplatedMergeTree. #34633 (Jianmei Zhang). - Исправлен некорректный результат простого запроса
countпри использовании механизма перемещения частей (part movement feature) #34089. #34385 (nvartolomei). - Устранено несоответствие ограничения
max_query_sizeв распределённых подзапросах. #34078 (Chao Ma).
Релиз ClickHouse v22.2, 2022-02-17
Примечания по обновлению
- Применение индексов пропуска данных для запросов с FINAL может приводить к некорректным результатам. В этом релизе мы по умолчанию отключили индексы пропуска данных для запросов с FINAL (добавлена новая настройка
use_skip_indexes_if_final, которая по умолчанию отключена). #34243 (Azat Khuzhin).
Новая функция
- Проекции готовы к использованию в продакшене. Включить настройку
allow_experimental_projection_optimizationпо умолчанию и объявить её устаревшей. #34456 (Nikolai Kochetov). - Опция создания нового файла при вставке для движков
File/S3/HDFS. Позволяет перезаписывать файл вHDFS. По умолчанию при попытке перезаписать файл вS3генерируется исключение. При попытке дописать данные в файл в форматах с суффиксом (и, следовательно, не поддерживающих дописывание, напримерParquet,ORC) генерируется исключение. Закрывает #31640 Закрывает #31622 Закрывает #23862 Закрывает #15022 Закрывает #16674. #33302 (Kruglov Pavel). - Добавлена настройка, позволяющая пользователю задать собственную семантику дедупликации в
MergeTree/ReplicatedMergeTree. Если она задана, она используется вместо хеша данных для генерации идентификатора блока. Таким образом, например, указывая уникальное значение для этой настройки в каждом операторе INSERT, пользователь может избежать дедупликации одних и тех же вставленных данных. Закрывает: #7461. #32304 (Igor Nikonov). - Добавлена поддержка ключевого слова
DEFAULTдля операторов INSERT. Закрывает #6331. #33141 (Andrii Buriachevskyi). - В запрос
CREATE TABLEдобавлен спецификатор столбцаEPHEMERAL. Закрывает #9436. #34424 (yakov-olkhovskiy). - Добавлена поддержка клаузы
IF EXISTSдля конструкцииTTL expr TO [DISK|VOLUME] [IF EXISTS] 'xxx'. Части будут перемещаться на диск или том только в том случае, если он существует на реплике, поэтому правилаMOVE TTLсмогут по-разному работать на репликах в соответствии с текущими политиками хранения. Исправляет #34455. #34504 (Anton Popov). - Разрешена установка движка таблицы по умолчанию и создание таблиц без указания ENGINE. #34187 (Ilya Yatsishin).
- Добавлена табличная функция
format(format_name, data). #34125 (Kruglov Pavel). - Определять формат в
clickhouse-localпо имени файла, даже когда он передаётся через stdin. #33829 (Kruglov Pavel). - Добавлен вывод схемы (schema inference) для табличной функции
values. Закрывает #33811. #34017 (Kruglov Pavel). - Динамическая перезагрузка серверных TLS-сертификатов при перезагрузке конфигурации. Закрывает #15764. #15765 (johnskopis). #31257 (Filatenkov Artur).
- Теперь ReplicatedMergeTree может восстанавливать данные, если некоторые из его дисков вышли из строя. #13544 (Amos Bird).
- Поддержка отказоустойчивых подключений в clickhouse-client:
clickhouse-client ... --host host1 --host host2 --port port2 --host host3 --port port --host host4. #34490 (Kruglov Pavel). #33824 (Filippov Denis). - Добавлены функции
DEGREESиRADIANSдля совместимости с MySQL. #33769 (Bharat Nallan). - Добавлена функция
h3ToCenterChild. #33313 (Bharat Nallan). Добавлены новые вспомогательные функции h3:edgeLengthKm,exactEdgeLengthKm,exactEdgeLengthM,exactEdgeLengthRads,numHexagons. #33621 (Bharat Nallan). - Добавлена функция
bitSliceдля извлечения битовых подпоследовательностей из значений типов String/FixedString. #33360 (RogerYK). - Реализована агрегирующая функция
meanZTest. #33354 (achimbab). - Добавлены доверительные интервалы для агрегатных функций T-теста. #33260 (achimbab).
- Добавлена функция
addressToLineWithInlines. Закрыта задача #26211. #33467 (SuperDJY). - Добавлены
#!и#как допустимые варианты начала однострочного комментария. Закрыта задача #34138. #34230 (Aaron Katz).
Экспериментальная возможность
- Функции для классификации текста: определение языка и кодировки. См. #23271. #33314 (Nikolay Degterinsky).
- Добавлена поддержка перерасхода памяти (
overcommit) вMemoryTracker. Добавлены настройкиguaranteedдля лимитов памяти, которые представляют собой «мягкие» лимиты. Когда достигается жесткий лимит памяти,MemoryTrackerпытается отменить запрос с наибольшим перерасходом. Новый параметрmemory_usage_overcommit_max_wait_microsecondsзадает, как долго запросы могут ждать завершения другого запроса. Закрывает #28375. #31182 (Dmitry Novik). - Включено соединение потока с таблицей (stream-to-table join) в
WindowView. #33729 (vxider). - Добавлена поддержка типов данных
SET,YEAR,TIMEиGEOMETRYвMaterializedMySQL(экспериментальная возможность). Исправляет #18091, #21536, #26361. #33429 (zzsmdfj). - Исправлены различные проблемы при включенных по умолчанию проекциях. Каждая проблема описана в отдельном коммите. Это для #33678. Исправляет #34273. #34305 (Amos Bird).
Улучшение производительности
- Поддержка
optimize_read_in_order, если префикс сортировочного ключа уже отсортирован. Например, если в таблице есть сортировочный ключORDER BY (a, b)и запрос с условиямиWHERE a = const ORDER BY b, теперь будет использоваться чтение в порядке сортировочного ключа вместо полной сортировки. #32748 (Anton Popov). - Улучшена производительность вставки с разбиением по партициям (partitioned insert) в табличные функции
URL,S3,File,HDFS. Закрывает #34348. #34510 (Maksim Kita). - Ряд улучшений производительности clickhouse-keeper. #34484 #34587 (zhanglistar).
FlatDictionaryповышает производительность загрузки данных словаря. #33871 (Maksim Kita).- Улучшена производительность функции
mapPopulateSeries. Закрывает #33944. #34318 (Maksim Kita). - Виртуальные столбцы
_fileи_path(в табличных движках для работы с файлами) сделаныLowCardinality— это ускорит выполнение запросов к нескольким файлам. Закрывает #34300. #34317 (flynn). - Ускорена загрузка частей данных. Ранее она не выполнялась параллельно: настройка
part_loading_threadsне действовала. См. #4699. #34310 (alexey-milovidov). - Повышена производительность формата
LineAsString. Закрывает #34303. #34306 (alexey-milovidov). - Оптимизированы
quantilesExact{Low,High}для использованияnth_elementвместоsort. #34287 (Danila Kutenin). - Незначительно улучшена производительность формата
Regexp. #34202 (alexey-milovidov). - Небольшое улучшение анализа скалярных подзапросов. #34128 (Federico Rodriguez).
- Сделать ORDER BY по Tuple почти таким же быстрым, как ORDER BY по отдельным столбцам. У нас есть специальные оптимизации для ORDER BY по нескольким столбцам: https://github.com/ClickHouse/ClickHouse/pull/10831. Полезно также применить их к столбцам типа Tuple. #34060 (Amos Bird).
- Переработан и повторно включён кэш скалярных подзапросов при выполнении материализованных представлений. #33958 (Raúl Marín).
- Незначительно повышена производительность
ORDER BYза счет добавления поддержки x86-64 AVX-512 для функцийmemcmpSmallдля ускорения сравнения областей памяти. Эта оптимизация используется только при самостоятельной компиляции ClickHouse. #33706 (hanqf-git). - Улучшена производительность словаря
range_hashed, если для ключа есть много интервалов. Исправлено #23821. #33516 (Maksim Kita). - Для вставок и слияний в S3 по возможности выполняйте параллельную запись файлов (TODO: проверить, смёржено ли это). #33291 (Nikolai Kochetov).
- Улучшена производительность
clickhouse-keeperи исправлены несколько утечек памяти в библиотеке NuRaft. #33329 (alesapin).
Улучшение
- Добавлена поддержка асинхронных вставок в
clickhouse-clientдля запросов с данными, указанными непосредственно в запросе. #34267 (Anton Popov). - Функции
dictGet,dictHasнеявно приводят аргумент-ключ к структуре ключа словаря, если их типы различаются. #33672 (Maksim Kita). - Улучшения для словарей
range_hashed. Повышена производительность времени загрузки при наличии нескольких атрибутов. Разрешено создавать словарь без атрибутов. Добавлена опция для задания стратегии, когда интервальные границыstartиendимеют типNullable—convert_null_range_bound_to_openпо умолчанию имеет значениеtrue. Закрывает #29791. Разрешено указыватьFloat,Decimal,DateTime64,Int128,Int256,UInt128,UInt256в качестве типов диапазона. ВRangeHashedDictionaryдобавлена поддержка диапазонных значений, выходящих за пределы типаInt64. Закрывает #28322. Добавлена опцияrange_lookup_strategyдля указания типа поиска по диапазонуmin,max, по умолчаниюmin. Закрывает #21647. Исправлены вычисления выделенных байт. Исправлено имя типа вsystem.dictionariesв случае словаряComplexKeyHashedDictionary. #33927 (Maksim Kita). - Словари
flat,hashed,hashed_arrayтеперь можно создавать с пустыми атрибутами, при этом поддерживается чтение ключей и использованиеdictHas. Исправлено #33820. #33918 (Maksim Kita). - Добавлена поддержка типа данных
DateTime64в словарях. #33914 (Maksim Kita). - Добавлена возможность записи
s3(url, access_key_id, secret_access_key)(автоопределение формата данных и структуры таблицы, но с явными учетными данными доступа). #34503 (Kruglov Pavel). - Добавлена отправка формата вывода обратно клиенту по аналогии с протоколом HTTP, согласно предложению в #34362. Закрывает #34362. #34499 (Vitaly Baranov).
- Отправлять статистику ProfileEvents при выполнении запросов INSERT SELECT (для отображения метрик запроса в
clickhouse-clientдля такого типа запросов). #34498 (Dmitry Novik). - Распознавать расширение
.jsonlдля формата JSONEachRow. #34496 (Kruglov Pavel). - Улучшено определение схемы в clickhouse-local. Теперь можно просто выполнять
clickhouse-local -q "select * from table" < data.format. #34495 (Kruglov Pavel). - Права CREATE/ALTER/DROP ROW POLICY теперь можно выдавать для конкретной таблицы, для
database.*, а также глобально —*.*. #34489 (Vitaly Baranov). - Добавлена возможность экспортировать файлы произвольного размера в
s3. Добавлены две новые настройки:s3_upload_part_size_multiply_factorиs3_upload_part_size_multiply_parts_count_threshold. Теперь каждый раз, когда количество частей, загруженных в S3 из одного запроса, достигаетs3_upload_part_size_multiply_parts_count_threshold,s3_min_upload_part_sizeумножается наs3_upload_part_size_multiply_factor. Исправляет #34244. #34422 (alesapin). - Добавлена возможность пропускать отсутствующие (404) URL для glob-шаблонов при использовании хранилища URL / табличной функции URL. Также закрывает #34359. #34392 (Kseniia Sumarokova).
- Форматы ввода и вывода по умолчанию для
clickhouse-local, которые можно переопределять параметрами --input-format и --output-format. Закрывает #30631. #34352 (李扬). - Добавлены параметры для
clickhouse-format, которые решают #30528 —max_query_sizeиmax_parser_depth. #34349 (李扬). - Улучшена обработка предварительного ввода до запуска клиента. Относится к #34308. #34336 (Amos Bird).
- Псевдонимы функций
REGEXP_MATCHESиREGEXP_REPLACEдля обеспечения совместимости с PostgreSQL. Закрывает #30885. #34334 (李扬). - Некоторые серверы ожидают наличие заголовка User-Agent в своих HTTP-запросах. В HTTP-запросы была добавлена строка заголовка
User-Agentследующего вида: User-Agent: ClickHouse/VERSION_STRING. #34330 (Saad Ur Rahman). - Отменять слияния перед захватом блокировки таблицы для запроса
TRUNCATE, чтобы в некоторых случаях избежать ошибкиDEADLOCK_AVOIDED. Исправление для #34302. #34304 (tavplubix). - Изменён уровень серьёзности сообщения «Cancelled merging parts» в логах, так как это не ошибка. Это закрывает #34148. #34232 (alexey-milovidov).
- Добавлена возможность сочетать оператор приведения типов в стиле PostgreSQL
::с выражениями, использующими операторы[]и.(индексацию массивов и кортежей). #34229 (Nikolay Degterinsky). - Распознавать формат
YYYYMMDD-hhmmssв функцииparseDateTimeBestEffort, что закрывает задачу #34206. #34208 (alexey-milovidov). - Разрешён символ возврата каретки в середине строки при разборе формата
Regexp. Это закрывает #34200. #34205 (alexey-milovidov). - Добавлена поддержка разбора
PRIMARY KEYсловаря в видеPRIMARY KEY (id, value); ранее поддерживался только вариантPRIMARY KEY id, value. Закрывает #34135. #34141 (Maksim Kita). - Необязательный аргумент для функции
splitByChar, позволяющий ограничить количество результирующих элементов. Закрывает #34081. #34140 (李扬). - Улучшение взаимодействия при многострочном редактировании в clickhouse-client. Продолжение #31123. #34114 (Amos Bird).
- Добавлена поддержка
UUIDдля формата ввода-выводаMsgPack. #34065 (Kruglov Pavel). - Контекст трассировки (для OpenTelemetry) теперь передаётся из метаданных gRPC‑клиента (это изменение относится к клиент‑серверному протоколу gRPC). #34064 (andremarianiello).
- Поддерживаются все типы запросов
SYSTEMс клаузойON CLUSTER. #34005 (小路). - Улучшен учёт памяти для запросов, использующих объём памяти меньше
max_untracker_memory. #34001 (Azat Khuzhin). - Исправлен поиск строк в кодировке UTF-8 без учета регистра, когда строчные и заглавные символы представлены разным количеством байт. Например,
ẞиß. Это закрывает #7334. #33992 (Harry Lee). - Определение формата и схемы из стандартного ввода в
clickhouse-local. #33960 (Kruglov Pavel). - Корректно обрабатывать ситуацию ошибочной конфигурации, когда несколько дисков используют один и тот же путь в файловой системе. #29072. #33905 (zhongyuankai).
- Перебирать все IP‑адреса, полученные при DNS‑разрешении, при обращении к S3‑прокси. S3‑прокси используются редко, преимущественно в Yandex Cloud. #33862 (Nikolai Kochetov).
- Реализована поддержка запроса EXPLAIN AST CREATE FUNCTION:
EXPLAIN AST CREATE FUNCTION mycast AS (n) -> cast(n as String)теперь возвращаетEXPLAIN AST CREATE FUNCTION mycast AS n -> CAST(n, 'String'). #33819 (李扬). - Добавлена поддержка приведения типа из
Map(Key, Value)кArray(Tuple(Key, Value)). #33794 (Maksim Kita). - Добавлены улучшения и исправления для типа данных
Bool. Исправлены #33244. #33737 (Kruglov Pavel). - Парсить и сохранять trace-id OpenTelemetry в порядке big-endian. #33723 (Frank Chen).
- Улучшения для семейства функций
fromUnixTimestamp64. Теперь они принимают любое целочисленное значение, которое может быть приведено кInt64. Закрывает: #14648. #33505 (Andrey Zvonov). - Перереализовать
_shard_num, вычисляемый из констант (см. #7624), с использованием функцииshardNum()(см. #27020), чтобы избежать возможных проблем (например, обнаруженных в #16947). #33392 (Azat Khuzhin). - Добавлена поддержка бинарных арифметических операций (сложение, вычитание, умножение, деление, функции
least,greatest) междуDecimalиFloat. #33355 (flynn). - Учитывать ограничения cgroups при автоматическом определении max_threads. #33342 (JaySon).
- Добавлена новая настройка clickhouse-keeper
min_session_timeout_ms. Теперь clickhouse-keeper будет определять таймаут клиентской сессии в соответствии с настройкамиmin_session_timeout_msиsession_timeout_ms. #33288 (JackyWoo). - Добавлена поддержка типа данных
UUIDдля функцийhexиbin. #32170 (Frank Chen). - Исправлено чтение подколонок с точками в именах. В частности, исправлено чтение столбцов типа
Nested, если имена их элементов содержат точки (например,Nested(`keys.name` String, `keys.id` UInt64, values UInt64)). #34228 (Anton Popov). - Исправлена проблема, из-за которой
parallel_view_processing = 0не работал при вставке в таблицу с использованиемVALUES. - Исправлена ошибка, из-за которойview_duration_msвquery_views_logнекорректно задавался для материализованных представлений. #34067 (Raúl Marín). - Исправлен разбор структуры таблиц из ZooKeeper: теперь метаданные из ZooKeeper сравниваются с локальными метаданными в канонической форме. Это помогает, когда канонические имена функций меняются между версиями ClickHouse. #33933 (sunny).
- Правильно экранировать отдельные символы при взаимодействии с LDAP. #33401 (IlyaTsoi).
Улучшения сборки/тестирования/упаковки
- Удалена поддержка небандлированной сборки. #33690 (Azat Khuzhin).
- Теперь тесты не зависят от результата нестабильной сортировки равных элементов. В debug‑сборках добавлена рандомизация диапазонов равных элементов после сортировки, чтобы предотвратить проблемы в случаях, когда мы полагаемся на порядок сортировки равных элементов. #34393 (Maksim Kita).
- Добавлена повышенная подробность вывода при проверке стиля. #34289 (Mikhail f. Shiryaev).
- Удалён debian‑пакет
clickhouse-test, так как он устарел. #33948 (Ilya Yatsishin). - Ряд улучшений системы сборки для исключения возможности случайного использования пакетов из ОС и обеспечения полностью изолированных сборок. #33695 (Amos Bird).
Исправление ошибок (заметное пользователям некорректное поведение в официальном стабильном или предстабильном релизе)
- Исправлена ошибка ассерта при использовании
allow_experimental_parallel_reading_from_replicasсmax_parallel_replicas, равным 1. Это исправляет #34525. #34613 (Nikita Mikhaylov). - Исправлена редкая ошибка при чтении пустых массивов, которая могла приводить к ошибке
Data compressed with different methods. Она могла воспроизводиться, если у вас в основном пустые массивы, но не всегда, и чтение выполняется в обратном направлении с ORDER BY ... DESC. Эта ошибка возникает крайне редко. #34327 (Anton Popov). - Исправлен неверный результат функций
round/roundBankersпри округлении целочисленных значений малых типов. Закрывает #33267. #34562 (李扬). - Иногда отмена запроса срабатывала не сразу при чтении нескольких файлов из S3 или HDFS. Исправляет #34301. Связано с #34397. #34539 (Dmitry Novik).
- Исправлено исключение
Chunk should have AggregatedChunkInfo in MergingAggregatedTransform(в случаеoptimize_aggregation_in_order = 1иdistributed_aggregation_memory_efficient = 0). Исправлена ошибка #34526. #34532 (Anton Popov). - Исправлено сравнение целых и вещественных чисел при анализе индекса. Ранее это могло приводить к пропуску некоторых гранул при чтении. Исправляет #34493. #34528 (Anton Popov).
- Исправлена поддержка сжатия в движке URL. #34524 (Frank Chen).
- Исправлена потенциальная ошибка 'file_size: Operation not supported' при автоопределении схемы файлов. #34479 (Kruglov Pavel).
- Исправлена возможная гонка при удалении таблицы. #34416 (Kseniia Sumarokova).
- Исправлена возможная ошибка
Cannot convert column Function to maskпри коротком вычислении функций (short-circuit evaluation). Закрывает #34171. #34415 (Kruglov Pavel). - Исправлено потенциальное аварийное завершение при выводе схемы из источника URL. Закрывает #34147. #34405 (Kruglov Pavel).
- Для UDF права доступа проверялись на уровне базы данных, а не на глобальном уровне, как должно быть. Закрывает #34281. #34404 (Maksim Kita).
- Исправлен некорректный синтаксис движка в выводе запроса
SHOW CREATE DATABASEдля баз данных с движкомMemory. Это закрывает #34335. #34345 (alexey-milovidov). - Исправлено несколько крайне редких гонок, которые могли приводить к некорректному состоянию очереди репликации и ошибке «пересекающиеся части». #34297 (tavplubix).
- Исправлена ширина индикатора выполнения — ранее она некорректно округлялась до целого числа символов. #34275 (alexey-milovidov).
- Исправлены поля информации о клиенте current_user/current_address при межсерверном взаимодействии (до этого патча значения current_user/current_address сохранялись от предыдущего запроса). #34263 (Azat Khuzhin).
- Исправлена утечка памяти при возникновении исключения во время обработки запроса при
optimize_aggregation_in_order=1. #34234 (Azat Khuzhin). - Исправлена работа метрики
Query, которая показывает число выполняемых запросов. В нескольких последних релизах она всегда была равна 0. #34224 (Anton Popov). - Исправлен вывод схемы для табличной функции
s3. #34186 (Kruglov Pavel). - Исправлено редкое и безвредное условие гонки в движках хранения
HDFS,S3иURL, которое могло приводить к дополнительным подключениям. #34172 (alesapin). - Исправлена ошибка, которая в редких случаях могла приводить к сообщению «Cannot read all data» при чтении столбцов LowCardinality в семействе движков таблиц MergeTree, хранящих данные на удалённой файловой системе, такой как S3 (виртуальная файловая система поверх S3 является экспериментальной возможностью и не готова к использованию в продакшене). #34139 (alesapin).
- Исправлена обработка вставок в распределённые таблицы при изменении нативного протокола. Последнее изменение было в версии 22.1, поэтому после обновления до этой версии могут возникать сбои при вставке в распределённые таблицы. #34132 (Anton Popov).
- Исправлена возможная гонка данных в движке таблицы
File, появившаяся в #33960. Закрывает #34111. #34113 (Kruglov Pavel). - Исправлена незначительная гонка состояний, которая в исключительно редких случаях после потери соединения с ZooKeeper могла приводить к ошибке «intersecting parts». #34096 (tavplubix).
- Исправлены асинхронные вставки в формате
Native. #34068 (Anton Popov). - Исправлена ошибка, которая приводила к невозможности запуска сервера при одновременном использовании реплицируемого хранилища доступа и keeper, встроенного в clickhouse-server. Введены две настройки для таймаутов сокета keeper вместо настроек пользователя по умолчанию:
keeper_server.socket_receive_timeout_secиkeeper_server.socket_send_timeout_sec. Исправляет #33973. #33988 (alesapin). - Исправлена ошибка сегментации при разборе ORC-файла с повреждённым футером. Закрывает #33797. #33984 (Kruglov Pavel).
- Исправлены разбор IPv6 из параметра запроса (подготовленные запросы) и преобразование IPv6 в строку. Закрывает #33928. #33971 (Kruglov Pavel).
- Исправлена ошибка при чтении вложенных кортежей. Устраняет #33838. #33956 (Anton Popov).
- Исправлено использование функций
arrayиtupleс литеральными аргументами в распределённых запросах. Ранее это могло приводить к исключениюNot found columns. #33938 (Anton Popov). - Комбинатор агрегатной функции
-Ifнекорректно обрабатывал аргумент фильтра с типомNullable. Это закрывает #27073. #33920 (alexey-milovidov). - Исправлено потенциальное состояние гонки при удалённом чтении с диска (виртуальная файловая система поверх S3 — экспериментальная функция, пока не готовая для использования в продакшене). #33912 (Amos Bird).
- Исправлено падение при создании SQL UDF с лямбда-выражением, аргументы которого не являются идентификаторами. Закрывает #33866. #33868 (Maksim Kita).
- Исправлено использование разрежённых столбцов (которые могут быть включены экспериментальной настройкой
ratio_of_defaults_for_sparse_serialization). #33849 (Anton Popov). - Исправлена логическая ошибка с сообщением
replica is not readonlyв запросеSYSTEM RESTORE REPLICA, когда реплика на самом деле была только для чтения. Исправляет #33806. #33847 (tavplubix). - Исправлена утечка памяти в
clickhouse-keeper, если используется сжатие (по умолчанию). #33840 (Azat Khuzhin). - Исправлен анализ индекса при отсутствии общих типов данных. #33833 (Amos Bird).
- Исправлено выведение схемы для
JSONEachRowиJSONCompactEachRow. #33830 (Kruglov Pavel). - Исправлена работа внешних словарей с источником
redisи большим количеством ключей. #33804 (Anton Popov). - Исправлена ошибка в клиенте, которая приводила к ошибке «Connection reset by peer» на стороне сервера. Закрывает #33309. #33790 (Kruglov Pavel).
- Исправлен разбор запроса INSERT INTO ... VALUES SETTINGS ... (...), ... #33776 (Kruglov Pavel).
- Исправлена ошибка проверки таблицы при создании части данных в широком формате и с проекцией. #33774 (李扬).
- Исправлено небольшое состояние гонки между count() и операциями INSERT/слияниями/... в MergeTree (могло возвращаться некорректное количество строк для SELECT с optimize_trivial_count_query). #33753 (Azat Khuzhin).
- Генерировать исключение при неудаче запроса на получение списка содержимого каталога в хранилище HDFS. #33724 (LiuNeng).
- Исправлена мутация для таблиц, содержащих проекции. Это исправляет #33010. Это исправляет #33275. #33679 (Amos Bird).
- Корректно определять текущую базу данных, если запрос
CREATE TEMPORARY TABLE AS SELECTвыполняется внутри именованной HTTP-сессии. Это крайне редкий сценарий использования. Закрывает #8340. #33676 (alexey-milovidov). - Теперь разрешены некоторые запросы с сортировкой, LIMIT BY, ARRAY JOIN и lambda-функциями. Это закрывает #7462. #33675 (alexey-milovidov).
- Исправлена ошибка в «zero copy replication» (функциональность находится в разработке и не должна использоваться в продакшене), из-за которой происходило дублирование данных при операции TTL MOVE. Исправляет #33643. #33642 (alesapin).
- Исправлена ошибка
Chunk should have AggregatedChunkInfo in GroupingAggregatedTransform(в случаеoptimize_aggregation_in_order = 1). #33637 (Azat Khuzhin). - Исправлена ошибка
Bad cast from type ... to DB::DataTypeArray, которая может возникать, если таблица содержит столбец типаNestedс точками в имени и для него генерируется значение по умолчанию (например, при вставке, когда столбец не указан). Продолжение #28762. #33588 (Alexey Pavlenko). - Исправлен экспорт в файлы
lz4. Закрывает #31421. #31862 (Kruglov Pavel). - Исправлен потенциальный сбой, возникавший, если
group_by_overflow_modeбыл установлен в значениеany(приблизительный GROUP BY) и агрегирование выполнялось по одному столбцу типаLowCardinality. #34506 (DR). - Исправлена вставка во временные таблицы через клиент-серверный протокол gRPC. Устраняет #34347, issue
#2. #34364 (Vitaly Baranov). - Исправлена ошибка #19429. #34225 (Vitaly Baranov).
- Исправлена ошибка #18206. #33977 (Vitaly Baranov).
- Этот PR позволяет использовать несколько хранилищ LDAP в одном и том же списке пользовательских директорий. Ранее это работало, но позже перестало из‑за того, что тесты LDAP были отключены (они входят в состав тестов testflows). #33574 (Vitaly Baranov).
Релиз ClickHouse v22.1, 2022-01-18
Заметки по обновлению
- Ранее функции
leftиrightбыли реализованы на уровне парсера, а теперь являются полнофункциональными. Распределённые запросы с функциямиleftилиrightбез псевдонимов могут приводить к исключению, если кластер содержит разные версии clickhouse-server. Если при обновлении кластера вы столкнулись с этой ошибкой, необходимо завершить обновление кластера, чтобы все узлы имели одну и ту же версию. Также вы можете добавить псевдонимы (AS something) к столбцам в запросах, чтобы избежать этой проблемы. #33407 (alexey-milovidov). - Начиная с этой версии, использование ресурсов скалярными подзапросами полностью учитывается. Благодаря этому изменению количество строк, прочитанных в скалярных подзапросах, теперь отражается в
query_log. Если скалярный подзапрос кэшируется (повторяется или вызывается для нескольких строк), количество прочитанных строк учитывается только один раз. Это изменение позволяет останавливать запросы с помощью KILL и отображать прогресс, пока они выполняют скалярные подзапросы. #32271 (Raúl Marín).
Новая функциональность
- Реализовано автоматическое определение схемы данных для форматов ввода. Теперь можно опускать описание структуры (или указывать просто
auto) в табличных функцияхfile,url,s3,hdfsи в параметрахclickhouse-local. Также можно опускать структуру в запросеCREATEдля движков таблицFile,HDFS,S3,URL,Merge,Buffer,DistributedиReplicatedMergeTree(если добавляются новые реплики). #32455 (Kruglov Pavel). - Определять формат по расширению файла в табличных функциях
file/hdfs/s3/urlи табличных движкахHDFS/S3/URL, а также дляSELECT INTO OUTFILEиINSERT FROM INFILE#33565 (Kruglov Pavel). Закрывает #30918. #33443 (OnePiece). - Инструмент для сбора диагностических данных, если потребуется поддержка. #33175 (Alexander Burmak).
- Автоматическое обнаружение кластера с помощью ZooKeeper. Это позволяет добавлять в кластер реплики без изменения конфигурации на каждом сервере. #31442 (vdimir).
- Реализован движок таблицы Hive для доступа из ClickHouse к Apache Hive. Реализует: #29245. #31104 (taiyang-li).
- Добавлены агрегатные функции
cramersV,cramersVBiasCorrected,theilsUиcontingency. Эти функции вычисляют зависимость (меру ассоциации) между категориальными значениями. Все эти функции используют таблицу сопряжённости (кросс-таблицу, гистограмму по парам) для вычислений. Это можно представить как коэффициент корреляции, но для любых дискретных значений (необязательно числовых). #33366 (alexey-milovidov). Исходная реализация от Vanyok-All-is-OK и antikvist. - Добавлена табличная функция
hdfsCluster, которая позволяет параллельно обрабатывать файлы из HDFS на множестве узлов указанного кластера, аналогичноs3Cluster. #32400 (Zhichang Yu). - Добавлена поддержка дисков, работающих поверх Azure Blob Storage, по аналогии с тем, как это было сделано для дисков на основе AWS S3. #31505 (Jakub Kuklis).
- Разрешено использовать
COMMENTвCREATE VIEW(для всех типов VIEW). #31062 (Vasily Nemkov). - Динамически переинициализировать порты и протоколы для прослушивания при изменении конфигурации. #30549 (Kevin Michel).
- Добавлены функции
left,right,leftUTF8,rightUTF8. Исправлена ошибка в реализации функцииsubstringUTF8при отрицательном смещении (смещении от конца строки). #33407 (alexey-milovidov). - Добавлены новые функции для координатной системы
H3:h3HexAreaKm2,h3CellAreaM2,h3CellAreaRads2. #33479 (Bharat Nallan). - Добавлена функция
MONTHNAME. #33436 (usurai). - Добавлена функция
arrayLast, закрывает #33390. #33415 Добавлена функцияarrayLastIndex. #33465 (Максим Кита). - Добавлена функция
decodeURLFormComponent, которая немного отличается отdecodeURLComponent. Закрывает #10298. #33451 (SuperDJY). - Позволяет разделять правила свёртки
GraphiteMergeTreeдля обычных и метрик с тегами (необязательное поле rule_type). #33494 (Michail Safronov).
Повышение производительности
- Добавлена поддержка переноса условий в
PREWHERE(настройкаoptimize_move_to_prewhere) для таблиц движкаMerge, если все их базовые таблицы поддерживаютPREWHERE. #33300 (Anton Popov). - Более эффективная обработка glob-шаблонов для URL-хранилища. Теперь вы можете легко запрашивать миллион URL-адресов параллельно с повторами. Закрывает #32866. #32907 (Kseniia Sumarokova).
- Исключён экспоненциальный бэктрекинг в парсере. Это закрывает #20158. #33481 (alexey-milovidov).
- Некорректное использование функции
untupleприводило к экспоненциальной сложности анализа запросов (обнаружено фаззером). Это закрывает #33297. #33445 (alexey-milovidov). - Снижено потребление памяти для словарей со строковыми атрибутами. #33466 (Maksim Kita).
- Незначительное улучшение производительности функции
reinterpret. #32587 (alexey-milovidov). - Незначительное изменение. В крайне редких случаях, когда часть данных утеряна на каждой реплике, после слияния некоторых частей данных последующие запросы могут пропускать меньшее количество партиций при отсечении по партициям. Это практически ни на что не влияет. #32220 (Azat Khuzhin).
- Улучшена производительность записи
clickhouse-keeperза счёт оптимизации логики расчёта размера. #32366 (zhanglistar). - Оптимизирована материализация проекций из одной части. Это закрывает #31669. #31885 (Amos Bird).
- Улучшена производительность запросов к системным таблицам. #33312 (OnePiece).
- Оптимизирован выбор частей MergeTree, которые можно перемещать между томами. #33225 (OnePiece).
- Исправлена работа словаря
sparse_hashedс последовательными ключами (неверная хеш-функция). #32536 (Azat Khuzhin).
Экспериментальная функциональность
- Параллельное чтение с нескольких реплик внутри шарда при распределённом запросе без использования
sample key. Чтобы включить это, установитеallow_experimental_parallel_reading_from_replicas = 1и задайтеmax_parallel_replicasв любое значение. Это закрывает #26748. #29279 (Nikita Mikhaylov). - Реализована разреженная сериализация (sparse serialization). Она может уменьшить использование дискового пространства и улучшить производительность некоторых запросов для столбцов, которые содержат много значений по умолчанию (нулей). Её можно включить с помощью настройки
ratio_for_sparse_serialization. Разреженная сериализация будет динамически выбрана для столбца, если отношение количества значений по умолчанию к общему количеству значений превышает указанный порог. Тип сериализации (обычная или разреженная) будет фиксирован для каждого столбца в куске, но может отличаться между кусками. #22535 (Anton Popov). - Добавлена возможность "TABLE OVERRIDE" для настройки схем таблиц MaterializedMySQL. #32325 (Stig Bakken).
- Добавлен запрос
EXPLAIN TABLE OVERRIDE. #32836 (Stig Bakken). - Добавлена поддержка предложения TABLE OVERRIDE для MaterializedPostgreSQL. RFC: #31480. #32749 (Kseniia Sumarokova).
- Изменён путь в ZooKeeper для меток zero-copy для разделяемых данных. Обратите внимание, что "zero-copy replication" — это функциональность, не предназначенная для продакшена (на ранней стадии разработки), которую вам в любом случае не следует использовать. Но на случай, если вы её использовали, имейте в виду это изменение. #32061 (ianton-ru).
- Добавлена поддержка предложения EVENTS для запроса наблюдения WINDOW VIEW (
WATCH). #32607 (vxider). - Исправлен ACL с явным цифровым хешем в
clickhouse-keeper: теперь поведение соответствует ZooKeeper, и сгенерированный digest всегда принимается. #33249 (小路). #33246. - Исправлено неожиданное удаление проекций при отсоединении кусков. #32067 (Amos Bird).
Улучшение
- Теперь функции преобразования даты и времени, которые генерируют время до
1970-01-01 00:00:00, будут возвращать ноль вместо переполнения. #29953 (Amos Bird). Также исправлена ошибка в анализе индексов, возникавшая, если функция усечения даты возвращала значение до эпохи Unix. - Всегда показывать в клиенте использование ресурсов (суммарная загрузка CPU, суммарное потребление RAM и максимальное потребление RAM на хост) в клиенте. #33271 (alexey-milovidov).
- Улучшена сериализация и десериализация типа
Bool, добавлена проверка диапазона значений. #32984 (Kruglov Pavel). - Если некорректная настройка задана в запросе
SETили через параметры в HTTP‑запросе, сообщение об ошибке будет содержать предложения по настройкам, похожим на строку с некорректной настройкой (если такие существуют). #32946 (Antonio Andelic). - Добавлена поддержка подсказок при опечатках в именах настроек для clickhouse-client и clickhouse-local. Закрывает #32237. #32841 (凌涛).
- Добавлена возможность использования виртуальных столбцов в материализованных представлениях. Закрывает #11210. #33482 (OnePiece).
- Добавлена возможность отключить IPv6 в clickhouse-keeper при необходимости. Тем самым закрывается #33381. #33450 (Wu Xueyang).
- Добавлена дополнительная информация о текущей git-ревизии в
system.build_options. #33431 (taiyang-li). clickhouse-local: контроль потребления памяти в соответствии с параметром--max_memory_usage_in_client. #33341 (Azat Khuzhin).- Разрешены отрицательные интервалы в функции
intervalLengthSum. Их длина также учитывается. Это закрывает #33323. #33335 (alexey-milovidov). LineAsStringможно использовать в качестве формата вывода. Это решает #30919. #33331 (Sergei Trifonov).- Добавлена поддержка
<secure/>в конфигурации кластера как альтернативной записи<secure>1</secure>. Закрывает #33270. #33330 (SuperDJY). - Двойное нажатие Ctrl+C немедленно завершит работу
clickhouse-benchmark, не дожидаясь завершения выполняющихся запросов. Это закрывает #32586. #33303 (alexey-milovidov). - Добавлена поддержка метки времени Unix с миллисекундами в функции
parseDateTimeBestEffort. #33276 (Ben). - Добавлена возможность отменять запрос при чтении данных из внешней таблицы в форматах
Arrow/Parquet/ORC— ранее он не мог быть отменён в случае больших файлов и параметра input_format_allow_seeks, установленного в false. Закрывает #29678. #33238 (Kseniia Sumarokova). - Если движок таблицы поддерживает оператор
SETTINGS, разрешить передавать параметры в виде пар ключ‑значение или через конфигурацию. Добавить такую поддержку для MySQL. #33231 (Kseniia Sumarokova). - При необходимости корректно запрещать Nullable в первичных ключах. Это относится к #32780. #33218 (Amos Bird).
- Добавлен механизм повторных попыток для подключений к
PostgreSQLна случай, если ещё ничего не было получено. Закрывает #33199. #33209 (Kseniia Sumarokova). - Проверка ключей конфигурации внешних словарей. #33095. #33130 (Kseniia Sumarokova).
- Отправлять информацию профиля внутри
clickhouse-local. Закрывает #33093. #33097 (Kseniia Sumarokova). - Укороченное вычисление выражений: добавлена поддержка функции
throwIf. Закрывает #32969. #32973 (Maksim Kita). - (Это происходило только в неофициальных сборках). Исправлена ошибка сегментации (segfault) при вставке данных в сжатые столбцы типов Decimal, String, FixedString и Array. Это исправление закрывает #32939. #32940 (N. Kolotov).
- Добавлена поддержка указания подзапроса в определении пользовательской SQL-функции. Пример:
CREATE FUNCTION test AS () -> (SELECT 1). Закрывает #30755. #32758 (Maksim Kita). - Улучшена поддержка сжатия в gRPC для #28671. #32747 (Vitaly Baranov).
- Сбрасывать все части данных In-Memory, когда WAL не включён, при завершении работы сервера или отсоединении таблицы. #32742 (nauta).
- Добавлена возможность управлять тайм-аутами подключения для MySQL (ранее это поддерживалось только для источника словаря). Закрывает #16669. Ранее значение по умолчанию для
connect_timeoutбыло довольно небольшим, теперь его можно настраивать. #32734 (Kseniia Sumarokova). - Добавлена поддержка опции
authSourceдля хранилищаMongoDB. Закрывает #32594. #32702 (Kseniia Sumarokova). - Добавлена поддержка типа
Date32в табличной функцииgenarateRandom. #32643 (nauta). - Добавлены настройки
max_concurrent_select_queriesиmax_concurrent_insert_queriesдля управления количеством параллельных запросов по типу запроса. Закрывает #3575. #32609 (SuperDJY). - Улучшена обработка вложенных структур без некоторых столбцов при чтении данных в формате
Protobuf. Продолжение https://github.com/ClickHouse/ClickHouse/pull/31988. #32531 (Vitaly Baranov). - Разрешено использование пустых учетных данных для движка
MongoDB. Закрывает #26267. #32460 (Kseniia Sumarokova). - Отключены некоторые оптимизации оконных функций, которые могли приводить к исключениям. Закрыты #31535 и #31620. #32453 (Kseniia Sumarokova).
- Добавлена поддержка подключения к MongoDB 5.0. Закрывает #31483, #32416 (Kseniia Sumarokova).
- Добавлена поддержка сравнения типов
DecimalиFloat. Закрывает #22626. #31966 (flynn). - Добавлены настройки
command_read_timeout,command_write_timeoutдляStorageExecutable,StorageExecutablePool,ExecutableDictionary,ExecutablePoolDictionary,ExecutableUserDefinedFunctions. Настройкаcommand_read_timeoutзадаёт тайм-аут чтения данных из stdout команды в миллисекундах. Настройкаcommand_write_timeoutзадаёт тайм-аут записи данных в stdin команды в миллисекундах. Добавлена настройкаcommand_termination_timeoutдляExecutableUserDefinedFunction,ExecutableDictionary,StorageExecutable. Добавлена настройкаexecute_directдляExecutableUserDefinedFunction, по умолчанию true. Добавлена настройкаexecute_directдляExecutableDictionary,ExecutablePoolDictionary, по умолчанию false. #30957 (Maksim Kita). - Bitmap-агрегатные функции будут возвращать корректный результат для аргументов вне допустимого диапазона вместо циклического переполнения. #33127 (DR).
- Исправлена ошибка разбора некорректных запросов с оператором
FROM INFILE. #33521 (Kruglov Pavel). - Запрещена запись в
S3, если путь содержит glob‑шаблоны. #33142 (Kruglov Pavel). - Опция
--echoне использовалась клиентомclickhouse-clientв пакетном режиме при выполнении одного запроса. #32843 (N. Kolotov). - Используйте параметр
--databaseв clickhouse-local. #32797 (Kseniia Sumarokova). - Исправлен удивительно плохой код в обычной SQL‑функции
file. Теперь она поддерживает символические ссылки. #32640 (alexey-milovidov). - Обновление поля
modification_timeу части данных вsystem.partsпосле её перемещения #32964. #32965 (save-my-heart). - Потенциальная проблема, но её нельзя эксплуатировать: при изменении размера массива может произойти переполнение целого числа. #33024 (varadarajkumar).
Улучшения сборки/тестирования/упаковки
- Добавлены пакеты, функциональные тесты и Docker-сборки для AArch64 (ARM)‑версии ClickHouse. #32911 (Mikhail f. Shiryaev). #32415
- ClickHouse подготовлен к сборке с musl-libc. По умолчанию поддержка отключена. #33134 (alexey-milovidov).
- Обеспечена работоспособность установочного скрипта на FreeBSD. Это закрывает #33384. #33418 (alexey-milovidov).
- Добавлен
actionlintдля workflow GitHub Actions и выполнена проверка файлов workflow черезact --listдля контроля корректного синтаксиса. #33612 (Mikhail f. Shiryaev). - Добавлено больше тестов для функциональности nullable primary key. Добавлены дополнительные тесты с различными типами и вариантами merge tree, а также со случайно сгенерированными данными. #33228 (Amos Bird).
- Добавлен простой инструмент для визуализации нестабильных тестов (flaky tests) в веб-браузере. #33185 (alexey-milovidov).
- Включена герметичная (hermetic) сборка для shared-сборок. В основном для разработчиков. #32968 (Amos Bird).
- Обновлены
libc++иlibc++abiдо последних версий. #32484 (Raúl Marín). - Добавлен интеграционный тест для внешнего .NET‑клиента (ClickHouse.Client). #23230 (Oleg V. Kozlyuk).
- Добавлено встраивание информации о git в бинарный файл clickhouse, чтобы можно было легко получить ревизию исходного кода из бинарного файла clickhouse. #33124 (taiyang-li).
- Удалён устаревший код из ConfigProcessor. Специфичный для Yandex код больше не используется. В этом коде содержался один незначительный дефект. Об этом дефекте сообщил Mallik Hassan в #33032. Это закрывает #33032. #33026 (alexey-milovidov).
Исправление ошибок (заметное пользователю некорректное поведение в официальном стабильном или предстабильном релизе)
- Несколько исправлений для разбора форматов. Это актуально, если
clickhouse-serverпредоставляет злоумышленнику доступ на запись. Специально сформированные входные данные в форматеNativeмогут приводить к чтению неинициализированной памяти или сбою. Это актуально, еслиclickhouse-serverпредоставляет злоумышленнику доступ на запись. #33050 (Heena Bansal). Исправлена ошибка выхода индекса Union-типа Apache Avro за границы допустимого диапазона в бинарном формате Apache Avro. #33022 (Harry Lee). Исправлено разыменование нулевого указателя в данныхLowCardinalityпри десериализации данныхLowCardinalityв форматеNative. #33021 (Harry Lee). - Обработчик ClickHouse Keeper будет корректно удалять операцию после отправки ответа. #32988 (JackyWoo).
- Потенциальная ошибка на единицу при расчёте квот: предельное значение квоты не было достигнуто, однако лимит считался превышенным. Это исправляет #31174. #31656 (sunny).
- Исправлено приведение типа String к IPv4 или IPv6 и обратно. Исправлено сообщение об ошибке при неудачном преобразовании. #29224 (Dmitry Novik) #27914 (Vasily Nemkov).
- Исправлена ошибка, приводившая к исключению вида
Unknown aggregate function nothingпри выполнении на удалённом сервере. Это исправляет #16689. #26074 (hexiaoting). - Исправлена ошибка выбора неверной базы данных для
JOINбез явного указания базы данных в распределённых запросах (устраняет: #10471). #33611 (Azat Khuzhin). - Исправлена ошибка сегментации в формате Apache
Avro, которая возникает после второй операции вставки в файл. #33566 (Kruglov Pavel). - Исправлена ошибка сегментации в формате Apache
Arrow, возникающая, когда схема содержит типDictionary. Закрывает #33507. #33529 (Kruglov Pavel). - Параметры
offsetиlimit, заданные вне запроса, могут некорректно применяться к представлениям. Закрыты #33289 #33518 (hexiaoting). - Исправлено исключение
Block structure mismatch, которое могло возникать при вставке в таблицу со столбцом со значением по умолчанию и вложеннымLowCardinality. Исправляет #33028. #33504 (Nikolai Kochetov). - Исправлены выражения словаря для атрибутов
range_hashedминимального и максимального значений диапазона при создании с помощью DDL. Закрывает #30809. #33478 (Maksim Kita). - Исправлена возможная ошибка использования освобождённой памяти (use-after-free) при выполнении INSERT в материализованное представление при одновременном выполнении DROP (Azat Khuzhin).
- Не пытайтесь читать за пределами EOF (как обходной путь для ошибки в ядре Linux). Эту ошибку можно воспроизвести на ядрах Linux версий 3.14–5.9, при условии, что установлено
index_granularity_bytes=0(т. е. отключена адаптивная гранулярность индекса). #33372 (Azat Khuzhin). - Команды
SYSTEM SUSPENDиSYSTEM ... THREAD FUZZERне выполняли проверку прав доступа. Это исправлено. Автор: Kevin Michel. #33333 (alexey-milovidov). - Исправлена проблема, из-за которой
COMMENTдля словарей не отображался вsystem.tables,system.dictionaries. Добавлена возможность изменять комментарий для движкаDictionary. Закрывает #33251. #33261 (Maksim Kita). - Добавлено логирование асинхронных вставок (с включённой настройкой
async_insert) в журнал запросов. Ранее такие запросы не отображались в журнале запросов. #33239 (Anton Popov). - Исправлена отправка выражений
WHERE 1 = 0для запросов к внешним базам данных. Закрывает #33152. #33214 (Kseniia Sumarokova). - Исправлена валидация DDL для MaterializedPostgreSQL. Исправлена настройка
materialized_postgresql_allow_automatic_update. Закрывает #29535. #33200 (Kseniia Sumarokova). Обеспечено гарантированное удаление неиспользуемых replication slots. Проблема обнаружена в #26952. #33187 (Kseniia Sumarokova). Исправлена обработка detach/attach (удаление / добавление в репликацию) таблиц с нестандартной схемой (отличной от схемы по умолчанию) для MaterializedPostgreSQL. Проблема обнаружена в #29535. #33179 (Kseniia Sumarokova). Исправлена операция DROP для базы данных MaterializedPostgreSQL. #33468 (Kseniia Sumarokova). - Метрика
StorageBufferBytesиногда вычислялась некорректно. #33159 (xuyatian). - Исправлена ошибка
Invalid version for SerializationLowCardinality key column, возникавшая при чтении из столбцаLowCardinalityс включённымlocal_filesystem_read_prefetchилиremote_filesystem_read_prefetch. #33046 (Nikolai Kochetov). - Исправлена проблема с чтением пустого файла табличной функцией
s3. Закрывает #33008. #33037 (Kseniia Sumarokova). - Исправлена утечка контекста при использовании настройки
cancel_http_readonly_queries_on_client_close(т.е. утечка внешних таблиц, загруженных на сервер, и других ресурсов). #32982 (Azat Khuzhin). - Исправлен некорректный вывод кортежей в формате
CSVпри использовании настраиваемого разделителя CSV. #32981 (Kruglov Pavel). - Исправлена проверка URL HDFS, которая не позволяла использовать адрес namenode в конфигурации высокой доступности (HA). Ошибка появилась в https://github.com/ClickHouse/ClickHouse/pull/31042. #32976 (Kruglov Pavel).
- Исправлена ошибка, при которой выбрасывалось исключение вида "positional argument out of bounds" для непозиционных аргументов. Закрывает #31173#event-5789668239. #32961 (Kseniia Sumarokova).
- Исправлено неопределённое поведение (UB) в случае неожиданного EOF при заполнении множества из HTTP-запроса (то есть если клиент прервал соединение посередине, например
timeout 0.15s curl -Ss -F 's=@t.csv;' 'http://127.0.0.1:8123/?s_structure=key+Int&query=SELECT+dummy+IN+s'и при достаточно большомt.csv). #32955 (Azat Khuzhin). - Исправлена регрессия в функции
replaceRegexpAll. Функция работала некорректно, если совпавшая подстрока была пустой. Исправление закрывает #32777. Исправление закрывает #30245. #32945 (alexey-milovidov). - Исправлено чтение страйпов формата
ORC. #32929 (kreuzerkrieg). topKWeightedStateзавершался с ошибкой для некоторых типов входных данных. #32487. #32914 (vdimir).- Исправлено исключение
Single chunk is expected from view inner query (LOGICAL_ERROR)в материализованном представлении. Исправлена проблема #31419. #32862 (Nikolai Kochetov). - Исправлена оптимизация lazy seek для асинхронного чтения из удалённых файловых систем. Закрывает #32803. #32835 (Kseniia Sumarokova).
- Движок таблицы
MergeTreeмог незаметно пропускать некоторые мутации, если одновременно выполнялось слишком много мутаций или при высоком потреблении памяти; проблема исправлена. Исправляет #17882. #32814 (tavplubix). - Избегайте повторного использования кэша скалярных подзапросов при обработке блоков MV. Это исправляет ошибку, возникающую, когда скалярный подзапрос ссылается на исходную таблицу, но означает, что все скалярные подзапросы в определении MV будут вычисляться для каждого блока. #32811 (Raúl Marín).
- Сервер мог не запуститься, если база данных с движком
MySQLне могла подключиться к серверу MySQL; проблема исправлена. Исправляет #14441. #32802 (tavplubix). - Исправлена ошибка, вызывавшая сбой при использовании функции
fuzzBits, закрыт #32737. #32755 (SuperDJY). - Исправлена ошибка
Column is not under aggregate functionпри использовании MV сGROUP BY (list of columns)(эта конструкция интерпретируется какGROUP BY tuple(...)) поверхKafka/RabbitMQ. Исправлены #32668 и #32744. #32751 (Nikolai Kochetov). - Исправлен запрос
ALTER TABLE ... MATERIALIZE TTLдля режимовTTL ... DELETE WHERE ...иTTL ... GROUP BY .... #32695 (Anton Popov). - Исправлена оптимизация
optimize_read_in_orderв случае, когда табличный движок —DistributedилиMerge, а базовые таблицыMergeTreeимеют в качестве префикса ключа сортировки монотонную функцию. #32670 (Anton Popov). - Исправлено исключение LOGICAL_ERROR, возникавшее, когда в качестве целевой таблицы материализованного представления используется таблица типа JOIN или SET. #32669 (Raúl Marín).
- Вставка данных в S3 с многочастичной загрузкой в Google Cloud Storage может приводить к прерыванию операции загрузки. #32504. #32649 (vdimir).
- Исправлено возможное исключение при запуске хранилища
RabbitMQпутём отложенного создания канала. #32584 (Kseniia Sumarokova). - Исправлена проблема с временем жизни таблицы (т. е. возможное использование после освобождения памяти) в случае параллельных DROP TABLE и INSERT. #32572 (Azat Khuzhin).
- Исправлены асинхронные вставки с форматами
CustomSeparated,Template,Regexp,MsgPackиJSONAsString. Ранее асинхронные вставки с этими форматами не считывали никакие данные. #32530 (Kruglov Pavel). - Исправлена функция
groupBitmapAndпри работе с распределённой таблицей. #32529 (minhthucdao). - Исправлен краш в JOIN, обнаруженный фаззером, закрыта задача #32458. #32508 (vdimir).
- Корректная обработка ситуации с дублированием столбцов в Apache Arrow. #32507 (Dmitriy Mokhnatkin).
- Исправлена проблема неоднозначного форматирования распределённых запросов, которая приводила к ошибкам, когда некоторые столбцы таблиц назывались
ALLилиDISTINCT. Это закрывает #32391. #32490 (alexey-milovidov). - Исправлены сбои в запросах, которые пытаются использовать скиппинг-индексы, ещё не материализованные. Исправляет #32292 и #30343. #32359 (Anton Popov).
- Исправлен некорректный запрос
SELECT, возникавший при наличии более чем двух политик строк для одного и того же столбца, начиная со второго запроса в той же сессии. #31606. #32291 (SuperDJY). - Исправлено преобразование Unix‑меток времени с дробной частью в
DateTime64: дробная часть менялась на противоположную для отрицательных Unix‑меток времени (до 1970-01-01). #32240 (Ben). - Некоторые записи очереди репликации могли «зависать» на время
temporary_directories_lifetime(1 день по умолчанию) с ошибками видаDirectory tmp_merge_<part_name>илиPart ... (state Deleting) already exists, but it will be deleted soonили подобными. Это исправлено. Исправляет проблему #29616. #32201 (tavplubix). - Исправлен разбор трансформера столбца
APPLY lambda, который мог приводить к аварийному завершению работы клиента или сервера. #32138 (Kruglov Pavel). - Исправлена ошибка, из-за которой
base64Encodeдобавлял лишние байты для коротких строк. #31797 (Kevin Michel). - Исправлена возможная аварийная остановка (или некорректный результат) при использовании аргументов типа
LowCardinalityв оконной функции. Исправляет #31114. #31888 (Nikolai Kochetov). - Устранена проблема зависания при выполнении команды
DROP TABLE system.query_log sync. #33293 (zhanghuajie).