Релиз ClickHouse 22.12, 2022-12-15. Презентация, Видео
Примечания к обновлению
- Исправлена проблема обратной несовместимости при (де)сериализации состояний агрегатных функций
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). - Добавлен алгоритм JOIN
grace_hash; его можно включить с помощью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для операций с Decimal с фиксированной точностью. #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). - В системную таблицу
databasesдобавлен столбецengine_full, чтобы через системные таблицы можно было получить доступ к полному определению движка базы данных. #43468 (凌涛). - Добавлена новая хеш-функция xxh3. Также благодаря обновлению библиотеки повышена производительность
xxHash32иxxHash64на ARM. #43411 (Nikita Taranov). - Добавлена поддержка задания ограничений для настроек MergeTree. Например, можно запретить пользователям переопределять
storage_policy. #43903 (Sergei Trifonov). - Добавлена новая настройка
input_format_json_read_objects_as_strings, которая позволяет разбирать вложенные JSON-объекты как Strings во всех входных форматах JSON. Эта настройка по умолчанию отключена. #44052 (Kruglov Pavel).
Экспериментальные возможности
- Добавлена поддержка дедупликации для асинхронных вставок. До этого изменения асинхронные вставки не поддерживали дедупликацию, поскольку несколько небольших вставок объединялись в один батч. Закрывает #38075. #43304 (Han Fei).
- Добавлена поддержка косинусного расстояния для экспериментального индекса Annoy (поиск по сходству векторов). #42778 (Filatenkov Artur).
- Добавлены запросы
CREATE / ALTER / DROP NAMED COLLECTION. #43252 (Kseniia Sumarokova). Эта возможность находится в разработке, и по состоянию на версию 22.12 эти запросы ещё не действуют. Эта запись в журнале изменений добавлена только во избежание путаницы. По умолчанию доступ к именованным коллекциям предоставляется только пользователю, указанному в config. Чтобы видеть их, необходимо установить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включает фоновый пул I/O для чтения из таблицMergeTree. Это может повысить производительность запросов, ограниченных I/O, при совместном использовании сmax_streams_to_max_threads_ratioилиmax_streams_for_merge_tree_reading. #43260 (Nikolai Kochetov). В случае хранилища с высокой задержкой, малого числа CPU и большого числа частей данных это может ускорить работу до 100 раз. - Настройки
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 работает без последующей exclusive-блокировки, а значит, параллельные чтения не блокируются. Также для всех этих запросов обеспечена долговечность. Если запрос выполнен успешно, то позже «воскресшие» части не появятся. Обратите внимание, что атомарность достигается только в рамках транзакции. #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, а также добавлен параметр config 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). - В таблицу
system.partsдобавлен столбецtable_uuid. #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). - Добавлена возможность собирать profile events с
trace_type = 'ProfileEvent'вsystem.trace_logпри каждом инкременте вместе с текущим стеком, именем profile event и значением инкремента. Это можно включить с помощью настройки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. Исправить работу повторных попыток для дискаweb. #42800 (Azat Khuzhin). - Исправлено (логическое) состояние гонки между вставками и удалением materialized view. Состояние гонки возникало, когда materialized view удалялось одновременно с
INSERT: в начале выполнения materialized view присутствовали в зависимостях вставки, но к тому моменту, когда цепочка вставки пыталась обратиться к ним, таблица уже была удалена, что приводило либо к исключениюUNKNOWN_TABLE, либо кTABLE_IS_DROPPEDи останавливало вставку. После этого изменения таких исключений больше не возникает: если зависимость исчезла, вставка просто продолжается. #43161 (AlfVII). - Исправлено неопределённое поведение в функции
quantiles, которое могло приводить к использованию неинициализированной памяти. Обнаружено с помощью fuzzer. Закрывает #44066. #44067 (Alexey Milovidov). - В
CompressionCodecDeltaдобавлена дополнительная проверка на нулевой размер несжатых данных. #43255 (Nikita Taranov). - Уплощать массивы из Parquet, чтобы избежать проблемы с несогласованностью данных в массивах. Такие некорректные файлы может создавать 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и совместим с большинством DDL-операторовDROPв MySQL. #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). - Исправлена ошибка, из-за которой могли повреждаться проекции, если включена и используется репликация с нулевым копированием (экспериментальная возможность). #43764 (alesapin).
- Исправлено использование multipart-загрузки для очень крупных объектов в 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). - Добавлена table function
hudiиdeltaLake. #43080 (flynn). - Поддержка составных временных интервалов. 1. Теперь для Intervals доступны операции сложения, вычитания и смены знака. Если типы Intervals различаются, они будут преобразованы в Tuple этих типов. 2. К полю Date/DateTime можно прибавить кортеж интервалов или вычесть его из него. 3. Добавлен разбор Intervals разных типов, например:
INTERVAL '1 HOUR 1 MINUTE 1 SECOND'. #42195 (Nikolay Degterinsky). - Добавлена поддержка glob-шаблона
**для рекурсивного обхода каталогов в файловой системе и 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: улучшена производительность коммита в случаях, когда у множества разных узлов есть незакоммиченные состояния. Это должно помочь в ситуациях, когда узел follower не успевает синхронизироваться. #42926 (Antonio Andelic).
- Условие вида
NOT LIKE 'prefix%'может использовать основной индекс. #42209 (Duc Canh Le).
Экспериментальные возможности
- Поддержка типа
Objectвнутри других типов, напримерArray(JSON). #36969 (Anton Popov). - Игнорирование события SAVEPOINT в binlog MySQL для MaterializedMySQL. #42931 (zzsmdfj). Игнорирование запросов SAVEPOINT в MaterializedMySQL. #43086 (Stig Bakken).
Улучшения
- Простые запросы с небольшим LIMIT будут корректно определять примерное количество строк для чтения, поэтому порог будет проверяться правильно. Закрывает #7071. #42580 (Han Fei).
- Добавлена поддержка интерактивных параметров в запросах INSERT VALUES. #43077 (Nikolay Degterinsky).
- Добавлено новое поле
allow_readonlyвsystem.table_functions, чтобы разрешить использование табличных функций в режиме только для чтения. Устраняет #42414 Реализация: * В таблицу system.table_functions добавлено новое поле allow_readonly. * Обновлено использование нового поля allow_readonly, чтобы разрешить использование табличных функций в режиме только для чтения. Тестирование: * Добавлен тест в файловой системе tests/queries/0_stateless/02473_functions_in_readonly_mode.sh Документация: * Обновлена англоязычная документация по табличным функциям. #42708 (SmitaRKulkarni). system.asynchronous_metricsтеперь содержит встроенную документацию. Эта документация также экспортируется в Prometheus. Исправлена ошибка в метриках для дисковcache— они вычислялись только для одного произвольного диска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). - В
system.detached_partsдобавлены столбцыbytes_on_diskиpath. Закрывает #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 (李扬). - Функции
formatDateTimeиFROM_UNIXTIMEтеперь поддерживают аргументыDate32. #42737 (Roman Vasin). - Обновлён tzdata до версии 2022f. В Мексике больше не будет перехода на летнее время, кроме районов у границы с США: https://www.timeanddate.com/news/time/mexico-abolishes-dst-2022.html. Чиуауа переходит на круглогодичное время UTC-6 с 2022-10-30. Фиджи больше не переходит на летнее время. См. 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, чтобы избежать ошибок из-за ограничения multipart-загрузки в S3 максимумом в 10 000 частей. #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). - Добавлены некоторые функции для совместимости с PowerBI при подключении по протоколу MySQL #42612 (Filatenkov Artur).
- Повышено удобство использования панели мониторинга при внесении изменений #42872 (Vladimir C).
улучшение сборки/тестирования/пакетирования
- Запуск SQLancer для каждого pull request и каждого коммита в master. SQLancer — это open source фаззер, ориентированный на автоматическое обнаружение логических ошибок. #42397 (Ilya Yatsishin).
- Обновление до последней версии zlib-ng. #42463 (Boris Kuschel).
- Добавлена поддержка тестирования ClickHouse server с помощью 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). - Удалены некоторые библиотеки из Ubuntu Docker-образа. #42622 (Alexey Milovidov).
исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном или предстабильном релизе)
- Обновлён normaliser для клонирования AST псевдонима. Устраняет #42452 Реализация: * QueryNormalizer обновлён так, чтобы клонировать AST псевдонима при его замене. Ранее простое присваивание того же объекта приводило к исключению в LogicalExpressinsOptimizer, поскольку один и тот же родительский узел вставлялся повторно. * Эта ошибка не проявляется с новым анализатором (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: в значения enum добавлен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).
- Исправлено некорректное поведение при нескольких дизъюнктах в hash join, закрыт #42832. #42876 (Vladimir C).
- При выполнении
select if as from '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). - Исправлен парсинг lambda. Закрывает #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 с исходной структурой path/data. #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). - В SQL добавлена хеш-функция BLAKE3. #33435 (BoloniniD).
- Функция
javaHashтеперь поддерживает целые числа. #41131 (JackyWoo). - Добавлена поддержка OpenTelemetry для DDL с предложением ON CLUSTER (требуется, чтобы
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). - Добавлены функции кодирования и декодирования Мортона (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). Это позволяет хранить до PB данных в одной партиции одной таблицы на одном сервере, что возможно при использовании дисковых полок или Объектного хранилища. #42002 (Alexey Milovidov).
- Реализован parser элементов с учётом приоритета операторов, чтобы уменьшить требуемый размер стека. #34892 (Nikolay Degterinsky).
- Оптимизация DISTINCT in order теперь использует свойства сортировки потоков данных. Это улучшение позволяет выполнять упорядоченное чтение для DISTINCT там, где это применимо (раньше для этого требовалось указывать ORDER BY по столбцам из DISTINCT). #41014 (Igor Nikonov).
- ColumnVector: оптимизирован индекс UInt8 с помощью AVX512VBMI. #41247 (Guo Wangyang).
- Оптимизирована конкуренция за блокировки для
ThreadGroupStatus::mutex. Эксперименты по производительности SSB (Star Schema Benchmark) на системе ICX (Intel Xeon Platinum 8380 CPU, 80 ядер, 160 потоков) показывают, что это изменение может дать прирост в 2.95x по геометрическому среднему QPS для всех подслучаев. #41675 (Zhiguo Zhou). - В сборки AArch64 добавлены привилегии
ldapr. Это поддерживается начиная с 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/агрегатных функций. Ранее комбинаторы вроде
ForEach/Resample/Mapв этих местах не работали, и их использование приводило к исключению видаState function ... inserts results into non-state column. #41107 (Kruglov Pavel). - Добавлена функция
tryDecrypt, которая возвращает NULL, если расшифровка завершается ошибкой (например, при расшифровке с неверным ключом), вместо того чтобы генерировать исключение. #41206 (Duc Canh Le). - В таблицу
system.disksдобавлен столбецunreserved_space, чтобы проверять, сколько места на каждом диске не занято резервированиями. #41254 (filimonov). - Добавлена поддержка заголовков авторизации S3 в аргументах табличной функции. #41261 (Kseniia Sumarokova).
- Добавлена поддержка MultiRead в Keeper и во внутреннем клиенте ZooKeeper (это расширение протокола ZooKeeper, доступное только в ClickHouse Keeper). #41410 (Antonio Andelic).
- Добавлена поддержка сравнения значений типа Decimal с литералом с плавающей запятой в операторе IN. #41544 (liang.huang).
- Разрешена поддержка удобочитаемых значений размера (например,
1TB) в конфигурации cache. #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).
- Исправлен параллельный parsing: сегментатор теперь проверяет
max_block_size. Это устраняет избыточное выделение памяти при параллельном parsing и небольшом LIMIT. #41852 (Vitaly Baranov). - Не добавлять исключение “TABLE_IS_DROPPED” в
system.errors, если оно возникло при выполнении SELECT из системной таблицы и было проигнорировано. #41908 (AlfVII). - Улучшена опция
enable_extended_results_for_datetime_functions: теперь для функцийtoStartOfDay,toStartOfHour,toStartOfFifteenMinutes,toStartOfTenMinutes,toStartOfFiveMinutes,toStartOfMinuteиtimeSlotона возвращает результаты типа DateTime64. #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 epoch, а конечная — после Unix epoch. #42308 (Roman Vasin). - При загрузке больших частей в Minio выполнение ‘Complete Multipart Upload’ может занимать много времени. Minio отправляет heartbeat-сообщения каждые 10 секунд (см. https://github.com/minio/minio/pull/7198). Но ClickHouse срабатывает по тайм-ауту раньше, потому что тайм-аут отправки/получения по умолчанию set на 5 секунд. #42321 (filimonov).
- Исправлено редкое некорректное приведение типов aggregate state для сложных типов, таких как 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 (даже немного проще, чем установка одной командой).
- В AST-фаззер добавлена поддержка генерации предложения WHERE, а также возможность добавлять и удалять 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с последующей ошибкой «файл не найден». #42081 (Chun-Sheng, Li). - cctz обновлён до
2022eдля поддержки новых изменений часовых поясов. Переходы в Палестине теперь происходят по субботам в 02:00. Три часовых пояса Украины объединены в один. Иордания и Сирия переходят с +02/+03 с DST на круглогодичный +03. (https://data.iana.org/time-zones/tzdb/NEWS). Это закрывает #42252. #42327 (Alexey Milovidov). #42273 (Dom Del Nano). - В ClickHouse добавлена поддержка кода на Rust; в качестве примера используется библиотека хеш-функции BLAKE3. #33435 (BoloniniD).
исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном или предстабильном релизе)
- Выбор корректного метода агрегации для
LowCardinalityс большими целочисленными типами. #42342 (Duc Canh Le). - Несколько исправлений для диска
web. #41652 (Kseniia Sumarokova). - Исправлена проблема, из-за которой команда
docker runзавершается с ошибкой, если в config отсутствуетhttps_port. #41693 (Yakov Olkhovskiy). - Мутации некорректно отменялись при остановке сервера или по запросу
SYSTEM STOP MERGES, а сама отмена могла занимать много времени; это исправлено. #41699 (Alexander Tokmakov). - Исправлен неверный результат запросов с
ORDER BYилиGROUP BYпо столбцам из префикса ключа сортировки, обёрнутых в монотонные функции, при включённой оптимизации “read in order” (настройки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).
- В старых версиях базы данных Replicated нет специальной метки в [Zoo]Keeper. Нужно проверять только, содержит ли узел какие-то неочевидные данные, а не специальную метку. #41875 (Nikita Mikhaylov).
- Исправлено возможное исключение в fs cache. #41884 (Kseniia Sumarokova).
- Исправлена настройка
use_environment_credentialsдля табличной функции S3. #41970 (Kseniia Sumarokova). - Исправлена ошибка “Каталог уже существует и не пуст” при отсоединении повреждённой части, которая могла помешать запуску репликации таблицы
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 in order приводит к 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 setting, а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. Ранее состояние quantile интерпретировало столбцы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 server добавлены встроенные панели мониторинга. Это демонстрационный проект о том, как получить 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, которая позволяет выводить decimals в двойных кавычках; по умолчанию отключена. — Также разрешён разбор decimals в двойных кавычках при импорте данных. #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 как хранилище типа ключ-значение. #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, где дляtableзадано определение хранилища: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).
- Реализована батч-обработка агрегатных функций с несколькими аргументами Nullable. #41058 (Raúl Marín).
- Ускорено чтение UniquesHashSet (например,
uniqStateс диска). #41089 (Raúl Marín). - Исправлено повышенное использование памяти при выполнении мутаций компактных частей в таблицах с огромным количеством столбцов. #41122 (lthaooo).
- На ARM включена библиотека vectorscan, что ускоряет обработку регулярных выражений. #41033 (Robert Schulze).
- vectorscan обновлён до версии 5.4.8, которая включает множество оптимизаций производительности, ускоряющих обработку регулярных выражений. #41270 (Robert Schulze).
- Исправлен некорректный fallback, из-за которого при очень высоком уровне параллелизма локальный файловый кэш для VFS (например, S3) ошибочно пропускался. #40420 (Kseniia Sumarokova).
- Если фильтр ROW POLICY всегда ложен, пустой результат возвращается сразу, без чтения данных. Это закрывает #24012. #40740 (Amos Bird).
- Параллельный hash JOIN для типов данных Float мог работать неоптимально. Исправлено. #41183 (Alexey Milovidov).
Улучшения
- При запуске и вызове ATTACH таблицы
ReplicatedMergeTreeбудут доступны только для чтения, пока не будет установлено соединение с ZooKeeper и не завершится инициализация. #40148 (Antonio Andelic). - Добавлена опция
enable_extended_results_for_datetime_functions, которая позволяет возвращать результаты типа Date32 для функций toStartOfYear, toStartOfISOYear, toStartOfQuarter, toStartOfMonth, toStartOfWeek, toMonday и toLastDayOfMonth, если аргумент имеет тип 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). - Для таблиц ODBC и JDBC разрешены CONSTRAINT. #34551 (Alexey Milovidov).
- Не выводить
SETTINGSбольше одного раза при форматировании запроса, если в исходном запросе он не встречался несколько раз. #38900 (Raúl Marín). - Улучшено распространение контекста трассировки (OpenTelemetry) между потоками выполнения. #39010 (Frank Chen).
- ClickHouse Keeper: если указан
interserver_listen_host, слушатели добавляются только в Keeper. #39973 (Antonio Andelic). - Улучшено восстановление хранилища прав доступа пользователей Replicated после ошибок. #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вDateиDate32для значенийDateTime64, таких как2022-08-22 01:02:03.456. Разрешено преобразование изStringвDate32для значенийDateTime, таких как2022-08-22 01:02:03. Это закрывает #39598. #40475 (Alexey Milovidov). - Улучшена поддержка вложенных структур данных в формате Parquet #40485 (Arthur Passos).
- Добавлена поддержка чтения
Array(Record)в Avro в уплощённую вложенную таблицу. #40534 (Kruglov Pavel). - Добавлена поддержка режима только для чтения в
EmbeddedRocksDB. #40543 (Lloyd-Pottiger). - Добавлена проверка параметра метода сжатия для движка таблицы URL. #40600 (Frank Chen).
- Улучшено определение формата для табличной функции/движка url при наличии query string после имени файла. Закрывает #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).
- Создан файл status для каталога файлового кэша, чтобы каталоги кэша не использовались совместно разными серверами или кэшами. #40820 (Kseniia Sumarokova).
- Добавлена поддержка операций
DELETEиUPDATEдля хранилищаEmbeddedRocksDB. #40853 (Antonio Andelic). - ClickHouse Keeper: исправлено завершение работы при длительном коммите и увеличен допустимый размер запроса. #40941 (Antonio Andelic).
- Исправлено состояние гонки в WriteBufferFromS3, добавлены аннотации TSA. #40950 (Kseniia Sumarokova).
- В наборах группировки с group_by_use_nulls в Nullable должны преобразовываться только столбцы ключа. #40997 (Duc Canh Le).
- Улучшена обсервабилити для INSERT в distributed таблицу. #41034 (Frank Chen).
- Больше низкоуровневых метрик для работы с S3. #41039 (mateng915).
- Поддержка относительных путей в заголовке Location после HTTP-перенаправления. Закрывает #40985. #41162 (Kruglov Pavel).
- Изменения HTTP-обработчиков теперь можно применять на лету без перезапуска сервера. #41177 (Azat Khuzhin).
- ClickHouse Keeper: корректно закрывает активные сеансы при завершении работы. #41215 (Antonio Andelic). Это сокращает время, в течение которого возникают ошибки “таблица доступна только для чтения”.
- Добавлена возможность автоматически комментировать SQL-запросы в clickhouse-client/local (по
Alt-#, как в readline). #41224 (Azat Khuzhin). - Исправлена несовместимость кэша при переключении настройки
do_no_evict_index_and_mark_filesмежду значениями 1 и 0. #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). - В deb-пакеты добавлено поле
source, обновлёнnfpm. #41531 (Mikhail f. Shiryaev). - Поддержка DWARF-5 в собственном парсере DWARF. #40710 (Azat Khuzhin).
- Добавлена инъекция сбоев в клиенте ZooKeeper для тестирования #30498 (Alexander Tokmakov).
- Добавлены тесты без сохранения состояния для хранилища S3 в режимах debug и tsan #35262 (Kseniia Sumarokova).
- Нагрузочное тестирование поверх S3 #36837 (alesapin).
- В
clang-tidyвключена проверкаconcurrency-mt-unsafe#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).
- Добавлена возможность читать файлы, сжатые с помощью Snappy, из Hadoop. #40482 (Kruglov Pavel).
- Исправлен сбой при разборе значений типа
Object(экспериментальная возможность), содержащего массивы переменной размерности. #40483 (Duc Canh Le). - Исправлена настройка
input_format_tsv_skip_first_lines. #40491 (mini4). - Исправлена ошибка (race condition) при запуске движка базы данных/таблицы 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).
- Исправлено выполнение функции
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 при чтении marks. #40705 (Azat Khuzhin).
- Исправлена утечка памяти при отправке в MVs без контекста запроса (из Kafka/…). #40732 (Azat Khuzhin).
- Исправлена возможная ошибка Attempt to read after EOF при автоматическом определении схемы CSV. #40746 (Kruglov Pavel).
- Исправлена логическая ошибка в кэше с записью насквозь: “Завершить файловый сегмент может только загрузчик”. Закрывает #40748. #40759 (Kseniia Sumarokova).
- Сделать результат функции GROUPING таким же, как в SQL и других системах управления базами данных. #40762 (Dmitry Novik).
- В #40595 сообщалось, что функциональность
host_regexpнекорректно работала при разрешении имени в адрес через/etc/hosts. Это исправлено. #40769 (Arthur Passos). - Исправлена работа инкрементальных резервных копий для семейства Log. #40827 (Vitaly Baranov).
- Исправлена крайне редкая ошибка, которая может потенциально привести к потере данных при репликации с нулевым копированием. #40844 (alesapin).
- Исправлены сбои при анализе условия ключа, возникавшие, когда одно и то же set-выражение строилось из разных столбцов. #40850 (Duc Canh Le).
- Исправлено определение схемы для вложенных объектов JSON. #40851 (Kruglov Pavel).
- Исправлено удаление каталога с 3-значным префиксом для файлов файлового кэша, если он пуст. Закрывает #40797. #40867 (Kseniia Sumarokova).
- Исправлена неперехваченная ошибка DNS_ERROR при сбое соединения с репликами. #40881 (Robert Coelho).
- Исправлена ошибка при удалении лишних столбцов в подзапросе. #40884 (luocongkai).
- Устранено избыточное выделение памяти для удалённых буферов чтения. #40896 (Kseniia Sumarokova).
- Исправлено поведение, при котором пользователь с явно отозванным grant на удаление баз данных всё равно мог удалить такую базу данных. #40906 (Nikita Mikhaylov).
- Исправление для ClickHouse Keeper: пути в запросах на запись теперь корректно сравниваются с путями внутренних системных узлов Keeper. #40918 (Antonio Andelic).
- Устранена взаимная блокировка в WriteBufferFromS3. #40943 (Kseniia Sumarokova).
- Исправлены права доступа для
DESCRIBE TABLE url()и некоторых другихDESCRIBE TABLE <table_function>(). #40975 (Vitaly Baranov). - Удалена некорректная логика parser для
WITH GROUPING SETS, которая может приводить к разыменованию nullptr. #41049 (Duc Canh Le). - Исправление для ClickHouse Keeper: устранён возможный сбой сегментации при завершении работы Keeper. #41075 (Antonio Andelic).
- Исправлены возможные ошибки segfault, 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). - Исправлен некорректный результат запроса при использовании тривиальной оптимизации count с ARRAY JOIN. Это исправление для #39431. #41158 (Denny Crane).
- Исправлена ошибка stack-use-after-return в GetPriorityForLoadBalancing::getPriorityFunc(). #41159 (Azat Khuzhin).
- Исправлено Исключение «Позиционный аргумент вне допустимых границ». Закрывает #40634. #41189 (Kseniia Sumarokova).
- Исправлена фоновая очистка повреждённых отсоединённых частей. #41190 (Kseniia Sumarokova).
- Исправлено экспоненциальное переписывание запроса в случае большого количества CROSS JOIN с WHERE, закрывает #21557. #41223 (Vladimir C).
- Исправлена возможная логическая ошибка в кэше с политикой сквозной записи, возникавшая из-за того, что не все типы исключений обрабатывались должным образом. Закрывает #41208. #41232 (Kseniia Sumarokova).
- Исправлена строковая запись в журнале в system.filesystem_cache_log. #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” при выборке из
system.distributed_ddl_queue, если в конфигурации отсутствуетdistributed_ddl.path. Исправление #41096. #41296 (young scott). - Исправлена некорректная логическая ошибка
Expected relative pathдля диска с объектным хранилищем. Связано с #41246. #41297 (Kseniia Sumarokova). - Добавлена проверка типа столбца перед вставкой UUID в формате MsgPack. #41309 (Kruglov Pavel).
- Исправлен возможный сбой после асинхронной вставки некорректных данных в столбцы типа
Object(при включенной настройкеasync_insert). Это могло произойти, если 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). - Исправлены значения read bytes/rows в X-ClickHouse-Summary для materialized views. #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 (clause 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, то есть процессор должен быть не старее Intel Sandy Bridge / AMD Bulldozer; оба были выпущены в 2011 году. #39000 (Robert Schulze).
- Удаленный файловый кэш сделан компонуемым, добавлена возможность не вытеснять определенные файлы (например, idx, mrk, ..), удалена старая версия кэша. Теперь можно настраивать кэш поверх диска Azure Blob Storage, локального диска, диска StaticWeb и т. д. Этот PR помечен как обратно несовместимый, поскольку конфигурация кэша изменилась и для его работы необходимо обновить файл config. Старый кэш по-прежнему будет использоваться с новой конфигурацией. Сервер будет нормально запускаться и со старой конфигурацией кэша. Закрывает 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, но ценой того, что данные до ограничения придётся прочитать полностью. Это закрывает #6613. #25333 (kevin wan). - Добавлена поддержка параллельного распределённого
insert selectс табличной функциейs3Clusterв таблицы с движкамиDistributedиReplicated#34670. #39107 (Nikita Mikhaylov). - Добавлены новые настройки для управления автоматическим определением схемы из текстовых форматов: -
input_format_try_infer_dates- пытаться определять даты из строк. -input_format_try_infer_datetimes- пытаться определять дату и время из строк. -input_format_try_infer_integers- пытаться определятьInt64вместоFloat64. -input_format_json_try_infer_numbers_from_strings- пытаться определять числа из JSON-строк в JSON formats. #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® (“Sapphire Rapids”). Его назначение — ускорять типичные аналитические операции, такие как сжатие/распаковка данных и фильтрация. В ClickHouse появился новый кодек сжатия “DeflateQpl”, использующий технологию offloading Intel® IAA для высокопроизводительной реализации DEFLATE. Кодек использует Intel® Query Processing Library (QPL), которая абстрагирует доступ к аппаратному ускорителю или, если он недоступен, к программному fallback-варианту. В целом DEFLATE обеспечивает более высокую степень сжатия, чем используемый в ClickHouse по умолчанию кодек LZ4, и в результате уменьшает дисковый IO и потребление оперативной памяти. #36654 (jasperzhu). #39494 (Robert Schulze).
DISTINCTIn order сORDER BY: определение способа сортировки на основе описания сортировки входного потока. Пропуск сортировки, если входной поток уже отсортирован. #38719 (Igor Nikonov). Значительно улучшены использование памяти и время выполнения запроса + использоватьDistinctSortedChunkTransformдля финального distinct, когда столбцыDISTINCTсовпадают со столбцамиORDER BY, но вEXPLAIN PIPELINEпереименовать его вDistinctSortedStreamTransform→ это значительно улучшает использование памяти + убрать лишние выделения в горячем циклеDistinctSortedChunkTransform. #39432 (Igor Nikonov). ИспользоватьDistinctSortedTransformтолько тогда, когда описание сортировки применимо к столбцамDISTINCT, в противном случае возвращаться к обычной реализацииDISTINCT+ это позволяет выполнять меньше проверок во время работыDistinctSortedTransform. #39528 (Igor Nikonov). Исправление:DistinctSortedTransformне использовал преимущества сортировки. Он никогда не очищал HashSet, посколькуclearing_columnsопределялись некорректно (всегда были пустыми). Поэтому он, по сути, работал как обычныйDISTINCT(DistinctTransform). Это исправление значительно снижает использование памяти. #39538 (Igor Nikonov).- Использовать локальный узел в первую очередь для получения структуры удалённой таблицы при выполнении
clusterи аналогичных табличных функций. #39440 (Mingliang Pan). - Оптимизирована фильтрация по числовым столбцам с использованием compress store AVX512VBMI2. #39633 (Guo Wangyang). Для систем с AVX512 VBMI2 этот PR повышает производительность примерно на 6% для запросов бенчмарка SSB 3.1, 3.2 и 3.3 (SF=100). Протестировано на Intel Icelake Xeon 8380 * 2 socket. #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). Функции с одинаковыми состояниями можно использовать в materialized views как взаимозаменяемые. - Таблица
system.backupsпереработана и упрощена, удалён столбецinternal, пользователю теперь можно задавать ID операции, добавлены столбцыnum_files,uncompressed_size,compressed_size,start_time,end_time. #39503 (Vitaly Baranov). - Улучшена структура таблицы результатов DDL-запросов для базы данных
Replicated(отдельные столбцы с именами сегмента и реплики, более понятный status) — запросы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).- Добавлена поддержка прямого JOIN
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: создание снимка при выходе. Это можно настроить с помощью config
keeper_server.create_snapshot_on_exit; по умолчанию —true. #39755 (Antonio Andelic). - Добавлена поддержка анализа первичного ключа для
row_policy_filterиadditional_filter. Это также помогает устранять такие проблемы, как #37454. #39826 (Amos Bird). - Исправлены две проблемы с удобством использования в интерфейсе Play: - на iPad он отображался не pixel-perfect из-за лишнего скругления границ и отступов; - индикатор прогресса не отображался после первого запроса. Это закрывает #39957. Это закрывает #39960. #39961 (Alexey Milovidov).
- В интерфейсе play: добавлена нумерация строк; добавлен выбор ячеек по щелчку; добавлен гистерезис для ячеек таблицы. #39962 (Alexey Milovidov).
- Интерфейс play: распознавание клавиши 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). - Поддержка защищённой передачи по Hadoop RPC (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). Исправлена проблема с порядком байтов в BitHelpers для s390x. #39656 (Harry Lee). Реализован фрагмент кода, связанный с SipHash, для архитектуры s390x (которая не поддерживается ClickHouse). #39732 (Harry Lee). Исправлена проблема с порядком байтов в коде снимка coordination для архитектуры s390x (которая не поддерживается ClickHouse). #39931 (Harry Lee). Исправлены проблемы с порядком байтов в коде кодека для архитектуры s390x (которая не поддерживается ClickHouse). #40008 (Harry Lee). Исправлены проблемы с порядком байтов при чтении/записи двоичных данных 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).
исправление ошибки
- Исправлен возможный segfault во входном формате
CapnProto. Эта ошибка была обнаружена, и сообщение о ней было отправлено пользователем kiojj через ClickHouse bug-bounty program. #40241 (Kruglov Pavel). - Исправлен очень редкий случай неправильной работы оператора индексации массива. Это закрывает #28720. #40185 (Alexey Milovidov).
- Исправлена недостаточная проверка аргументов в функциях шифрования (обнаружено фаззером запросов). Это закрывает #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 Добавлены 2 новые настройкиinput_format_{protobuf/capnproto}_skip_fields_with_unsupported_types_in_schema_inference, которые позволяют пропускать поля с неподдерживаемыми типами при автоматическом определении схемы для форматов Protobuf и CapnProto. #39357 (Kruglov Pavel). - (Оконное представление — экспериментальная возможность) Исправлена ошибка сегментации при
CREATE WINDOW VIEW .. ON CLUSTER ... INNER. Закрывает #39363. #39384 (Kseniia Sumarokova). - Исправлена финализация WriteBuffer при отмене вставки в функцию (в предыдущих версиях это могло приводить к std::terminate). #39458 (Kruglov Pavel).
- Исправлено хранение столбцов типа
Objectв разреженной сериализации. #39464 (Anton Popov). - Исправлено возможное исключение “Not found column in block” при использовании проекций. Это закрывает #39469. #39470 (小路).
- Исправлено исключение при гонке между DROP и INSERT в materialized views. #39477 (Azat Khuzhin).
- Ошибка в библиотеке Apache Avro: исправлены гонка данных и возможное переполнение буфера кучи в формате 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). - Исправлена ошибка “столбец не найден” при проталкивании для 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, которое можно определить по scale операндов. #39600 (Andrey Zvonov).
- Исправлена совместимость настроек
output_format_arrow_string_as_stringиoutput_format_arrow_low_cardinality_as_dictionary. Закрывает #39624. #39647 (Kruglov Pavel). - Исправлена ошибка при разрешении базы данных по умолчанию при чтении из distributed таблицы. #39674 (Anton Kozlov).
- (Только для устаревших баз данных Ordinary) Оператор SELECT может читать данные удалённой таблицы, если используется кэш mmap IO, движок базы данных — 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). - Исправлены ошибки “Каталог части не существует” и “
tmp_<part_name>… Нет такого файла или каталога”, возникавшие при слишком медленном INSERT или слишком длительных merge/mutation. Также исправлена проблема, из-за которой некоторые записи очереди репликации могли зависать без каких-либо ошибок или предупреждений в журналах, если предыдущая попытка fetch 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). - По умолчанию JOIN через запятую принудительно переписывается в INNER JOIN (значение по умолчанию
cross_to_inner_join_rewrite = 2). Чтобы сохранить прежнее поведение, установитеcross_to_inner_join_rewrite = 1. #39326 (Vladimir C). Если вы столкнётесь с какими-либо несовместимостями, можно вернуть прежнее значение этой настройки.
Новая возможность
- Добавлена поддержка выражений с оконными функциями. Закрывает #19857. #37848 (Dmitry Novik).
- Добавлен новый алгоритм JOIN
directдля таблицEmbeddedRocksDB, см. #33582. #35363 (Vladimir C). - Добавлен алгоритм полного сортирующего соединения слиянием. #35796 (Vladimir C).
- Реализован движок таблицы NATS, который поддерживает публикацию и подписку через 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, чтобы в случае ROLLUP, CUBE и GROUPING SETS столбцы ключа агрегации имели тип Nullable. Закрывает #37359. #38642 (Dmitry Novik). - Добавлена возможность задавать уровень сжатия при экспорте данных. #38907 (Nikolay Degterinsky).
- Добавлена опция, требующая явных привилегий для выполнения SELECT из базы данных
system. Подробности: #38970 (Vitaly Baranov). - Функции
multiMatchAny,multiMatchAnyIndex,multiMatchAllIndicesи их варианты с нечётким поиском теперь принимают неконстантный аргумент — массив шаблонов регулярных выражений. #38485 (Robert Schulze). SQL-функцияmultiSearchAllPositionsтеперь принимает неконстантные аргументы с искомыми подстроками. #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. #38197 (Alexey Milovidov).
- Добавлены функции квадратного L2-расстояния и нормы как для массивов, так и для Tuple. #38545 (Julian Gilyadov).
- Добавлена возможность передавать через SQL HTTP-заголовки в табличную функцию / хранилище
url. Закрывает #37897. #38176 (Kseniia Sumarokova). - В пакеты добавлен бинарный файл
clickhouse-diagnostics. #38647 (Mikhail f. Shiryaev).
Экспериментальные возможности
- Добавляет новую настройку
implicit_transaction, позволяющую выполнять отдельные запросы внутри транзакции. Она автоматически управляет как созданием, так и завершением транзакции (через COMMIT, если запрос выполнен успешно, или ROLLBACK, если нет). #38344 (Raúl Marín).
Повышение производительности
- Оптимизация distinct для отсортированных столбцов. Используется специализированное преобразование 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, почти 3 месяца выполнялись в 10 раз медленнее, и при этом никто не жаловался. #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).
- Функции вычисления норм и расстояний для массивов ускорены в 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). В среднем это повышает производительность на Intel на 1..2%.
- Executable UDF, executable dictionaries и Executable tables позволят не терять одну секунду в ожидании завершения подпроцесса. #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).
- Добавлена поддержка агрегации in order (
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 / local (по аналогии с psql \i). #38813 (Kseniia Sumarokova). - Новая опция
optimize = 1вEXPLAIN AST. Если включена, показывает AST после переписывания, в противном случае — AST исходного запроса. По умолчанию отключена. #38910 (Igor Nikonov). - Разрешена запятая в конце списка столбцов. Закрывает #38425. #38440 (chen).
- Исправления ошибок и повышение производительности метода JOIN
parallel_hash. #37648 (Vladimir C). - Добавлена поддержка защищённой передачи Hadoop RPC (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).- Добавлена возможность указывать глоб-шаблоны
* or {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).
Улучшения сборки/тестирования/упаковки
- К ClickHouse применены аннотации Clang Thread Safety Analysis (TSA). #38068 (Robert Schulze).
- Универсальный скрипт установки адаптирован для FreeBSD. #39302 (Alexey Milovidov).
- Подготовка к сборке на платформе
s390x. #39193 (Harry Lee). - Исправлена ошибка в библиотеке
jemalloc. #38757 (Azat Khuzhin). - Аппаратный бенчмарк теперь поддерживает автоматическую отправку результатов. #38427 (Alexey Milovidov).
- Системная таблица “system.licenses” теперь корректно заполняется на Mac (Darwin). #38294 (Robert Schulze).
- Пакеты
all|noarchсделаны архитектурно-зависимыми, исправлена соответствующая документация, а пакеты aarch64|arm64 теперь публикуются в Artifactory и в assets релиза — исправление #36443. #38580 (Mikhail f. Shiryaev).
Исправление ошибки (некорректное поведение, заметное пользователям, в официальном стабильном или предстабильном релизе)
- Исправлено округление для
Decimal128/Decimal256с масштабом длиной более 19 цифр. #38027 (Igor Nikonov). - Исправлен сбой, вызванный состоянием гонки данных в хранилище
Hive(табличный движок Integration). #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).
- Исправлено чтение с произвольным доступом из S3 с параллельным буфером чтения. (Влияло на использование памяти во время выполнения запроса). Закрывает #38258. #38802 (Kseniia Sumarokova).
- Обновлён
simdjson. Это исправляет #38621 — переполнение буфера на машинах с новейшими процессорами Intel, поддерживающими AVX-512 VBMI. #38838 (Alexey Milovidov). - Исправлена возможная логическая ошибка в вертикальных слияниях. #38859 (Maksim Kita).
- Исправлен профиль настроек с единицей измерения «секунды». #38896 (Raúl Marín).
- Исправлено некорректное отсечение партиций при использовании Nullable ключа партиционирования. Примечание: скорее всего, вы не используете Nullable ключи партиционирования — это малоизвестная возможность, которой не стоит пользоваться. Nullable ключи не имеют смысла, и эта возможность нужна только для каких-то совсем экзотических сценариев. Исправляет #38941. #38946 (Amos Bird).
- Улучшена
fsync_part_directoryпри загрузке данных. #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 в table с присоединённым MATERIALIZED VIEW и включённой настройкой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).
- Исправлено исключение PROJECTION, возникавшее, когда ключи агрегации обёрнуты в другие функции. Это исправляет #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 (при дублировании столбцов во вложенных
SELECTрезультат мог быть некорректным). #37887 (Azat Khuzhin). - Исправлена некорректная работа MODIFY ALTER COLUMN с именами столбцов, содержащими точки. Закрывает #37907. #37971 (Kruglov Pavel).
- Исправлено чтение разреженных столбцов из таблиц
MergeTree, хранящих данные в S3. #37978 (Anton Popov). - Исправлен возможный сбой при асинхронной вставке в
Distributedв случае удаления реплики из конфигурации. #38029 (Nikolai Kochetov). - Исправлена ошибка “Отсутствующие столбцы” для GLOBAL JOIN с CTE без псевдонима. #38056 (Azat Khuzhin).
- Функции
tupleпереписываются в литералы в режиме обратной совместимости. #38096 (Anton Kozlov). - Исправлено избыточное резервирование памяти для выходного блока при
ORDER BY. #38127 (iyupeng). - Исправлена возможная логическая ошибка
Bad cast from type DB::IColumn* to DB::ColumnNullable*в функциях map для массивов. Закрывает #38006. #38132 (Kruglov Pavel). - Исправлено временное пересечение имён в частичном соединении слиянием, закрыт #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).
- (Оконное представление — экспериментальная возможность) Исправлен LOGICAL_ERROR в оконном представлении при некорректной структуре. #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 и выполнять операции attach/detach для таблиц даже при некорректных значениях представления 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 в кластере с CPU AArch64 или смешиваете AArch64 и amd64 в одном кластере, а также используете распределённые запросы с GROUP BY по нескольким ключам фиксированного размера, которые помещаются в 256 бит, но не помещаются в 64 бита, и размер результата очень велик, то во время обновления данные в результатах таких запросов будут агрегироваться не полностью. Обходной путь: выполняйте обновление с простоем вместо rolling upgrade.
Новая возможность
- Добавлена функция
GROUPING. Она позволяет различать записи в запросах сROLLUP,CUBEилиGROUPING SETS. Закрывает #19426. #37163 (Dmitry Novik). - Новый алгоритм кодека FPC для сжатия данных с плавающей точкой. #37553 (Mikhail Guzov).
- Добавлены новые столбцовые форматы JSON:
JSONColumns,JSONCompactColumns,JSONColumnsWithMetadata. Закрывает #36338 Закрывает #34509. #36975 (Kruglov Pavel). - Добавлен инструмент для визуализации трассировок OpenTelemetry на основе d3js. #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) Примечание: если в кластере с процессорами ARM одновременно работают разные версии ClickHouse и вы используете распределённые запросы с GROUP BY по нескольким ключам фиксированного размера, которые помещаются в 256 бит, но не помещаются в 64 бита, то во время обновления результат агрегационного запроса будет неверным. Временное решение: выполняйте обновление с простоем вместо поэтапного обновления.
- Улучшены производительность и использование памяти при выборке подмножества столбцов для форматов 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).
- Для движка интеграции Hive применён метод чтения
threadpool. Это значительно ускорит чтение. #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теперь применяется ко всем строкам, прочитанным суммарно из всех файлов, соответствующих глоб-шаблонам. Ранее настройкаinput_format_max_rows_to_read_for_schema_inferenceприменялась отдельно к каждому файлу в глоб-шаблоне, и при очень большом количестве значений NULL можно было прочитать первыеinput_format_max_rows_to_read_for_schema_inferenceстрок из каждого файла и ничего не получить. Также значение по умолчанию для этой настройки увеличено до 25000. #37332 (Kruglov Pavel). - Добавлен отдельный grant
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-конечную точку так, чтобы при ошибкеTIMEOUT_EXCEEDEDона возвращалаHTTP_REQUEST_TIMEOUT(408) вместоHTTP_INTERNAL_SERVER_ERROR(500). #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). Также добавлена поддержка массивов с типами Nullable в функциях вроде 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. Добавлено событие profileMemoryOvercommitWaitTimeMicroseconds. #37460 (Dmitry Novik). - Не показывать в clickhouse-client время CPU со значением
-0.0. Оно может появляться из-за ошибок округления. Закрывает #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. #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 OPTION. Например,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).
- Исправлено слишком агрессивное удаление символов, из-за которого удалялся встроенный хеш, необходимый для проверки целостности исполняемого файла. #37993 (Robert Schulze).
Исправление ошибки
- Исправлены команды
SELECT ... INTERSECTиEXCEPT SELECTдля константных типов String. #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 во время слияний (если в
config.xml(новый способ), а не вusers.xml(устаревший способ), указаны нестандартные, более высокие значенияbackground_pool_size/background_merges_mutations_concurrency_ratio). #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).
- Исправлено аварийное завершение (segmentation fault) в
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). - Исправлен возможный segfault при автоматическом определении схемы при исключении в конструкторе 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). - Исправлены права владельца каталога coordination в Docker-образе clickhouse-keeper. Исправляет #37914. #37915 (James Maidment).
- В Dictionaries исправлен пользовательский запрос с полем 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() —задача merge будет проигнорирована, если BackgroundExecutor занят —merges_with_ttl_counter не будет уменьшен. #36387 (lthaooo).
- Исправлено переопределение значения настройки
normalize_function_names. #36937 (李扬). - Исправлены оконные функции с экспоненциальным временным затуханием: теперь учитываются границы окна. #36944 (Vladimir Chebotarev).
- Исправлена возможная ошибка 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удалена из профиля пользователяdefaultвusers.xml. Это позволяет гибко задавать лимиты памяти для запросов вместо прежнего жёсткого лимита в 10 ГБ. - По умолчанию настройка
log_query_threadsотключена. Она управляет журналированием статистики по каждому потоку, участвующему в выполнении запроса. После добавления поддержки асинхронного чтения общее число различных идентификаторов потоков стало слишком большим, и запись вquery_thread_logстала слишком ресурсоёмкой. #37077 (Alexey Milovidov). - Удалена функция
groupArraySorted, содержащая ошибку. #36822 (Alexey Milovidov).
Новая возможность
- Оверкоммит памяти теперь включён по умолчанию. #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).
- Для SQL добавлена новая хеш-функция
wyHash64. #36467 (olevino). - Улучшение для баз данных Replicated: добавлен запрос
SYSTEM SYNC DATABASE REPLICA, который позволяет синхронизировать метаданные таблиц внутри базы данных Replicated, поскольку сейчас синхронизация выполняется асинхронно. #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). - При чтении wide-частей marks теперь загружаются только для необходимых столбцов. #36879 (Anton Kozlov).
- Повышена производительность кэша file descriptor за счёт сужения областей действия mutex. #36682 (Anton Kozlov).
- Повышена производительность чтения из хранилища
Fileи табличных функцийfileв случаях, когда path содержит глоб-шаблоны, а соответствующий каталог — большое количество файлов. #36647 (Anton Popov). - Для input format
HiveTextприменён параллельный parsing, что может ускорить parsing HiveText в 2 раза при чтении локального файла. #36650 (李扬). HashJoinпо умолчанию не является thread-safe для вставки строк правой таблицы и поэтому выполняет её в одном потоке. Если правая таблица велика, процесс JOIN работает слишком медленно при низкой загрузке 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).
- Разбор collations в 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: если результат состоит из одной строки и более чем нескольких столбцов, отображать его вертикально. Продолжение #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в config. #36753 (Maksim Kita). - Разрешено использовать макрос cluster в табличной функции
s3Cluster. #36726 (Vadim Volodin). - Реализована корректная отмена запросов INSERT в
clickhouse-client/clickhouse-local. #36710 (Azat Khuzhin). - Добавлена возможность отменять запрос, при этом сохраняя корректный Query id в
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).
- Рефакторинг кода, связанного с определением схемы по глоб-шаблонам. Пробовать следующий файл из глоб-шаблона только в тех случаях, когда это имеет смысл (раньше следующий файл пробовался при любой ошибке). Также это исправляет #36317. #36205 (Kruglov Pavel).
- Добавлен отдельный grant
CLUSTER, а также конфигурационная директиваaccess_control_improvements.on_cluster_queries_require_cluster_grantдля обратной совместимости (по умолчанию —false). #35767 (Azat Khuzhin). - Если необходимый объём памяти становится доступен до остановки выбранного запроса, все ожидающие запросы продолжают выполнение. Теперь мы не останавливаем ни один запрос, если память освобождается до того, как выбранный запрос узнаёт об отмене. #35637 (Dmitry Novik).
- Определение Nullable в Protobuf. В proto3 значения по умолчанию не передаются в сериализованном виде. Из-за этого непросто отличить null от значений по умолчанию для столбцов с типом Nullable. Стандартный способ решения этой проблемы — использовать обёртки Google, чтобы вложить целевое значение во внутреннее сообщение (см. https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/wrappers.proto). В этом случае отсутствующее поле интерпретируется как значение null, поле без значения — как значение по умолчанию, а поле с обычным значением — как обычное значение. Однако ClickHouse интерпретирует обёртки Google как вложенные столбцы. Мы предлагаем добавить специальное поведение для обнаружения обёрток Google и интерпретировать их так, как описано выше. Например, чтобы сериализовать значения для столбца с типом 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на этапе producer. В логе консоли можно найти предупреждение, описывающее эту проблему: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). - Исправлена ошибка “Невозможно создать столбец типа Set” для распределённых запросов с LIMIT BY. #37193 (Azat Khuzhin).
- Экспериментальная возможность: теперь запрос WindowView
WATCH EVENTSбольше не будет завершаться из-за непустого фрагмента, создаваемого в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).
- Исправлена проблема с бесконечностями в
quantileTDigest. Исправление #32107. #37021 (Vladimir Chebotarev). - Исправлена отправка данных внешних таблиц через HedgedConnections при max_parallel_replicas != 1. #36981 (Kruglov Pavel).
- Исправлена логическая ошибка в запросе
TRUNCATEк базе данныхReplicated. Исправлена проблема #33747. #36976 (tavplubix). - Экспериментальная возможность: исправлено зависание при удалении исходной таблицы в WindowView. Закрывает #35678. #36967 (vxider).
- Экспериментальная возможность (кэш RocksDB): устранена проблема: #36671. #36929 (李扬).
- Экспериментальная возможность: исправлены ошибки при использовании нескольких столбцов в WindowView благодаря добавлению действий преобразования, что позволяет вызывать
writeIntoWindowViewс немного отличающейся схемой. #36928 (vxider). - Исправлена ошибка в clickhouse-keeper, из-за которой при небольшой нагрузке и перезапусках могли повреждаться сжатые файлы журнала. #36910 (alesapin).
- Исправлен неверный результат запроса при константной агрегации. Это исправляет #36728. #36888 (Amos Bird).
- Экспериментальная возможность: исправлен подсчёт
current_sizeв кеше. #36887 (Kseniia Sumarokova). - Экспериментальная возможность: исправлено срабатывание в оконном представлении с hop-окном #34044. #36861 (vxider).
- Экспериментальная возможность: исправлено некорректное приведение типов в кэшированном буфере из удалённой файловой системы. #36809 (Kseniia Sumarokova).
- Исправлено создание таблиц с
flatten_nested = 0. Ранее неразвёрнутые столбцыNestedмогли преобразовываться в плоский вид после перезапуска сервера. #36803 (Anton Popov). - Исправлены некоторые проблемы с асинхронным чтением из удалённой файловой системы, возникавшие при чтении столбцов LowCardinality. #36763 (Kseniia Sumarokova).
- Экспериментальная возможность: исправлена вставка в столбцы типа
Objectиз нескольких файлов, например с помощью табличной функцииfileи глоб-шаблонов. #36762 (Anton Popov). - Исправлены тайм-ауты в хеджированных запросах. Зависание соединения сразу после отправки удалённого запроса могло приводить к бесконечному ожиданию. #36749 (Kruglov Pavel).
- Экспериментальная возможность: исправлена ошибка в
groupBitmapAndState/groupBitmapOrState/groupBitmapXorStateдля distributed таблицы. #36739 (Zhang Yifan). - Экспериментальная возможность: Во время теста в PR я обнаружил, что один класс кэша инициализировался дважды, из-за чего возникало исключение. Хотя причина этой проблемы неясна, в ClickHouse, по-видимому, есть логика кода, связанная с повторной загрузкой диска, поэтому для такого случая нужно добавить специальную проверку. #36737 (Han Shukai).
- Исправлено вертикальное слияние в широких частях. Ранее во время слияния могло возникать исключение
There is no column. #36707 (Anton Popov). - Исправлена перезагрузка сервера при смене порта (не дожидаясь завершения текущих соединений из контекста запроса). #36700 (Azat Khuzhin).
- Экспериментальная возможность: в предыдущем PR я обнаружил, что во время тестирования (тесты без сохранения состояния, нестабильная проверка (address, actions)) возникает тайм-аут. Более того, локальное тестирование также может вызывать нестабильные взаимные блокировки в системе. Эта проблема по-прежнему существует при использовании последнего исходного кода ветки master. #36697 (Han Shukai).
- Экспериментальная возможность: исправлена проблема с перезапуском сервера при изменении конфигурации кэша. #36685 (Kseniia Sumarokova).
- Исправлено возможное использование памяти кучи после её освобождения при автоматическом определении схемы. Закрывает #36661. #36679 (Kruglov Pavel).
- Исправлен разбор настроек в запросе
CREATE, если движок не указан. Исправление: https://github.com/ClickHouse/ClickHouse/pull/34187#issuecomment-1103812419. #36642 (tavplubix). - Экспериментальная возможность: исправлено слияние широких частей типа
Object. #36637 (Anton Popov). - Исправлено падение format, когда после EPHEMERAL следует выражение по умолчанию, а не литерал. Закрывает #36618. #36633 (flynn).
- Исправлено исключение
Missing column, которое могло возникнуть при использованииINTERPOLATEс таблицейENGINE = MergeTree. #36549 (Yakov Olkhovskiy). - Исправлена возможная ошибка с литералами в
WHEREдля JOIN-запросов. Закрывает #36279. #36542 (Vladimir C). - Исправлено обновление смещения в ReadBufferFromEncryptedFile, которое могло вызывать неопределённое поведение. #36493 (Kseniia Sumarokova).
- Исправлены проверки корректности
hostnameв конфигурации кластера 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). - Исправлен assertion в 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” Облакова) переименована вkostikConsistentHash. Старое имя сохранено как псевдоним для совместимости. Хотя это изменение обратно совместимо, этот псевдоним может быть удалён в следующих релизах, поэтому рекомендуется обновить использование этой функции в ваших приложениях. #35553 (Alexey Milovidov).
Новая возможность
- Для ORDER BY … WITH FILL добавлено расширение INTERPOLATE. Закрывает #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, ограничивающего объём записанных байтов при запросах вставки. #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). - Добавлена возможность указывать секрет кластера в базе данных Replicated. #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). - Сужена область действия mutex при взаимодействии с HDFS. Связано с #35292. #35646 (shuchaome).
- Мутации для TTL на уровне таблицы теперь требуются только при его изменении. #35953 (Azat Khuzhin).
Улучшения
- Много улучшений в определении схемы. Для определения чисел, строк, массивов, кортежей и Map в форматах данных CSV, TSV и TSVRaw теперь используются дополнительные приёмы и эвристики. Добавлена настройка
input_format_csv_use_best_effort_in_schema_inferenceдля CSV format, которая включает или отключает использование этих эвристик; если она отключена, всё обрабатывается как строки. Добавлена аналогичная настройкаinput_format_tsv_use_best_effort_in_schema_inferenceдля форматов TSV/TSVRaw. Эти настройки включены по умолчанию. - Добавлена поддержка Map при определении схемы в Values format. - Исправлен возможный segfault при определении схемы в Values format. - Разрешено пропускать столбцы с неподдерживаемыми типами в форматах 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 format с правилами экранирования 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, которая позволяет определять и разбирать булевы значения как числа во входных 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). - В
system.query_logдобавлен столбецis_secure, который показывает, использует ли клиент защищённое соединение по 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 установит
cap_net_bind_serviceдля бинарного файла. #35451 (Alexey Milovidov). - Исправлено
INSERT INTO table FROM INFILE: не отображалась полоса прогресса. #35429 (xiedeyantu). - В инструмент
clickhouse-diagnosticsдобавлены аргументы--user,--password,--host,--port. #35422 (李扬). - Добавлена поддержка UUID для движков Postgres. Закрывает #35384. #35403 (Kseniia Sumarokova).
- Для table function
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 Engine. Связанный PR: https://github.com/ClickHouse/arrow/pull/10. #34631 (李扬). - Теперь в системных таблицах логов можно указывать COMMENT в объявлении ENGINE. Исправлено в #33768. #34536 (Maksim Kita).
- Исправлена поддержка настройки
max_rows_to_readпри чтении в порядке ключа сортировки и заданном лимите. Ранее могло генерироваться исключениеLimit for rows or bytes to read exceeded, даже если запросу фактически требовалось прочитать меньше строк. #33230 (Anton Popov). - Учитывать из cgroups только quota и period, игнорировать shares (так как они на самом деле не ограничивают количество ядер, которые можно использовать). #35815 (filimonov).
улучшение сборки/тестирования/упаковки
- Добавлена следующая порция настроек рандомизации в функциональных тестах. #35047 (Kruglov Pavel).
- Добавлена проверка обратной совместимости в stress test. Закрывает #25088. #27928 (Kruglov Pavel).
- Сборка пакетов переведена на
nfpm- скриптreleaseобъявлен устаревшим в пользуpackages/build- всё собирается в образе clickhouse/binary-builder (очистка: clickhouse/deb-builder) - в cmake добавлено удаление символов (todo: use 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 image с использованием чистого 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). - Исправлен отчёт stress-test в CI: теперь мы загружаем runlog с информацией о запущенных stress tests только один раз. #35093 (Mikhail f. Shiryaev).
- Переход на libcxx / libcxxabi из LLVM 14. #34906 (Raúl Marín).
- Обновлён unixodbc для устранения CVE-2018-7485. Примечание: этот CVE не относится к 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).
- Добавлена проверка типов при создании materialized view. Исправлено: #23684. #24896 (hexiaoting).
- Исправлено форматирование запросов INSERT INFILE (не хватало кавычек). #35886 (Azat Khuzhin).
- Отключён
session_log, поскольку при фаззинге была выявлена проблема с безопасностью памяти. См. #35714. #35873 (Alexey Milovidov). - Избегайте повторной обработки TTL для каждого столбца. #35820 (Azat Khuzhin).
- Исправлена вставка в столбцы типа
Objectв случае, когда запрос на вставку содержит данные, относящиеся к нескольким партициям. #35806 (Anton Popov). - Исправлена ошибка в индексах отсутствующих столбцов в форматах -WithNames, которая приводила к ошибке
INCORRECT_NUMBER_OF_COLUMNS, если число столбцов превышало 256. Закрывает #35793. #35803 (Kruglov Pavel). - Исправлено #35751. #35799 (Nikolay Degterinsky).
- Исправлено чтение из HDFS в формате Snappy. #35771 (shuchaome).
- Исправлена ошибка при преобразовании пользовательских типов в строку, которая могла приводить к segfault или неожиданным сообщениям об ошибках. Закрывает #35752. #35755 (Kruglov Pavel).
- Исправлена реализация any/all для подзапросов. Закрывает #35489. #35727 (Kseniia Sumarokova).
- Исправлена ошибка при удалении непустой базы данных в clickhouse-local. Закрывает #35692. #35711 (Kseniia Sumarokova).
- Исправлена ошибка при создании materialized view с подзапросом после перезапуска сервера. Materialized view не обновлялась после вставки данных в базовую таблицу после перезапуска сервера. Закрывает #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). - Исправлено использование QUOTA с асинхронными вставками. #35645 (Anton Popov).
- Исправлены позиционные аргументы с псевдонимами. Закрыт #35600. #35620 (Kseniia Sumarokova).
- Проверка
remote_url_allow_hostsперед автоматическим определением схемы в движке URL. Закрывает #35064. #35619 (Kruglov Pavel). - Исправлен
HashJoinпри использовании столбцов типаLowCardinality. Это исправление закрывает #35548. #35616 (Antonio Andelic). - Исправлен возможный segfault в 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, чтобы оно соответствовало другим функциям высшего порядка: compaction теперь выполняется не по результатам лямбда-функции, а по исходному массиву. Если вы используете вarrayCompactнетривиальные лямбда-функции, прежнее поведение можно восстановить, обернув аргументыarrayCompactвarrayMap. Закрывает #34010 #18535 #14778. #34795 (Alexandre Snarskii). - Изменено специфичное для реализации поведение при overflow в функции
toDatetime. Теперь значение будет насыщаться до ближайшего минимального или максимального поддерживаемого момента времени datetime вместо циклического переполнения. Это изменение помечено как “обратно несовместимое”, поскольку кто-то мог непреднамеренно полагаться на прежнее поведение. #32898 (HaiBo Li). - Функции
cast(value, 'IPv4'),cast(value, 'IPv6')теперь ведут себя так же, какtoIPv4иtoIPv6. Изменено поведение при передаче некорректного IP-адреса в функцииtoIPv4,toIPv6: теперь при передаче недопустимого IP-адреса будет выбрасываться исключение, тогда как раньше эти функции возвращали значение по умолчанию. Добавлены функцииIPv4StringToNumOrDefault,IPv4StringToNumOrNull,IPv6StringToNumOrDefault,IPv6StringOrNulltoIPv4OrDefault,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можно читать без ограничений по path и без использования выражения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), снижено использование памяти за счёт потокового чтения и записи снимка вместо полного копирования #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в определении ROW POLICY. #34596 (Vitaly Baranov). - Улучшено определение схемы с использованием глоб-шаблонов в движках 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). - В
system.part_logдобавлено полеdisk_name. #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. #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, если в файле config указана пустая конфигурация. #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 в distributed таблицу. #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). - Для PR, таких как https://github.com/ClickHouse/ClickHouse/pull/34685, в качестве автора и коммитера используется @robot-clickhouse. #34793 (Mikhail f. Shiryaev).
- Максимальная версия DWARF для отладочной информации ограничена версией 4, поскольку наш внутренний символизатор стека не может разобрать DWARF версии 5. Это актуально, если вы компилируете ClickHouse с clang-15. #34777 (Alexey Milovidov).
- Debian-пакет
clickhouse-testудалён как излишнее усложнение. CI использует тесты из repository, а автономное тестирование через deb-пакет больше не поддерживается. #34606 (Ilya Yatsishin).
Исправление ошибки (некорректное поведение, заметное пользователям, в официальном стабильном или предстабильном релизе)
- Исправление для интеграции HDFS: если размер внутреннего буфера слишком мал,
NEED_MORE_INPUTвHadoopSnappyDecoderсрабатывает несколько раз (>=3) для одного сжатого блока. Из-за этого входные данные копируются не в ту областьHadoopSnappyDecoder::buffer. #35116 (lgbo). - Устаревшие привилегии в командах ATTACH GRANT теперь игнорируются. Это изменение исправляет #34815. #34855 (Vitaly Baranov).
- Исправлен segfault в базе данных Postgres при получении запроса CREATE TABLE, если база данных была создана с использованием именованных коллекций. Закрывает #35312. #35313 (Kseniia Sumarokova).
- Исправлена ошибка с дублированием строк при частичном соединении слиянием, закрыта #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 ...: оно пыталось считывать схему из файла S3 вместо select-запроса. #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).
- Исправлен возможный segfault в 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 при поиске файлов changelog для удаления. #34931 (Azat Khuzhin).
- Исправлено преобразование DateTime64 из PostgreSQL. Закрывает #33364. #34910 (Kseniia Sumarokova).
- Исправлена возможная ошибка “Каталог части не существует” при
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). - Остановлен выбор части для мутации, если другая реплика уже обновила журнал транзакций для движка
ReplatedMergeTree. #34633 (Jianmei Zhang). - Исправлен некорректный результат простого запроса count при использовании возможности перемещения частей данных #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. Если она указана, то для генерации ID блока используется она, а не дайджест данных. Так, например, задавая уникальное значение этой настройки в каждом операторе 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). - Добавлено автоматическое определение схемы для табличной функции
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).
- В
MemoryTrackerдобавлен оверкоммит памяти. Добавлены настройкиguaranteedдля лимитов памяти, которые представляют собой мягкие лимиты памяти. При достижении жесткого лимита памятиMemoryTrackerпытается отменить запрос с наибольшим оверкоммитом. Новая настройкаmemory_usage_overcommit_max_wait_microsecondsзадает, как долго запросы могут ждать остановки другого запроса. Закрывает #28375. #31182 (Dmitry Novik). - В WindowView включен JOIN потока с таблицей. #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). - Улучшена производительность вставки по партициям в табличные функции
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 . Полезно также применять их к столбцам-кортежам. #34060 (Amos Bird).
- Переработан и повторно включен кэш скалярных подзапросов при выполнении materialized view. #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в Dictionaries. #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). - Добавлена возможность пропускать ненайденные URL-адреса (404) для глоб-шаблонов при использовании URL-хранилища / табличной функции. Также закрывает #34359. #34392 (Kseniia Sumarokova).
- Форматы ввода и вывода по умолчанию для
clickhouse-local; их можно переопределить с помощью —input-format и —output-format. Закрывает #30631. #34352 (李扬). - Добавлены опции
max_query_sizeиmax_parser_depthдляclickhouse-format, что закрывает #30528. #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). - Изменён уровень серьёзности сообщения “Отменено слияние частей” в журнале, поскольку это не ошибка. Это закрывает #34148. #34232 (alexey-milovidov).
- Добавлена возможность сочетать оператор приведения типов
::в стиле PostgreSQL с выражениями, использующими операторы[]и.(индексация массивов и кортежей). #34229 (Nikolay Degterinsky). - Добавлена поддержка распознавания формата
YYYYMMDD-hhmmssв функцииparseDateTimeBestEffort. Это закрывает #34206. #34208 (alexey-milovidov). - Разрешён возврат каретки в середине строки при parsing формата
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). - Определение формата и схемы по stdin в
clickhouse-local. #33960 (Kruglov Pavel). - Корректно обрабатывается случай некорректной конфигурации, когда несколько дисков используют один и тот же путь в файловой системе. #29072. #33905 (zhongyuankai).
- При обращении к S3 proxy пробовать каждый IP-адрес, полученный при разрешении имени. S3 proxy используются редко, в основном в 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 (李扬). - Добавлена поддержка CAST из
Map(Key, Value)вArray(Tuple(Key, Value)). #33794 (Maksim Kita). - Добавлены некоторые улучшения и исправления в типе данных
Bool. Исправлена проблема #33244. #33737 (Kruglov Pavel). - Разбор и сохранение OpenTelemetry trace-id в порядке 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некорректно устанавливался для materialized view. #34067 (Raúl Marín). - Исправлен разбор структуры таблиц из ZooKeeper: теперь метаданные из ZooKeeper сравниваются с локальными метаданными в каноническом виде. Это помогает в случаях, когда канонические имена функций могут меняться между версиями ClickHouse. #33933 (sunny).
- Реализовано корректное экранирование некоторых символов при взаимодействии с LDAP. #33401 (IlyaTsoi).
Улучшения сборки/тестирования/пакетирования
- Удалена поддержка сборки без встроенных зависимостей. #33690 (Azat Khuzhin).
- Обеспечено, что тесты не зависят от результата нестабильной сортировки равных элементов. В режиме debug после sort добавлена рандомизация диапазонов одинаковых элементов, чтобы избежать проблем, связанных с зависимостью от порядка сортировки равных элементов. #34393 (Maksim Kita).
- В проверку стиля добавлен более подробный вывод. #34289 (Mikhail f. Shiryaev).
- Удалён пакет Debian
clickhouse-test, поскольку он устарел. #33948 (Ilya Yatsishin). - В систему сборки внесён ряд улучшений, чтобы исключить даже редкое использование пакетов из операционной системы и обеспечить герметичные сборки. #33695 (Amos Bird).
Исправление ошибки (некорректное поведение, заметное пользователям, в официальном стабильном или предстабильном релизе)
- Исправлено срабатывание assert при использовании
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при вычислении функции с коротким замыканием. Закрывает #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).
- Исправлена вставка в distributed таблицы при изменении собственного протокола. Последнее изменение было в версии 22.1, поэтому после обновления до этой версии возможны некоторые сбои при вставке в distributed таблицы. #34132 (Anton Popov).
- Исправлена возможная гонка данных в движке таблицы
File, появившаяся в #33960. Закрывает #34111. #34113 (Kruglov Pavel). - Исправлено незначительное состояние гонки, которое в крайне редких случаях могло после потери соединения с ZooKeeper вызывать ошибку “пересекающихся частей”. #34096 (tavplubix).
- Исправлены асинхронные вставки в формате
Native. #34068 (Anton Popov). - Исправлена ошибка, из-за которой сервер не мог запуститься, когда одновременно использовались replicated access storage и Keeper (встроенный в clickhouse-server). Вместо настроек пользователя
defaultдобавлены две настройки тайм-аута сокета 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).
- Исправлен сбой при чтении вложенных Tuple. Исправление #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).
- Исправлена ошибка проверки таблицы при создании части данных в wide-формате и с проекцией. #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 и лямбда-функциями. Исправляет #7462. #33675 (alexey-milovidov).
- Исправлена ошибка в “репликации с нулевым копированием” (возможности, которая пока находится в разработке и не должна использоваться в продакшне), приводившая к дублированию данных при 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, проблему
#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).
- Автоматическое обнаружение кластера через Zoo/Keeper. Это позволяет добавлять реплики в кластер, не меняя конфигурацию на каждом сервере. #31442 (vdimir).
- Реализован движок таблицы Hive для доступа к Apache Hive из ClickHouse. Реализует: #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 (Maksim Kita). - Добавлена функция
decodeURLFormComponent, немного отличающаяся отdecodeURLComponent. Исправлено #10298. #33451 (SuperDJY). - Добавлена возможность разделять правила rollup
GraphiteMergeTreeдля обычных/тегированных метрик (необязательное поле rule_type). #33494 (Michail Safronov).
Повышение производительности
- Добавлена поддержка переноса условий в
PREWHERE(настройкаoptimize_move_to_prewhere) для таблиц движкаMerge, если все базовые таблицы поддерживаютPREWHERE. #33300 (Anton Popov). - Более эффективно обрабатываются глоб-шаблоны для 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). - Реализована разреженная сериализация. Она позволяет сократить использование дискового пространства и повысить производительность некоторых запросов для столбцов, содержащих много значений по умолчанию (нулевых). Ее можно включить с помощью настройки
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 для marks при использовании zero-copy с общими данными. Обратите внимание, что “репликация с нулевым копированием” — это возможность не для продакшн (на ранней стадии разработки), и использовать ее пока не рекомендуется. Но если вы все же ее использовали, имейте в виду это изменение. #32061 (ianton-ru).
- Добавлена поддержка клаузы Events для watch-запроса оконного представления. #32607 (vxider).
- Исправлен ACL с явным цифровым hash в
clickhouse-keeper: теперь поведение соответствует ZooKeeper, и сгенерированный digest всегда принимается. #33249 (小路). #33246. - Исправлено неожиданное удаление проекции при отсоединении частей. #32067 (Amos Bird).
Улучшения
- Теперь функции преобразования даты и времени, которые генерируют время до
1970-01-01 00:00:00, будут возвращать ноль вместо переполнения. #29953 (Amos Bird). Также исправлена ошибка в анализе индексов, возникавшая, если функция усечения даты возвращала результат до эпохи Unix. - Всегда отображать в клиенте использование ресурсов (общую загрузку CPU, общий объем используемой оперативной памяти и максимальный объем используемой оперативной памяти на хост). #33271 (alexey-milovidov).
- Улучшены сериализация и десериализация типа
Bool, добавлена проверка диапазона значений. #32984 (Kruglov Pavel). - Если недопустимая настройка указана с помощью запроса
SETили параметров запроса в HTTP-запросе, в сообщении об ошибке будут предложены похожие варианты (если они есть). #32946 (Antonio Andelic). - Добавлены подсказки для опечаток в названиях настроек в clickhouse-client и clickhouse-local. Закрывает #32237. #32841 (凌涛).
- Разрешено использовать виртуальные столбцы в materialized view. Закрывает #11210. #33482 (OnePiece).
- Добавлен config для отключения IPv6 в clickhouse-keeper при необходимости. Это исправление закрывает #33381. #33450 (Wu Xueyang).
- В
system.build_optionsдобавлена дополнительная информация о текущей ревизии git. #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). - Проверены ключи config для внешних словарей. #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).
- Сбрасывать все части данных в памяти, если 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). - Агрегатные функции битмапа теперь будут возвращать корректный результат для аргумента за пределами диапазона вместо переполнения по модулю. #33127 (DR).
- Исправлен некорректный разбор запросов с оператором
FROM INFILE. #33521 (Kruglov Pavel). - Запретить запись в
S3, если путь содержит глоб-шаблоны. #33142 (Kruglov Pavel). - Параметр
--echoне использовался клиентомclickhouse-clientв batch mode при выполнении одного запроса. #32843 (N. Kolotov). - Используйте параметр
--databaseв clickhouse-local. #32797 (Kseniia Sumarokova). - Исправлен на удивление неудачный код в обычной SQL-функции
file. Теперь она поддерживает символьные ссылки. #32640 (alexey-milovidov). - Обновление
modification_timeдля data part вsystem.partsпосле её перемещения #32964. #32965 (save-my-heart). - Потенциальная проблема, эксплуатация невозможна: при изменении размера массива может произойти целочисленное переполнение. #33024 (varadarajkumar).
Улучшения сборки/тестирования/пакетирования
- Добавлены пакеты, функциональные тесты и Docker-сборки для версии ClickHouse под AArch64 (ARM). #32911 (Mikhail f. Shiryaev). #32415
- ClickHouse подготовлен к сборке с musl-libc. По умолчанию это не включено. #33134 (alexey-milovidov).
- Скрипт установки теперь работает на FreeBSD. Это закрывает #33384. #33418 (alexey-milovidov).
- Добавлен
actionlintдля workflow GitHub Actions, а также проверка файлов workflow черезact --listдля проверки корректного синтаксиса workflow. #33612 (Mikhail f. Shiryaev). - Добавлено больше тестов для возможности Nullable primary key. Также добавлены тесты с разными типами и видами MergeTree, а также со случайно сгенерированными данными. #33228 (Amos Bird).
- Добавлен простой инструмент для визуализации нестабильных тестов в веб-браузере. #33185 (alexey-milovidov).
- Включена герметичная сборка для shared-сборок. В основном это предназначено для разработчиков. #32968 (Amos Bird).
libc++иlibc++abiобновлены до последних версий. #32484 (Raúl Marín).- Добавлен интеграционный тест для внешнего .NET-клиента (ClickHouse.Client). #23230 (Oleg V. Kozlyuk).
- В бинарный файл clickhouse добавлена информация git. Благодаря этому теперь можно легко получить ревизию исходного кода из бинарного файла clickhouse. #33124 (taiyang-li).
- Удален устаревший код из ConfigProcessor. Код, специфичный для Yandex, больше не используется. В нем был один незначительный дефект. Об этом дефекте сообщил Mallik Hassan в #33032. Это закрывает #33032. #33026 (alexey-milovidov).
Исправление ошибки (заметное пользователям некорректное поведение в официальном стабильном или предстабильном релизе)
- Несколько исправлений в разборе форматов. Это актуально, если
clickhouse-serverоткрыт для записи со стороны злоумышленника. Специально подготовленные входные данные в форматеNativeмогут привести к чтению неинициализированной памяти или аварийному завершению. Это актуально, еслиclickhouse-serverоткрыт для записи со стороны злоумышленника. #33050 (Heena Bansal). Исправлена проблема выхода индекса типаUnionза границы в бинарном формате Apache Avro. #33022 (Harry Lee). Исправлено разыменование нулевого указателя при десериализации данныхLowCardinalityв форматеNative. #33021 (Harry Lee). - Обработчик ClickHouse Keeper будет корректно удалять операцию после отправки ответа. #32988 (JackyWoo).
- Возможна ошибка на единицу при расчёте квот: лимит квоты считался недостигнутым, хотя фактически был превышен. Это исправляет #31174. #31656 (sunny).
- Исправлено CAST-преобразование из String в IPv4 или IPv6 и обратно. Исправлено сообщение об ошибке при неудачном преобразовании. #29224 (Dmitry Novik) #27914 (Vasily Nemkov).
- Исправлено исключение вида
Unknown aggregate function nothing, возникавшее при выполнении на удалённом сервере. Это исправление устраняет проблему #16689. #26074 (hexiaoting). - Исправлена неверно выбранная база данных для JOIN без явного указания базы данных в распределённых запросах (Исправление: #10471). #33611 (Azat Khuzhin).
- Исправлен segfault в формате Apache
Avro, возникавший после второй вставки в файл. #33566 (Kruglov Pavel). - Исправлен segfault в формате Apache
Arrow, если схема содержит типсловарь. Закрывает #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 в materialized view с одновременным DROP (Azat Khuzhin).
- Не пытайтесь читать за пределами EOF (это обходной путь для ошибки в ядре Linux); ошибка воспроизводится на ядрах (3.14..5.9) и требует
index_granularity_bytes=0(то есть отключения adaptive index granularity). #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). Обеспечено корректное удаление неиспользуемых слотов репликации. Обнаружено в #26952. #33187 (Kseniia Sumarokova). Исправлен detach/attach таблиц MaterializedPostreSQL с нестандартной схемой (удаление из репликации / добавление в репликацию). Обнаружено в #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). - Исправлена утечка Context при
cancel_http_readonly_queries_on_client_close(то есть утечка внешних таблиц, загруженных на сервер, и других ресурсов). #32982 (Azat Khuzhin). - Исправлен некорректный вывод кортежа в формате
CSVпри использовании пользовательского разделителя CSV. #32981 (Kruglov Pavel). - Исправлена проверка URL HDFS, которая не позволяла использовать адрес HA NameNode. Ошибка появилась в https://github.com/ClickHouse/ClickHouse/pull/31042. #32976 (Kruglov Pavel).
- Исправлено сгенерированное исключение вида «позиционный аргумент вне допустимых границ» для непозиционных аргументов. Закрывает #31173#event-5789668239. #32961 (Kseniia Sumarokova).
- Исправлено UB в случае неожиданного EOF при заполнении Set из 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)в materialized view. Исправляет #31419. #32862 (Nikolai Kochetov). - Исправлена оптимизация ленивого 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, возникавшее, если в качестве цели materialized view использовалась таблица JOIN или SET. #32669 (Raúl Marín).
- Вставка в S3 с использованием multipart-загрузки в Google Cloud Storage может приводить к прерыванию операции. #32504. #32649 (vdimir).
- Исправлено возможное исключение при запуске хранилища
RabbitMQ— создание канала теперь откладывается. #32584 (Kseniia Sumarokova). - Исправлена проблема со временем жизни таблицы (то есть возможное использование после освобождения памяти) в случае параллельных DROP TABLE и INSERT. #32572 (Azat Khuzhin).
- Исправлены async inserts с форматами
CustomSeparated,Template,Regexp,MsgPackиJSONAsString. Ранее async inserts с этими форматами не считывали данные. #32530 (Kruglov Pavel). - Исправлена функция
groupBitmapAndв distributed таблице. #32529 (minhthucdao). - Исправлено падение в JOIN, обнаруженное фаззером; закрыт #32458. #32508 (vdimir).
- Корректная обработка дублирования столбцов в Apache Arrow. #32507 (Dmitriy Mokhnatkin).
- Исправлена проблема с неоднозначным форматированием запросов в distributed queries, которая приводила к ошибкам, если некоторые столбцы таблицы назывались
ALLилиDISTINCT. Это закрывает #32391. #32490 (alexey-milovidov). - Исправлены сбои в запросах, пытающихся использовать skipping indices, которые еще не материализованы. Исправляет #32292 и #30343. #32359 (Anton Popov).
- Исправлена ошибка в
select-запросе, возникавшая при наличии более 2 политик доступа на уровне строк для одного и того же столбца, начиная со второго запроса в одном и том же сеансе. #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).