Журнал изменений за 2020 год
Релиз ClickHouse 20.12
Релиз ClickHouse v20.12.5.14-stable, 2020-12-28
Исправление ошибок
- Отключена запись с AIO во время слияний, так как это может приводить к крайне редкой порче данных столбцов первичного ключа во время слияния. #18481 (alesapin).
- Исправлена ошибка
value is too shortпри выполнении функцийtoType(...)(toDate,toUInt32и т.п.) с аргументом типаNullable(String). Теперь такие функции возвращаютNULLпри ошибках разбора вместо генерации исключения. Исправляет #7673. #18445 (tavplubix). - Ограничены слияния из широких частей в компактные. В случае вертикального слияния это приводило к повреждённому результирующему куску. #18381 (Anton Popov).
- Исправлено заполнение таблицы
system.settings_profile_elements. Этот PR исправляет #18231. #18379 (Vitaly Baranov). - Исправлены возможные аварийные завершения работы в агрегатных функциях с комбинатором
Distinctпри использовании двухуровневой агрегации. Исправляет #17682. #18365 (Anton Popov). - Исправлена ошибка, при которой запрос
MODIFY COLUMN ... REMOVE TTLфактически не удалял TTL столбца. #18130 (alesapin).
Улучшения сборки/тестирования/упаковки
Релиз ClickHouse v20.12.4.5-stable, 2020-12-24
Исправление ошибок
- Исправлена проблема, при которой процесс
clickhouse-odbc-bridgeбыл недоступен для сервера на машинах с двойным стеком IPv4/IPv6. Также исправлена проблема, при которой обновления ODBC-словарей выполнялись с использованием некорректных запросов и/или приводили к сбоям. Возможно, закрывает #14489. #18278 (Denis Glazachev). - Исправлено сравнение ключей между типами Enum и Int. Это исправляет #17989. #18214 (Amos Bird).
- Исправлен сбой при преобразовании уникального ключа в движке базы данных
MaterializeMySQL. Это исправляет #18186 и #16372. #18211 (Winter Zhang). - Исправлена ошибка
std::out_of_range: basic_stringпри разборе URL S3. #18059 (Vladimir Chebotarev). - Исправлена проблема, из-за которой некоторые таблицы не синхронизировались в ClickHouse из MySQL из-за того, что преобразование префиксного индекса MySQL не поддерживалось для MaterializeMySQL. Это исправляет #15187 и #17912. #17944 (Winter Zhang).
- Исправлена проблема, при которой оптимизация запроса давала неверный результат, если запрос содержит
ARRAY JOIN. #17887 (sundyli). - Исправлена возможная ошибка сегментации в агрегатной функции
topK. Это закрывает #17404. #17845 (Maksim Kita). - Исправлена проблема, из-за которой таблица
system.stack_traceбыла пустой, когда сервер запущен в режиме демона. #17630 (Amos Bird).
Релиз ClickHouse v20.12.3.3-stable, 2020-12-13
Изменения, нарушающие обратную совместимость
- Настройка
use_compact_format_in_distributed_parts_namesпо умолчанию включена (см. документацию для получения подробной информации). #16728 (Azat Khuzhin). - Разрешено указывать пользовательские настройки, связанные с файловыми форматами (например,
format_csv_delimiter), в секцииSETTINGSпри создании таблицы, использующей движокFile, и применять эти настройки во всех операцияхINSERTиSELECT. Настройки формата файлов, изменённые в текущей пользовательской сессии или в секцииSETTINGSсамого DML-запроса, больше не влияют на запрос. #16591 (Alexander Kuzmenkov).
Новая функциональность
- Добавлена поддержка сжатия/распаковки
*.xz. Это позволяет использовать*.xzв функцииfile(). Закрывает #8828. #16578 (Abi Palagashvili). - Введён запрос
ALTER TABLE ... DROP|DETACH PART 'part_name'. #15511 (nvartolomei). - Добавлен новый синтаксис ALTER UPDATE/DELETE IN PARTITION. #13403 (Vladimir Chebotarev).
- Разрешено форматировать именованные кортежи как JSON-объекты при использовании форматов ввода/вывода JSON. Поведение управляется настройкой
output_format_json_named_tuples_as_objects, по умолчанию отключено. #17175 (Alexander Kuzmenkov). - Добавлена возможность по умолчанию задавать значение enum как его идентификатор в форматах TSV и CSV. #16834 (Kruglov Pavel).
- Добавлена поддержка COLLATE для Nullable, LowCardinality, Array и Tuple, где вложенным типом является String. Также выполнен рефакторинг кода, связанного с коллациями, в ColumnString.cpp. #16273 (Kruglov Pavel).
- Новая функция
tcpPortвозвращает TCP-порт, на котором этот сервер принимает соединения. #17134 (Ivan). - Добавлены новые математические функции:
acosh,asinh,atan2,atanh,cosh,hypot,log1p,sinh. #16636 (Konstantin Malanchev). - Добавлена возможность распределять слияния между разными репликами. Введена настройка MergeTree
execute_merges_on_single_replica_time_threshold. #16424 (filimonov). - Добавлена настройка
aggregate_functions_null_for_emptyдля совместимости со стандартом SQL. Эта опция переписывает все агрегатные функции в запросе, добавляя к ним суффикс -OrNull. Реализует 10273. #16123 (flynn). - Обновлён разбор значений типов DateTime и DateTime64 для поддержки строкового литерала даты. #16040 (Maksim Kita).
- Добавлена возможность изменить путь к файлу истории в
clickhouse-clientс помощью параметра--history_file. #15960 (Maksim Kita).
Исправление ошибок
- Исправлена проблема, из-за которой сервер в крайне редких случаях мог перестать принимать соединения. #17542 (Amos Bird).
- Исправлена ошибка
Function not implementedпри выполнении запросаRENAMEв базе данныхAtomicпри работе ClickHouse в подсистеме Windows для Linux (WSL). Устраняет #17661. #17664 (tavplubix). - Не восстанавливать части из WAL, если параметр
in_memory_parts_enable_walотключён. #17802 (detailyang). - Исправлена некорректная инициализация параметра
max_compress_block_sizeв MergeTreeWriterSettings значениемmin_compress_block_size. #17833 (flynn). - Сообщение об исключении, связанном с максимальным размером удаляемой таблицы, отображалось некорректно. #17764 (alexey-milovidov).
- Исправлена возможная ошибка сегментации при недостатке места во время вставки в таблицу
Distributed. #17737 (tavplubix). - Исправлена проблема, при которой ClickHouse не удавалось восстановить соединение с серверами MySQL. #17681 (Alexander Kazakov).
- Могло некорректно определяться, является ли кластер кольцевым (кросс-)реплицируемым при выполнении запроса
ON CLUSTERиз-за условия гонки приpool_size> 1. Исправлено. #17640 (tavplubix). - Исключение
fmt::v7::format_errorможет логироваться в фоновом режиме для таблиц MergeTree. Это исправляет #17613. #17615 (alexey-milovidov). - При использовании clickhouse-client в интерактивном режиме с многострочными запросами однострочный комментарий ошибочно распространялся до конца запроса. Это исправляет #13654. #17565 (alexey-milovidov).
- Исправлено зависание запроса ALTER, когда соответствующая мутация была принудительно остановлена на другой реплике. Исправляет #16953. #17499 (alesapin).
- Исправлена ошибка, из-за которой ClickHouse занижал размер кэша меток. Она могла возникать при большом количестве маленьких файлов с метками. #17496 (alesapin).
- Исправлено поведение
ORDER BYпри включённой настройкеoptimize_redundant_functions_in_order_by. #17471 (Anton Popov). - Исправлены дубликаты после
DISTINCT, которые могли возникать из-за некорректной оптимизации. Исправлено в #17294. #17296 (li chengxiang). #17439 (Nikolai Kochetov). - Исправлено падение при чтении из таблицы
JOINс типамиLowCardinality. Исправляет #17228. #17397 (Nikolai Kochetov). - исправлено переполнение стека в
toInt256(inf). Int256 — экспериментальная возможность. Закрыто #17235. #17257 (flynn). - Исправлена возможная ошибка
Unexpected packet Data received from client, которая могла появляться в журнале при выполнении распределённых запросов сLIMIT. #17254 (Azat Khuzhin). - Исправлена проблема с инвалидацией индекса множества при наличии константных столбцов в подзапросе. Исправляет #17246. #17249 (Amos Bird).
- Исправлен возможный некорректный анализ индекса, когда типы операндов сравнения по индексу различаются. Это исправляет #17122. #17145 (Amos Bird).
- Исправлено сравнение ColumnConst, из-за которого происходил сбой. Это исправило #17088. #17135 (Amos Bird).
- Несколько исправлений для MaterializeMySQL (экспериментальная функция). Исправлены #16923, #15883. Исправлен сбой синхронизации MaterializeMySQL при изменении
MySQL binlog_checksum. #17091 (Winter Zhang). - Исправлена ошибка, из-за которой запросы с
ON CLUSTERмогли бесконечно зависать на нелидирующих репликах таблиц ReplicatedMergeTree. #17089 (alesapin). - Исправлена ошибка, приводившая к падению при выполнении запроса
CREATE TABLE ... AS some_table, когдаsome_tableбыла создана с помощьюAS table_function(). Исправляет #16944. #17072 (tavplubix). - Ошибка: незавершённая реализация функции fuzzBits, связанная задача: #16980. #17051 (hexiaoting).
- Исправлена работа библиотеки libunwind из LLVM в случае, когда регистром CFA является RAX. Это ошибка в библиотеке libunwind из LLVM. У нас уже есть обходные решения для этой ошибки. #17046 (alexey-milovidov).
- Избегайте лишних сетевых ошибок при выполнении удалённых запросов, которые могут быть отменены в процессе, например запросов с
LIMIT. #17006 (Azat Khuzhin). - Исправлена настройка
optimize_distributed_group_by_sharding_key(которая по умолчанию отключена) для запроса, содержащего только OFFSET. #16996 (Azat Khuzhin). - Исправление проблемы с таблицами Merge поверх таблиц Distributed при использовании JOIN. #16993 (Azat Khuzhin).
- Исправлен неверный результат для больших целых чисел (128, 256 бит) при приведении из double. Поддержка больших целых чисел является экспериментальной. #16986 (Mike).
- Исправлен возможный сбой сервера после
ALTER TABLE ... MODIFY COLUMN ... NewType, когда вSELECTиспользуется выражениеWHERE, ссылающееся на изменяемый столбец, а операцияALTERещё не завершилась. #16968 (Amos Bird). - Данные blame вычислялись некорректно в
clickhouse-git-import. #16959 (alexey-milovidov). - Исправлена оптимизация ORDER BY для монотонных функций. Устранена проблема #16107. #16956 (Anton Popov).
- Исправлена оптимизация
GROUP BYпри включённой настройкеoptimize_aggregators_of_group_by_keysи использовании соединений (JOIN). Исправляет #12604. #16951 (Anton Popov). - Исправлена возможная ошибка
Illegal type of argumentдля запросов сORDER BY. Устраняет #16580. #16928 (Nikolai Kochetov). - Исправлен странный код в InterpreterShowAccessQuery. #16866 (tavplubix).
- Предотвращены сбои сервера ClickHouse при использовании функции
timeSeriesGroupSum. Эта функция удалена в более новых релизах ClickHouse. #16865 (filimonov). - Исправлены редкие «тихие» аварийные завершения при включённом профилировщике запросов, когда ClickHouse установлен на ОС с версией glibc, в которой (по-видимому) повреждены таблицы асинхронной размотки стека для некоторых функций. Это исправляет #15301. Это исправляет #13098. #16846 (alexey-milovidov).
- Исправлена ошибка, вызывающая сбой при использовании
anyбез аргументов. Относится к #16803. cc @azat. #16826 (Amos Bird). - Если при записи метаданных таблицы на диск не удаётся выделить память, в результате может быть записан повреждённый файл метаданных. #16772 (alexey-milovidov).
- Исправлена тривиальная оптимизация запроса с предикатом партиции. #16767 (Azat Khuzhin).
- Исправлена работа оператора
INдля нескольких столбцов и кортежей при включённой настройкеtransform_null_in. Устранена проблема #15310. #16722 (Anton Popov). - Возвращать количество затронутых строк для запросов INSERT через протокол MySQL. Раньше ClickHouse всегда возвращал 0; теперь это поведение исправлено. Исправлена проблема #16605. #16715 (Winter Zhang).
- Исправлена ошибка удалённого запроса при использовании агрегатной функции с суффиксом 'if'. Исправляет #16574 #16231 #16610 (Winter Zhang).
- Исправлено несогласованное поведение, вызванное параметром
select_sequential_consistencyпри работе с оптимизированным тривиальным запросом COUNT и таблицей system.tables. #16309 (Hao Chen).
Улучшение
- Удалять пустые парты после их обрезки по TTL, мутации или алгоритму схлопывающего слияния. #16895 (Anton Popov).
- Включен компактный формат директорий для асинхронной отправки в таблицах типа Distributed:
use_compact_format_in_distributed_parts_namesпо умолчанию имеет значение 1. #16788 (Azat Khuzhin). - Прерывать multipart‑загрузку, если в S3 не были записаны данные. #16840 (Pavel Kovalenko).
- Повторно определять IP-адрес
format_avro_schema_registry_urlпри возникновении ошибок. #16985 (filimonov). - Скрывать пароль в
data_pathв таблицеsystem.distribution_queue. #16727 (Azat Khuzhin). - Выдавать ошибку, если преобразователь столбцов пытается заменить несуществующий столбец. #16183 (hexiaoting).
- Отключайте параллельный разбор, когда недостаточно памяти для одновременной работы всех потоков. Также возможны исключения вроде «Memory limit exceeded», если кто-то попытается вставить слишком большие строки (> min_chunk_bytes_for_parallel_parsing), потому что каждый фрагмент для разбора должен быть независимым набором строк (одной или нескольких). #16721 (Nikita Mikhaylov).
- Скрипт установки должен всегда создавать подкаталоги в каталогах конфигурации. Это относится только к Docker-сборке с пользовательской конфигурацией. #16936 (filimonov).
- Исправлена грамматика в сообщениях об ошибках в форматах ввода JSONEachRow, JSONCompactEachRow и RegexpRow. #17205 (nico piderman).
- Заданы значения по умолчанию параметров
hostиportдляSOURCE(CLICKHOUSE(...)), соответствующие текущему экземпляру, а также значение по умолчанию параметраuser—'default'. #16997 (vdimir). - Выводить информативное сообщение об ошибке при выполнении
ATTACH/DETACH TABLE <DICTIONARY>. До этого PR командаdetach table <dict>выполнялась, но приводила к некорректному состоянию метаданных в памяти. #16885 (Amos Bird). - Добавлена функция cutToFirstSignificantSubdomainWithWWW(). #16845 (Azat Khuzhin).
- Сервер не запускался и выдавал сообщение об исключении при некорректной конфигурации (при отсутствии
metric_log.collect_interval_milliseconds). #16815 (Ivan). - Улучшено сообщение об ошибке при отсутствии конфигурации для распределённого DDL. Это исправляет #5075. #16769 (Nikita Mikhaylov).
- Улучшение удобства использования: улучшены подсказки в сообщении об ошибке синтаксиса, если выражение
CODECуказано в неправильном месте в запросеCREATE TABLE. Исправляет проблему #12493. #16768 (alexey-milovidov). - Удалены пустые каталоги для асинхронного INSERT при запуске движка Distributed. #16729 (Azat Khuzhin).
- Обходное решение для использования S3 с сервером nginx в роли прокси. В текущей версии nginx не принимает URL-адреса с пустым путём, например
http://domain.com?delete, тогда как стандартная (vanilla) версия aws-sdk-cpp генерирует именно такие URL-адреса. Этот коммит использует пропатченную версию aws-sdk-cpp, которая в таких случаях формирует URL-адреса с путём "/", напримерhttp://domain.com/?delete. #16709 (ianton-ru). - Разрешить функциям
reinterpretAs*работать с целыми числами и числами с плавающей запятой одинакового размера. Реализует 16640. #16657 (flynn). - Теперь конфигурацию
<auxiliary_zookeepers>можно изменять вconfig.xmlи применять без перезапуска сервера. #16627 (Amos Bird). - Добавлена поддержка SNI в https‑подключениях к удалённым ресурсам. Это позволит подключаться к серверам Cloudflare, требующим SNI. Исправлено #10055. #16252 (alexey-milovidov).
- Добавлена возможность подключаться к защищённой конечной точке
clickhouse-server, которая требует SNI. Это возможно, когдаclickhouse-serverразмещён за TLS‑прокси. #16938 (filimonov). - Исправлено возможное переполнение стека при создании цикла материализованных представлений. Закрывает #15732. #16048 (alexey-milovidov).
- Упростить реализацию обработки фоновых задач для движков таблиц семейства MergeTree. Для пользователя не должно быть заметных изменений. #15983 (alesapin).
- Улучшение для MaterializeMySQL (экспериментальная возможность). Выбрасывать исключение с указанием необходимых прав для синхронизации, когда у пользователя MySQL для синхронизации некорректные привилегии. #15977 (TCeason).
- Функция
indexOf()теперь использует BloomFilter. #14977 (achimbab).
Повышение производительности
- Используется алгоритм Floyd–Rivest, который наилучшим образом подходит для сценария частичной сортировки в ClickHouse. Бенчмарки находятся в https://github.com/danlark1/miniselect и здесь. #16825 (Danila Kutenin).
- Теперь семейство движков
ReplicatedMergeTreeиспользует отдельный пул потоков для реплицированных выборок данных. Размер пула ограничен настройкойbackground_fetches_pool_size, которую можно изменить при перезапуске сервера. Значение по умолчанию — 3, и это означает, что максимальное число параллельных выборок равно 3 (и этого достаточно для загрузки сети 10G). Исправляет #520. #16390 (alesapin). - Исправлен неконтролируемый рост состояния
quantileTDigest. #16680 (hrissan). - Добавлено описание подзапроса
VIEWвEXPLAIN. Ограничена оптимизация проталкивания LIMIT дляVIEW. Добавлены локальные репликиDistributedв план запроса. #14936 (Nikolai Kochetov). - Исправлена работа optimize_read_in_order/optimize_aggregation_in_order с max_threads > 0 и выражением в ORDER BY. #16637 (Azat Khuzhin).
- Улучшена производительность чтения из таблиц
Mergeповерх очень большого числа таблицMergeTree. Исправляет #7748. #16988 (Anton Popov). - Теперь можно безопасно отсекать партиции при точном совпадении. Полезный пример: предположим, таблица разбита на партиции по
intHash64(x) % 100, и в запросе есть условие наintHash64(x) % 100дословно, а не на x. #16253 (Amos Bird).
Экспериментальная функция
Улучшения сборки/тестирования/упаковки
- Улучшено тестовое покрытие при сборке образов. #17233 (alesapin).
- Обновлены встроенные данные часовых поясов до версии 2020d (также обновлён cctz до последнего состояния ветки master). #17204 (filimonov).
- Исправлен отчёт UBSan в Poco. Закрывает #12719. #16765 (alexey-milovidov).
- Инструментирование сторонних библиотек с помощью UBSan отключено. #16764 (alexey-milovidov).
- Исправлен отчёт UBSan в кэш-словарях. Закрывает #12641. #16763 (alexey-milovidov).
- Исправлен отчёт UBSan при попытке преобразовать бесконечное значение с плавающей запятой в целое. Закрывает #14190. #16677 (alexey-milovidov).
Релиз ClickHouse 20.11
Релиз ClickHouse v20.11.7.16-stable, 2021-03-02
Улучшение
- Для пользователя и группы clickhouse в образах clickhouse-server явно установлены фиксированные UID/GID (101). #19096 (filimonov).
Исправление ошибки
- Исправлен сбой индекса BloomFilter. Исправляет #19757. #19884 (Maksim Kita).
- Могла возникать взаимоблокировка при включённом
system.text_log. Это исправляет #19874. #19875 (alexey-milovidov). - В предыдущих версиях нетипичные аргументы функции arrayEnumerateUniq могли приводить к сбою или бесконечному циклу. Этот коммит исправляет #19787. #19788 (alexey-milovidov).
- Исправлено переполнение стека при использовании точного сравнения арифметического и строкового типов. #19773 (tavplubix).
- Устранена ошибка сегментации в функции
bitmapAndnot. Исправляет #19668. #19713 (Maksim Kita). - Некоторые функции с большыми целыми числами могут приводить к ошибке сегментации (segfault). Поддержка больших целых чисел является экспериментальной возможностью. Закрывает #19667. #19672 (alexey-milovidov).
- Исправлен некорректный результат работы функции
neighborдля аргументаLowCardinality, что устраняет проблему #10333. #19617 (Nikolai Kochetov). - Исправлена ошибка use-after-free у CompressedWriteBuffer в Connection после отключения. #19599 (Azat Khuzhin).
- Запрос
DROP/DETACH TABLE table ON CLUSTER cluster SYNCмог зависать; проблема исправлена. Устранена проблема #19568. #19572 (tavplubix). - Исправлено выражение id в запросе CREATE DICTIONARY. #19571 (Maksim Kita).
- Исправлена ошибка сегментации (SIGSEGV) при значениях merge_tree_min_rows_for_concurrent_read и merge_tree_min_bytes_for_concurrent_read, равных 0 или UINT64_MAX. #19528 (Azat Khuzhin).
- Могло произойти переполнение буфера (при чтении из памяти), если функция
addMonthвызывалась со специально подобранными аргументами. Это исправляет #19441. Это исправляет #19413. #19472 (alexey-milovidov). - Помечать распределённый пакет как повреждённый, если в одном из файлов обнаружен пустой блок данных. #19449 (Azat Khuzhin).
- Исправлено возможное переполнение буфера в библиотеке Uber H3. См. https://github.com/uber/h3/issues/392. Это закрывает #19219. #19383 (alexey-milovidov).
- Исправлен столбец system.parts _state (при запросе этого столбца из-за некорректного порядка возникала LOGICAL_ERROR). #19346 (Azat Khuzhin).
- Исправлена ошибка, приводившая к сообщению
Cannot convert column now64() because it is constant but values of constants are different in source and result. Продолжение #7156. #19316 (Nikolai Kochetov). - Исправлена ошибка, из-за которой одновременные запросы
ALTERиDROPмогли зависать при работе с таблицей ReplicatedMergeTree. #19237 (alesapin). - Исправлено бесконечное чтение из файла в формате
ORC(регрессия появилась в #10580). Исправляет #19095. #19134 (Nikolai Kochetov). - Исправлена ошибка запуска, из-за которой ClickHouse не удавалось прочитать кодек сжатия из
LowCardinality(Nullable(...))и выбрасывалось исключениеAttempt to read after EOF. Исправляет #18340. #19101 (alesapin). - Исправлена ошибка
There is no checkpointпри вставке данных через HTTP-интерфейс с использованием форматовTemplateилиCustomSeparated. Исправляет #19021. #19072 (tavplubix). - Ограничить запросы
MODIFY TTLдля таблицMergeTree, созданных в старом синтаксисе. Ранее такие запросы успешно выполнялись, но на самом деле не приводили ни к каким изменениям. #19064 (Anton Popov). - Убедитесь, что функция
groupUniqArrayвозвращает корректный тип для аргумента типа Enum. Это закрывает #17875. #19019 (alexey-milovidov). - Исправлена возможная ошибка
Expected single dictionary argument for functionпри использовании функцииignoreс аргументом типаLowCardinality. Исправление для #14275. #19016 (Nikolai Kochetov). - Исправлена проблема вставки столбца
LowCardinalityв таблицу с движкомTinyLog. Исправлено #18629. #19010 (Nikolai Kochetov). - Отключена оптимизация
optimize_move_functions_out_of_any, поскольку она не всегда работает корректно. Это закрывает #18051. Это закрывает #18973. #18981 (alexey-milovidov). - Исправлена очень редкая взаимоблокировка при завершении работы. #18977 (tavplubix).
- Исправлена ошибка, из-за которой мутация с экранированным текстом (например,
ALTER ... UPDATE e = CAST('foo', 'Enum8(\'foo\' = 1')) сериализовывалась некорректно. Исправлено #18878. #18944 (alesapin). - Операция ATTACH PARTITION должна сбрасывать мутацию. #18804. #18935 (fastio).
- Исправлено возможное зависание clickhouse-local при завершении работы. Это исправляет #18891. #18893 (alexey-milovidov).
- Исправлена работа комбинатора *If с унарной функцией и типами Nullable. #18806 (Azat Khuzhin).
- Асинхронные распределённые INSERT-запросы могут быть отклонены сервером, если глобальная настройка
network_compression_methodимеет значение, отличное от значения по умолчанию. Это исправляет #18741. #18776 (alexey-milovidov). - Исправлена ошибка
Attempt to read after eofпри попытке привести значениеNULLиз типаNullable(String)к типуNullable(Decimal(P, S)). Теперь функцияCASTвозвращаетNULL, когда не может разобрать десятичное число из строки типаNullable(String). Исправляет #7690. #18718 (Winter Zhang). - Исправлена проблема в Logger при несовпадении количества аргументов. #18717 (sundyli).
- Добавлена поддержка типа данных FixedString. При репликации данных из MySQL в ClickHouse возникает исключение: "Code: 50, e.displayText() = DB::Exception: Unsupported type FixedString(1)". Этот патч исправляет ошибку #18450, а также #6556. #18553 (awesomeleo).
- Исправлена возможная ошибка
Pipeline stuckпри использованииORDER BYпосле подзапроса с соединением типаRIGHTилиFULL. #18550 (Nikolai Kochetov). - Исправлена ошибка, из‑за которой запросы
ALTERмогли зависать после принудительного завершения соответствующей мутации. Обнаружена с помощью thread fuzzer. #18518 (alesapin). - Отключена запись с использованием AIO во время слияний, так как это может приводить к крайне редкой порче данных в столбцах первичного ключа. #18481 (alesapin).
- Отключено свёртывание констант для подзапросов на этапе анализа, если результат не может быть вычислен. #18446 (Azat Khuzhin).
- Исправлена ошибка
value is too shortпри выполнении функцийtoType(...)(toDate,toUInt32и т. д.) с аргументом типаNullable(String). Теперь такие функции возвращаютNULLпри ошибках разбора вместо выбрасывания исключения. Исправляет #7673. #18445 (tavplubix). - Ограничено выполнение слияний из wide-частей в compact-части. В случае вертикального слияния это приводило к повреждению результирующей части. #18381 (Anton Popov).
- Исправлено заполнение таблицы
system.settings_profile_elements. Этот PR исправляет проблему #18231. #18379 (Vitaly Baranov). - Исправлена ошибка в анализе индексов для бинарных функций с константным аргументом, приводившая к ошибочным результатам запросов. Это исправляет #18364. #18373 (Amos Bird).
- Исправлены возможные падения в агрегатных функциях с комбинатором
Distinctпри использовании двухуровневой агрегации. Исправляет #17682. #18365 (Anton Popov). SELECT count() FROM tableтеперь может выполняться, если изtableдоступен для выборки хотя бы один столбец. Этот PR исправляет #10639. #18233 (Vitaly Baranov).SELECT JOINтеперь требует наличия привилегииSELECTдля каждой из присоединяемых таблиц. Этот PR исправляет #17654. #18232 (Vitaly Baranov).- Исправлена возможная неполнота результата запроса при чтении из
MergeTree*в случае read backoff (сообщение<Debug> MergeTreeReadPool: Will lower number of threadsв логах). Проблема появилась в результате изменений в #16423. Исправляет #18137. #18216 (Nikolai Kochetov). - Исправлена ошибка, из-за которой запрос
MODIFY COLUMN ... REMOVE TTLне удалял TTL для столбца. #18130 (alesapin). - Исправлена работа оптимизатора предикатов с недетерминированными функциями. Это исправляет #17244. #17273 (Winter Zhang).
- Мутация могла зависать в ожидании несуществующей части после операций
MOVEилиREPLACE PARTITIONили, в редких случаях, послеDETACHилиDROP PARTITION. Ошибка исправлена. #15537 (tavplubix).
Улучшение сборки/тестирования/упаковки
Релиз ClickHouse v20.11.6.6-stable, 2020-12-24
Исправления ошибок
- Исправлена проблема, когда процесс
clickhouse-odbc-bridgeбыл недоступен для сервера на машинах с двухстековой конфигурациейIPv4/IPv6, а также проблема с обновлением ODBC-словарей, когда оно выполнялось с использованием некорректных запросов и/или приводило к сбоям. Возможно, это исправление закрывает #14489. #18278 (Denis Glazachev). - Исправлено сравнение ключей для типов Enum и Int. Это устраняет #17989. #18214 (Amos Bird).
- Исправлена ошибка, приводившая к сбою при преобразовании уникального ключа в движке базы данных
MaterializeMySQL. Это исправляет #18186 и #16372 #18211 (Winter Zhang). - Исправлена ошибка
std::out_of_range: basic_stringпри разборе URL-адреса S3. #18059 (Vladimir Chebotarev). - Исправлена проблема, из-за которой некоторые таблицы не синхронизировались из MySQL в ClickHouse из‑за отсутствия поддержки преобразования префиксных индексов MySQL в движке MaterializeMySQL. Исправляет #15187, #17912 и #17944 (Winter Zhang).
- Исправлена проблема, при которой оптимизация запроса приводила к ошибочному результату, если запрос содержал
ARRAY JOIN. #17887 (sundyli). - Исправлена потенциальная ошибка сегментации в агрегатной функции
topK. Это закрывает #17404. #17845 (Maksim Kita). - Не восстанавливать части из WAL, если
in_memory_parts_enable_walотключён. #17802 (detailyang). - Исправлена проблема, из-за которой ClickHouse не удавалось повторно установить соединение с серверами MySQL. #17681 (Alexander Kazakov).
- Исправлено непоследовательное поведение
optimize_trivial_count_queryс предикатом партиции. #17644 (Azat Khuzhin). - Исправлена проблема, из-за которой таблица
system.stack_traceбыла пустой при запуске сервера в режиме демона. #17630 (Amos Bird). - Исправлено поведение, из‑за которого исключение
fmt::v7::format_errorмогло попадать в лог в фоновом режиме для таблиц MergeTree. Это исправляет #17613. #17615 (alexey-milovidov). - Исправлено поведение при использовании clickhouse-client в интерактивном режиме с многострочными запросами, когда однострочный комментарий ошибочно распространялся до конца запроса. Это исправляет #13654. #17565 (alexey-milovidov).
- Исправлена проблема, из-за которой сервер в крайне редких случаях мог перестать принимать подключения. #17542 (alexey-milovidov).
- Исправлено зависание запроса ALTER, когда соответствующая мутация была остановлена на другой реплике. Это исправляет #16953. #17499 (alesapin).
- Исправлена ошибка, из-за которой в ClickHouse занижался размер кэша меток. Это могло происходить, когда было много очень маленьких файлов с метками. #17496 (alesapin).
- Исправлено поведение
ORDER BYпри включённой настройкеoptimize_redundant_functions_in_order_by. #17471 (Anton Popov). - Устранены дубликаты после
DISTINCT, которые могли появляться из-за некорректной оптимизации. Исправляет #17294. #17296 (li chengxiang). #17439 (Nikolai Kochetov). - Исправлена ошибка, приводившая к падению при чтении из таблицы
JOINс типамиLowCardinality. Исправляет #17228. #17397 (Nikolai Kochetov). - Исправлена инвалидизация индекса фиксированного множества при наличии константных столбцов в подзапросе. Это исправляет #17246. #17249 (Amos Bird).
- Исправлен возможный неправильный анализ индекса, если типы в выражении сравнения с индексом различались. Это исправляет #17122. #17145 (Amos Bird).
- Исправлено сравнение
ColumnConst, приводившее к аварийному завершению работы. Устраняет #17088. #17135 (Amos Bird). - Исправлена ошибка, из-за которой запросы с
ON CLUSTERмогли зависать навсегда на нелидирующих таблицахReplicatedMergeTree. #17089 (alesapin). - Исправлена ошибка, обнаруженная фаззером, в функции
fuzzBits. Это исправляет #16980. #17051 (hexiaoting). - Избегайте лишних сетевых ошибок при выполнении удалённых запросов, которые могут быть отменены, например запросов с
LIMIT. #17006 (Azat Khuzhin). - Исправлен неверный результат для больших целочисленных типов (128- и 256-битных) при приведении из типа double. #16986 (Mike).
- Повторно определять IP-адрес
format_avro_schema_registry_urlв случае ошибок. #16985 (filimonov). - Исправлен возможный сбой сервера после
ALTER TABLE ... MODIFY COLUMN ... NewType, когда вSELECTиспользуется выражениеWHEREдля изменяемого столбца, а операция изменения ещё не завершена. #16968 (Amos Bird). - Информация для blame была рассчитана некорректно в
clickhouse-git-import. #16959 (alexey-milovidov). - Исправлена оптимизация ORDER BY с монотонными функциями, что исправляет #16107. #16956 (Anton Popov).
- Исправлена оптимизация
GROUP BYпри включённой настройкеoptimize_aggregators_of_group_by_keysи использовании соединений (JOIN). Это исправляет #12604. #16951 (Anton Popov). - Скрипт установки всегда должен создавать подкаталоги в каталогах конфигурации. Это актуально только для сборки Docker с пользовательской конфигурацией. #16936 (filimonov).
- Исправлена потенциальная ошибка
Illegal type of argumentв запросах сORDER BY. Это устраняет #16580. #16928 (Nikolai Kochetov). - Прерывать multipart-загрузку, если в WriteBufferFromS3 не были записаны данные. #16840 (Pavel Kovalenko).
- Исправлено падение при использовании
anyбез аргументов. Это исправляет #16803. #16826 (Amos Bird). - Исправлено поведение, при котором ClickHouse всегда возвращал 0 вместо количества затронутых строк для запросов
INSERTпо протоколу MySQL. Это исправляет #16605. #16715 (Winter Zhang). - Исправлен неконтролируемый рост TDigest. #16680 (hrissan).
- Исправлен сбой удалённого запроса при использовании суффикса
ifв агрегатной функции. Исправляет #16574, #16231, #16610 (Winter Zhang). - Исправлено некорректное поведение, вызванное
select_sequential_consistencyпри оптимизированном тривиальном запросеcountи в таблицеsystem.tables. #16309 (Hao Chen). - Выбрасывать ошибку при использовании ColumnTransformer для замены несуществующего столбца. #16183 (hexiaoting).
Релиз ClickHouse v20.11.3.3-stable, 2020-11-13
Исправление ошибок
- Исправлены редкие аварийные завершения без сообщений об ошибке, возникавшие, когда включён профилировщик запросов и ClickHouse установлен на ОС с версией glibc, в которой (предположительно) сломаны таблицы асинхронной раскрутки стека для некоторых функций. Это исправляет #15301. Это исправляет #13098. #16846 (alexey-milovidov).
Релиз ClickHouse v20.11.2.1, 2020-11-11
Несовместимые изменения
- Если некоторый
profileбыл указан в секции конфигурацииdistributed_ddl, то этот профиль мог перезаписывать настройки профиляdefaultпри запуске сервера. Это исправлено, теперь настройки распределённых DDL-запросов не должны влиять на глобальные настройки сервера. #16635 (tavplubix). - Ограничено использование несравнимых типов данных (таких как
AggregateFunction) в ключах (ключ сортировки, первичный ключ, ключ партиционирования и т. д.). #16601 (alesapin). - Удалены запросы
ANALYZEиAST, а настройкаenable_debug_queriesпризнана устаревшей, так как теперь эта функциональность является частью полнофункционального запросаEXPLAIN. #16536 (Ivan). - Агрегатные функции
boundingRatio,rankCorr,retention,timeSeriesGroupSum,timeSeriesGroupRateSum,windowFunnelбыли по ошибке сделаны регистронезависимыми. Теперь их имена снова чувствительны к регистру, как и задумывалось. Только функции, определённые стандартом SQL, созданные для совместимости с другими СУБД или подобные им, должны быть регистронезависимыми. #16407 (alexey-milovidov). - Функция
rankCorrтеперь возвращает nan при недостатке данных #16124. #16135 (hexiaoting). - При обновлении с версий до 20.5, если выполняется поэтапное обновление и кластер содержит как версии 20.5 и выше, так и ниже 20.5, при перезапуске узлов ClickHouse со старыми версиями и запуске старой версии в присутствии более новых версий это может приводить к ошибкам
Part ... intersects previous part. Чтобы предотвратить эту ошибку, сначала установите новые пакеты clickhouse-server на всех узлах кластера, а затем выполняйте перезапуски (то есть, когда clickhouse-server будет перезапущен, он запустится уже с новой версией).
Новая возможность
- Добавлена поддержка LDAP как пользовательского каталога для пользователей, отсутствующих локально. #12736 (Denis Glazachev).
- Добавлена таблица
system.replicated_fetches, показывающая текущие фоновые операции выборки данных. #16428 (alesapin). - Добавлена настройка
date_time_output_format. #15845 (Maksim Kita). - В ClickHouse добавлен минимальный веб-интерфейс. #16158 (alexey-milovidov).
- Позволяет читать и записывать одно protobuf‑сообщение за раз (без ограничителей длины). #15199 (filimonov).
- Добавлена начальная поддержка OpenTelemetry. ClickHouse теперь принимает заголовки OpenTelemetry traceparent через протоколы Native и HTTP и в некоторых случаях передаёт их далее по цепочке. Спаны трассировок для выполненных запросов сохраняются в таблицу
system.opentelemetry_span_log. #14195 (Alexander Kuzmenkov). - Разрешить указывать первичный ключ в списке столбцов запроса
CREATE TABLE. Это необходимо для совместимости с другими диалектами SQL. #15823 (Maksim Kita). - Реализована конструкция
OFFSET offset_row_count {ROW | ROWS} FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} {ONLY | WITH TIES}в запросах SELECT с ORDER BY. Это стандартный для SQL способ заданияLIMIT. #15855 (hexiaoting). - Функция
errorCodeToName— возвращает имя ошибки (полезно для анализаquery_logи аналогичных таблиц). Таблицаsystem.errors— показывает, сколько раз возникали ошибки (учитывает настройкуsystem_events_show_zero_values). #16438 (Azat Khuzhin). - Добавлена специальная функция
untuple, позволяющая добавлять новые столбцы в список SELECT путем разворачивания именованного кортежа. #16242 (Nikolai Kochetov, Amos Bird). - Теперь мы можем передавать идентификаторы через параметры запроса. Эти параметры могут использоваться как объекты таблиц или столбцы. #16594 (Amos Bird).
- Добавлена поддержка типов данных больших целых чисел (UInt256, Int128, Int256) и UUID для индекса BloomFilter движка MergeTree. Типы больших целых чисел являются экспериментальной возможностью. #16642 (Maksim Kita).
- Добавлена функция
farmFingerprint64(некриптографическая хеш-функция для строк). #16570 (Jacob Hayes). - Добавлен параметр
log_queries_min_query_duration_ms: только запросы, время выполнения которых превышает значение этой настройки, будут попадать вquery_log/query_thread_log(аналогslow_query_logв MySQL). #16529 (Azat Khuzhin). - Добавлена возможность создавать Docker-образ на основе
Alpine. Используется предварительно скомпилированный бинарный файл и компоненты glibc из Ubuntu 20.04. #16479 (filimonov). - Добавлены функции приведения типов
toUUIDOrNull,toUUIDOrZero. #16337 (Maksim Kita). - Добавлена настройка
max_concurrent_queries_for_all_users, примеры использования см. в #6636. #16154 (nvartolomei). - Добавлена новая опция
print_query_idв clickhouse-client. Она позволяет генерировать произвольные строки с использованием текущего идентификатора запроса, который генерируется клиентом. Также идентификатор запроса по умолчанию выводится в clickhouse-client. #15809 (Amos Bird). - Добавлены функции
tidиlogTrace. Это закрывает #9434. #15803 (flynn). - Добавлена функция
formatReadableTimeDelta, форматирующая интервал времени в человекочитаемую строку ... #15497 (Filipe Caixeta). - Добавлен параметр
disable_mergesдля томов в многодисковой конфигурации. #13956 (Vladimir Chebotarev).
Экспериментальная функциональность
- Новые функции
encrypt,aes_encrypt_mysql,decrypt,aes_decrypt_mysql. Эти функции работают медленно, поэтому рассматриваются как экспериментальные. #11844 (Vasily Nemkov).
Исправление ошибки
- Маскировать пароль в data_path в
system.distribution_queue. #16727 (Azat Khuzhin). - Исправлена работа оператора
INдля нескольких столбцов и кортежей при включённой настройкеtransform_null_in. Исправлено #15310. #16722 (Anton Popov). - Настройка
max_parallel_replicasработала некорректно, если для запрашиваемой таблицы не было определено семплирование. Это исправляет #5733. #16675 (alexey-milovidov). - Исправлена работа optimize_read_in_order/optimize_aggregation_in_order с max_threads > 0 и выражением в ORDER BY. #16637 (Azat Khuzhin).
- При вычислении выражений
DEFAULTмогли возникать коллизии имён (хотя это было крайне маловероятно). Это исправляет #9359. #16612 (alexey-milovidov). - Исправлена единица измерения
query_thread_log.query_duration_ms. #16563 (Azat Khuzhin). - Исправлена ошибка при использовании схемы MySQL Master -> MySQL Slave -> движка ClickHouse MaterializeMySQL.
MaterializeMySQL— экспериментальная функция. #16504 (TCeason). - Особым образом подобранный аргумент функции
roundтипаDecimalприводил к целочисленному делению на ноль. Это исправляет #13338. #16451 (alexey-milovidov). - Исправлена работа DROP TABLE для Distributed (условия гонки с INSERT). #16409 (Azat Khuzhin).
- Исправлена обработка очень больших записей в очереди репликации. Такие записи могут появляться в запросах ALTER, если структура таблицы очень велика (около 1 МБ). Это исправляет #16307. #16332 (alexey-milovidov).
- Исправлено непоследовательное поведение, из‑за которого часть возвращаемых данных могла теряться, если набор для их фильтрации не был создан. #16308 (Nikita Mikhaylov).
- Исправлена работа dictGet в sharding_key (и в аналогичных местах, где контекст функции сохраняется постоянно). #16205 (Azat Khuzhin).
- Исправлено исключение, возникавшее в
clickhouse-localпри попытке выполнить командуOPTIMIZE. Исправлена #16076. #16192 (filimonov). - Исправляет регрессию из задачи #15780: например, теперь
indexOf([1, 2, 3], toLowCardinality(1))запрещён, хотя не должен быть запрещён. #16038 (Mike). - Исправлена ошибка при работе с базой данных MySQL. Когда сервер MySQL, используемый в качестве движка базы данных, недоступен, некоторые запросы приводят к возникновению исключений, потому что пытаются получить таблицы с отключённого сервера, хотя в этом нет необходимости. Например, запрос
SELECT ... FROM system.partsдолжен работать только с таблицами MergeTree и вовсе не обращаться к базе данных MySQL. #16032 (Kruglov Pavel). - Теперь при выполнении
ALTER MODIFY COLUMN ... DEFAULT ...будет выброшено исключение, если значение по умолчанию несовместимо с типом столбца. Исправляет #15854. #15858 (alesapin). - Исправлены функции IPv4CIDRToRange/IPv6CIDRToRange, чтобы они принимали константные значения столбца IP. #15856 (vladimir-golovchenko).
Улучшение
- Считать
INTERVAL '1 hour'эквивалентомINTERVAL 1 HOURдля совместимости с Postgres и подобными системами. Это исправляет #15637. #15978 (flynn). - Добавлена возможность разбора значений перечислений по их числовым идентификаторам для форматов ввода CSV, TSV и JSON. #15685 (vivarum).
- Улучшено планирование задач чтения для архитектуры JBOD и хранилища
MergeTree. Добавлена новая настройкаread_backoff_min_concurrency, которая задаёт нижнюю границу числа потоков чтения. #16423 (Amos Bird). - Добавлена недостающая поддержка
LowCardinalityв форматеAvro. #16521 (Mike). - Обходное решение для использования
S3с сервером nginx в качестве прокси. На текущий момент nginx не принимает URL с пустым путем, напримерhttp://domain.com?delete, тогда как стандартный aws-sdk-cpp генерирует URL именно такого вида. В этом коммите используется модифицированная версия aws-sdk-cpp, которая в таких случаях формирует URL с путем "/", напримерhttp://domain.com/?delete. #16814 (ianton-ru). - Улучшена диагностика ошибок разбора входных данных. Теперь для ошибок
Cannot read all dataуказывается номер строки. #16644 (alexey-milovidov). - Сделано более ожидаемым поведение
minMapиmaxMap: нулевые значения больше не пропускаются в результате. Исправляет #16087. #16631 (Ildus Kurbangaliev). - Улучшено обновление конфигурации ZooKeeper во время выполнения. #16630 (sundyli).
- Применять секцию SETTINGS как можно раньше. Это позволяет изменить больше настроек в запросе. Исправляет #3178. #16619 (alexey-milovidov).
- Теперь поле
event_time_microsecondsхранится в формате Decimal64, а не UInt64. #16617 (Nikita Mikhaylov). - Теперь параметризованные функции можно использовать в столбцовом трансформере
APPLY. #16589 (Amos Bird). - Улучшено планирование фоновой задачи, которая удаляет данные удалённых таблиц в базах данных
Atomic. Базы данныхAtomicне создают битую символьную ссылку на каталог данных таблицы, если у таблицы фактически отсутствует каталог данных. #16584 (tavplubix). - Подзапросы в секции
WITH(CTE) могут по имени ссылаться на предыдущие подзапросы в этой секцииWITH. #16575 (Amos Bird). - Добавлено поле current_database в таблицу
system.query_thread_log. #16558 (Azat Khuzhin). - Разрешить загружать части, которые уже зафиксированы или устарели в текущем экземпляре, в каталог
detached. Это полезно при миграции таблиц из другого кластера и наличии отображения шардов N→1. Это также согласуется с текущей реализациейfetchPartition. #16538 (Amos Bird). - Несколько улучшений для
RabbitMQ: исправлена ошибка, связанная с #16263. Также сокращено время жизни цикла обработки событий. Добавлена более эффективная настройка очередей. #16426 (Kseniia Sumarokova). - Исправлено отладочное утверждение в функции
quantileDeterministic. В предыдущей версии она могла передавать по сети до двух раз больше данных, хотя фактической ошибки в работе не было. Это исправляет #15683. #16410 (alexey-milovidov). - Добавлена метрика
TablesToDropQueueSize. Она равна количеству удалённых таблиц, находящихся в очереди на фоновое удаление данных. #16364 (tavplubix). - Улучшена диагностика при разрыве соединения со стороны клиента. В предыдущих версиях в логах сервера фиксировались исключения
Attempt to read after EOFиBroken pipe. В новой версии это заменено информационным сообщениемClient has dropped the connection, cancel the query.. #16329 (alexey-milovidov). - Добавлена поддержка total_rows/total_bytes (из system.tables) для движков таблиц Set и Join. #16306 (Azat Khuzhin).
- Теперь можно указывать
PRIMARY KEYбезORDER BYдля семейства табличных движков MergeTree. Закрывает #15591. #16284 (alesapin). - Если в системе отсутствует каталог
/tmp(chroot, ошибка конфигурации и т. п.),clickhouse-localсоздаст временный подкаталог в текущем каталоге. #16280 (filimonov). - Добавлена поддержка вложенных типов данных (например, именованных кортежей) в качестве подтипов. Исправлена проблема #15587. #16262 (Ivan).
- Поддержка опций
database_atomic_wait_for_drop_and_detach_synchronously/NO DELAY/SYNCдляDROP DATABASE. #16127 (Azat Khuzhin). - Добавлен параметр
allow_nondeterministic_optimize_skip_unused_shards(чтобы разрешить использование недетерминированных функций, таких какrand()илиdictGet(), в ключе шардирования). #16105 (Azat Khuzhin). - Исправлена работа
memory_profiler_step/max_untracked_memoryдля запросов через HTTP (добавлен тест). Исправлена проблема, при которой глобальное изменение этого значения в XML-конфигурации также не помогало, так как эти настройки всё равно не применялись и использовалось только значение по умолчанию (4MB), как здесь. Исправленquery_idдля корневого ThreadStatus HTTP-запроса (путём инициализации QueryScope после чтения query_id). #16101 (Azat Khuzhin). - Теперь разрешено выполнять запросы
ALTER ... ON CLUSTERнезависимо от параметра<internal_replication>в конфигурации кластера. #16075 (alesapin). - Исправлена редкая проблема, из-за которой
clickhouse-clientмог аварийно завершаться при выходе при загрузке подсказок. Это исправляет #16035. #16047 (alexey-milovidov). - Добавлена поддержка макета
cacheдля словарейRedisсо сложными ключами. #15985 (Anton Popov). - Исправлено зависание запроса (бесконечный цикл) при неправильной конфигурации (
connections_with_failover_max_triesравен 0). #15876 (Azat Khuzhin). - Изменён уровень части сообщений журнала с информационного на отладочный, чтобы информационные сообщения не выводились для каждого запроса. Это исправляет #5293. #15816 (alexey-milovidov).
- Удалены метрики
MemoryTrackingInBackground*, чтобы избежать потенциально вводящих в заблуждение результатов. Это исправляет #15684. #15813 (alexey-milovidov). - Добавлены переподключения в утилиту
zookeeper-dump-tree. #15711 (alexey-milovidov). - Теперь можно явно указывать список столбцов в запросе
CREATE TABLE table AS table_function(...). Исправляет #9249 и #14214. #14295 (tavplubix).
Улучшения производительности
- Не выполнять слияние частей между партициями в SELECT FINAL. #15938 (Kruglov Pavel).
- Улучшена производительность агрегатных функций
-OrNullи-OrDefault. #16661 (alexey-milovidov). - Улучшена производительность
quantileMerge. В предыдущих версиях она была непозволительно медленной. Это закрывает #1463. #16643 (alexey-milovidov). - Незначительно улучшена производительность логических функций. #16347 (alexey-milovidov).
- Улучшена производительность назначения слияний в движках таблиц MergeTree. Не должно быть заметно для пользователя. #16191 (alesapin).
- Ускорена загрузка словарей hashed/sparse_hashed за счёт предварительного выделения памяти под хеш-таблицу. #15454 (Azat Khuzhin).
- Оптимизация для тривиального count стала немного менее тривиальной. Предикаты, содержащие точное выражение партиционирования, также могут быть оптимизированы. Это также исправляет #11092, из‑за которого возвращалось неверное значение count при
max_parallel_replicas > 1. #15074 (Amos Bird).
Улучшения сборки/тестирования/упаковки
- Добавлена проверка на нестабильность для stateless-тестов. Она будет заранее обнаруживать потенциально нестабильные функциональные тесты до их слияния. #16238 (alesapin).
- Использована корректная версия
croaringвместо амальгамированной. #16285 (sundyli). - Улучшена генерация файлов сборки для системы сборки
ya.make(Arcadia). #16700 (alexey-milovidov). - Добавлен инструмент проверки файлов MySQL BinLog для движка базы данных
MaterializeMySQL.MaterializeMySQLявляется экспериментальной функциональностью. #16223 (Winter Zhang). - Добавлена проверка бита исполнения для неисполняемых файлов. Пользователи часто по ошибке коммитят исполняемые файлы из Windows. #15843 (alexey-milovidov).
- Добавлена проверка на наличие
#pragma onceв заголовках. #15818 (alexey-milovidov). - Исправлен некорректный стиль кода
&vector[idx]в libhdfs3. Это исправляет отладочную сборку libcxx. См. также https://github.com/ClickHouse-Extras/libhdfs3/pull/8 . #15815 (Amos Bird). - Исправлена сборка одного вспомогательного примерного инструмента на Mac OS. Обратите внимание, что мы не собираем примеры на Mac OS в нашем CI (мы собираем только бинарник ClickHouse), поэтому нет ни малейших шансов, что это снова не сломается. Это исправляет #15804. #15808 (alexey-milovidov).
- Упрощён init-скрипт SysV. #14135 (alexey-milovidov).
- В
db_generatorдобавленboost::program_optionsдля повышения удобства использования. Это закрывает #15940. #15973 (Nikita Mikhaylov).
Релиз ClickHouse 20.10
Релиз ClickHouse v20.10.7.4-stable, 2020-12-24
Исправление ошибки
- Исправлена проблема, при которой процесс
clickhouse-odbc-bridgeбыл недоступен для сервера на машинах с двойным стекомIPv4/IPv6, а также проблема, из-за которой обновления ODBC-словарей выполнялись с использованием некорректных запросов и/или приводили к сбоям. Возможно, это закрывает #14489. #18278 (Denis Glazachev). - Исправлено сравнение ключей между типами Enum и Int. Устраняет #17989. #18214 (Amos Bird).
- Исправлен краш при преобразовании уникального ключа в движке базы данных
MaterializeMySQL. Это исправляет #18186, #16372 и #18211 (Winter Zhang). - Исправлена ошибка
std::out_of_range: basic_stringпри разборе URL-адресов S3. #18059 (Vladimir Chebotarev). - Исправлена проблема, при которой некоторые таблицы не синхронизировались в ClickHouse из MySQL из-за того, что преобразование префиксного индекса MySQL не поддерживалось в MaterializeMySQL. Это исправляет #15187, а также #17912 и #17944 (Winter Zhang).
- Исправлена возможная ошибка сегментации в агрегатной функции
topK. Это исправление закрывает #17404. #17845 (Maksim Kita). - Не восстанавливать части из
WAL, если параметрin_memory_parts_enable_walотключён. #17802 (detailyang). - Исправлена проблема, из-за которой ClickHouse не удавалось восстановить соединение с серверами MySQL. #17681 (Alexander Kazakov).
- Исправлена проблема с пустой таблицей
system.stack_trace, когда сервер запущен в режиме демона. #17630 (Amos Bird). - Исправлено поведение при использовании
clickhouse-clientв интерактивном режиме с многострочными запросами, когда однострочный комментарий ошибочно распространялся до конца всего запроса. Исправлена задача #13654. #17565 (alexey-milovidov). - Исправлена проблема, из-за которой сервер в очень редких случаях мог перестать принимать подключения. #17542 (alexey-milovidov).
- Исправлено зависание запроса
ALTER, возникавшее, когда соответствующая мутация была прервана на другой реплике. Это исправление закрывает #16953. #17499 (alesapin). - Исправлена ошибка, из-за которой ClickHouse занижал размер кэша меток. Она могла проявляться при большом количестве мелких файлов с метками. #17496 (alesapin).
- Исправлена работа
ORDER BYпри включённой настройкеoptimize_redundant_functions_in_order_by. #17471 (Anton Popov). - Исправлены дубликаты после
DISTINCT, которые могли появляться из-за некорректной оптимизации. Исправление для #17294. #17296 (li chengxiang). #17439 (Nikolai Kochetov). - Исправлено падение при чтении из таблицы
JOINс типамиLowCardinality. Этим исправлена проблема #17228. #17397 (Nikolai Kochetov). - Исправлена инвалидация индекса фиксированного множества при наличии константных столбцов в подзапросе. Тем самым исправлена ошибка #17246. #17249 (Amos Bird).
- Исправлено сравнение
ColumnConst, приводившее к сбою, что исправило #17088. #17135 (Amos Bird). - Исправлена ошибка, из-за которой запросы с
ON CLUSTERмогли зависать навсегда для таблицReplicatedMergeTreeTablesна не-лидирующих репликах. #17089 (alesapin). - Исправлена обнаруженная фаззером ошибка в функции
fuzzBits, тем самым исправлена #16980. #17051 (hexiaoting). - Избегайте ненужных сетевых ошибок при выполнении удалённых запросов, которые могут быть отменены, например запросов с
LIMIT. #17006 (Azat Khuzhin). - Исправлен неверный результат при работе с большими целыми числами (128, 256 бит) при приведении из double. #16986 (Mike).
- Повторно определять IP-адрес для
format_avro_schema_registry_urlпри возникновении ошибок. #16985 (filimonov). - Исправлен возможный сбой сервера после
ALTER TABLE ... MODIFY COLUMN ... NewType, когда запросSELECTсодержит условиеWHEREпо изменяемому столбцу, а операцияALTERещё не завершена. #16968 (Amos Bird). - Данные blame были некорректно рассчитаны в
clickhouse-git-import. #16959 (alexey-milovidov). - Исправлена оптимизация ORDER BY для монотонных функций. Это исправляет #16107. #16956 (Anton Popov).
- Исправлена оптимизация
GROUP BYпри включённой настройкеoptimize_aggregators_of_group_by_keysи использованииJOIN. Это исправляет #12604. #16951 (Anton Popov). - Скрипт установки всегда должен создавать подкаталоги в каталогах конфигурации. Это относится только к Docker-сборке с пользовательской конфигурацией. #16936 (filimonov).
- Исправлена потенциальная ошибка
Illegal type of argumentв запросах сORDER BY. Это исправляет #16580. #16928 (Nikolai Kochetov). - Прерывать многокомпонентную загрузку, если в
WriteBufferFromS3не было записано никаких данных. #16840 (Pavel Kovalenko). - Исправлена ошибка, вызывавшая сбой при использовании
anyбез аргументов. Тем самым исправлена проблема #16803. #16826 (Amos Bird). - Исправлено поведение, при котором ClickHouse всегда возвращал 0 вместо количества затронутых строк для запросов
INSERT, выполняемых по протоколу MySQL. Это исправляет #16605. #16715 (Winter Zhang). - Исправлен неконтролируемый рост
TDigest. #16680 (hrissan). - Исправлен сбой удалённого запроса при использовании суффикса
ifв агрегатной функции. Это исправление закрывает задачи #16574, #16231 и пул‑реквест #16610 (Winter Zhang).
Релиз ClickHouse v20.10.4.1-stable, 2020-11-13
Исправление ошибок
- Исправлены редкие «тихие» падения при включённом профилировщике запросов, когда ClickHouse установлен на ОС с версией glibc, у которой (предположительно) сломаны таблицы асинхронной раскрутки стека для некоторых функций. Это исправляет #15301. Это исправляет #13098. #16846 (alexey-milovidov).
- Исправлен оператор
INпо нескольким столбцам и кортежам при включённой настройкеtransform_null_in. Исправляет #15310. #16722 (Anton Popov). - Исправлена работа optimize_read_in_order/optimize_aggregation_in_order при max_threads>0 и наличии выражения в ORDER BY. #16637 (Azat Khuzhin).
- Теперь при разборе AVRO из входных данных тип LowCardinality удаляется. Исправляет #16188. #16521 (Mike).
- Исправлен быстрый рост метаданных при использовании схемы MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL Engine и включённом
slave_parallel_workerна MySQL Slave за счёт корректного уменьшения наборов GTID. Это исправляет #15951. #16504 (TCeason). - Исправлен DROP TABLE для Distributed (гонка с INSERT). #16409 (Azat Khuzhin).
- Исправлена обработка очень больших элементов в очереди репликации. Очень большие элементы могут появляться в запросах ALTER, если структура таблицы чрезвычайно большая (около 1 МБ). Это исправляет #16307. #16332 (alexey-milovidov).
- Исправлена ошибка с базой данных MySQL. Когда MySQL-сервер, используемый в качестве движка базы данных, недоступен, некоторые запросы выбрасывали исключение, потому что пытались получить таблицы с отключённого сервера, хотя в этом нет необходимости. Например, запрос
SELECT ... FROM system.partsдолжен работать только с таблицами MergeTree и совсем не обращаться к базе данных MySQL. #16032 (Kruglov Pavel).
Улучшение
- Обходное решение для использования S3 с сервером nginx в роли прокси. В настоящее время nginx не принимает URL с пустым путём, например http://domain.com?delete, тогда как стандартный aws-sdk-cpp генерирует URL такого вида. В этом коммите используется пропатченная версия aws-sdk-cpp, которая в таких случаях формирует URL с путём "/", например http://domain.com/?delete. #16813 (ianton-ru).
Релиз ClickHouse v20.10.3.30, 2020-10-28
Обратное несовместимое изменение
- Признать
multiple_joins_rewriter_versionустаревшей и удалить первую версию переписывателя JOIN'ов. #15472 (Artem Zuikov). - Изменить значение по умолчанию настройки
format_regexp_escaping_rule(она относится к форматуRegexp) наRaw(это означает — читать весь подшаблон как одно значение), чтобы поведение больше соответствовало ожиданиям пользователей. #15426 (alexey-milovidov). - Добавить поддержку вложенных многострочных комментариев
/* comment /* comment */ */в SQL. Это соответствует стандарту SQL. #14655 (alexey-milovidov). - Добавлены настройки MergeTree (
max_replicated_merges_with_ttl_in_queueиmax_number_of_merges_with_ttl_in_pool) для управления количеством слияний с TTL в фоновом пуле и очереди репликации. Это изменение нарушает совместимость со старыми версиями только в том случае, если вы используете TTL для удаления. В противном случае репликация останется совместимой. Вы можете избежать проблем с несовместимостью, если обновите все реплики шарда одновременно или выполнитеSYSTEM STOP TTL MERGESдо завершения обновления всех реплик. Если вы получите несовместимую запись в очереди репликации, в первую очередь выполнитеSYSTEM STOP TTL MERGES, а затем выполнитеALTER TABLE ... DETACH PARTITION ...для партиции, к которой было привязано несовместимое слияние с TTL. Подключите её обратно на одной реплике. #14490 (alesapin). - При обновлении с версий ниже 20.5, если выполняется поэтапное (rolling) обновление и кластер одновременно содержит версии 20.5 или новее и версии ниже 20.5, при перезапуске узлов ClickHouse со старыми версиями и запуске старой версии в присутствии более новых версий это может привести к ошибкам
Part ... intersects previous part. Чтобы предотвратить эту ошибку, сначала установите более новые пакеты clickhouse-server на все узлы кластера, а затем выполняйте перезапуски (так что при перезапуске clickhouse-server будет запускаться с новой версией).
Новая функциональность
- Фоновая рекомпрессия данных. Добавлена поддержка указания
TTL ... RECOMPRESS codec_nameдля семейства движков таблиц MergeTree. #14494 (alesapin). - Добавить параллельные вставки с кворумом. Это закрывает #15601. #15601 (Latysheva Alexandra).
- Настройки для дополнительного усиления гарантий сохранности данных. Полезно для нереплицированных конфигураций. #11948 (Anton Popov).
- Если дубликат блока записывается на реплику, где он ещё не существует локально (ещё не был получен с других реплик), не игнорировать его, а записывать локально, чтобы добиться того же эффекта, как если бы он был успешно реплицирован. #11684 (alexey-milovidov).
- Теперь добавлена поддержка конструкции
WITH <identifier> AS (subquery) ...для объявления именованных подзапросов в контексте запроса. Тем самым закрыты задачи #2416 и #4967. #14771 (Amos Bird). - Введена настройка
enable_global_with_statement, которая распространяет выраженияWITHиз первого оператораSELECTна другие операторыSELECTна том же уровне и делает псевдонимы в выраженияхWITHвидимыми для подзапросов. #15451 (Amos Bird). - Безопасное выполнение межкластерных запросов (с initial_user в роли текущего пользователя запроса). #13156 (Azat Khuzhin). #15551 (Azat Khuzhin).
- Добавлена возможность удалять свойства столбцов и TTL для таблиц. Добавлены запросы
ALTER TABLE MODIFY COLUMN col_name REMOVE what_to_removeиALTER TABLE REMOVE TTL. Обе операции легковесны и выполняются на уровне метаданных. #14742 (alesapin). - Добавлен формат
RawBLOB. Он предназначен для ввода или вывода одного значения без какого-либо экранирования и разделителей. Тем самым закрывается задача #15349. #15364 (alexey-milovidov). - Добавлена функция
reinterpretAsUUID, которая позволяет преобразовывать строку байтов в порядке big-endian в UUID. #15480 (Alexander Kuzmenkov). - Реализована настройка параметра
force_data_skipping_indices. #15642 (Azat Khuzhin). - Добавлена настройка
output_format_pretty_row_numbers, которая включает нумерацию строк результата в форматах Pretty. Это закрывает #15350. #15443 (flynn). - Добавлен инструмент для обфускации запросов. Он позволяет делиться большим количеством запросов для более качественного тестирования. Закрывает #15268. #15321 (alexey-milovidov).
- Добавлена табличная функция
null('structure'). #14797 (vxider). - Добавлена функция
formatReadableQuantity. Она упрощает чтение больших чисел человеком. #14725 (Artem Hnilov). - Добавлен формат
LineAsString, который принимает последовательность строк, разделённых символами перевода строки, причём каждая строка разбирается целиком как одно поле типа String. #14703 (Nikita Mikhaylov), #13846 (hexiaoting). - Добавлен формат
JSONStrings, который выводит данные как массивы строк. #14333 (hcz). - Добавлена поддержка формата столбца "Raw" для формата
Regexp. Это позволяет извлекать подвыражения целиком без необходимости каких-либо правил экранирования. #15363 (alexey-milovidov). - Добавлена возможность настраивать представление
NULLдля формата выводаTSV. Оно управляется настройкойoutput_format_tsv_null_representation, которая по умолчанию имеет значение\N. Тем самым закрывается #9375. Обратите внимание, что настройка управляет только форматом вывода, и\Nявляется единственным поддерживаемым представлениемNULLдля формата вводаTSV. #14586 (Kruglov Pavel). - Добавлена поддержка типа данных Decimal для
MaterializeMySQL.MaterializeMySQL— экспериментальная возможность. #14535 (Winter Zhang). - Добавлена новая возможность:
SHOW DATABASES LIKE 'xxx'. #14521 (hexiaoting). - Добавлен скрипт для импорта произвольного git-репозитория в ClickHouse в качестве демонстрационного набора данных. #14471 (alexey-milovidov).
- Теперь операторы INSERT могут использовать звёздочку (и её варианты) совместно с преобразователями столбцов в списке столбцов. #14453 (Amos Bird).
- Новые настройки ограничения сложности запросов
max_rows_to_read_leaf,max_bytes_to_read_leafдля распределённых запросов, ограничивающие максимальное число строк/байт, читаемых на листовых узлах. Ограничение применяется только к локальному чтению, исключая финальную стадию слияния на корневом узле. #14221 (Roman Khavronenko). - Добавлена возможность задавать настройки для хранилищ
ReplicatedMergeTree*в разделе<replicated_merge_tree>файла конфигурации. Работает аналогично разделу<merge_tree>. Для хранилищReplicatedMergeTree*настройки из<merge_tree>и<replicated_merge_tree>применяются совместно, но настройки из<replicated_merge_tree>имеют более высокий приоритет. Добавлена таблицаsystem.replicated_merge_tree_settings. #13573 (Amos Bird). - Добавлена функция
mapPopulateSeries. #13166 (Ildus Kurbangaliev). - Поддерживаются типы MySQL:
decimal(как ClickHouseDecimal) иdatetimeс точностью до долей секунды (какDateTime64). #11512 (Vasily Nemkov). - Добавлено поле
event_time_microsecondsв таблицыsystem.text_log,system.trace_log,system.query_logиsystem.query_thread_log. #14760 (Bharat Nallan). - Добавлено поле
event_time_microsecondsв таблицыsystem.asynchronous_metric_logиsystem.metric_log. #14514 (Bharat Nallan). - Добавлено поле
query_start_time_microsecondsв таблицыsystem.query_logиsystem.query_thread_log. #14252 (Bharat Nallan).
Исправление ошибки
- Исправлен случай, когда память могла быть выделена сверх установленного лимита. Это закрывает #14560. #16206 (alexey-milovidov).
- Исправлено зависание источника словаря
executable. В предыдущих версиях при использовании некоторых форматов (например,JSONEachRow) данные не передавались дочернему процессу, пока тот не выводил хотя бы что‑нибудь. Это исправление закрывает #1697. Это исправление закрывает #2455. #14525 (alexey-milovidov). - Исправлено двойное освобождение памяти в случае исключения в функции
dictGet. Это могло произойти, если словарь был загружен с ошибкой. #16429 (Nikolai Kochetov). - Исправлена проблема в GROUP BY с модификаторами totals/rollup/cube и функциями min/max по ключам группировки. Исправлена ошибка #16393. #16397 (Anton Popov).
- Исправлена асинхронная вставка в
Distributedприprefer_localhost_replica=0иinternal_replication. #16358 (Azat Khuzhin). - Исправлен серьёзный дефект в реализации TwoLevelStringHashTable, который мог приводить к утечке памяти. #16264 (Amos Bird).
- Исправлен segfault в некоторых случаях некорректной агрегации в лямбда-выражениях. #16082 (Anton Popov).
- Исправлено зависание выполнения запроса
ALTER MODIFY ... ORDER BYдляReplicatedVersionedCollapsingMergeTree. Это исправление закрывает #15980. #16011 (alesapin). MaterializeMySQL(экспериментальная функция): Исправлен разбор имени сортировки (collate) и имени набора символов (charset), а также добавлена поддержкаlength = 0для строкового типа. #16008 (Winter Zhang).- Добавлена возможность использовать компоновку
directдля словарей со сложными ключами. #16007 (Anton Popov). - Предотвращать зависание реплики на 5–10 минут при возникновении ошибки репликации после периода простоя. #15987 (filimonov).
- Исправлены редкие ошибки сегментации (segfault) при вставке в MaterializedView или выборке из него при одновременном удалении целевой таблицы (для движка базы данных Atomic). #15984 (tavplubix).
- Устранена неоднозначность при разборе профилей настроек:
CREATE USER ... SETTINGS profile readonlyтеперь интерпретируется как использование профиля с именемreadonly, а не настройки с именемprofileс ограничениемreadonly. Это исправляет #15628. #15982 (Vitaly Baranov). MaterializeMySQL(экспериментальная возможность): Исправлено аварийное завершение работы при неудачной попытке создания базы данных. #15954 (Winter Zhang).- Исправлен сбой
DROP TABLE IF EXISTSс ошибкойTable ... does not existпри одновременном переименовании таблицы (для движка базы данных Atomic). Исправлена редкая взаимоблокировка при одновременном выполнении некоторых DDL-запросов с участием нескольких таблиц (таких какDROP DATABASEиRENAME TABLE). Также исправлен сбойDROP/DETACH DATABASEс ошибкойTable ... does not existпри одновременном выполненииDROP/DETACH TABLE. #15934 (tavplubix). - Исправлен некорректный пустой результат запроса к таблице
Distributed, если запрос содержитWHERE,PREWHEREиGLOBAL IN. Устраняет #15792. #15933 (Nikolai Kochetov). - Исправлена ошибка #12513: выражения разности с одинаковым псевдонимом при повторном анализе запроса. #15886 (Winter Zhang).
- Устранены возможные, хотя и крайне редкие, взаимоблокировки в реализации RBAC. #15875 (Vitaly Baranov).
- Исправлено возникновение исключения
Block structure mismatchв запросахSELECT ... ORDER BY DESC, выполнявшихся после запросаALTER MODIFY COLUMN. Исправление для #15800. #15852 (alesapin). MaterializeMySQL(экспериментальная функция): Исправлена неточность результатаselect count(). #15767 (tavplubix).- Исправлены некоторые случаи, когда в запросах выбирались только виртуальные столбцы. Ранее при этом могла возникать ошибка
Not found column _nothing in block. Исправлено #12298. #15756 (Anton Popov). - Исправлена ошибка удаления материализованного представления с внутренней таблицей в базе данных Atomic (все последующие DROP TABLE зависали из-за зависания рабочего потока, вызванного рекурсивным DROP TABLE для внутренней таблицы MV). #15743 (Azat Khuzhin).
- Возможность перенести часть на другой диск/том, если первая попытка не удалась. #15723 (Pavel Kovalenko).
- Исправлена ошибка
Cannot find column, которая могла возникать при вставке вMATERIALIZED VIEW, если запрос дляMVсодержалARRAY JOIN. #15717 (Nikolai Kochetov). - Исправлено слишком заниженное значение по умолчанию параметра
max_replicated_logs_to_keep, из‑за которого реплики могли слишком часто помечаться как потерянные. Улучшен процесс восстановления потерянной реплики за счёт выбора наиболее актуальной реплики в качестве источника клонирования. Также старые части потерянной реплики больше не удаляются, а отсоединяются. #15701 (tavplubix). - Исправлено редкое состояние гонки в словарях и таблицах, использующих MySQL в качестве источника данных. #15686 (alesapin).
- Исправлено (неопасное) состояние гонки в AMQP-CPP. #15667 (alesapin).
- Исправлена ошибка
Cannot add simple transform to empty Pipe, возникавшая при чтении из таблицыBuffer, структура которой отличалась от структуры целевой таблицы. Это происходило, если целевая таблица возвращала пустой результат запроса. Исправляет #15529. #15662 (Nikolai Kochetov). - Корректная обработка ошибок при вставке данных в MergeTree при работе с S3. Использование MergeTree поверх S3 — экспериментальная возможность. #15657 (Pavel Kovalenko).
- Исправлена ошибка с табличной функцией S3: регион из URL-адреса не применялся к конфигурации клиента S3. #15646 (Vladimir Chebotarev).
- Исправлен порядок уничтожения ресурсов в шаге
ReadFromStorageплана запроса. В редких случаях это могло приводить к сбоям. Возможно, связано с #15610. #15645 (Nikolai Kochetov). - Вычитать значение метрики
ReadonlyReplicaпри отсоединении таблиц только для чтения. #15592 (sundyli). - Исправлена ошибка
Element ... is not a constant expressionпри использовании результата функцииJSON*в конструкцияхVALUES,LIMITили в правой части оператораIN. #15589 (tavplubix). - Запрос быстрее завершается при возникновении исключения. В этом случае выполнение на удалённых репликах отменяется. #15578 (Azat Khuzhin).
- Предотвращено появление сообщения об ошибке
Could not calculate available disk space (statvfs), errno: 4, strerror: Interrupted system call. Это исправляет #15541. #15557 (alexey-milovidov). - Исправлена ошибка вида
Database <db> does not exist.в запросах с IN и распределённой таблицей (Distributed), когда на инициаторе нет базы данных. #15538 (Artem Zuikov). - Мутация могла зависать, ожидая несуществующей части после выполнения
MOVEилиREPLACE PARTITIONили, в редких случаях, послеDETACHилиDROP PARTITION. Проблема исправлена. #15537 (tavplubix). - Исправлена ошибка, из-за которой оператор
ILIKEстановился чувствительным к регистру, если ранее выполнялсяLIKEс тем же шаблоном. #15536 (alesapin). - Исправлена ошибка
Missing columns, возникающая при выборе столбцов, отсутствующих в данных, но зависящих от других столбцов, которые также отсутствуют в данных. Исправляет проблему #15530. #15532 (alesapin). - Выдавать ошибку при передаче единственного параметра в ReplicatedMergeTree вместо его игнорирования. #15516 (nvartolomei).
- Исправлена ошибка с подпиской на события в DDLWorker, которая в редких случаях могла приводить к зависанию запросов в
ON CLUSTER. Ошибка появилась в #13450. #15477 (alesapin). - Выводить корректное сообщение об ошибке, если второй аргумент агрегатной функции
boundingRatioимеет неверный тип. #15407 (detailyang). - Исправляет #15365:
ATTACH DATABASEс движком MySQL выбрасывает исключение из-за отсутствия контекста запроса. #15384 (Winter Zhang). - Исправлен случай с несколькими использованиями трансформеров столбцов в запросе
SELECT. #15378 (Amos Bird). - Исправлено сжатие в хранилище
S3. #15376 (Vladimir Chebotarev). - Исправлена ошибка, из-за которой запросы вида
SELECT toStartOfDay(today())завершались с ошибкой о пустом аргументе time_zone. #15319 (Bharat Nallan). - Устранено состояние гонки при переименовании таблицы MergeTree и её фоновом очищении. #15304 (alesapin).
- Исправлена редкая гонка при запуске сервера при включённых системных логах. #15300 (alesapin).
- Исправлено зависание запросов с большим количеством подзапросов к одной и той же таблице с движком
MySQL. Ранее, если запрос содержал более 16 подзапросов к одной и той же таблицеMySQL, он зависал и никогда не завершался. #15299 (Anton Popov). - Исправлен отчет MSan в QueryLog. Неинициализированная память могла использоваться в поле
memory_usage. #15258 (alexey-milovidov). - Исправлена ошибка 'Unknown identifier' в GROUP BY при выполнении запроса с JOIN по таблице Merge. #15242 (Artem Zuikov).
- Исправлено падение сервера при использовании
joinGetс типамиLowCardinality. Это исправление закрывает #15214. #15220 (Amos Bird). - Исправлена ошибка в табличном движке
Buffer, не позволявшая вставлять данные новой структуры вBufferпосле выполнения запросаALTER. Исправлено #15117. #15192 (alesapin). - Изменён размер поля Decimal в пакете определения столбца для MySQL. #15152 (maqroll).
- Исправлена ошибка
Data compressed with different methodsприjoin_algorithm='auto'. Сохранён тип LowCardinality для ключа соединения левой таблицы приjoin_algorithm='partial_merge'. #15088 (Artem Zuikov). - Обновлён
jemallocдля исправления работыpercpu_arenaс маской аффинности. #15035 (Azat Khuzhin). #14957 (Azat Khuzhin). - Мы уже используем сравнение с дополнением до фиксированной длины между String и FixedString (https://github.com/ClickHouse/ClickHouse/blob/master/src/Functions/FunctionsComparison.h#L333). Этот PR применяет ту же логику к сравнению полей, что исправляет использование FixedString в качестве первичных ключей. Это исправляет #14908. #15033 (Amos Bird).
- Если функция
barвызывалась со специально подобранными аргументами, могло произойти переполнение буфера. Это закрывает #13926. #15028 (alexey-milovidov). - Исправлена ошибка
Cannot rename ... errno: 22, strerror: Invalid argumentпри выполнении DDL-запроса в базе данных Atomic при запуске clickhouse-server в Docker на macOS. #15024 (tavplubix). - Исправлен сбой при RIGHT или FULL JOIN с
join_algorith='auto', возникавший при превышении лимита памяти и необходимости заменить HashJoin на MergeJoin. #15002 (Artem Zuikov). - Теперь значения параметров
number_of_free_entries_in_pool_to_execute_mutationиnumber_of_free_entries_in_pool_to_lower_max_size_of_mergeмогут быть равныbackground_pool_size. #14975 (alesapin). - Исправление для корректной работы проталкивания предикатов, когда подзапрос содержит функцию
finalizeAggregation. Исправляет #14847. #14937 (filimonov). - Публикуются частоты CPU для каждого логического ядра в
system.asynchronous_metrics. Это исправляет #14923. #14924 (Alexander Kuzmenkov). MaterializeMySQL(экспериментальная функция): исправлена ошибка «.metadata.tmp File exists». #14898 (Winter Zhang).- Исправлена проблема, из-за которой некоторые вызовы функции
extractAllGroupsмогли приводить к ошибке «Memory limit exceeded». Это исправляет #13383. #14889 (alexey-milovidov). - Исправлен SIGSEGV при попытке выполнить операцию INSERT в StorageFile с файловым дескриптором. #14887 (Azat Khuzhin).
- Устранена ошибка сегментации в словаре
cache#14837. #14879 (Nikita Mikhaylov). MaterializeMySQL(экспериментальная функциональность): Исправлена ошибка при разборе событий двоичного журнала MySQL (binlog), которая вызывалаAttempt to read after eofиPacket payload is not fully readв движке базы данныхMaterializeMySQL. #14852 (Winter Zhang).- Исправлена редкая ошибка в запросах
SELECT, когда запрашиваемый столбец имеет выражениеDEFAULT, зависящее от другого столбца, который также имеетDEFAULT, но отсутствует в запросеSELECTи не существует на диске. Частично исправлена #14531. #14845 (alesapin). - Исправлена проблема, из-за которой сервер мог зависать при запуске при обращении к ZooKeeper, если файлы конфигурации нужно было загружать из ZK (с использованием директивы include
from_zk). Это исправляет #14814. #14843 (Alexander Kuzmenkov). - Исправлено неверное определение монотонности при сужающем приведении типов
Int -> Intдля знаковых целых типов. Это могло приводить к некорректному результату запроса. Ошибка обнаружена в #14513. #14783 (Amos Bird). - Трансформер столбцов
Replaceдолжен заменять идентификаторы клонированными деревьями AST. Это исправляет #14695. #14734 (Amos Bird). - Исправлено отсутствие имени базы данных по умолчанию в метаданных материализованного представления при выполнении команды
ALTER ... MODIFY QUERY. #14664 (tavplubix). - Исправлена ошибка, при которой мутация
ALTER UPDATEсо столбцом типаNullableв выражении присваивания с константным значением (например,UPDATE x = 42) приводила к некорректному значению в столбце или ошибке сегментации (segfault). Исправляет #13634, #14045. #14646 (alesapin). - Исправлена некорректная работа умножения
Decimal, вызванная неправильным масштабом результата в столбце. #14603 (Artem Zuikov). - Исправлена работа функции
hasсLowCardinalityдляNullable. #14591 (Mike). - Очистка каталога с данными после исключений в ZooKeeper во время выполнения операции CreateQuery для движка StorageReplicatedMergeTree. #14563 (Bharat Nallan).
- Исправлены редкие сегфолты в функциях с комбинатором
-Resample, которые могли возникать в результате переполнения при очень больших значениях параметров. #14562 (Anton Popov). - Исправлена ошибка при преобразовании
Nullable(String)в Enum. Ошибка появилась в результате изменения в #12745. Тем самым исправлена проблема #14435. #14530 (Amos Bird). - Исправлен некорректный порядок сортировки столбца типа
Nullable. Исправляет #14344. #14495 (Nikita Mikhaylov). - Исправлена ошибка, из-за которой функцию
currentDatabase()нельзя было использовать в DDL-запросеON CLUSTER. #14211 (Winter Zhang). MaterializeMySQL(экспериментальная возможность): Исправлена ошибкаPacket payload is not fully readв движке базы данныхMaterializeMySQL. #14696 (BohuTANG).
Улучшения
- Включить по умолчанию движок базы данных
Atomicдля новых баз данных. #15003 (tavplubix). - Добавлена возможность указывать специализированные кодеки, такие как
Delta,T64и др., для столбцов с подтипами. Реализована #12551, исправлены #11397 и #4609. #15089 (alesapin). - Динамическая перезагрузка конфигурации ZooKeeper. #14678 (sundyli).
- Теперь можно выполнять запросы
ALTER ... ON CLUSTERвне зависимости от параметра<internal_replication>в конфигурации кластера. #16075 (alesapin). - Теперь
joinGetподдерживает поиск по нескольким ключам. Продолжение #12418. #13015 (Amos Bird). - Дождитесь полного завершения операции
DROP/DETACH TABLE, если для базы данныхAtomicуказаныNO DELAYилиSYNC. #15448 (tavplubix). - Теперь можно изменить тип столбца версии для
VersionedCollapsingMergeTreeс помощью запросаALTER. #15442 (alesapin). - Раскрывать макросы
{database},{table}и{uuid}вzookeeper_pathпри создании реплицируемой таблицы. ЗапрещатьRENAME TABLE, если он может привести к некорректному значениюzookeeper_pathпосле перезапуска сервера. Исправляет #6917. #15348 (tavplubix). - Функция
nowтеперь принимает аргумент с часовым поясом. Это исправляет проблему 15264. #15285 (flynn). - Не разрешать подключения к серверу ClickHouse до тех пор, пока все скрипты в
/docker-entrypoint-initdb.d/не будут выполнены. #15244 (Aleksei Kozharin). - Добавлена настройка
optimizeдля запросаEXPLAIN PLAN. При её включении применяются оптимизации на уровне плана запроса. По умолчанию она включена. #15201 (Nikolai Kochetov). - Корректное сообщение об исключении для неверного числа аргументов функции CAST. Это закрывает #13992. #15029 (alexey-milovidov).
- Добавлена опция отключения перемещения по TTL при вставке части данных. #15000 (Pavel Kovalenko).
- Игнорировать ограничения по ключам при выполнении мутаций. Без этого pull request'а невозможно выполнять мутации, когда
force_index_by_date = 1илиforce_primary_key = 1. #14973 (Amos Bird). - Теперь можно удалить реплицируемую таблицу, если предыдущая попытка удаления завершилась неудачей из‑за истечения срока действия сессии ZooKeeper. Это исправляет #11891. #14926 (alexey-milovidov).
- Исправлено избыточное срабатывание нарушения ограничения настроек при выполнении SELECT с SETTINGS из распределённой таблицы. #14876 (Amos Bird).
- Добавлена настройка запроса
load_balancing_first_offset, позволяющая явно указать первую реплику. Она используется вместе со стратегией балансировки нагрузкиFIRST_OR_RANDOM, которая позволяет контролировать нагрузку на реплики. #14867 (Amos Bird). - Показывать подзапросы для
SETиJOINв выводеEXPLAIN. #14856 (Nikolai Kochetov). - Разрешено использование конфигурации хранилища с несколькими томами для хранилища
Distributed. #14839 (Pavel Kovalenko). - Сформировать
query_start_timeиquery_start_time_microsecondsиз одной и той же структурыtimespec. #14831 (Bharat Nallan). - Поддержка отключения персистентности для
StorageJoinиStorageSet; данная возможность настраивается параметромdisable_set_and_join_persistency. Этот PR устраняет проблему #6318. #14776 (vxider). - Теперь
COLUMNSможно использовать, чтобы обернуть список столбцов и затем применить к ним преобразования столбцов. #14775 (Amos Bird). - Добавлен столбец
merge_algorithmв таблицуsystem.mergesдля улучшения анализа слияний. #14705 (Amos Bird). - Исправлена потенциальная утечка памяти, вызванная
ZooKeeper exists watch. #14693 (hustnn). - Разрешить параллельное выполнение распределённых DDL-запросов. #14684 (Azat Khuzhin).
- Добавлен счётчик события
QueryMemoryLimitExceeded, что закрывает #14589. #14647 (fastio). - Исправлены некоторые пробелы в конце строк в форматировании запросов. #14595 (Azat Khuzhin).
- ClickHouse по-разному обрабатывает partition expr и key expr. Partition expr используется для построения minmax-индекса, содержащего связанные столбцы, тогда как primary key expr хранится как выражение. Иногда пользователь может разбить таблицу по более крупным диапазонам, например
partition by i / 1000. Однако бинарные операторы не являются монотонными, и этот PR пытается это исправить. Это также может быть полезно и для других сценариев использования. #14513 (Amos Bird). - Добавлена возможность пропускать проверки доступа для
DiskS3. Дискs3— экспериментальная функция. #14497 (Pavel Kovalenko). - Ускорен процесс завершения работы сервера при наличии выполняющихся запросов к S3. #14496 (Pavel Kovalenko).
SYSTEM RELOAD CONFIGтеперь выбрасывает исключение при неудачной попытке перезагрузки и продолжает использовать предыдущий users.xml. Фоновая периодическая перезагрузка также продолжает использовать предыдущий users.xml в случае ошибки перезагрузки. #14492 (Vitaly Baranov).- Для INSERT-запросов со встроенными данными в формате VALUES в скриптовом режиме
clickhouse-clientдобавлена поддержка точки с запятой в качестве символа окончания данных, помимо перевода строки. Закрывает #12288. #13192 (Alexander Kuzmenkov). - Поддержка пользовательских кодеков в компактных партах. #12183 (Anton Popov).
Улучшения производительности
- По умолчанию включено создание компактных частей для маленьких партиций. Это позволяет обрабатывать частые вставки заметно эффективнее (в 4–100 раз). #11913 (alexey-milovidov).
- Улучшена производительность
quantileTDigest. Это исправляет #2668. #15542 (Kruglov Pavel). - Существенно снижено потребление памяти в AggregatingInOrderTransform/optimize_aggregation_in_order. #15543 (Azat Khuzhin).
- Ускорено 256-битное умножение. #15418 (Artem Zuikov).
- Улучшена производительность 256-битных типов за счёт использования (u)int64_t в качестве базового типа для широких целых. Изначально широкие целые использовали 8-битные типы как базовые. #14859 (Artem Zuikov).
- Теперь временный диск явно используется для хранения временных данных вертикального слияния. #15639 (Grigory Pervakov).
- Используется один запрос S3 DeleteObjects вместо нескольких DeleteObject в цикле. Функциональность не изменилась, поэтому это покрывается существующими тестами, такими как integration/test_log_family_s3. #15238 (ianton-ru).
- Исправлено, что
DateTime <op> DateTimeошибочно выбирал медленную универсальную реализацию. Это исправляет #15153. #15178 (Amos Bird). - Улучшена производительность ключа GROUP BY типа
FixedString. #15034 (Amos Bird). - При запуске clickhouse-server выполняется
mlockтолько для сегмента кода. В предыдущих версиях все отображённые области памяти блокировались, включая отладочную информацию. Отладочная информация обычно вынесена в отдельный файл, но если нет, это приводило к дополнительному потреблению памяти на 2–3 ГиБ. #14929 (alexey-milovidov). - Бинарный файл ClickHouse стал меньше за счёт оптимизации на этапе линковки.
Улучшения сборки/тестирования/упаковки
- Теперь для боевой сборки ClickHouse мы используем clang-11. #15239 (alesapin).
- Теперь мы используем clang-11 для сборки ClickHouse в CI. #14846 (alesapin).
- Переключены бинарные сборки (Linux, Darwin, AArch64, FreeDSD) на clang-11. #15622 (Ilya Yatsishin).
- Теперь все тестовые образы используют
llvm-symbolizer-11. #15069 (alesapin). - Добавлена поддержка сборки с llvm-11. #15366 (alexey-milovidov).
- Переход с
clang-tidy-10наclang-tidy-11. #14922 (alexey-milovidov). - Использовать экспериментальный менеджер проходов LLVM по умолчанию. #15608 (Danila Kutenin).
- Не допускайте, чтобы какой-либо отдельный модуль трансляции C++ компилировался более 10 минут или потреблял более 10 ГБ памяти. Это исправляет #14925. #15060 (alexey-milovidov).
- Сделать нагрузочное тестирование более стабильным и показательным, выделив отдельные прогоны для тестирования и профилирования. #15027 (alexey-milovidov).
- Попытка сделать результаты нагрузочного тестирования более надёжными. Это делается путём динамического переназначения исполняемой памяти процесса с помощью
madviseдля использования прозрачных больших страниц — это может снизить количество промахов iTLB, которые являются основным источником нестабильности производительности в нагрузочных тестах. #14685 (alexey-milovidov). - Переход на Python 3. Закрывает #14886. #15007 (Azat Khuzhin).
- Ранее завершать выполнение функциональных тестов, если сервер не отвечает. Это закрывает #15262. #15267 (alexey-milovidov).
- Добавлена возможность запускать AArch64-версию clickhouse-server без конфигурационных файлов. Это облегчает решение задачи #15174. #15266 (alexey-milovidov).
- Улучшения в Docker-образах CI: отказ от использования ZooKeeper и единый скрипт для установки тестовых конфигураций. #15215 (alesapin).
- Исправлена передача опций CMake в скрипте быстрых тестов. Исправлена ошибка из #14711. #15155 (alesapin).
- Добавлен скрипт для выполнения аппаратного бенчмарка одной командой. #15115 (alexey-milovidov).
- Большой тест
test_dictionaries_all_layouts_and_sourcesбыл разбит на несколько меньших тестов. #15110 (Nikita Mikhaylov). - Возможно, исправлено сообщение MSan в base64 (на серверах с AVX-512). Это исправляет #14006. #15030 (alexey-milovidov).
- Отформатировать и привести в порядок код во всех файлах *.py интеграционных тестов. #14864 (Bharat Nallan).
- Исправлен нестабильный тест пустой транзакции в MaterializeMySQL, найденный в CI. #14854 (Winter Zhang).
- Попытка немного ускорить сборку. #14808 (alexey-milovidov).
- Сборка немного ускорена за счет удаления неиспользуемых заголовков. #14714 (alexey-milovidov).
- Исправлена проблема со сборкой на OSX. #14761 (Winter Zhang).
- Включать ccache по умолчанию в cmake, если он доступен в системе. #14575 (alesapin).
- Контроль конфигурации CI-сборок из репозитория ClickHouse. #14547 (alesapin).
- В файлах CMake: - Часть описаний опций перенесена в комментарии над ними. - Значения по умолчанию для
optionзаменены: 0 ->OFF, 1 ->ON. - К опциям добавлены дополнительные описания и ссылки на документацию. - ОпцияFUZZERзаменена (есть другая опцияENABLE_FUZZING, которая включает ту же функциональность). - ОпцияENABLE_GTEST_LIBRARYудалена, так как уже естьENABLE_TESTS. Полное описание см. в PR: #14711 (Mike). - Немного уменьшен размер бинарного файла (~50 МБ для отладочной версии). #14555 (Artem Zuikov).
- Использовать std::filesystem::path в ConfigProcessor для объединения файловых путей. #14558 (Bharat Nallan).
- Исправлено отладочное утверждение в
bitShiftLeft()при вызове с отрицательным большим целым числом. #14697 (Artem Zuikov).
Релиз ClickHouse 20.9
Релиз ClickHouse v20.9.7.11-stable, 2020-12-07
Повышение производительности
- Исправлена деградация производительности при чтении из таблиц
Merge, работающих поверх очень большого числа таблицMergeTree. Устраняет проблему #7748. #16988 (Anton Popov).
Исправление ошибки
- Не восстанавливать части из WAL, если
in_memory_parts_enable_walотключён. #17802 (detailyang). - Исправлено падение с ошибкой сегментации при недостатке места во время вставки в таблицу
Distributed. #17737 (tavplubix). - Исправлена проблема, из-за которой ClickHouse не удавалось восстановить соединение с серверами MySQL. #17681 (Alexander Kazakov).
- Исправлена ошибка
Function not implementedпри выполнении запросаRENAMEв базе данныхAtomicпри работе ClickHouse под Windows Subsystem for Linux. Исправлено #17661. #17664 (tavplubix). - Когда clickhouse-client использовался в интерактивном режиме с многострочными запросами, однострочный комментарий ошибочно считался продолжающимся до конца запроса. Это исправляет #13654. #17565 (alexey-milovidov).
- Исправлена проблема, из-за которой сервер в крайне редких случаях мог перестать принимать подключения. #17542 (alexey-milovidov).
- Исправлено зависание запроса ALTER, когда соответствующая мутация была прервана на другой реплике. Исправляет проблему #16953. #17499 (alesapin).
- Исправлена ошибка, из-за которой размер кэша меток недооценивался ClickHouse. Это могло происходить при большом количестве мелких файлов с метками. #17496 (alesapin).
- Исправлена работа
ORDER BYпри включённой настройкеoptimize_redundant_functions_in_order_by. #17471 (Anton Popov). - Исправлены дубликаты после
DISTINCT, которые могли возникать из-за некорректной оптимизации. Исправлено #17294. #17296 (li chengxiang). #17439 (Nikolai Kochetov). - Устранен сбой при чтении из таблицы
JOINс типамиLowCardinality. Устранена проблема #17228. #17397 (Nikolai Kochetov). - Исправлена инвалидация set-индекса при наличии константных столбцов в подзапросе. Устраняет #17246. #17249 (Amos Bird).
- Исправлено сравнение ColumnConst, из-за которого происходил сбой. Это исправило #17088. #17135 (Amos Bird).
- Исправлена ошибка, приводившая к сбою при выполнении запроса
CREATE TABLE ... AS some_table, когда таблицаsome_tableбыла создана с помощьюAS table_function(). Исправляет #16944. #17072 (tavplubix). - Исправление ошибки в функции fuzzBits; связанная задача: #16980. #17051 (hexiaoting).
- Избегайте лишних сетевых ошибок при выполнении удалённых запросов, которые могут быть отменены, например запросов с
LIMIT. #17006 (Azat Khuzhin). - TODO. #16866 (tavplubix).
- Возвращать количество затронутых строк для запросов INSERT, выполняемых по протоколу MySQL. Ранее ClickHouse всегда возвращал 0; это исправлено. Исправляет #16605. #16715 (Winter Zhang).
Улучшения сборки/тестирования/упаковки
- Обновлены встроенные данные часовых поясов до версии 2020d (также обновлён cctz до последнего состояния ветки master). #17204 (filimonov).
Релиз ClickHouse v20.9.6.14-stable, 2020-11-20
Улучшения
- Реализована возможность подключаться к защищённой конечной точке
clickhouse-server, которая требует SNI. Это возможно, когдаclickhouse-serverразмещён за TLS‑прокси. #16938 (filimonov). - Условные агрегатные функции (например,
avgIf,sumIf,maxIf) должны возвращатьNULL, когда нет строк и используются nullable‑аргументы. #13964 (Winter Zhang).
Исправления ошибок
- Исправлена ошибка, из-за которой запросы
ON CLUSTERмогли зависать навсегда для нелидирующих таблиц ReplicatedMergeTree. #17089 (alesapin). - Повторно выполняется резолвинг IP‑адреса для
format_avro_schema_registry_urlв случае ошибок. #16985 (filimonov). - Исправлен возможный сбой сервера после
ALTER TABLE ... MODIFY COLUMN ... NewType, когда в запросеSELECTприсутствует выражениеWHEREпо изменяемому столбцу, а операция ALTER ещё не завершена. #16968 (Amos Bird). - Скрипт установки всегда должен создавать подкаталоги в конфигурационных директориях. Актуально только для Docker‑сборки с пользовательской конфигурацией. #16936 (filimonov).
- Исправлена возможная ошибка
Illegal type of argumentдля запросов сORDER BY. Исправляет #16580. #16928 (Nikolai Kochetov). - Прерывается multipart‑загрузка, если в WriteBufferFromS3 не были записаны данные. #16840 (Pavel Kovalenko).
- Исправлен сбой при использовании
anyбез каких-либо аргументов. Относится к #16803. cc @azat. #16826 (Amos Bird). - Исправлена работа оператора
INпо нескольким столбцам и кортежам при включённой настройкеtransform_null_in. Исправляет #15310. #16722 (Anton Popov). - Исправлена работа optimize_read_in_order/optimize_aggregation_in_order при max_threads>0 и выражении в
ORDER BY. #16637 (Azat Khuzhin). - Исправляет #16574, исправляет #16231: исправлен сбой удалённого запроса при использовании агрегатной функции с суффиксом
if. #16610 (Winter Zhang). - Запрос завершается быстрее в случае возникновения исключения: выполнение на удалённых репликах отменяется, если произошло исключение. #15578 (Azat Khuzhin).
Релиз ClickHouse v20.9.5.5-stable, 2020-11-13
Исправление ошибок
- Исправлены редкие «тихие» сбои при включённом профилировщике запросов, когда ClickHouse установлен в ОС с версией glibc, у которой (предположительно) повреждённые таблицы асинхронного развёртывания стека для некоторых функций. Это исправляет #15301. Это исправляет #13098. #16846 (alexey-milovidov).
- Теперь при разборе AVRO из входных данных тип
LowCardinalityудаляется. Исправляет #16188. #16521 (Mike). - Исправлен быстрый рост метаданных при использовании цепочки MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL Engine и включённом
slave_parallel_workerна MySQL Slave за счёт корректного уменьшения наборов GTID. Это исправляет #15951. #16504 (TCeason). - Исправлен
DROP TABLEдля Distributed (гонка сINSERT). #16409 (Azat Khuzhin). - Исправлена обработка очень крупных записей в очереди репликации. Очень крупные записи могут появляться в запросах
ALTER, если структура таблицы чрезвычайно велика (порядка 1 МБ). Это исправляет #16307. #16332 (alexey-milovidov). - Исправлено неконсистентное поведение, при котором часть возвращаемых данных могла быть отброшена, потому что множество для их фильтрации не было создано. #16308 (Nikita Mikhaylov).
- Исправлена ошибка с базой данных MySQL. Когда сервер MySQL, используемый как движок базы данных, недоступен, некоторые запросы выбрасывали
Exception, так как они пытались получить таблицы с отключённого сервера, хотя в этом не было необходимости. Например, запросSELECT ... FROM system.partsдолжен работать только с таблицами MergeTree и вообще не обращаться к базе данных MySQL. #16032 (Kruglov Pavel).
Релиз ClickHouse v20.9.4.76-stable (2020-10-29)
Исправление ошибок
- Исправлено двойное освобождение памяти в случае исключения в функции
dictGet. Это могло произойти, если словарь был загружен с ошибкой. #16429 (Nikolai Kochetov). - Исправлено поведение
GROUP BYс модификаторамиWITH TOTALS/ROLLUP/CUBEи функциямиmin/maxпо ключам группировки. Исправлена #16393. #16397 (Anton Popov). - Исправлен асинхронный
INSERTв таблицыDistributedсprefer_localhost_replica=0иinternal_replication. #16358 (Azat Khuzhin). - Исправлен сильно ошибочный участок кода в реализации TwoLevelStringHashTable, который мог приводить к утечке памяти. Я удивлён, как этот баг мог так долго оставаться незамеченным... #16264 (Amos Bird).
- Исправлен случай, когда память могла выделяться сверх установленного лимита. Это исправление закрывает #14560. #16206 (alexey-milovidov).
- Исправлена проблема зависания запроса
ALTER MODIFY ... ORDER BYдляReplicatedVersionedCollapsingMergeTree. Исправление для #15980. #16011 (alesapin). - Исправлен парсер имён
collateи набора символов, а также добавлена поддержка значенияlength = 0для строкового типа. #16008 (Winter Zhang). - Добавлена возможность использовать прямой layout для словарей со сложными ключами. #16007 (Anton Popov).
- Предотвращено зависание реплики на 5–10 минут при возникновении ошибки репликации после периода простоя. #15987 (filimonov).
- Исправлены редкие ошибки сегментации при вставке в материализованное представление или выборке из него при одновременном удалении целевой таблицы (для движка базы данных Atomic). #15984 (tavplubix).
- Исправлена неоднозначность при разборе профилей настроек:
CREATE USER ... SETTINGS profile readonlyтеперь трактуется как использование профиля с именемreadonly, а не настройкиprofileс ограничениемreadonly. Это исправляет #15628. #15982 (Vitaly Baranov). - Исправлена ошибка, приводившая к падению при неудачном создании базы данных. #15954 (Winter Zhang).
- Исправлен сбой
DROP TABLE IF EXISTSс ошибкойTable ... does not exist, возникавший при одновременном переименовании таблицы (для движка базы данных Atomic). Исправлена редкая взаимоблокировка при одновременном выполнении некоторых DDL‑запросов над несколькими таблицами (таких какDROP DATABASEиRENAME TABLE). Исправлен сбойDROP/DETACH DATABASEс ошибкойTable ... does not existпри одновременном выполнении командDROP/DETACH TABLE. #15934 (tavplubix). - Исправлена ошибка, из-за которой запрос к таблице
Distributedс условиямиWHERE,PREWHEREиGLOBAL INвозвращал пустой результат. Исправляет #15792. #15933 (Nikolai Kochetov). - Устранены возможные взаимоблокировки в RBAC. #15875 (Vitaly Baranov).
- Исправлена ошибка, приводившая к возникновению исключения
Block structure mismatchв запросахSELECT ... ORDER BY DESC, которые выполнялись после запросаALTER MODIFY COLUMN. Исправляет #15800. #15852 (alesapin). - Исправлена неточность
select count()для MaterializeMySQL. #15767 (tavplubix). - Исправлены некоторые случаи запросов, в которых выбирались только виртуальные столбцы. Ранее могло выбрасываться исключение
Not found column _nothing in block. Исправлена #12298. #15756 (Anton Popov). - Исправлено слишком низкое значение по умолчанию параметра
max_replicated_logs_to_keep, из-за которого реплики могли слишком часто помечаться как потерянные. Улучшен процесс восстановления потерянных реплик за счёт выбора наиболее актуальной реплики для клонирования. Также старые части потерянной реплики больше не удаляются, а отсоединяются. #15701 (tavplubix). - Исправлена ошибка
Cannot add simple transform to empty Pipe, которая возникала при чтении из таблицыBuffer, структура которой отличается от структуры целевой таблицы. Она могла проявляться, если запрос к целевой таблице возвращал пустой результат. Исправляет #15529. #15662 (Nikolai Kochetov). - Исправлена ошибка обработки glob-масок в табличной функции S3: регион из URL не применялся в конфигурации клиента S3. #15646 (Vladimir Chebotarev).
- Уменьшить значение метрики
ReadonlyReplicaпри отсоединении таблиц только для чтения. Это исправляет #15598. #15592 (sundyli). - Вызывать ошибку при передаче в ReplicatedMergeTree одного параметра вместо того, чтобы игнорировать его. #15516 (nvartolomei).
Улучшение
- Теперь разрешено выполнять запросы
ALTER ... ON CLUSTERнезависимо от настройки<internal_replication>в конфигурации кластера. #16075 (alesapin). - Теперь макросы
{database},{table}и{uuid}в аргументахReplicatedMergeTreeразворачиваются при создании таблицы. #16160 (tavplubix).
Релиз ClickHouse v20.9.3.45-stable (2020-10-09)
Исправление ошибки
- Исправлена ошибка
Cannot find column, которая могла возникать при вставке вMATERIALIZED VIEW, если запрос дляMVсодержит операторARRAY JOIN. #15717 (Nikolai Kochetov). - Исправлена гонка (race condition) в AMQP-CPP. #15667 (alesapin).
- Исправлен порядок уничтожения ресурсов на шаге плана запроса
ReadFromStorage. В редких случаях это могло приводить к аварийному завершению работы. Возможно, связано с #15610. #15645 (Nikolai Kochetov). - Исправлена ошибка
Element ... is not a constant expressionпри использовании результата функцииJSON*вVALUES,LIMITили правой части оператораIN. #15589 (tavplubix). - Предотвращено появление сообщения об ошибке
Could not calculate available disk space (statvfs), errno: 4, strerror: Interrupted system call. Исправляет #15541. #15557 (alexey-milovidov). - Существенно снижено потребление памяти в AggregatingInOrderTransform и optimize_aggregation_in_order. #15543 (Azat Khuzhin).
- Мутация могла зависать в ожидании несуществующей части после операций
MOVEилиREPLACE PARTITION, а в редких случаях — послеDETACHилиDROP PARTITION. Исправлено. #15537 (tavplubix). - Исправлена ошибка, при которой оператор
ILIKEпереставал быть регистронезависимым, если ранее выполнялсяLIKEс тем же шаблоном. #15536 (alesapin). - Исправлена ошибка
Missing columnsпри выборе столбцов, отсутствующих в данных, но зависящих от других столбцов, которые также отсутствуют в данных. Исправлено #15530. #15532 (alesapin). - Исправлена ошибка подписки на события в DDLWorker, которая в редких случаях могла приводить к зависанию запросов в
ON CLUSTER. Впервые появилась в #13450. #15477 (alesapin). - Выдавать корректное сообщение об ошибке, когда второй аргумент агрегатной функции
boundingRatioимеет неверный тип. #15407 (detailyang). - Исправлена ошибка, из-за которой запросы вида
SELECT toStartOfDay(today())завершались с ошибкой о пустом аргументеtime_zone. #15319 (Bharat Nallan). - Исправлена гонка при переименовании таблицы MergeTree и её фоновой очистке. #15304 (alesapin).
- Исправлена редкая гонка при запуске сервера, возникающая при включённых system.logs. #15300 (alesapin).
- Исправлено предупреждение MSan в QueryLog. Неинициализированная память могла использоваться для поля
memory_usage. #15258 (alexey-milovidov). - Исправлен крэш сервера при использовании функции joinGet с типами LowCardinality. Это исправляет #15214. #15220 (Amos Bird).
- Исправлена ошибка в табличном движке
Buffer, из-за которой после запросаALTERбыло невозможно вставлять данные с новой структурой вBuffer. Исправляет #15117. #15192 (alesapin). - Изменить размер поля decimals в пакете описания столбца MySQL. #15152 (maqroll).
- Исправлена ошибка
Cannot rename ... errno: 22, strerror: Invalid argumentпри выполнении DDL-запроса в базе данных Atomic при запуске clickhouse-server в Docker на macOS. #15024 (tavplubix). - Исправлена работа проталкивания предикатов, когда подзапрос содержит функцию finalizeAggregation. Исправляет #14847. #14937 (filimonov).
- Исправлена проблема, при которой сервер мог зависать при запуске во время взаимодействия с ZooKeeper, если файлы конфигурации необходимо было загружать из ZK (с использованием опции include
from_zk). Это исправляет #14814. #14843 (Alexander Kuzmenkov).
Улучшение
- Теперь можно изменять тип столбца версии для
VersionedCollapsingMergeTreeс помощью запросаALTER. #15442 (alesapin).
Релиз ClickHouse v20.9.2.20, 2020-09-22
Несовместимое изменение (нарушение обратной совместимости)
- При обновлении с версий ниже 20.5, если выполняется поэтапное (rolling) обновление и в кластере одновременно есть версии 20.5 и новее и версии ниже 20.5, то при перезапуске узлов ClickHouse со старыми версиями и запуске старой версии в присутствии новых версий это может привести к ошибкам
Part ... intersects previous part. Чтобы предотвратить эту ошибку, сначала установите новые пакеты clickhouse-server на все узлы кластера, а затем выполняйте перезапуски (то есть при перезапуске clickhouse-server будет запускаться уже новая версия).
Новая функция
- Добавлены трансформеры столбцов
EXCEPT,REPLACE,APPLY, которые могут быть применены к списку выбранных столбцов (после*илиCOLUMNS(...)). Например, можно написатьSELECT * EXCEPT(URL) REPLACE(number + 1 AS number). Другой пример:select * apply(length) apply(max) from wide_string_table, чтобы узнать максимальную длину всех строковых столбцов. #14233 (Amos Bird). - Добавлена агрегатная функция
rankCorr, которая вычисляет коэффициент ранговой корреляции. #11769 (antikvist) #14411 (Nikita Mikhaylov). - Добавлена табличная функция
view, которая превращает подзапрос в табличный объект. Это упрощает передачу запросов. Например, её можно использовать в табличных функциях remote/cluster. #12567 (Amos Bird).
Исправление ошибки
- Исправлена ошибка, из-за которой мутация
ALTER UPDATEсо столбцом типа Nullable в выражении присваивания и константным значением (например,UPDATE x = 42) приводила к некорректному значению в столбце или ошибке сегментации (segfault). Исправляет #13634, #14045. #14646 (alesapin). - Исправлен неверный результат умножения
Decimal, вызванный неправильным масштабом результатаDecimalв результирующем столбце. #14603 (Artem Zuikov). - Исправлен некорректный порядок сортировки столбца типа
Nullable. Это устраняет #14344. #14495 (Nikita Mikhaylov). - Исправлено некорректное сравнение с первичным ключом типа
FixedStringпри анализе индекса, если он сравнивается со строкой меньшей длины. Это исправляет #14908. #15033 (Amos Bird). - Исправлена ошибка, приводившая к неверному назначению слияний, если таблица содержит разделы, состоящие из одной части. #14444 (alesapin).
- Если функция
barвызывалась со специально подобранными аргументами, могло произойти переполнение буфера. Это закрывает #13926. #15028 (alexey-milovidov). - Публикация частоты CPU для каждого логического ядра в
system.asynchronous_metrics. Это исправляет #14923. #14924 (Alexander Kuzmenkov). - Исправлена ошибка «.metadata.tmp File exists» при использовании движка базы данных
MaterializeMySQL. #14898 (Winter Zhang). - Исправлена проблема, при которой некоторые вызовы функции
extractAllGroupsмогли приводить к ошибке «Memory limit exceeded». Это исправляет проблему #13383. #14889 (alexey-milovidov). - Исправлена ошибка SIGSEGV при попытке выполнить INSERT в StorageFile(fd). #14887 (Azat Khuzhin).
- Исправлена редкая ошибка в запросах
SELECT, возникающая, когда запрашиваемый столбец имеет выражениеDEFAULT, зависящее от другого столбца, который также имеетDEFAULT, не указан в запросеSELECTи при этом отсутствует на диске. Частично исправлена #14531. #14845 (alesapin). - Исправлено некорректное определение монотонности при сужающем приведении
Int -> Intдля знаковых типов. Это могло приводить к неверному результату запроса. Ошибка была выявлена в #14513. #14783 (Amos Bird). - Исправлено отсутствие имени базы данных по умолчанию в метаданных материализованного представления при выполнении команды
ALTER ... MODIFY QUERY. #14664 (tavplubix). - Исправлен потенциально некорректный результат работы функции
hasпри использовании типов LowCardinality и Nullable. #14591 (Mike). - Очистка каталога данных после исключений в ZooKeeper во время выполнения запроса CREATE для таблиц с движком ReplicatedMergeTree. #14563 (Bharat Nallan).
- Исправлены редкие сбои сегментации в функциях с комбинатором
-Resample, которые могли возникать в результате переполнения при очень больших значениях параметров. #14562 (Anton Popov). - Проверка размера массива на переполнение в агрегатной функции
topK. Без этой проверки пользователь может отправить запрос с тщательно подобранными параметрами, что приведёт к сбою сервера. Это закрывает #14452. #14467 (alexey-milovidov). - Переадресованы команды restart/start/stop/reload SysVinit в systemd (если он используется). #14460 (Azat Khuzhin).
- Останавливается выполнение запроса при возникновении исключения в самом
PipelineExecutor. Это позволяет предотвратить редкие случаи зависания запроса. #14334 #14402 (Nikolai Kochetov). - Исправлено падение сервера при выполнении запроса
ALTERдля таблицы, созданной с помощьюAS table_function. Исправляет #14212. #14326 (alesapin). - Исправлена ошибка, приводившая к исключению при выполнении запроса ALTER LIVE VIEW с командой REFRESH. LIVE VIEW — экспериментальная функция. #14320 (Bharat Nallan).
- Исправлено время жизни QueryPlan (для EXPLAIN PIPELINE graph=1) для запросов с вложенным интерпретатором. #14315 (Azat Khuzhin).
- Улучшена проверка размера кортежа во внешних словарях с составным ключом, использующих SSD-кэш. Исправляет #13981. #14313 (alexey-milovidov).
- Запрещает использование
CODECдля столбцов типаALIAS. Исправляет #13911. #14263 (Bharat Nallan). - Исправлено поведение оператора GRANT ALL при выполнении не на глобальном уровне. #13987 (Vitaly Baranov).
- Исправлен захват
arrayJoin()вlambda(выбрасывалось исключение с сообщением о логической ошибке). #13792 (Azat Khuzhin).
Экспериментальная возможность
- Добавлен инструмент
db-generatorдля случайной генерации базы данных по заданным запросам SELECT. Он может упростить воспроизведение проблем, когда от пользователя есть только неполный отчёт об ошибке. #14442 (Nikita Mikhaylov) #10973 (ZeDRoman).
Улучшение
- Разрешено использовать конфигурацию хранилища с несколькими томами в движке Distributed. #14839 (Pavel Kovalenko).
- Запрещён пустой аргумент time_zone в функциях семейства
toStartOf*. #14509 (Bharat Nallan). - Обработчик MySQL возвращает
OKдля запросов видаSET @@var = value. Такой оператор игнорируется. Это необходимо, потому что некоторые драйверы MySQL после рукопожатия отправляют запросSET @@для настройки: https://github.com/ClickHouse/ClickHouse/issues/9336#issuecomment-686222422. #14469 (BohuTANG). - Теперь TTL применяются во время слияния, если они ранее не были материализованы. #14438 (alesapin).
- Теперь
clickhouse-obfuscatorподдерживает тип UUID, как предложено в #13163. #14409 (dimarub2000). - Добавлена новая настройка
system_events_show_zero_values, как предложено в #11384. #14404 (dimarub2000). - Неявное приведение первичного ключа к
NOT NULLвMaterializeMySQL(так же, как вMySQL). Исправляет #14114. #14397 (Winter Zhang). - Заменены широкие целые числа (256 бит) из boost multiprecision на реализацию из https://github.com/cerevra/int. 256-битные целые числа являются экспериментальными. #14229 (Artem Zuikov).
- Добавлен кодек сжатия по умолчанию для кусков в
system.part_logс именемdefault_compression_codec. #14116 (alesapin). - Добавлен аргумент точности для типа
DateTime. Это позволяет использовать имяDateTimeвместоDateTime64. #13761 (Winter Zhang). - Добавлена авторизация с requirepass для внешнего словаря
Redis. #13688 (Ivan Torgashov). - Улучшения в движке
RabbitMQ: добавлена обработка сбоев соединений и каналов, корректные коммиты, обработка ошибок вставки, улучшена работа с обменниками, повышена надёжность очередей и возможность их восстановления, добавлены новые настройки очередей. Исправлены тесты. #12761 (Kseniia Sumarokova). - Добавлена поддержка пользовательских кодеков в компактных кусках. #12183 (Anton Popov).
Улучшение производительности
- Оптимизировать запросы с LIMIT/LIMIT BY/ORDER BY для Distributed с GROUP BY sharding_key (при включённых
optimize_skip_unused_shardsиoptimize_distributed_group_by_sharding_key). #10373 (Azat Khuzhin). - Параллельное создание наборов для нескольких
JOINиIN. Это может немного повысить производительность запросов с несколькими различными выражениями видаIN subquery. #14412 (Nikolai Kochetov). - Повысить производительность движка Kafka за счёт выделения независимого потока для каждого потребителя. Выделен отдельный пул потоков для потоковых движков (таких как Kafka). #13939 (fastio).
Улучшения сборки/тестирования/упаковки
- Уменьшить размер бинарного файла в debug-сборке за счёт удаления отладочной информации из
Functions. Она нужна только для одного внутреннего проекта в Yandex, который использует очень старый линкер. #14549 (alexey-milovidov). - Подготовка к сборке с clang 11. #14455 (alexey-milovidov).
- Исправлена логика в скрипте backport. В предыдущих версиях он срабатывал для любых меток со 100% красным цветом. Это было странно. #14433 (alexey-milovidov).
- Интеграционные тесты используют базовую конфигурацию по умолчанию. Все изменения конфигурации выполняются явно, например, с помощью параметров main_configs, user_configs и dictionaries. #13647 (Ilya Yatsishin).
Релиз ClickHouse 20.8
Релиз ClickHouse v20.8.12.2-lts, 2021-01-16
Исправление ошибок
- Исправлен *If-комбинатор с унарной функцией и типами Nullable. #18806 (Azat Khuzhin).
- Ограничены слияния из широких частей в компактные. В случае вертикального слияния это приводило к повреждению результирующей части. #18381 (Anton Popov).
Релиз ClickHouse v20.8.11.17-lts, 2020-12-25
Исправление ошибок
- Отключена запись с использованием AIO во время слияний, поскольку это может в крайне редких случаях приводить к повреждению данных в столбцах первичного ключа при слиянии. #18481 (alesapin).
- Исправлена ошибка
value is too shortпри выполнении функцийtoType(...)(toDate,toUInt32и т.д.) с аргументом типаNullable(String). Теперь такие функции возвращаютNULLпри ошибках разбора вместо генерации исключения. Исправляет #7673. #18445 (tavplubix). - Исправлены возможные падения в агрегатных функциях с комбинатором
Distinctпри использовании двухуровневой агрегации. Исправляет #17682. #18365 (Anton Popov).
Релиз ClickHouse v20.8.10.13-lts, 2020-12-24
Исправление ошибок
- Когда ротация серверных логов была настроена с помощью параметра
logger.sizeс числовым значением больше 2^32, логи не ротировались корректно. #17905 (Alexander Kuzmenkov). - Исправлена некорректная инициализация параметра
max_compress_block_sizeв MergeTreeWriterSettings значениемmin_compress_block_size. #17833 (flynn). - Исправлена проблема, из-за которой ClickHouse не мог возобновить подключение к серверам MySQL. #17681 (Alexander Kazakov).
- Исправлено зависание запроса
ALTER, когда соответствующая мутация была убита на другой реплике. Это исправляет #16953. #17499 (alesapin). - Исправлена ошибка, из-за которой ClickHouse занижал размер кэша меток. Это могло происходить, если было много мелких файлов с метками. #17496 (alesapin).
- Исправлена ошибка в
ORDER BYпри включённой настройкеoptimize_redundant_functions_in_order_by. #17471 (Anton Popov). - Исправлено сравнение
ColumnConst, приводившее к аварийному завершению. Это исправило #17088. #17135 (Amos Bird). - Исправлена ошибка, из-за которой запросы с
ON CLUSTERдля не-лидирующих реплик таблиц ReplicatedMergeTree могли зависать бесконечно. #17089 (alesapin). - Исключены ненужные сетевые ошибки при удалённых запросах, которые могут быть отменены в процессе выполнения, например при запросах с
LIMIT. #17006 (Azat Khuzhin). - Повторно определять IP-адрес для
format_avro_schema_registry_urlв случае ошибок. #16985 (filimonov). - Исправлено возможное аварийное завершение работы сервера после
ALTER TABLE ... MODIFY COLUMN ... NewType, когда вSELECTиспользуется условиеWHEREпо изменяемому столбцу, а операция изменения еще не завершена. #16968 (Amos Bird). - Скрипт установки всегда должен создавать подкаталоги в конфигурационных каталогах. Это относится только к сборке Docker с пользовательской конфигурацией. #16936 (filimonov).
- Исправлена потенциальная ошибка
Illegal type of argumentв запросах сORDER BY. Устраняет #16580. #16928 (Nikolai Kochetov). - Прерывать multipart-загрузку, если в WriteBufferFromS3 не были записаны данные. #16840 (Pavel Kovalenko).
- Исправлен краш при использовании
anyбез аргументов. Это устраняет #16803. #16826 (Amos Bird). - Исправлено поведение оператора
INдля нескольких столбцов и кортежей при включённой настройкеtransform_null_in. Исправляет #15310. #16722 (Anton Popov). - Исправлено непоследовательное поведение
optimize_read_in_order/optimize_aggregation_in_orderпри max_threads > 0 и наличии выражения в ORDER BY. #16637 (Azat Khuzhin). - Исправлена проблема, из-за которой оптимизация запроса выдавала некорректный результат, если запрос содержал конструкцию
ARRAY JOIN. #17887 (sundyli). - Теперь запрос в случае исключения завершается быстрее: при его возникновении выполнение на удалённых репликах отменяется. #15578 (Azat Khuzhin).
Релиз ClickHouse v20.8.6.6-lts, 2020-11-13
Исправление ошибок
- Исправлены редкие «тихие» аварийные завершения работы, возникавшие, когда профилировщик запросов включён и ClickHouse установлен на ОС с версией glibc, у которой (предположительно) повреждены асинхронные таблицы развёртки стека для некоторых функций. Исправляет #15301. Исправляет #13098. #16846 (alexey-milovidov).
- Теперь при разборе AVRO из входных данных модификатор типа LowCardinality удаляется. Исправляет #16188. #16521 (Mike).
- Исправлен быстрый рост метаданных при использовании цепочки MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL Engine и включённом
slave_parallel_workerна MySQL Slave за счёт корректного сжатия множеств GTID. Исправляет #15951. #16504 (TCeason). - Исправлен
DROP TABLEдля Distributed (гонка сINSERT). #16409 (Azat Khuzhin). - Исправлена обработка очень больших записей в очереди репликации. Очень большие записи могут появляться в запросах
ALTER, если структура таблицы чрезвычайно велика (порядка 1 МБ). Исправляет #16307. #16332 (alexey-milovidov). - Исправлено непоследовательное поведение, при котором часть возвращаемых данных могла быть отброшена, если множество для их фильтрации не было создано. #16308 (Nikita Mikhaylov).
- Исправлена ошибка, связанная с базой данных MySQL. Когда сервер MySQL, используемый как движок базы данных, недоступен, некоторые запросы выбрасывали исключение, поскольку пытались получить таблицы с отключённого сервера, хотя в этом не было необходимости. Например, запрос
SELECT ... FROM system.partsдолжен работать только с таблицами MergeTree и вовсе не обращаться к базе данных MySQL. #16032 (Kruglov Pavel).
Релиз ClickHouse v20.8.5.45-lts, 2020-10-29
Исправление ошибок
- Исправлен двойной
freeв случае возникновения исключения в функцииdictGet. Это могло произойти, если словарь был загружен с ошибкой. #16429 (Nikolai Kochetov). - Исправлена обработка
GROUP BYс модификаторамиWITH TOTALS/ROLLUP/CUBEи функциямиmin/maxпо ключам группировки. Устранена ошибка #16393. #16397 (Anton Popov). - Исправлен асинхронный запрос INSERT в Distributed при использовании prefer_localhost_replica=0 и internal_replication. #16358 (Azat Khuzhin).
- Исправлена возможная утечка памяти при использовании
GROUP BYсо строковыми ключами, вызванная ошибкой в реализацииTwoLevelStringHashTable. #16264 (Amos Bird). - Исправлен случай, когда память могла выделяться сверх лимита, независимо от заданного ограничения. Это закрывает #14560. #16206 (alexey-milovidov).
- Исправлено зависание при выполнении запроса
ALTER MODIFY ... ORDER BYдляReplicatedVersionedCollapsingMergeTree. Исправлена проблема #15980. #16011 (alesapin). - Исправлен парсер имён COLLATE и наборов символов и добавлена поддержка значения
length = 0для строкового типа. #16008 (Winter Zhang). - Разрешить использование прямого layout для словарей со сложными ключами. #16007 (Anton Popov).
- Предотвращает зависание реплики на 5–10 минут при возникновении ошибки репликации после периода простоя. #15987 (filimonov).
- Исправлены редкие ошибки сегментации (segfault) при вставке в
MaterializedViewили выборке из него при одновременном удалении целевой таблицы (для движка базы данных Atomic). #15984 (tavplubix). - Исправлена неоднозначность при разборе профилей настроек:
CREATE USER ... SETTINGS profile readonlyтеперь трактуется как использование профиля с именемreadonly, а не настройки с именемprofileс ограничениемreadonly. Исправлено #15628. #15982 (Vitaly Baranov). - Исправлен сбой при ошибке создания базы данных. #15954 (Winter Zhang).
- Исправлен сбой
DROP TABLE IF EXISTSс ошибкойTable ... does not exist, возникавший при одновременном переименовании таблицы (для движка базы данных Atomic). Исправлен редкий дедлок при одновременном выполнении некоторых DDL-запросов с участием нескольких таблиц (например,DROP DATABASEиRENAME TABLE). Исправлен сбойDROP/DETACH DATABASEс ошибкойTable ... does not existпри одновременном выполненииDROP/DETACH TABLE. #15934 (tavplubix). - Исправлена ошибка, из-за которой запрос к таблице
Distributedвозвращал пустой результат, если в запросе использовалисьWHERE,PREWHEREиGLOBAL IN. Исправляет #15792. #15933 (Nikolai Kochetov). - Устранены возможные взаимоблокировки в RBAC. #15875 (Vitaly Baranov).
- Исправлено исключение
Block structure mismatchв запросахSELECT ... ORDER BY DESC, которые выполнялись после запросаALTER MODIFY COLUMN. Исправляет проблему #15800. #15852 (alesapin). - Исправлены некоторые случаи запросов, в которых выбирались только виртуальные столбцы. Ранее мог выбрасываться
Not found column _nothing in blockexception. Устраняет #12298. #15756 (Anton Popov). - Исправлена ошибка
Cannot find column, которая могла возникать при вставке данных вMATERIALIZED VIEW, если запрос дляMVсодержитARRAY JOIN. #15717 (Nikolai Kochetov). - Исправлено слишком низкое значение по умолчанию настройки
max_replicated_logs_to_keep, из‑за которого реплики могли слишком часто считаться потерянными. Улучшен процесс восстановления потерянных реплик за счёт выбора наиболее актуальной реплики для клонирования. Также старые части потерянной реплики больше не удаляются, а отсоединяются. #15701 (tavplubix). - Исправлена ошибка
Cannot add simple transform to empty Pipe, возникавшая при чтении из таблицыBufferс отличающейся структурой по сравнению с целевой таблицей. Это могло произойти, если целевая таблица возвращала пустой результат для запроса. Исправляет #15529. #15662 (Nikolai Kochetov). - Исправлена ошибка с glob‑шаблонами в табличной функции S3: регион из URL‑адреса не применялся к конфигурации клиента S3. #15646 (Vladimir Chebotarev).
- Уменьшите значение метрики
ReadonlyReplicaпри отсоединении таблиц только для чтения. Это исправляет #15598. #15592 (sundyli). - Вызывать ошибку, если
ReplicatedMergeTreeпередан один параметр, вместо того чтобы игнорировать его. #15516 (nvartolomei).
Улучшение
- Теперь можно выполнять запросы
ALTER ... ON CLUSTERнезависимо от настройки<internal_replication>в конфигурации кластера. #16075 (alesapin). - Теперь при создании таблицы в аргументах
ReplicatedMergeTreeавтоматически разворачиваются макросы{database},{table}и{uuid}. #16159 (tavplubix).
Релиз ClickHouse v20.8.4.11-lts, 2020-10-09
Исправление ошибки
- Исправлен порядок уничтожения ресурсов на этапе
ReadFromStorageв плане запроса. В редких случаях это могло приводить к сбоям. Возможно, связано с #15610. #15645 (Nikolai Kochetov). - Исправлена ошибка
Element ... is not a constant expressionпри использовании результата функцииJSON*вVALUES,LIMITили на правой стороне оператораIN. #15589 (tavplubix). - Исключена возможность появления сообщения об ошибке
Could not calculate available disk space (statvfs), errno: 4, strerror: Interrupted system call. Это исправляет #15541. #15557 (alexey-milovidov). - Существенно снижено потребление памяти в AggregatingInOrderTransform/optimize_aggregation_in_order. #15543 (Azat Khuzhin).
- Мутация могла зависать в ожидании несуществующей части после
MOVEилиREPLACE PARTITIONили, в редких случаях, послеDETACHилиDROP PARTITION. Исправлено. #15537 (tavplubix). - Исправлена ошибка, из-за которой оператор
ILIKEстановился регистрозависимым, если до этого был выполненLIKEс тем же шаблоном. #15536 (alesapin). - Исправлена ошибка
Missing columns, возникающая при выборе столбцов, отсутствующих в данных и зависящих от других столбцов, также отсутствующих в данных. Исправляет #15530. #15532 (alesapin). - Исправлена ошибка в подписке на события в DDLWorker, которая в редких случаях могла приводить к зависанию запросов с
ON CLUSTER. Появилась в #13450. #15477 (alesapin). - Сообщать корректное сообщение об ошибке, если второй аргумент агрегатной функции
boundingRatioимеет неверный тип. #15407 (detailyang). - Исправлено состояние гонки при переименовании таблицы MergeTree и её фоновой очистке. #15304 (alesapin).
- Исправлено редкое состояние гонки при запуске сервера при включённых system.logs. #15300 (alesapin).
- Исправлен отчет MSan в QueryLog. Неинициализированная память могла использоваться для поля
memory_usage. #15258 (alexey-milovidov). - Исправлена ошибка, приводившая к сбою сервера при использовании joinGet с типами LowCardinality. Тем самым исправлена проблема #15214. #15220 (Amos Bird).
- Исправлена ошибка в табличном движке
Buffer, из‑за которой после запросаALTERбыло невозможно вставлять данные с новой структурой вBuffer. Исправляет #15117. #15192 (alesapin). - Изменен размер поля
decimalsв пакете определения столбца MySQL. #15152 (maqroll). - Мы уже используем сравнение с дополнением (padded comparison) между
StringиFixedString(https://github.com/ClickHouse/ClickHouse/blob/master/src/Functions/FunctionsComparison.h#L333). Этот PR применяет ту же логику к сравнению полей, что делает корректным использованиеFixedStringв качестве первичных ключей. Это исправляет #14908. #15033 (Amos Bird). - Если функция
barвызывалась со специально подобранными аргументами, могло произойти переполнение буфера. Это закрывает #13926. #15028 (alexey-milovidov). - Исправлена ошибка
Cannot rename ... errno: 22, strerror: Invalid argumentпри выполнении DDL-запроса в базе данных с движком Atomic при запуске clickhouse-server в Docker под macOS. #15024 (tavplubix). - Теперь настройки
number_of_free_entries_in_pool_to_execute_mutationиnumber_of_free_entries_in_pool_to_lower_max_size_of_mergeмогут быть равныbackground_pool_size. #14975 (alesapin). - Исправлена проблема, из-за которой проталкивание предикатов не работало, когда подзапрос содержал функцию finalizeAggregation. Исправляет #14847. #14937 (filimonov).
- Публикуются частоты CPU для каждого логического ядра в таблице
system.asynchronous_metrics. Это исправляет #14923. #14924 (Alexander Kuzmenkov). - Исправлена ошибка
.metadata.tmp File existsпри использовании движка базы данныхMaterializeMySQL. #14898 (Winter Zhang). - Исправлена проблема, при которой сервер мог зависать при запуске во время взаимодействия с ZooKeeper, если файлы конфигурации нужно было получать из ZK (с использованием опции
from_zkдирективыinclude). Это исправляет #14814. #14843 (Alexander Kuzmenkov). - Исправлено некорректное определение монотонности для сужающего преобразования
Int -> Intдля знаковых типов. Это могло приводить к неверному результату запроса. Ошибка выявлена в #14513. #14783 (Amos Bird). - Исправлен некорректный порядок сортировки столбца
Nullable. Исправляет #14344. #14495 (Nikita Mikhaylov).
Улучшение
- Теперь можно изменить тип столбца версии для
VersionedCollapsingMergeTreeс помощью запросаALTER. #15442 (alesapin).
Релиз ClickHouse v20.8.3.18-stable, 2020-09-18
Исправление ошибки
- Исправлена проблема, когда некоторые вызовы функции
extractAllGroupsмогли приводить к ошибке «Memory limit exceeded». Исправляет #13383. #14889 (alexey-milovidov). - Исправлен SIGSEGV при попытке выполнить INSERT в StorageFile(fd). #14887 (Azat Khuzhin).
- Исправлена редкая ошибка в запросах
SELECT, когда запрашиваемый столбец имеет выражениеDEFAULT, которое зависит от другого столбца, у которого также естьDEFAULT, но он не присутствует в запросеSELECTи отсутствует на диске. Частично исправляет #14531. #14845 (alesapin). - Исправлено отсутствие имени базы данных по умолчанию в метаданных материализованного представления при выполнении
ALTER ... MODIFY QUERY. #14664 (tavplubix). - Исправлена ошибка, когда мутация
ALTER UPDATEсо столбцом типа Nullable в выражении присваивания и константным значением (например,UPDATE x = 42) приводила к некорректному значению в столбце или ошибке сегментации (segfault). Исправляет #13634, #14045. #14646 (alesapin). - Исправлен неверный результат умножения Decimal, вызванный некорректным масштабом (scale) результирующего столбца. #14603 (Artem Zuikov).
- Добавлена проверка, поскольку ни вызов
lc->isNullable(), ни вызовls->getDictionaryPtr()->isNullable()не возвращали корректный результат. #14591 (myrrc). - Теперь каталог данных очищается после исключений ZooKeeper во время CreateQuery для движка StorageReplicatedMergeTree. #14563 (Bharat Nallan).
- Исправлены редкие ошибки сегментации (segfault) в функциях с комбинатором -Resample, которые могли возникать в результате переполнения при очень больших параметрах. #14562 (Anton Popov).
Улучшение
- Ускорено завершение работы сервера, если имеются активные запросы к S3. #14858 (Pavel Kovalenko).
- Разрешено использование многотомной конфигурации хранилища в хранилище Distributed. #14839 (Pavel Kovalenko).
- Ускорено завершение работы сервера, если имеются активные запросы к S3. #14496 (Pavel Kovalenko).
- Добавлена поддержка пользовательских кодеков в компактных частях. #12183 (Anton Popov).
Релиз ClickHouse v20.8.2.3-stable, 2020-09-08
Обратное несовместимое изменение
- Теперь запрос
OPTIMIZE FINALне пересчитывает TTL для частей, которые были добавлены до создания TTL. ИспользуйтеALTER TABLE ... MATERIALIZE TTLодин раз, чтобы вычислить их, после чегоOPTIMIZE FINALбудет корректно учитывать TTL. Это поведение никогда не работало для реплицируемых таблиц. #14220 (alesapin). - Расширена настройка
parallel_distributed_insert_select, добавлена опция для выполненияINSERTв локальную таблицу. Тип настройки изменяется сBoolнаUInt64, поэтому значенияfalseиtrueбольше не поддерживаются. Если у вас указаны эти значения в конфигурации сервера, сервер не запустится. Замените их, соответственно, на0и1. #14060 (Azat Khuzhin). - Удалена поддержка формата ввода/вывода
ODBCDriver. Это был устаревший формат, ранее использовавшийся для взаимодействия с драйвером ClickHouse ODBC, который уже давно заменён форматомODBCDriver2. Устраняет #13629. #13847 (hexiaoting). - При обновлении с версий ниже 20.5, если выполняется поэтапное обновление и кластер одновременно содержит версии 20.5 или новее и версии ниже 20.5, то в случае, когда узлы ClickHouse со старыми версиями перезапускаются и старая версия запускается в присутствии более новых версий, это может приводить к ошибкам
Part ... intersects previous part. Чтобы предотвратить эту ошибку, сначала установите новые пакеты clickhouse-server на все узлы кластера, а затем выполняйте перезапуски (то есть при перезапуске clickhouse-server будет запускаться уже в новой версии).
Новая функциональность
- Добавлена возможность указывать кодек сжатия
Defaultдля столбцов, которые соответствуют настройкам, указанным вconfig.xml. Реализует задачу: #9074. #14049 (alesapin). - Добавлена поддержка аутентификации Kerberos в Kafka с использованием библиотек
krb5иcyrus-sasl. #12771 (Ilya Golshtein). - Добавлена функция
normalizeQuery, которая заменяет литералы, последовательности литералов и сложные алиасы плейсхолдерами. Добавлена функцияnormalizedQueryHash, которая возвращает одинаковые 64-битные хэши для похожих запросов. Это помогает анализировать журнал запросов. Закрывает #11271. #13816 (alexey-milovidov). - Добавлена таблица
time_zones. #13880 (Bharat Nallan). - Добавлена функция
defaultValueOfTypeName, которая возвращает значение по умолчанию для заданного типа. #13877 (hcz). - Добавлена функция
countDigits(x), которая считает количество десятичных цифр в целочисленном или десятичном столбце. Добавлена функцияisDecimalOverflow(d, [p]), которая проверяет, выходит ли значение в столбце Decimal за пределы его (или указанной) точности. #14151 (Artem Zuikov). - Добавлены реализации
quantileExactLowиquantileExactHigh, а также соответствующие алиасыmedianExactLowиmedianExactHigh. #13818 (Bharat Nallan). - Добавлена функция
date_trunc, которая усекает значение даты/времени до указанной части даты/времени. #13888 (Vladimir Golovchenko). - В основной конфигурационный файл добавлен новый необязательный раздел
<user_directories>. #13425 (Vitaly Baranov). - Добавлен оператор
ALTER SAMPLE BY, который позволяет изменять предложение выборки SAMPLE таблицы. #13280 (Amos Bird). - Функция
positionтеперь поддерживает необязательный аргументstart_pos. #13237 (vdimir).
Исправление ошибок
- Исправлено перекрытие отображаемых данных индикатором прогресса в клиенте в интерактивном режиме. Это исправляет #12562, #13369, #13584 и #12964. #13691 (alexey-milovidov).
- Исправлен некорректный порядок сортировки для столбца типа
LowCardinalityпри сортировке по нескольким столбцам. Это исправляет #13958. #14223 (Nikita Mikhaylov). - Добавлена проверка на переполнение размера массива в агрегатной функции
topK. Без этой проверки пользователь может отправить запрос с тщательно подобранными параметрами, что приведёт к сбою сервера. Это закрывает #14452. #14467 (alexey-milovidov). - Исправлена ошибка, которая могла приводить к неверному назначению слияний, если таблица содержит партиции, состоящие из одной части. #14444 (alesapin).
- Останавливать выполнение запроса, если в самом
PipelineExecutorпроизошло исключение. Это может предотвратить редкие случаи зависания запроса. Продолжение #14334. #14402 #14334 (Nikolai Kochetov). - Исправлено падение сервера при выполнении запроса
ALTERдля таблицы, созданной черезAS table_function. Исправляет #14212. #14326 (alesapin). - Исправлено исключение, возникавшее при выполнении запроса
ALTER LIVE VIEWс командойREFRESH.LIVE VIEW— экспериментальная функция. #14320 (Bharat Nallan). - Исправлено управление временем жизни QueryPlan (для EXPLAIN PIPELINE graph=1) для запросов с вложенным интерпретатором. #14315 (Azat Khuzhin).
- Исправлена ошибка сегментации в
clickhouse-odbc-bridgeпри получении схемы из некоторых внешних источников. Этот PR исправляет #13861. #14267 (Vitaly Baranov). - Исправлено аварийное завершение работы при поиске включения по меткам, появившееся в #12277. #14225 (Amos Bird).
- Исправлено создание таблиц с именованными кортежами. Ошибка #13027 устранена. #14143 (alexey-milovidov).
- Исправлено форматирование минимальных отрицательных десятичных чисел. Устраняет #14111. #14119 (Alexander Kuzmenkov).
- Исправлена метрика
DistributedFilesToInsert(обнулялась, хотя не должна была). #14095 (Azat Khuzhin). - Исправлена работа
pointInPolygonпри использовании константного двумерного массива в качестве полигона. #14079 (Alexey Ilyukhov). - Исправлена неверная точка монтирования в дополнительной информации для ошибки
Poco::Exception: no space left on device. #14050 (tavplubix). - Исправлено поведение оператора GRANT ALL при выполнении на неглобальном уровне. #13987 (Vitaly Baranov).
- Исправлен парсер: теперь он отклоняет
CREATE TABLE ASс табличной функцией и указанием движка. #13940 (hcz). - Исправлены некорректные результаты в запросах SELECT с ключевым словом
DISTINCTи подзапросами с UNION ALL при включённой настройкеoptimize_duplicate_order_by_and_distinct. #13925 (Artem Zuikov). - Исправлена потенциальная взаимоблокировка при переименовании таблицы
Distributed. #13922 (tavplubix). - Исправлена некорректная сортировка столбцов типа
FixedStringпри сортировке по нескольким столбцам. Исправлена проблема #13182. #13887 (Nikolai Kochetov). - Исправлено потенциально неточное вычисление результата при слиянии
topK/topKWeighted(с параметрами, отличными от значений по умолчанию). #13817 (Azat Khuzhin). - Исправлена ошибка чтения из таблицы MergeTree с индексом типа SET при сравнении с NULL. Это исправляет #13686. #13793 (Amos Bird).
- Исправлен захват
arrayJoinв лямбда-выражении (LOGICAL_ERROR). #13792 (Azat Khuzhin). - Добавлена проверка на переполнение шага в функции
range. #13790 (Azat Khuzhin). - Исправлена ошибка
Directory not emptyпри параллельном выполненииDROP DATABASEиCREATE TABLE. #13756 (alexey-milovidov). - Добавлена проверка границ значений для функции
h3KRing, что исправляет проблему #13633. #13752 (alexey-milovidov). - Исправлено условие гонки между DETACH и фоновыми слияниями. Части могли «возрождаться» после DETACH. Это продолжение #8602, которое не устранило проблему, но добавило тест, который в очень редких случаях начинал падать, демонстрируя наличие проблемы. #13746 (alexey-milovidov).
- Исправлена проблема с логированием Settings.Names/Values, когда log_queries_min_type > QUERY_START. #13737 (Azat Khuzhin).
- Исправлен код статуса ответа эндпоинта
/replicas_statusпри verbose=1. #13722 (javi santana). - Исправлено некорректное сообщение в
clickhouse-server.initпри проверке пользователя и группы. #13711 (ylchou). - Не выполнять оптимизацию any(arrayJoin()) -> arrayJoin() при включённой настройке
optimize_move_functions_out_of_any. #13681 (Azat Khuzhin). - Исправлено падение при выполнении JOIN со StorageMerge при
enable_optimize_predicate_expression=1. #13679 (Artem Zuikov). - Исправлена опечатка в тексте сообщения об ошибке
The value of 'number_of_free_entries_in_pool_to_lower_max_size_of_merge' setting. #13678 (alexey-milovidov). - Одновременные запросы
ALTER ... REPLACE/MOVE PARTITION ...могли приводить к взаимоблокировке. Эта проблема исправлена. #13626 (tavplubix). - Исправлено поведение, из-за которого
cache-dictionaryиногда возвращал значение по умолчанию вместо значения из источника. #13624 (Nikita Mikhaylov). - Исправлена порча вторичных индексов в compact-частях. Compact-части являются экспериментальной возможностью. #13538 (Anton Popov).
- Исправлены преждевременные тайм-ауты директивы
ON CLUSTERдля запросов, которые должны выполняться на одной реплике. Закрыты задачи #6704, #7228, #13361, #11884. #13450 (alesapin). - Исправлен некорректный код в функции
netloc. Это исправляет #13335. #13446 (alexey-milovidov). - Исправлено возможное состояние гонки в
StorageMemory. #13416 (Nikolai Kochetov). - Исправлены отсутствующие или избыточные заголовки в форматах
TSV/CSVWithNamesв протоколе HTTP. Это устраняет проблему #12504. #13343 (Azat Khuzhin). - Исправлен разбор row policies из users.xml, когда имена баз данных или таблиц содержат точки. Это устраняет проблемы #5779, #12527. #13199 (Vitaly Baranov).
- Исправлен доступ к словарю
redisпосле однократного разрыва соединения. Это могло происходить для макетов словаряcacheиdirect. #13082 (Anton Popov). - Удалена ошибочная проверка прав доступа при использовании ClickHouseDictionarySource для выполнения запросов к удалённым таблицам. #12756 (sundyli).
- Корректно различать подзапросы в некоторых случаях при устранении общих подвыражений. #8333. #8367 (Amos Bird).
Улучшение
- Запрещает использование
CODECдля столбцов типаALIAS. Исправляет #13911. #14263 (Bharat Nallan). - При ожидании завершения обновления словаря используйте таймаут, заданный настройкой
query_wait_timeout_milliseconds, вместо жёстко закодированного значения. #14105 (Nikita Mikhaylov). - Добавлена настройка
min_index_granularity_bytes, которая защищает от случайного создания таблицы со слишком низким значениемindex_granularity_bytes. #14139 (Bharat Nallan). - Теперь можно получать партиции из кластеров, которые используют другой экземпляр ZooKeeper:
ALTER TABLE table_name FETCH PARTITION partition_expr FROM 'zk-name:/path-in-zookeeper'. Это полезно для переноса данных на новые кластеры. #14155 (Amos Bird). - Немного улучшена производительность таблиц типа Memory, если они были построены из огромного числа очень маленьких блоков (что маловероятно). Автор идеи: Mark Papadakis. Закрывает #14043. #14056 (alexey-milovidov).
- Условные агрегатные функции (например,
avgIf,sumIf,maxIf) должны возвращатьNULLпри отсутствии строк, если используются аргументы типаNullable. #13964 (Winter Zhang). - Увеличен лимит комбинатора -Resample до 1 млн. #13947 (Mikhail f. Shiryaev).
- Исправлена ошибка в формате AvroConfluent, из-за которой движок таблицы Kafka прекращал обработку сообщений при получении аномально малого, некорректно сформированного сообщения. #13941 (Gervasio Varela).
- Исправлена некорректная обработка ошибки для длинных запросов. Для корректного запроса могла возвращаться синтаксическая ошибка, отличная от
Max query size exceeded. #13928 (Nikolai Kochetov). - Улучшено сообщение об ошибке для значения NULL в формате
TabSeparated. #13906 (jiang tao). - Функция
arrayCompactбудет выполнять побитовое сравнение значений NaN, если тип элементов массива — Float32/Float64. В предыдущих версиях значения NaN всегда считались неравными, если тип элементов массива — Float32/Float64, и всегда равными, если тип более сложный, например Nullable(Float64). Это закрывает #13857. #13868 (alexey-milovidov). - Исправлена гонка данных в функции
lgamma. Эта гонка выявлялась только вtsan, каких-либо реальных побочных эффектов не наблюдалось. #13842 (Nikolai Kochetov). - Предотвращать выполнение слишком медленных запросов при обработке полей-массивов. Вместо этого выбрасывать исключение. #13753 (alexey-milovidov).
- Добавлена поддержка авторизации Redis с параметром requirepass (для источника словаря Redis). #13688 (Ivan Torgashov).
- Добавлен инструмент для дампа журнала предварительной записи (Write-Ahead Log, WAL) для MergeTree. WAL — экспериментальная возможность. #13640 (BohuTANG).
- В предыдущих версиях функция
lcmмогла приводить к срабатыванию assert в debug-сборке при вызове со специально сконструированными аргументами. Это исправляет #13368. #13510 (alexey-milovidov). - Обеспечена монотонность для функций
toDate/toDateTimeв большем числе случаев. Информация о монотонности используется при анализе индексов (индекс смогут использовать более сложные запросы). Теперь входные аргументы ограничиваются более естественным образом, что обеспечивает лучшую монотонность. #13497 (Amos Bird). - Поддержка составных идентификаторов для пользовательских настроек. Пользовательские настройки служат точкой интеграции кодовой базы ClickHouse с другими кодовыми базами (не дают преимуществ самому ClickHouse) #13496 (Vitaly Baranov).
- Переносить части с DiskLocal на DiskS3 параллельно.
DiskS3— экспериментальная функция. #13459 (Pavel Kovalenko). - По умолчанию включены части со смешанной гранулярностью. #13449 (alesapin).
- Корректная проверка удалённого хоста при перенаправлениях S3 (связано с безопасностью). #13404 (Vladimir Chebotarev).
- Добавлены
QueryTimeMicroseconds,SelectQueryTimeMicrosecondsиInsertQueryTimeMicrosecondsв таблицу system.events. #13336 (ianton-ru). - Исправлена отладочная проверка, срабатывающая, когда у
Decimalслишком большая отрицательная степень. Исправляет #13188. #13228 (alexey-milovidov). - Добавлен слой кеша для DiskS3 (локальное кеширование файлов меток и индексов).
DiskS3— экспериментальная функция. #13076 (Pavel Kovalenko). - Исправлена работа readline: теперь история сбрасывается в файл. #13600 (Amos Bird).
- Создать базу данных
systemс движкомAtomicпо умолчанию (подготовительный шаг к включению движкаAtomicпо умолчанию повсюду). #13680 (tavplubix).
Повышение производительности
- Незначительно оптимизированы очень короткие запросы с
LowCardinality. #14129 (Anton Popov). - Включены параллельные INSERT для движков таблиц
Null,Memory,DistributedиBuffer, когда установлена настройкаmax_insert_threads. #14120 (alexey-milovidov). - Операция немедленно завершается с ошибкой, если лимит
max_rows_to_readпревышен при сканировании частей. Мотивация этого изменения — пропускать сканирование диапазонов для всех выбранных частей, если уже ясно, что лимитmax_rows_to_readпревышен. Изменение довольно заметно для запросов по большому количеству частей. #13677 (Roman Khavronenko). - Незначительно улучшена производительность агрегации по ключам типов UInt8/UInt16. #13099 (alexey-milovidov).
- Оптимизированы функции
has(),indexOf()иcountEqual()дляArray(LowCardinality(T))и константных правых аргументов. #12550 (myrrc). - При выполнении тривиальных запросов
INSERT SELECTавтоматически устанавливаютсяmax_threadsв 1 илиmax_insert_threads, а такжеmax_block_sizeвmin_insert_block_size_rows. Связано с #5907. #12195 (flynn).
Экспериментальная возможность
- ClickHouse может работать как реплика MySQL — это реализовано с помощью движка базы данных
MaterializeMySQL. Реализует #4006. #10851 (Winter Zhang). - Добавлены типы
Int128,Int256,UInt256и связанные с ними функции. Десятичные типы расширены типом Decimal256 (точность до 76 знаков). Новые типы включаются настройкойallow_experimental_bigint_types. В настоящее время это работает крайне медленно и плохо. Реализация неполная. Пожалуйста, не используйте эту возможность. #13097 (Artem Zuikov).
Улучшения сборки/тестирования/упаковки
- Добавлен скрипт
clickhouse install, который полезен, если у вас есть только один бинарник. #13528 (alexey-milovidov). - Добавлена возможность запускать исполняемый файл
clickhouseбез конфигурационного файла. #13515 (alexey-milovidov). - Добавлена проверка кода на опечатки с помощью
codespell. #13513 #13511 (alexey-milovidov). - Включить ShellCheck в CI как линтер для .sh-тестов. Это закрывает #13168. #13530 #13529 (alexey-milovidov).
- Добавлена опция CMake, которая завершает конфигурацию с ошибкой вместо автоматической переконфигурации и включена по умолчанию. #13687 (Konstantин).
- Сделать версию встроенного tzdata доступной через TZDATA_VERSION в system.build_options. #13648 (filimonov).
- Улучшена генерация таблицы system.time_zones при сборке. Закрывает #14209. #14215 (filimonov).
- Собирать ClickHouse с самой актуальной версией tzdata из репозитория пакетов. #13623 (alexey-milovidov).
- Добавлена возможность использовать комментарии в стиле JavaScript в skip_list.json. #14159 (alesapin).
- Убедиться, что в проекте нет скопированного кода под лицензией GPL. #13514 (alexey-milovidov).
- Переключает тестовые образы Docker на использование родительского образа test-base. #14167 (Ilya Yatsishin).
- Добавлена логика повторных попыток при запуске кластера Docker Compose; увеличено значение COMPOSE_HTTP_TIMEOUT. #14112 (vzakaznikov).
- В стресс-тесте включён
system.text_logдля выявления большего числа ошибок. #13855 (Nikita Mikhaylov). - Модуль Testflows LDAP: добавление недостающих сертификатов и dhparam.pem для openldap4. #13780 (vzakaznikov).
- ZooKeeper не может надёжно работать в модульных тестах в инфраструктуре CI. Использовать модульные тесты для взаимодействия с реальным экземпляром ZooKeeper — изначально плохая идея (модульные тесты не предназначены для проверки сложных распределённых систем). Для этой цели мы уже используем интеграционные тесты, и они подходят гораздо лучше. #13745 (alexey-milovidov).
- Добавлен Docker-образ для проверки стиля. Добавлена проверка, что все файлы Docker и Docker Compose находятся в каталоге docker. #13724 (Ilya Yatsishin).
- Исправлена сборка Cassandra под Mac OS. #13708 (Ilya Yatsishin).
- Исправлена ошибка линковки в общей сборке. #13700 (Amos Bird).
- Обновлён набор тестов аутентификации пользователей LDAP для проверки совместимости с RBAC. #13656 (vzakaznikov).
- Убран
-DENABLE_CURL_CLIENTизcontrib/aws. #13628 (Vladimir Chebotarev). - Увеличены таймауты проверок состояния (health-check) для узлов ClickHouse и добавлена поддержка дампа логов docker-compose при обнаружении неработоспособных контейнеров. #13612 (vzakaznikov).
- Убедиться, что #10977 признан недействительным. #13539 (Amos Bird).
- Пропускать PR, создаваемые robot-clickhouse. #13489 (Nikita Mikhaylov).
- Файлы Dockerfile перенесены из интеграционных тестов в директорию
docker/test. Файлы docker_compose доступны в Docker-контейнереrunner. Docker-образы собираются в CI, а не в интеграционных тестах. #13448 (Ilya Yatsishin).
Релиз ClickHouse 20.7
Релиз ClickHouse v20.7.2.30-stable, 2020-08-31
Изменения, нарушающие обратную совместимость
- Функция
modulo(оператор%) при наличии хотя бы одного аргумента с плавающей запятой теперь вычисляет остаток от деления непосредственно над числами с плавающей запятой без преобразования обоих аргументов к целым. Это делает поведение совместимым с большинством СУБД. Это также применимо к типам данных Date и DateTime. Добавлен псевдонимmod. Закрывает #7323. #12585 (alexey-milovidov). - Специальный вывод нулевых значений Date/DateTime в виде
0000-00-00и0000-00-00 00:00:00объявлен устаревшим. #12442 (alexey-milovidov). - Функция
groupArrayMoving*не работала для распределённых запросов. Её результат вычислялся в некорректном типе данных (без повышения до наибольшего типа). ФункцияgroupArrayMovingAvgвозвращала целое число, что было несовместимо с функциейavg. Исправляет #12568. #12622 (alexey-milovidov). - Добавлена проверка корректности настроек MergeTree. Если настройки заданы неверно, сервер откажется запускаться или создавать таблицу, выводя пользователю подробное объяснение. #13153 (alexey-milovidov).
- Добавлена защита от случаев, когда пользователь может установить
background_pool_sizeв значение меньше, чемnumber_of_free_entries_in_pool_to_execute_mutationилиnumber_of_free_entries_in_pool_to_lower_max_size_of_merge. В этих случаях ALTER-запросы не будут работать или максимальный размер слияния окажется слишком ограничен. В этих ситуациях будет выброшено исключение с объяснением, что нужно сделать. Закрывает #10897. #12728 (alexey-milovidov). - При обновлении с версий ниже 20.5, если выполняется поочерёдное обновление и кластер одновременно содержит версии 20.5 или новее и версии ниже 20.5, то при перезапуске узлов ClickHouse со старыми версиями и запуске старой версии в присутствии более новых версий это может привести к ошибкам
Part ... intersects previous part. Чтобы предотвратить эту ошибку, сначала установите новые пакеты clickhouse-server на все узлы кластера, а затем выполняйте перезапуски (чтобы при перезапуске clickhouse-server запускался уже с новой версией).
Новая функциональность
- Тип словаря полигонов, обеспечивающий эффективный поиск с помощью «обратного геокодирования» — для нахождения региона по координатам в словаре из множества полигонов (карта мира). Использует тщательно оптимизированный алгоритм с рекурсивными сетками для снижения нагрузки на CPU и память. #9278 (achulkov2).
- Добавлена поддержка LDAP-аутентификации для предварительно настроенных пользователей (метод «Simple Bind»). #11234 (Denis Glazachev).
- Добавлена настройка
alter_partition_verbose_result, которая выводит информацию о затронутых партах для некоторых типов запросовALTER TABLE ... PARTITION ...(в настоящее времяATTACHиFREEZE). Закрывает #8076. #13017 (alesapin). - Добавлена функция
bayesABдля байесовского A/B-тестирования. #12327 (achimbab). - Добавлена таблица
system.crash_log, в которую собираются трассировки стека для фатальных ошибок. Эта таблица должна быть пустой. #12316 (alexey-milovidov). - Добавлены HTTP-заголовки
X-ClickHouse-DatabaseиX-ClickHouse-Format, которые могут использоваться для установки базы данных и формата вывода по умолчанию. #12981 (hcz). - Добавлена поддержка функций
minMapиmaxMapвSimpleAggregateFunction. #12662 (Ildus Kurbangaliev). - Добавлена настройка
allow_non_metadata_alters, которая ограничивает выполнение запросовALTER, модифицирующих данные на диске. По умолчанию отключена. Закрывает #11547. #12635 (alesapin). - Добавлена функция
formatRowдля преобразования произвольных выражений в строку по заданному формату. Полезна для обработки результатов SQL-запросов и достаточно универсальна в сочетании с функциейcolumns. #12574 (Amos Bird). - Добавлена функция
FROM_UNIXTIMEдля совместимости с MySQL, связана с 12149. #12484 (flynn). - Разрешено использование типов Nullable в качестве ключей в таблицах MergeTree, если включена настройка таблицы
allow_nullable_key. Закрывает #5319. #12433 (Amos Bird). - Интеграция с COS. #12386 (fastio).
- Добавлены функции
mapAddиmapSubtractдля сложения/вычитания значений, сопоставленных ключам. #11735 (Ildus Kurbangaliev).
Исправление ошибок
- Исправлены преждевременные таймауты
ON CLUSTERдля запросов, которые должны выполняться на одной реплике. Исправляет #6704, #7228, #13361, #11884. #13450 (alesapin). - Исправлено падение при поиске включения меток, появившееся в #12277. #14225 (Amos Bird).
- Исправлена гонка во внешних словарях с размещением в кэше, которая могла приводить к сбою сервера. #12566 (alesapin).
- Исправлено заметное перекрытие выводимых данных индикатором прогресса в клиенте в интерактивном режиме. Это исправление закрывает #12562 и #13369 и #13584, а также #12964. #13691 (alexey-milovidov).
- Исправлен неверный порядок сортировки для столбцов
LowCardinalityпри использовании ORDER BY с несколькими столбцами. Исправляет #13958. #14223 (Nikita Mikhaylov). - Удалён жёстко заданный таймаут, который неправильно переопределял параметр
query_wait_timeout_millisecondsдля cache-dictionary. #14105 (Nikita Mikhaylov). - Исправлена неверная точка монтирования в дополнительной информации для исключения
Poco::Exception: no space left on device. #14050 (tavplubix). - Исправлена ошибочная оптимизация
SELECT-запросов с ключевым словомDISTINCT, когда подзапросы также содержатDISTINCT, при включённой настройкеoptimize_duplicate_order_by_and_distinct. #13925 (Artem Zuikov). - Исправлена возможная взаимоблокировка при переименовании таблицы
Distributed. #13922 (tavplubix). - Исправлена некорректная сортировка столбцов типа
FixedStringпри использовании ORDER BY с несколькими столбцами. Исправляет #13182. #13887 (Nikolai Kochetov). - Исправлена потенциально сниженная точность работы агрегирующих функций
topK/topKWeightedпри использовании нестандартных параметров. #13817 (Azat Khuzhin). - Исправлена ошибка чтения из таблицы MergeTree с индексом типа SET при сравнении со значением NULL. Это исправляет #13686. #13793 (Amos Bird).
- Исправлено переполнение шага в функции
range(). #13790 (Azat Khuzhin). - Исправлена ошибка
Directory not empty, возникавшая при параллельном выполненииDROP DATABASEиCREATE TABLE. #13756 (alexey-milovidov). - Добавлена проверка диапазона для функции
h3KRing, что исправляет #13633. #13752 (alexey-milovidov). - Исправлено состояние гонки между
DETACHи фоновыми слияниями. Части могли «возрождаться» послеDETACH. Это продолжение #8602, который не устранил проблему, но добавил тест, начинавший в очень редких случаях падать, тем самым демонстрируя проблему. #13746 (alexey-milovidov). - Исправлено логирование Settings.Names/Values при значении
log_queries_min_typeбольшеQUERY_START. #13737 (Azat Khuzhin). - Исправлено некорректное сообщение в
clickhouse-server.initпри проверке пользователя и группы. #13711 (ylchou). - Не оптимизировать
any(arrayJoin())доarrayJoin()при включённой настройкеoptimize_move_functions_out_of_any. #13681 (Azat Khuzhin). - Исправлена возможная взаимоблокировка в конкурентных запросах
ALTER ... REPLACE/MOVE PARTITION .... #13626 (tavplubix). - Исправлено поведение, из-за которого
cache-dictionaryиногда возвращал значение по умолчанию вместо имеющегося в источнике значения. #13624 (Nikita Mikhaylov). - Исправлено повреждение вторичных индексов в compact‑частях (compact‑части — экспериментальная возможность). #13538 (Anton Popov).
- Исправлен неверный код в функции
netloc. Это устраняет проблему #13335. #13446 (alexey-milovidov). - Исправлена ошибка в функции
parseDateTimeBestEffort, возникавшая при передаче Unix‑таймстемпа в качестве аргумента. Это исправляет #13362. #13441 (alexey-milovidov). - Исправлен некорректный тип возвращаемого значения при сравнении кортежей с элементами
NULL. Устранена проблема #12461. #13420 (Nikolai Kochetov). - Исправлена некорректная оптимизация, из-за которой при использовании
SET optimize_move_functions_out_of_any = 1и алиасов внутриany()возникала ошибкаaggregate function any(x) is found inside another aggregate function in query. #13419 (Artem Zuikov). - Исправлено возможное состояние гонки в
StorageMemory. #13416 (Nikolai Kochetov). - Исправлен пустой вывод для форматов
ArrowиParquetв случае, когда запрос возвращает ноль строк. Это сделано, так как пустой вывод недопустим для этих форматов. #13399 (hcz). - Исправлена обработка запросов
SELECTс константными столбцами и префиксом первичного ключа в предложенииORDER BY. #13396 (Anton Popov). - Исправлен
PrettyCompactMonoBlockдля clickhouse-local. Исправлены экстремумы и итоги вPrettyCompactMonoBlock. Исправление для #7746. #13394 (Azat Khuzhin). - Устранена взаимоблокировка в
system.text_log. #12452 (alexey-milovidov). Это часть #12339. Тем самым исправлена #12325. #13386 (Nikita Mikhaylov). - Исправлен
File(TSVWithNames*)(заголовок записывался несколько раз), исправленclickhouse-local --format CSVWithNames*(отсутствовал заголовок, формат был сломан после #12197), исправленclickhouse-local --format CSVWithNames*при нулевом числе строк (отсутствовал заголовок). #13343 (Azat Khuzhin). - Исправлена ошибка сегментации, возникавшая при десериализации пустого состояния функцией
groupArrayMovingSum. Исправляет #13339. #13341 (alesapin). - Генерировать ошибку при использовании функции
arrayJoin()в секцииJOIN ON. #13330 (Artem Zuikov). - Исправлено аварийное завершение работы в
LEFT ASOF JOINприjoin_use_nulls=1. #13291 (Artem Zuikov). - Исправлена возможная ошибка
Totals having transform was already added to pipelineв случае запроса с отстающей реплики. #13290 (Nikolai Kochetov). - Сервер мог приводить к аварийному завершению работы, если пользователь передавал специально сформированные аргументы в функцию
h3ToChildren. Это исправляет #13275. #13277 (alexey-milovidov). - Исправлены потенциально низкая производительность и незначительно некорректный результат для агрегатных функций
uniqExact,topK,sumDistinctи подобных, вызываемых для числовых типов с плавающей запятой со значениямиNaN. Это также приводило к срабатыванию assert в отладочной сборке. Исправляет #12491. #13254 (alexey-milovidov). - Исправлена ассерция в
KeyCondition, когда первичный ключ содержит выражение с монотонной функцией, а запрос содержит сравнение с константой другого типа. Это исправляет #12465. #13251 (alexey-milovidov). - Функция roundUpToPowerOfTwoOrZero() теперь возвращает переданное число, если у него установлен старший бит. Это предотвращает потенциальные ошибки в случае переполнения размеров массивов. #13234 (Azat Khuzhin).
- Исправлена работа функции if с nullable constexpr в качестве условия, которое не является литералом NULL. Устраняет #12463. #13226 (alexey-milovidov).
- Исправлена проверка
assertв функцииarrayElementв случае, если элементы массива имеют тип Nullable и индекс массива также имеет тип Nullable. Это исправляет #12172. #13224 (alexey-milovidov). - Исправлены функции преобразования DateTime64 с константным аргументом. #13205 (Azat Khuzhin).
- Исправлен разбор политик строк из users.xml, если имена баз данных или таблиц содержат точки. Тем самым устранены ошибки #5779, #12527. #13199 (Vitaly Baranov).
- Исправлен доступ к словарю
redisпосле однократного разрыва соединения. Это могло возникать для типов словарейcacheиdirect. #13082 (Anton Popov). - Устранена проблема неверного анализа индекса при использовании функций. Она могла приводить к пропуску некоторых частей данных при чтении из таблиц
MergeTree. Исправляет #13060. Исправляет #12406. #13081 (Anton Popov). - Исправлена ошибка
Cannot convert column because it is constant but values of constants are different in source and resultпри выполнении удалённых запросов, которые используют функции, детерминированные в пределах одного запроса, но недетерминированные между разными запросами, такие какnow(),now64(),randConstant(). Исправляет #11327. #13075 (Nikolai Kochetov). - Исправлено возможное падение при выполнении запросов с кортежем в
ORDER BYи небольшим значениемLIMIT. Исправляет #12623. #13009 (Nikolai Kochetov). - Исправлена ошибка
Block structure mismatchв запросах сUNIONиJOIN. Исправляет #12602. #12989 (Nikolai Kochetov). - Исправлена логика
merge_with_ttl_timeout, которая работала некорректно, когда истечение TTL затрагивало более одного раздела в пределах одного временного интервала. (Автор @excitoon). #12982 (Alexander Kazakov). - Исправлено дублирование столбцов в диапазонном хэш-словаре, создаваемом из DDL-запроса. Это исправляет #10605. #12857 (alesapin).
- Исправлено избыточное ограничение на число потоков для запросов SELECT из локальной реплики. #12840 (Nikolai Kochetov).
- Исправлена редкая ошибка, возникающая при одновременном выполнении запросов
ALTER DELETEиALTER MODIFY COLUMNв рамках одной мутации. Ошибка приводила к некорректному количеству строк в файлеcount.txtи, как следствие, к некорректным данным в части. Также исправлена небольшая ошибка при одновременном выполненииALTER RENAME COLUMNиALTER ADD COLUMN. #12760 (alesapin). - Использовались неверные учетные данные при использовании источника словаря
clickhouseдля запросов к удаленным таблицам. #12756 (sundyli). - Исправлено преобразование
CAST(Nullable(String), Enum()). #12745 (Azat Khuzhin). - Исправлена проблема с производительностью при работе с большими кортежами, которые интерпретируются как функции в выражениях
IN. Речь о случае, когда пользователь по какой-то непонятной причине пишетWHERE x IN tuple(1, 2, ...)вместоWHERE x IN (1, 2, ...). #12700 (Anton Popov). - Исправлено отслеживание использования памяти для input_format_parallel_parsing (за счёт присоединения потока к группе). #12672 (Azat Khuzhin).
- Исправлена некорректная оптимизация
optimize_move_functions_out_of_any=1для выраженияany(func(<lambda>)). #12664 (Artem Zuikov). - Исправлена ошибка #10572 в индексе фильтра Блума при использовании константного выражения. #12659 (Winter Zhang).
- Исправлен SIGSEGV в StorageKafka при недоступности брокера (и не только). #12658 (Azat Khuzhin).
- Добавлена поддержка функции
ifс аргументами типаArray(UUID), что исправляет #11066. #12648 (alexey-milovidov). CREATE USER IF NOT EXISTSбольше не выбрасывает исключение, если пользователь уже существует. Это исправляет #12507. #12646 (Vitaly Baranov).- Исключение
There is no supertype...может возникать во время выполненияALTER ... UPDATEв неожиданных случаях (например, при вычитании из столбца типа UInt64). Это исправление устраняет #7306. Это исправление устраняет #4165. #12633 (alexey-milovidov). - Исправлена потенциальная ошибка
Pipeline stuckпри выполнении запросов с внешней сортировкой. Исправление для #12617. #12618 (Nikolai Kochetov). - Исправлена ошибка
Output of TreeExecutor is not sortedвOPTIMIZE DEDUPLICATE. Исправлено #11572. #12613 (Nikolai Kochetov). - Исправлена проблема, при которой алиас результата функции
anyмог теряться при оптимизации запроса. #12593 (Anton Popov). - Удалять данные для Distributed-таблиц (блоки из асинхронных INSERT) при выполнении DROP TABLE. #12556 (Azat Khuzhin).
- Теперь ClickHouse будет пересчитывать контрольные суммы для частей, когда файл
checksums.txtотсутствует. Поведение было нарушено начиная с #9827. #12545 (alesapin). - Исправлена ошибка, из-за которой повреждались старые части данных после выполнения запроса
ALTER DELETEприenable_mixed_granularity_parts=1. Исправляет #12536. #12543 (alesapin). - Устранено состояние гонки в таблицах LIVE VIEW, которое могло приводить к дублированию данных. LIVE VIEW — экспериментальная функциональность. #12519 (vzakaznikov).
- Исправлена проблема с обратной совместимостью в бинарном формате значений
AggregateFunction(avg, ...). Это исправляет #12342. #12486 (alexey-milovidov). - Исправлено падение при выполнении
JOINсо словарём, когда соединение выполняется по выражению от ключа словаря:t JOIN dict ON expr(dict.id) = t.id. Для этого случая отключена оптимизацияJOINсо словарём. #12458 (Artem Zuikov). - Исправлено переполнение при указании очень большого значения LIMIT или OFFSET. Исправляет #10470. Исправляет #11372. #12427 (alexey-milovidov).
- kafka: исправлен SIGSEGV, возникавший при наличии сообщения с ошибкой в середине пакета. #12302 (Azat Khuzhin).
Улучшение
- Старайтесь хранить в ZooKeeper минимально необходимый объём логов. Избегайте чрезмерного роста узлов ZooKeeper при наличии офлайн-реплик и большом количестве серверов/таблиц/вставок. #13100 (alexey-milovidov).
- Теперь исключения возвращаются клиенту, если произошла ошибка во время операции
ALTERили мутации. Закрывает #11329. #12666 (alesapin). - Добавлены
QueryTimeMicroseconds,SelectQueryTimeMicrosecondsиInsertQueryTimeMicrosecondsв таблицуsystem.events, а также в system.metrics, processes, query_log и т. д. #13028 (ianton-ru). - Добавлены
SelectedRowsиSelectedBytesв таблицуsystem.events, а также в таблицыsystem.metrics,processes,query_logи т. д. #12638 (ianton-ru). - В
system.query_logдобавлена информация оcurrent_database. #12652 (Amos Bird). - Добавлена поддержка формата ввода
TabSeparatedRaw. #12009 (hcz). - Теперь
joinGetподдерживает поиск по нескольким ключам. #12418 (Amos Bird). - Агрегатным функциям
*Mapтеперь разрешена работа с массивами, содержащими NULL. Исправляет #13157. #13225 (alexey-milovidov). - Избегайте переполнения при разборе значений
DateTime, которое приводит к получению отрицательного значения UNIX‑времени в соответствующем часовом поясе (например,1970-01-01 00:00:00для Москвы). Вместо этого ограничивайте значение нулём. Исправляет #3470. Исправляет #4172. #12443 (alexey-milovidov). - AvroConfluent: пропускать tombstone-записи Kafka — добавлена поддержка пропуска повреждённых записей #13203 (Andrew Onyshchuk).
- Исправлена некорректная обработка ошибок для длинных запросов. Для корректного запроса могла возвращаться синтаксическая ошибка, отличная от
Max query size exceeded. #13928 (Nikolai Kochetov). - Исправлена гонка данных в функции
lgamma. Эта гонка обнаруживалась только вtsan, реальных побочных эффектов не наблюдалось. #13842 (Nikolai Kochetov). - Исправлено форматирование интервала 'Week' в операторах ATTACH/ALTER/CREATE QUOTA. #13417 (vladimir-golovchenko).
- Теперь при обработке compact-партов также фиксируются повреждённые парты. Compact-парты — экспериментальная функция. #13282 (Amos Bird).
- Исправлен assert в
geohashesInBox. Исправляет #12554. #13229 (alexey-milovidov). - Исправлен assert в
parseDateTimeBestEffort. Это исправляет #12649. #13227 (alexey-milovidov). - Небольшая оптимизация в Processors/PipelineExecutor: выход из цикла, когда это имеет смысл. #13058 (Mark Papadakis).
- Добавлена поддержка команды TRUNCATE без ключевого слова TABLE. #12653 (Winter Zhang).
- Исправлена ошибка, из-за которой формат запроса
EXPLAINпо умолчанию перезаписывался. Это исправляет #12541. #12541 (BohuTANG). - Добавлена возможность задавать вид и тип JOIN более стандартным образом:
LEFT SEMI JOINвместоSEMI LEFT JOIN. Пока оба варианта корректны. #12520 (Artem Zuikov). - Изменяет значение параметра
multiple_joins_rewriter_versionпо умолчанию на 2. Это включает новый механизм переписывания запросов с несколькими JOIN, который учитывает имена столбцов. #12469 (Artem Zuikov). - Добавлены несколько метрик для запросов к хранилищам S3. #12464 (ianton-ru).
- Использовать корректный защищённый порт по умолчанию для clickhouse-benchmark при использовании параметра
--secure, что исправляет #11044. #12440 (alexey-milovidov). - Откат изменений при ошибках вставки в движках
Log,TinyLog,StripeLog. В предыдущих версиях ошибка вставки могла приводить к неконсистентному состоянию таблицы (что соответствует документации и является нормальным поведением для этих движков таблиц). Это исправляет #12402. #12426 (alexey-milovidov). - Реализованы
RENAME DATABASEиRENAME DICTIONARYдля движка базы данныхAtomic— добавлен неявный макрос{uuid}, который может использоваться в пути в ZooKeeper дляReplicatedMergeTree. Он применяется в запросахCREATE ... ON CLUSTER .... Установитеshow_table_uuid_in_table_create_query_if_not_nilв значениеtrue, чтобы использовать его. — Аргументы движкаReplicatedMergeTreeсделаны необязательными; по умолчанию используются/clickhouse/tables/{uuid}/{shard}/и{replica}. Закрывает #12135. — Незначительные исправления. — Эти изменения нарушают обратную совместимость движка базы данныхAtomic. Ранее созданные базы данныхAtomicнеобходимо вручную преобразовать в новый формат. Движок базы данныхAtomicявляется экспериментальной функциональностью. #12343 (tavplubix). AWSAuthV4Signerвыделен в отдельный логгер, удалено избыточноеAWSClient: AWSClientиз лог-сообщений. #12320 (Vladimir Chebotarev).- Улучшено сообщение об исключении при доступе к дисковому хранилищу. #12625 (alesapin).
- Улучшено сообщение об исключении функции
inпри неверном количестве аргументов. #12529 (Anton Popov). - Исправлено сообщение об ошибке, связанной с адаптивной гранулярностью. #12624 (alesapin).
- Исправлена обработка SETTINGS после FORMAT. #12480 (Azat Khuzhin).
- Если таблица MergeTree не содержит ORDER BY или PARTITION BY, можно было выполнить запрос ALTER с CLEAR для всех столбцов, и ALTER зависал. Исправлено #7941. #12382 (alexey-milovidov).
- Не перезагружать автодополнение из файла истории после каждого запроса (чтобы избежать перемешивания истории с другими клиентскими сессиями). #13086 (Azat Khuzhin).
Улучшение производительности
- Снижено потребление памяти для некоторых операций до двух раз. #12424 (alexey-milovidov).
- Оптимизирован поиск по первичному ключу для запросов, которые точно соответствуют диапазону первичного ключа. #12277 (Ivan Babrou).
- Небольшая оптимизация очень коротких запросов с
LowCardinality. #14129 (Anton Popov). - Незначительно улучшена производительность агрегации по ключам UInt8/UInt16. #13091 и #13055 (alexey-milovidov).
- Проталкивание шага
LIMITв плане запроса (внутрь подзапросов). #13016 (Nikolai Kochetov). - Параллельный поиск по первичному ключу и пропуск стадий индекса на частях, как описано в #11564. #12589 (Ivan Babrou).
- Преобразование аргументов типа String функций «if» и «transform» в enum при
set optimize_if_transform_strings_to_enum = 1. #12515 (Artem Zuikov). - Замена монотонных функций их аргументом в
ORDER BY, еслиset optimize_monotonous_functions_in_order_by=1. #12467 (Artem Zuikov). - Добавлена оптимизация сортировки, которая переписывает
ORDER BY x, f(x)вORDER BY x, еслиset optimize_redundant_functions_in_order_by = 1. #12404 (Artem Zuikov). - Разрешено проталкивание предиката, когда подзапрос содержит предложение
WITH. Это исправляет #12293 #12663 (Winter Zhang). - Улучшена производительность чтения из компактных частей. Компактные части — экспериментальная функция. #12492 (Anton Popov).
- Попытка реализовать потоковую оптимизацию в
DiskS3. DiskS3 — экспериментальная функция. #12434 (Vladimir Chebotarev).
Улучшения сборки/тестирования/упаковки
- Используйте
shellcheckдля линтинга sh-тестов. #13200 #13207 (alexey-milovidov). - Добавлен скрипт, который устанавливает метки для pull request'ов в GitHub-хуке. #13183 (alesapin).
- Удалена часть рекурсивных подмодулей. См. #13378. #13379 (alexey-milovidov).
- Убедитесь, что все подмодули ссылаются на корректные URL-адреса. Продолжение #13379. Это исправляет #13378. #13397 (alexey-milovidov).
- Добавлена поддержка заданных пользователем настроек, к которым можно обращаться из запросов. Это необходимо, когда движок ClickHouse используется как компонент другой системы. #13013 (Vitaly Baranov).
- Добавлено тестирование RBAC-функционала привилегии INSERT в TestFlows. Расширен список таблиц, для которых выполняется тестирование SELECT. Добавлены требования в соответствии с новыми тестами движка таблиц. #13340 (MyroTk).
- Исправлена ошибка таймаута при перезапуске сервера в стресс-тесте. #13321 (alesapin).
- Теперь быстрый тест будет ожидать сервер, выполняя повторные попытки подключения. #13284 (alesapin).
- Функция
materialize()(функция для тестирования в ClickHouse) будет корректно работать с NULL, преобразуя его в неконстантный столбец. #13212 (alexey-milovidov). - Исправлена сборка libunwind на AArch64. Исправляет #13204. #13208 (alexey-milovidov).
- Ещё больше повторных попыток в zkutil gtest для уменьшения нестабильности тестов. #13165 (alexey-milovidov).
- Небольшие исправления в RBAC TestFlows. #13152 (vzakaznikov).
- Исправление теста
00960_live_view_watch_events_live.py. #13108 (vzakaznikov). - Улучшена очистка кэша в скрипте развёртывания документации. #13107 (alesapin).
- Переписана часть «осиротевших» тестов на gtest. Удалены лишние include'ы из тестов. #13073 (Nikita Mikhaylov).
- Добавлены тесты функциональности RBAC для привилегии
SELECTв TestFlows. #13061 (Ritaank Tiwari). - Повторно запущены некоторые тесты в быстром тестовом прогоне. #12992 (alesapin).
- Устранена ошибка MSan в библиотеке
rdkafka. Тем самым закрывается #12990.rdkafkaобновлена до версии 1.5 (master). #12991 (alexey-milovidov). - Исправлен отчёт UBSan в реализации base64, возникающий при запуске тестов на сервере с AVX-512. Исправляет #12318. Автор: @qoega. #12441 (alexey-milovidov).
- Исправлен отчёт UBSan в библиотеке HDFS. Это закрывает #12330. #12453 (alexey-milovidov).
- Проверена возможность восстановления резервной копии, созданной в старой версии, в новой. Это закрывает #8979. #12959 (alesapin).
- Не выполнять сборку образа helper_container внутри интеграционных тестов. Собрать Docker-образ в CI и использовать уже собранный helper_container в интеграционных тестах. #12953 (Ilya Yatsishin).
- Добавлен тест для запроса
ALTER TABLE CLEAR COLUMNдля столбцов первичного ключа. #12951 (alesapin). - Увеличены таймауты в тестах TestFlows. #12949 (vzakaznikov).
- Исправлена сборка теста на Mac OS X. Закрывает #12767. #12772 (alexey-milovidov).
- Connector-ODBC обновлён до mysql-connector-odbc-8.0.21. #12739 (Ilya Yatsishin).
- Добавлены тесты синтаксиса RBAC в TestFlows. #12642 (vzakaznikov).
- Повышена производительность TestKeeper. Это ускорит выполнение тестов с интенсивным использованием реплицированных таблиц. #12505 (alexey-milovidov).
- Теперь проверяем, что сервер успешно запускается после выполнения стресс-тестов. Это исправляет #12473. #12496 (alesapin).
- Обновлён fmtlib до версии master (7.0.1). #12446 (alexey-milovidov).
- Добавлен Docker-образ для быстрых тестов. #12294 (alesapin).
- Обновлены пути конфигурации для интеграционных тестов. #12285 (Ilya Yatsishin).
- Добавлена опция компилятора, ограничивающая размер кадров стека, чтобы они не были слишком большими. Это позволит запускать код в файберах с небольшим размером стека. #11524 (alexey-milovidov).
- Обновлены файлы .gitignore. #13447 (vladimir-golovchenko).
Релиз ClickHouse 20.6
Релиз ClickHouse v20.6.3.28-stable
Изменение, нарушающее обратную совместимость
- При обновлении с версий старее 20.5, если выполняется поэтапное обновление (rolling update) и кластер одновременно содержит версии 20.5 или новее и версии ниже 20.5, то при перезапуске узлов ClickHouse со старыми версиями и запуске старой версии в присутствии более новых версий это может привести к ошибкам
Part ... intersects previous part. Чтобы предотвратить эту ошибку, сначала установите новые пакеты clickhouse-server на все узлы кластера, а затем выполняйте перезапуски (таким образом, при перезапуске clickhouse-server будет запускаться уже с новой версией).
Новая функциональность
- Добавлена начальная реализация запроса
EXPLAIN. Синтаксис:EXPLAIN SELECT .... Исправляет #1118. #11873 (Nikolai Kochetov). - Добавлено хранилище
RabbitMQ. #11069 (Kseniia Sumarokova). - Реализован оператор
ILIKEв стиле PostgreSQL для #11710. #12125 (Mike). - Добавлена поддержка RIGHT и FULL JOIN с
SET join_algorithm = 'partial_merge'. Разрешена только строгость ALL (ANY, SEMI, ANTI, ASOF — не поддерживаются). #12118 (Artem Zuikov). - Добавлена функция
initializeAggregationдля инициализации агрегации на основе одного значения. #12109 (Guillaume Tassery). - Добавлена поддержка
ALTER TABLE ... [ADD|MODIFY] COLUMN ... FIRST#4006. #12073 (Winter Zhang). - Добавлена функция
parseDateTimeBestEffortUS. #12028 (flynn). - Добавлена поддержка формата
ORCдля вывода (ранее поддерживался только для ввода). #11662 (Kruglov Pavel).
Исправление ошибки
- Исправлена ошибка
aggregate function any(x) is found inside another aggregate function in queryс помощьюSET optimize_move_functions_out_of_any = 1и использования алиасов внутриany(). #13419 (Artem Zuikov). - Исправлен
PrettyCompactMonoBlockдля clickhouse-local. Исправлены extremes/totals вPrettyCompactMonoBlock. Это исправляет #7746. #13394 (Azat Khuzhin). - Исправлена потенциальная ошибка
Totals having transform was already added to pipelineв случае запроса с отложенной реплики. #13290 (Nikolai Kochetov). - Сервер может аварийно завершаться, если пользователь передал специально подобранные аргументы в функцию
h3ToChildren. Это исправляет #13275. #13277 (alexey-milovidov). - Исправлена потенциально низкая производительность и слегка некорректные результаты для агрегатных функций
uniqExact,topK,sumDistinctи подобных, вызываемых для типов Float со значениями NaN. Это также приводило к срабатыванию assert в debug-сборке. Исправляет #12491. #13254 (alexey-milovidov). - Исправлена ошибка в функции
ifс nullableconstexprв качестве условия, которое не является литераломNULL. Устраняет #12463. #13226 (alexey-milovidov). - Исправлена ошибка assert'а в функции
arrayElementв случае, когда элементы массива имеют тип Nullable и индекс массива также имеет тип Nullable. Это исправляет #12172. #13224 (alexey-milovidov). - Исправлены функции преобразования
DateTime64для константного аргумента. #13205 (Azat Khuzhin). - Исправлен неверный анализ индексов при использовании функций. Это могло приводить к отсечению неверных частей при чтении из таблиц
MergeTree. Исправлена ошибка #13060. Исправлена ошибка #12406. #13081 (Anton Popov). - Исправлена ошибка
Cannot convert column because it is constant but values of constants are different in source and resultдля удалённых запросов, которые используют функции, детерминированные в рамках одного запроса, но недетерминированные между разными запросами, такие какnow(),now64(),randConstant(). Исправляет #11327. #13075 (Nikolai Kochetov). - Исправлено ненужное ограничение числа потоков для SELECT-запросов с локальной реплики. #12840 (Nikolai Kochetov).
- Исправлена редкая ошибка, когда запросы
ALTER DELETEиALTER MODIFY COLUMNвыполнялись одновременно в рамках одной мутации. Ошибка приводила к некорректному количеству строк вcount.txtи, как следствие, к некорректным данным в части данных. Также исправлена небольшая ошибка при одновременном выполненииALTER RENAME COLUMNиALTER ADD COLUMN. #12760 (alesapin). - Исправлен
CAST(Nullable(String), Enum()). #12745 (Azat Khuzhin). - Исправлена проблема с производительностью при работе с большими кортежами, которые в разделе
INинтерпретируются как функции. Речь о случае, когда пользователь по какой-то неочевидной причине пишетWHERE x IN tuple(1, 2, ...)вместоWHERE x IN (1, 2, ...). #12700 (Anton Popov). - Исправлено отслеживание памяти для
input_format_parallel_parsing(за счёт привязки потока к группе). #12672 (Azat Khuzhin). - Исправлена работа индекса Блума с const-выражением. Это исправляет #10572. #12659 (Winter Zhang).
- Исправлено возникновение
SIGSEGVвStorageKafkaпри недоступности брокера и в других случаях. #12658 (Azat Khuzhin). - Добавлена поддержка функции
ifс аргументами типаArray(UUID). Это устраняет проблему #11066. #12648 (alexey-milovidov). CREATE USER IF NOT EXISTSтеперь не выбрасывает исключение, если пользователь уже существует. Это исправляет #12507. #12646 (Vitaly Baranov).- Улучшено сообщение об ошибке при доступе к дисковому хранилищу. #12625 (alesapin).
- Функция
groupArrayMoving*не работала для распределённых запросов. Её результат вычислялся в некорректном типе данных (без повышения до наибольшего типа). ФункцияgroupArrayMovingAvgвозвращала целое число, что не соответствовало поведению функцииavg. Это исправляет #12568. #12622 (alexey-milovidov). - Исправлено отсутствие псевдонимов для функции
any. #12593 (Anton Popov). - Исправлено условие гонки во внешних словарях с компоновкой кэша, которое могло приводить к сбою сервера. #12566 (alesapin).
- Удалять данные таблиц Distributed (блоки из асинхронных
INSERT) при выполненииDROP TABLE. #12556 (Azat Khuzhin). - Исправлена ошибка, из‑за которой старые куски повреждались после выполнения запроса
ALTER DELETEприenable_mixed_granularity_parts=1. Исправление для #12536. #12543 (alesapin). - Улучшено сообщение об исключении для функции
inпри неверном числе аргументов. #12529 (Anton Popov). - Исправлено состояние гонки в таблицах Live View, которое могло приводить к дублированию данных. #12519 (vzakaznikov).
- Исправлена проблема с производительностью при чтении из компактных частей. #12492 (Anton Popov).
- Исправлена проблема с обратной совместимостью в бинарном формате значений
AggregateFunction(avg, ...). Это исправляет #12342. #12486 (alexey-milovidov). - Исправлен разбор SETTINGS после FORMAT. #12480 (Azat Khuzhin).
- Устранена взаимная блокировка при включённом
text_log. #12452 (alexey-milovidov). - Исправлено переполнение при указании очень большого значения параметров
LIMITилиOFFSET. Это исправляет #10470. Это исправляет #11372. #12427 (alexey-milovidov). - Исправлена возможная ошибка сегментации в
StorageMerge. Это исправляет #12054. #12401 (tavplubix). - Отменено изменение, внесённое в #11079, для решения #12098. #12397 (Mike).
- Добавлена дополнительная проверка аргументов индекса Bloom Filter. Это исправляет #11408. #12388 (alexey-milovidov).
- Исправлено возникновение исключения при использовании отрицательной или вещественной константы в условии WHERE для индексированных таблиц. Это исправляет #11905. #12384 (alexey-milovidov).
- Теперь разрешено выполнять
CLEARстолбца, даже если от него зависят выраженияDEFAULT. Это исправляет #12333. #12378 (alexey-milovidov). - Исправлена работа
TOTALS/ROLLUP/CUBEдля агрегатных функций с аргументами-StateиNullable. Это исправляет #12163. #12376 (alexey-milovidov). - Исправлены сообщение об ошибке и коды выхода для запросов
ALTER RENAME COLUMN, если операцияRENAMEне допускается. Исправлены #12301 и #12303. #12335 (alesapin). - Исправлено крайне редкое состояние гонки в
ReplicatedMergeTreeQueue. #12315 (alexey-milovidov). - При использовании кодека
DeltaилиDoubleDeltaс типами нефиксированной длины вместо исключения с кодомBAD_ARGUMENTSвозвращалось исключение с кодомLOGICAL_ERROR(мы гарантируем, что исключения с кодомLOGICAL_ERRORникогда не возникают). Это исправляет #12110. #12308 (alexey-milovidov). - Исправлена обработка порядка столбцов в модификаторе
WITH FILL. Ранее порядок столбцов в оператореORDER BYне учитывался. #12306 (Anton Popov). - Избегает возникновения исключения "bad cast" в случаях, когда выражение фильтрует данные по виртуальным столбцам (например,
_tableв таблицахMerge) или по столбцам "index" в системных таблицах, например, при фильтрации по имени базы данных при запросе кsystem.tables, и это выражение возвращает типNullable. Это исправляет #12166. #12305 (alexey-milovidov). - Исправлена работа
TTLпосле переименования столбца, на котором основано TTL-выражение. #12304 (Anton Popov). - Исправлена ошибка SIGSEGV, возникавшая при наличии сообщения с ошибкой в середине батча в движке
Kafka. #12302 (Azat Khuzhin). - Исправлена проблема, из‑за которой некоторые потоки могли произвольно зависать на несколько секунд во время обновления кэша
DNS. #12296 (tavplubix). - Исправлена опечатка в названии настройки. #12292 (alexey-milovidov).
- Показывать ошибку при сбое загрузки
TrieDictionary. #12290 (Vitaly Baranov). - Функция
arrayFillработала некорректно для пустых массивов, что могло приводить к аварийному завершению работы. Это исправляет #12263. #12279 (alexey-milovidov). - Реализованы преобразования к общему типу для типов данных
LowCardinality. Это позволяет выполнять UNION ALL над таблицами со столбцами типаLowCardinalityи другими столбцами. Исправляет #8212. Исправляет #4342. #12275 (alexey-milovidov). - Исправлено поведение при достижении предела числа перенаправлений в запросе к хранилищу
S3. #12256 (ianton-ru). - Исправлено поведение, при котором при нескольких последовательных вставках в
StorageFileзаголовок для некоторых специальных типов мог записываться несколько раз. Это исправило #6155. #12197 (Nikita Mikhaylov). - Исправлены логические функции для значений типа UInt8 в случаях, когда они не равны 0 или 1. #12196 (Alexander Kazakov).
- Ограничить значения max_memory_usage* объёмом резидентной памяти процесса. #12182 (Azat Khuzhin).
- Исправлена проверка аргументов
dictGetпри устранении инъективных функций изGROUP BY. #12179 (Azat Khuzhin). - Исправлено поведение движка таблицы
SummingMergeTree, при котором суммировались столбцы из ключа партиционирования. Добавлено исключение, если явно заданы суммируемые столбцы, которые пересекаются со столбцами ключа партиционирования. Это исправляет #7867. #12173 (Nikita Mikhaylov). - Не разделяйте имя таблицы источника словаря на схему и собственно имя таблицы, если ODBC‑подключение не поддерживает схемы. #12165 (Vitaly Baranov).
- Исправлена некорректная логика в
ALTER DELETE, приводившая к удалению записей, когда условие имело значение NULL. Это исправляет #9088. Это закрывает #12106. #12153 (alexey-milovidov). - Исправлено преобразование запроса для отправки во внешние СУБД (например, MySQL, ODBC) при наличии алиасов. Это исправляет #12032. #12151 (alexey-milovidov).
- Исправлен некорректный код в оптимизации избыточного ORDER BY. Ошибка появилась в результате #10067. #12148 (alexey-milovidov).
- Исправлено потенциальное переполнение при целочисленном делении. Тем самым исправлена #12119. #12140 (alexey-milovidov).
- Исправлен потенциальный бесконечный цикл в
greatCircleDistance,geoDistance, что устраняет проблему #12117. #12137 (alexey-milovidov). - Нормализована обработка файла «pid». В предыдущих версиях сервер мог не запускаться, если он был принудительно завершён без корректного завершения работы и существовал другой процесс с тем же pid, что и у ранее запущенного сервера. Также pid-файл мог быть удалён при неуспешном запуске сервера, даже если другой сервер уже работал. Это исправляет #3501. #12133 (alexey-milovidov).
- Исправлена ошибка, из-за которой в ZooKeeper создавались некорректные метаданные таблиц ReplicatedVersionedCollapsingMergeTree. Исправляет #12093. #12121 (alesapin).
- Устранено возникновение исключения «There is no query» для материализованных представлений с JOIN или с подзапросами, обращающимися к системным логам (system.query_log, metric_log и т.д.) или к базовой таблице с движком Buffer. #12120 (filimonov).
- Исправлена обработка зависимости таблицы с движком ENGINE=Dictionary от словаря. Это исправляет #10994. Это исправляет #10397. #12116 (Vitaly Baranov).
- Формат
Parquetтеперь корректно работает с типамиLowCardinalityиLowCardinality(Nullable). Исправлены #12086, #8406. #12108 (Nikolai Kochetov). - Исправлена проблема с производительностью запросов
SELECTсUNION, вызванная неверным ограничением на общее количество потоков. Исправляет #12030. #12103 (Nikolai Kochetov). - Исправлен сегфолт при использовании комбинаторов
-StateResample. #12092 (Anton Popov). - Исправлены случаи, когда метрики
result_rowsиresult_bytesвsystem.quey_logдля запросов SELECT оставались пустыми. Исправлено #11595. #12089 (Nikolai Kochetov). - Исправлена проблема с ненужным ограничением числа потоков при выполнении запросов
SELECTизVIEW. Исправляет #11937. #12085 (Nikolai Kochetov). - Исправлено возникновение SIGSEGV в StorageKafka при выполнении DROP TABLE. #12075 (Azat Khuzhin).
- Исправлено возможное аварийное завершение работы при использовании некорректного типа для
PREWHERE. Исправлены #12053, #12060. #12060 (Nikolai Kochetov). - Исправлена ошибка
Cannot capture columnдля функций высшего порядка с аргументомTuple(LowCardinality). Исправляет #9766. #12055 (Nikolai Kochetov). - Исправлена проверка, определяющая, является ли ограничение константным выражением. Это исправляет #11360. #12042 (alexey-milovidov).
- Исправлены некорректный результат и потенциальный сбой при вызове функции
ifс аргументами типаFixedStringразличного размера. Это исправляет #11362. #12021 (alexey-milovidov).
Улучшения
- Теперь можно задавать вид и тип
JOINболее стандартным способом:LEFT SEMI JOINвместоSEMI LEFT JOIN. Пока оба варианта корректны. #12520 (Artem Zuikov). - Добавлены параметры
lifetime_rows/lifetime_bytesдля движка Buffer. #12421 (Azat Khuzhin). - Теперь клиенту возвращается подробное сообщение об исключении вместо
'MySQL server has gone away'. #12383 (BohuTANG). - Добавлена возможность изменять кодировку, которая используется для отображения границ таблиц. Доступные кодировки: UTF‑8, ASCII. Настройка
output_format_pretty_grid_charsetвключает эту возможность. #12372 (Sabyanin Maxim). - Добавлена поддержка MySQL‑запроса
SELECT DATABASE()#9336. Добавлен интеграционный тест для замещающего MySQL‑запроса. #12314 (BohuTANG). - Добавлена команда
KILL QUERY [connection_id]для клиента/драйвера MySQL для отмены долгих запросов, задача #12038. #12152 (BohuTANG). - Добавлена поддержка подстановок
%g(двузначный ISO‑год) и%G(четырёхзначный ISO‑год) в функцииformatDateTime. #12136 (vivarum). - В
system.disksдобавлен столбецtype. #12115 (ianton-ru). - Улучшена команда
REVOKE: теперь она требует grant/admin‑опцию только для того доступа, который будет отозван. Например, для выполненияREVOKE ALL ON *.* FROM user1теперь не требуется иметь полные права доступа, выданные с grant‑опцией. Добавлена командаREVOKE ALL FROM user1— она отзывает все выданные роли уuser1. #12083 (Vitaly Baranov). - Добавлен приоритет реплик для
load_balancing(для ручной приоритизации балансировки нагрузки). #11995 (Azat Khuzhin). - Пути в метаданных S3 переключены на относительные, что позволяет проще обрабатывать S3‑объекты. #11892 (Vladimir Chebotarev).
Улучшения производительности
- Улучшена производительность
ORDER BYиGROUP BYпо префиксу ключа сортировки (включается настройкойoptimize_aggregation_in_order, по умолчанию выключена). #11696 (Anton Popov). - Удалены инъективные функции внутри
uniq*()приset optimize_injective_functions_inside_uniq=1. #12337 (Ruslan Kamalov). - Индекс не использовался для оператора IN с литералами, что привело к регрессии производительности, появившейся примерно в v19.3. Это исправляет #10574. #12062 (nvartolomei).
- Реализована загрузка одиночных частей (single part uploads) для DiskS3 (экспериментальная функциональность). #12026 (Vladimir Chebotarev).
Экспериментальная функциональность
- Добавлен новый формат частей в памяти для таблиц семейства
MergeTree, который хранит данные в оперативной памяти. Части записываются на диск при первом слиянии. Часть будет создана в формате хранения в памяти, если её размер в строках или байтах ниже пороговmin_rows_for_compact_partиmin_bytes_for_compact_part. Также доступна дополнительная поддержка журнала предварительной записи (Write-Ahead-Log), который включён по умолчанию и управляется настройкойin_memory_parts_enable_wal. #10697 (Anton Popov).
Улучшения сборки/тестирования/упаковки
- Реализован режим фаззинга запросов в clickhouse-client на основе AST. См. эту метку для списка задач, которые мы недавно нашли с помощью фаззинга. Большинство из них были найдены этим инструментом, а несколько — SQLancer и
00746_sql_fuzzy.pl. #12111 (Alexander Kuzmenkov). - Добавлен новый тип тестов на основе фреймворка Testflows. #12090 (vzakaznikov).
- Добавлен интеграционный тест S3 HTTPS. #12412 (Pavel Kovalenko).
- Сообщения ловушки санитайзера теперь логируются из отдельного потока. Это предотвратит возможный дедлок при использовании thread sanitizer. #12313 (alexey-milovidov).
- Теперь функциональные и стресс‑тесты могут выполняться со старой версией скрипта
clickhouse-test. #12287 (alesapin). - Удалено странное создание файла во время сборки в
orc. #12258 (Nikita Mikhaylov). - Общие файлы Docker Compose перенесены в интеграционный Docker‑контейнер. #12168 (Ilya Yatsishin).
- Исправлены предупреждения из CodeQL.
CodeQL— это ещё один статический анализатор, который мы будем использовать вместе с уже используемымиclang-tidyиPVS-Studio. #12138 (alexey-milovidov). - Небольшие исправления CMake для сборки UNBUNDLED. #12131 (Matwey V. Kornilov).
- Добавлен пример минимального Docker‑образа без использования какой‑либо Linux‑дистрибуции. #12126 (alexey-milovidov).
- Выполнено обновление системных пакетов в Docker‑образе
clickhouse-server. #12124 (Ivan Blinkov). - Добавлен флаг
UNBUNDLEDв таблицуsystem.build_options. Списки пропуска дляclickhouse-testперенесены в репозиторий ClickHouse. #12107 (alesapin). - Настроена регулярная проверка с помощью инструмента анализа безопасности Anchore Container Analysis, который ищет CVE в Docker‑образе
clickhouse-server. Также подтверждает, чтоDockerfileпригоден для сборки. Запускается ежедневно наmasterи на pull‑request'ах кDockerfile. #12102 (Ivan Blinkov). - Настроена ежедневная проверка с помощью инструмента анализа безопасности GitHub CodeQL, который ищет CWE. #12101 (Ivan Blinkov).
- Установка
ca-certificatesперед первымapt-get updateв Dockerfile. #12095 (Ivan Blinkov).
Релиз ClickHouse 20.5
Релиз ClickHouse v20.5.4.40-stable 2020-08-10
Исправление ошибки
- Исправлен неправильный анализ индексов при использовании функций. Это могло приводить к отсечению неверных частей данных при чтении из таблиц
MergeTree. Исправлены #13060. Исправлены #12406. #13081 (Anton Popov). - Исправлено избыточное ограничение числа потоков для SELECT-запросов с локальной реплики. #12840 (Nikolai Kochetov).
- Исправлена проблема с производительностью при работе с большими кортежами, которые интерпретируются как функции в условии
IN. Ситуация, когда пользователь по какой-то непонятной причине пишетWHERE x IN tuple(1, 2, ...)вместоWHERE x IN (1, 2, ...). #12700 (Anton Popov). - Исправлен контроль использования памяти для input_format_parallel_parsing (путём присоединения потока к группе). #12672 (Azat Khuzhin).
- Исправлен индекс блум-фильтра для константных выражений. Это исправляет #10572. #12659 (Winter Zhang).
- Исправлен
SIGSEGVвStorageKafka, возникавший при недоступности брокера и в других случаях. #12658 (Azat Khuzhin). - Добавлена поддержка функции
ifс аргументами типаArray(UUID). Исправлена проблема #11066. #12648 (alexey-milovidov). - Исправлено отсутствие псевдонимов в функции
any. #12593 (Anton Popov). - Исправлено условие гонки во внешних словарях с типом размещения cache, которое могло приводить к сбою сервера. #12566 (alesapin).
- Удалять данные таблиц типа Distributed (блоки из асинхронных операций INSERT) при выполнении DROP TABLE. #12556 (Azat Khuzhin).
- Исправлена ошибка, которая приводила к повреждению старых частей данных после выполнения запроса
ALTER DELETEприenable_mixed_granularity_parts=1. Исправлена #12536. #12543 (alesapin). - Улучшено сообщение об исключении для функции
inпри неверном количестве аргументов. #12529 (Anton Popov). - Исправлено состояние гонки в таблицах Live View, которое могло приводить к дублированию данных. #12519 (vzakaznikov).
- Исправлена проблема с производительностью при чтении из компактных частей. #12492 (Anton Popov).
- Исправлена проблема с обратной совместимостью в бинарном формате значений
AggregateFunction(avg, ...). Это исправляет #12342. #12486 (alexey-milovidov). - Исправлена взаимоблокировка, возникавшая при включённом
text_log. #12452 (alexey-milovidov). - Исправлено переполнение при указании очень большого значения LIMIT или OFFSET. Тем самым исправлена проблема #10470. Тем самым исправлена проблема #11372. #12427 (alexey-milovidov).
- Исправлена возможная ошибка сегментации в StorageMerge. Закрывает #12054. #12401 (tavplubix).
- Откатывает изменение, внесённое в #11079, чтобы устранить #12098. #12397 (Mike).
- Исключение больше не возникает, когда в условии WHERE для индексированных таблиц используется отрицательная или вещественная константа. Это исправляет #11905. #12384 (alexey-milovidov).
- Разрешено использовать CLEAR для столбца, даже если от него зависят выражения DEFAULT. Это исправляет #12333. #12378 (alexey-milovidov).
- Исправлена работа TOTALS/ROLLUP/CUBE для агрегатных функций с аргументами типа
-StateиNullable. Исправлена проблема #12163. #12376 (alexey-milovidov). - Исправлена ошибка SIGSEGV, возникавшая при наличии сообщения с ошибкой в середине пакета сообщений в движке
Kafka. #12302 (Azat Khuzhin). - Исправлено поведение, когда движок
SummingMergeTreeсуммирует столбцы, входящие в ключ партиционирования. Добавлено исключение на случай явного указания суммируемых столбцов, пересекающихся со столбцами ключа партиционирования. Это исправляет #7867. #12173 (Nikita Mikhaylov). - Исправлено преобразование запроса, отправляемого во внешние СУБД (например, MySQL, ODBC), при наличии псевдонимов. Это исправляет #12032. #12151 (alexey-milovidov).
- Исправлена ошибка, приводившая к некорректным метаданным в ZooKeeper для таблиц ReplicatedVersionedCollapsingMergeTree. Исправляет #12093. #12121 (alesapin).
- Исправлено избыточное ограничение числа потоков для запросов
SELECTизVIEW. Исправляет #11937. #12085 (Nikolai Kochetov). - Исправлено падение JOIN с типом LowCardinality при
join_algorithm=partial_merge. #12035 (Artem Zuikov). - Исправлен неверный результат функции
if()при наличии значений NULL в условии. #11807 (Artem Zuikov).
Улучшение производительности
- Индекс не использовался для оператора IN с литералами, регрессия производительности появилась примерно в v19.3. Это исправляет #10574. #12062 (nvartolomei).
Улучшение сборки/тестирования/упаковки
- Устанавливать
ca-certificatesперед первымapt-get updateв Dockerfile. #12095 (Ivan Blinkov).
Релиз ClickHouse v20.5.2.7-stable 2020-07-02
Обратное несовместимое изменение
- Возвращать результат не типа Nullable из COUNT(DISTINCT) и семейства агрегатных функций
uniq. Если все переданные значения равны NULL, возвращать ноль. Это улучшает совместимость с SQL. #11661 (alexey-milovidov). - Добавлена проверка для случая, когда настройка уровня пользователя указана в неверном месте. Настройки уровня пользователя должны указываться в
users.xmlвнутри секции<profile>для конкретного пользовательского профиля (или в<default>для настроек по умолчанию). Сервер не запустится, а в журнал будет записано сообщение с исключением. Это исправляет #9051. Если вы хотите пропустить проверку, вы можете либо перенести настройки в нужное место, либо добавить<skip_check_for_incorrect_settings>1</skip_check_for_incorrect_settings>в config.xml. #11449 (alexey-milovidov). - Настройка
input_format_with_names_use_headerтеперь включена по умолчанию. Это повлияет на разбор входных форматов-WithNamesи-WithNamesAndTypes. #10937 (alexey-milovidov). - Удалена настройка
experimental_use_processors. Она включена по умолчанию. #10924 (Nikolai Kochetov). - Обновлён
zstdдо версии 1.4.4. В ней есть небольшие улучшения производительности и коэффициента сжатия. Если вы запускаете реплики с разными версиями ClickHouse, вы можете увидеть понятные сообщения об ошибкахData after merge is not byte-identical to data on another replicas.с пояснением. Эти сообщения являются нормальными, и вам не следует беспокоиться. Это изменение обратно совместимо, но мы указываем его здесь в журнале изменений на случай, если вы будете удивляться появлению этих сообщений. #10663 (alexey-milovidov). - Добавлена проверка для бессмысленных кодеков и настройка
allow_suspicious_codecsдля управления этой проверкой. Это закрывает #4966. #10645 (alexey-milovidov). - Несколько настроек Kafka изменили значения по умолчанию. См. #11388.
- При обновлении с версий старее 20.5, если выполняется поэтапное (rolling) обновление и кластер содержит одновременно версии 20.5 или новее и более старые, при перезапуске узлов ClickHouse со старыми версиями и запуске старой версии в присутствии новых это может приводить к ошибкам
Part ... intersects previous part. Чтобы предотвратить эту ошибку, сначала установите новые пакеты clickhouse-server на все узлы кластера, а затем выполняйте перезапуски (так, при перезапуске clickhouse-server будет запускаться уже новая версия).
Новая функциональность
TTL DELETE WHEREиTTL GROUP BYдля автоматического укрупнения данных и построения rollup-агрегатов в таблицах. #10537 (expl0si0nn).- Реализация протокола взаимодействия PostgreSQL (wire protocol). #10242 (Movses).
- Добавлены системные таблицы для пользователей, ролей, прав доступа, профилей настроек, квот и политик строк; также добавлены команды SHOW USER, SHOW [CURRENT|ENABLED] ROLES, SHOW SETTINGS PROFILES. #10387 (Vitaly Baranov).
- Добавлена поддержка записи в табличную функцию ODBC #10554 (ageraab). #10901 (tavplubix).
- Добавлены метрики производительности запросов на основе Linux
perf_events(эти метрики рассчитываются с использованием аппаратных счетчиков CPU и счетчиков ОС). Это необязательная опция и требует установкиCAP_SYS_ADMINдля бинарного файла ClickHouse. #9545 Andrey Skobtsov. #11226 (Alexander Kuzmenkov). - Теперь поддерживаются модификаторы
NULLиNOT NULLдля типов данных в запросеCREATE. #11057 (Павел Потемкин). - Добавлены форматы ввода и вывода
ArrowStream. #11088 (hcz). - Добавлена поддержка Cassandra в качестве внешнего источника данных для словарей. #4978 (favstovol).
- Добавлен новый layout
direct, который загружает все данные непосредственно из источника для каждого запроса, не сохраняя их и не кэшируя. #10622 (Artem Streltsov). - Добавлен новый тип layout
complex_key_directдля словарей, который не хранит ничего локально во время выполнения запроса. #10850 (Artem Streltsov). - Добавлена поддержка синтаксиса глобальных переменных в стиле MySQL (заглушка). Это необходимо для совместимости с протоколом MySQL. #11832 (alexey-milovidov).
- Добавлена подсветка синтаксиса для
clickhouse-clientс использованиемreplxx. #11422 (Tagir Kuskarov). - Добавлены функции
minMapиmaxMap. #11603 (Ildus Kurbangaliev). - Добавлена таблица
system.asynchronous_metric_log, в которую записываются исторические метрики изsystem.asynchronous_metrics. #11588 (Alexander Kuzmenkov). - Добавлены функции
extractAllGroupsHorizontal(haystack, re)иextractAllGroupsVertical(haystack, re). #11554 (Vasily Nemkov). - Добавлены запросы SHOW CLUSTER(S). #11467 (hexiaoting).
- Добавлена функция
netlocдля извлечения сетевого адреса, аналогичная функцииurlparse(url)и полюnetlocв Python. #11356 (Guillaume Tassery). - Добавлены ещё два виртуальных столбца в
engine=Kafkaдля доступа к заголовкам сообщений. #11283 (filimonov). - Добавлен виртуальный столбец
_timestamp_msв движке Kafka (тип —Nullable(DateTime64(3))). #11260 (filimonov). - Добавлена функция
randomFixedString. #10866 (Andrei Nekrashevich). - Добавлена функция
fuzzBits, которая случайным образом инвертирует биты в строке с заданной вероятностью. #11237 (Andrei Nekrashevich). - Разрешено сравнение чисел с константной строкой в операторах сравнения, а также в секциях IN и VALUES. #11647 (alexey-milovidov).
- Добавлен режим балансировки нагрузки
round_robin. #11645 (Azat Khuzhin). - Добавлена настройка
cast_keep_nullable. Если она включена,CAST(something_nullable AS Type)возвращаетNullable(Type). #11733 (Artem Zuikov). - Добавлены столбец
positionв таблицуsystem.columnsи столбецcolumn_positionв таблицуsystem.parts_columns. Эти столбцы содержат порядковый номер соответствующего столбца в таблице, начиная с 1. Это исправляет #7744. #11655 (alexey-milovidov). - Поддержка оператора ON CLUSTER для команд SYSTEM
{FLUSH DISTRIBUTED,STOP/START DISTRIBUTED SEND}. #11415 (Azat Khuzhin). - Добавлена таблица system.distribution_queue. #11394 (Azat Khuzhin).
- Поддержка всех параметров форматов в Kafka, возможность задавать часть параметров на уровне таблицы, корректировка значений по умолчанию для повышения производительности. #11388 (filimonov).
- Добавлена функция
port(для извлечения порта из URL-адреса). #11120 (Azat Khuzhin). - Теперь функции
dictGet*могут принимать имена таблиц. #11050 (Vitaly Baranov). - Утилита
clickhouse-formatтеперь может форматировать несколько запросов при использовании аргумента-n. #10852 (Darío). - Добавлена возможность настроить proxy-resolver для DiskS3. #10744 (Pavel Kovalenko).
- Функция
pointInPolygonтеперь работает с неконстантным полигоном.pointInPolygonтеперь может принимать в качестве второго аргумента Array(Array(Tuple(..., ...))) — массив, описывающий полигон и его отверстия. #10623 (Alexey Ilyukhov) #11421 (Alexey Ilyukhov). - Добавлено
move_ttl_infoвsystem.partsдля анализа работы механизма перемещения по TTL. #10591 (Vladimir Chebotarev). - Возможность работы с S3 через прокси-серверы. #10576 (Pavel Kovalenko).
- Добавлены синонимы для типов данных
NCHARиNVARCHAR. #11025 (alexey-milovidov). - Исправлена задача #7224: в таблицу
system.eventsдобавлены метрикиFailedQuery,FailedSelectQueryиFailedInsertQuery. #11151 (Nikita Orlov). - Добавили дополнительную статистику
jemallocвsystem.asynchronous_metricsи обеспечили отображение для неё актуальных значений. #11748 (Alexander Kuzmenkov). - Добавлена возможность указывать учетные данные S3 по умолчанию, а также пользовательские заголовки аутентификации. #11134 (Grigory Pervakov).
- Добавлены новые функции для импорта/экспорта
DateTime64какInt64с различной степенью точности:to-/fromUnixTimestamp64Milli/-Micro/-Nano. #10923 (Vasily Nemkov). - Разрешено указывать URI вида
mongodb://для словарей MongoDB. #10915 (Alexander Kuzmenkov). - Ключевое слово OFFSET теперь можно использовать без сопутствующей клаузы LIMIT. #10802 (Guillaume Tassery).
- Добавлена таблица
system.licenses. Эта таблица содержит лицензии сторонних библиотек, которые находятся в каталогеcontrib. Тем самым закрывается #2890. #10795 (alexey-milovidov). - Новая функция toStartOfSecond(DateTime64) -> DateTime64, которая обнуляет дробную (субсекундную) часть значения DateTime64. #10722 (Vasily Nemkov).
- Добавлен новый формат ввода
JSONAsString, который принимает последовательность JSON-объектов, разделённых символами новой строки, пробелами и/или запятыми. #10607 (Kruglov Pavel). - Разрешено профилировать память с более мелким шагом, чем 4 МиБ. Добавлен семплирующий профилировщик памяти для фиксации случайных выделений и освобождений памяти. #10598 (alexey-milovidov).
SimpleAggregateFunctionтеперь поддерживает иsumMap. #10000 (Ildus Kurbangaliev).- Добавлена поддержка
ALTER RENAME COLUMNдля движка Distributed. Продолжение #10727. Исправлено #10747. #10887 (alesapin).
Исправление ошибки
- Исправлено срабатывание UBSan при разборе Decimal. Это исправляет #7540. #10512 (alexey-milovidov).
- Исправлено возможное арифметическое исключение с плавающей запятой при разборе DateTime64. Это исправляет #11374. #11875 (alexey-milovidov).
- Исправлен редкий сбой, возникавший при использовании столбца
Nullableв условииPREWHERE. #11895 #11608 #11869 (Nikolai Kochetov). - Запретить использование arrayJoin внутри функций высшего порядка. Это приводило к нарушению синхронизации протокола. Исправляет #3933. #11846 (alexey-milovidov).
- Исправлена ошибка при сравнении
FixedStringс константой типаString. Это исправление закрывает #11393. Ошибка появилась в версии 20.4. #11828 (alexey-milovidov). - Исправлен неверный результат для
ifпри наличии значений NULL в условии. #11807 (Artem Zuikov). - Исправлено избыточное использование потоков при выполнении запросов. #11788 (Nikolai Kochetov).
- Исправлено исключение
Scalar does not existпри использованииWITH <скалярный подзапрос> ...вSELECT ... FROM merge_tree_table ...#11621. #11767 (Amos Bird). - Исправлено некорректное поведение запросов вида
SELECT *, xyz.*, которые выполнялись успешно, хотя ожидалась ошибка. #11753 (hexiaoting). - Теперь операции реплицированного fetch будут отменяться при изменении метаданных. #11744 (alesapin).
- Разбирать метаданные, хранящиеся в ZooKeeper, перед сравнением на равенство. #11739 (Azat Khuzhin).
- Исправлена ошибка
LOGICAL_ERROR, вызванная неверным выводом типа сложных литералов в формате ввода Values. #11732 (tavplubix). - Исправлена ошибка в работе
ORDER BY ... WITH FILLдля константных столбцов. #11697 (Anton Popov). - Исправлено крайне редкое состояние гонки в SYSTEM SYNC REPLICA. Если реплицируемая таблица создаётся и одновременно из отдельного соединения другой клиент выполняет команду
SYSTEM SYNC REPLICAдля этой таблицы (что маловероятно, потому что другой клиент должен знать, что таблица создаётся), возможно разыменование нулевого указателя (nullptr). #11691 (alexey-milovidov). - Передавайте корректные значения таймаутов при взаимодействии с XDBC bridge. Ранее таймауты не учитывались при проверке работоспособности XDBC bridge и получении метаинформации. #11690 (alexey-milovidov).
- Исправлено использование
LIMIT n WITH TIESвместе с операторомORDER BY, содержащим псевдонимы. #11689 (Anton Popov). - Исправлена возможная проблема
Pipeline stuckдля запросовSELECTс параллельнымFINAL. Исправляет #11636. #11682 (Nikolai Kochetov). - Исправлена ошибка, из-за которой
system.mutationsмог находиться в некорректном состоянии: могло отображаться, что вся мутация уже выполнена, хотя на сервере все еще оставались задачиMUTATE_PARTв очереди репликации, и он продолжал пытаться их выполнить. Это исправляет #11611. #11681 (alesapin). - Исправлена подсветка синтаксиса в запросе CREATE USER. #11664 (alexey-milovidov).
- Добавлена поддержка регулярных выражений с флагами, не зависящими от регистра. Это исправляет #11101 и #11506. #11649 (alexey-milovidov).
- Удалена тривиальная оптимизация запросов
COUNT, если включена безопасность на уровне строк (row-level security). В предыдущих версиях пользователь получал общее количество записей в таблице вместо отфильтрованного. Это исправляет #11352. #11644 (alexey-milovidov). - Исправлены блум-фильтры для String (индексы пропуска данных). #11638 (Azat Khuzhin).
- Без опции
-qбаза данных не создаётся при запуске. #11604 (giordyb). - Исправлена ошибка
Block structure mismatchдля запросов с семплированием, читающих из таблицыBuffer. #11602 (Nikolai Kochetov). - Исправлен неверный код завершения clickhouse-client, если
exception.code() % 256 == 0. #11601 (filimonov). - Исправлены условия гонки при операциях CREATE/DROP для разных реплик ReplicatedMergeTree. Система продолжает работать, даже если таблица не была полностью удалена из ZooKeeper или не была успешно создана. Это исправляет #11432. #11592 (alexey-milovidov).
- Исправлена незначительная ошибка в сообщении журнала о «Mark cache size was lowered» при запуске сервера. Это закрывает #11399. #11589 (alexey-milovidov).
- Исправлена ошибка
Size of offsets does not match size of column, возникавшая в запросах сPREWHERE column in (subquery)иARRAY JOIN. #11580 (Nikolai Kochetov). - Исправлена редкая ошибка сегментации в
SHOW CREATE TABLE, устраняющая #11490. #11579 (tavplubix). - Все запросы в HTTP-сессии имели один и тот же query_id. Исправлено. #11578 (tavplubix).
- Теперь Docker-контейнер clickhouse-server будет предпочитать IPv6 при проверке доступности сервера. #11550 (Ivan Starkov).
- Исправлена ошибка
Data compressed with different methods, которая могла возникать при включённомmin_bytes_to_use_direct_io, если используется PREWHERE вместе с SAMPLE или большим числом потоков. Это исправляет #11539. #11540 (alexey-milovidov). - Исправлены значения shard_num/replica_num для
<node>(они нарушали работу use_compact_format_in_distributed_parts_names). #11528 (Azat Khuzhin). - Исправлен асинхронный INSERT в таблицу Distributed при prefer_localhost_replica=0 и отключённой internal_replication. #11527 (Azat Khuzhin).
- Исправлена утечка памяти, возникавшая при возникновении исключения в процессе агрегации с функциями
-State. Это исправляет #8995. #11496 (alexey-milovidov). - Исправлено исключение
Pipeline stuckпри выполненииINSERT SELECT FINAL, когдаSELECT(max_threads>1) имеет несколько потоков, аINSERT— только один (max_insert_threads==0). #11455 (Azat Khuzhin). - Исправлена ошибка, приводившая к неверному результату в запросах вида
select count() from t, u. #11454 (Artem Zuиков). - Исправлено возвращаемое значение сжатого размера для кодеков. #11448 (Nikolai Kochetov).
- Исправлено падение сервера при использовании для столбца кодека сжатия с нелитеральными аргументами. Исправляет #11365. #11431 (alesapin).
- Исправлено возможное чтение неинициализированной памяти при завершении работы MergeTree, если таблица не была успешно создана. #11420 (alexey-milovidov).
- Исправлено падение при выполнении операции JOIN для типов
LowCarinality(T)иNullable(T). #11380. #11414 (Artem Zuikov). - Исправлен код ошибки для неправильного ключа
USING. #11373. #11404 (Artem Zuikov). - Исправлена функция
geohashesInBoxс аргументами за пределами допустимого диапазона широты и долготы. #11403 (Vasily Nemkov). - Улучшены сообщения об ошибках в функциях
joinGet(). #11389 (Artem Zuikov). - Исправлена возможная ошибка
Pipeline stuckв запросах с внешней сортировкой и ограничением. Исправляет #11359. #11366 (Nikolai Kochetov). - Удалена избыточная блокировка при отправке партий в ReplicatedMergeTree. #11354 (alesapin).
- Исправлена поддержка
\G(вертикальный вывод) в clickhouse-client в многострочном режиме. Данное исправление закрывает #9933. #11350 (alexey-milovidov). - Исправлена потенциальная ошибка сегментации при использовании базы данных
Lazy. #11348 (alexey-milovidov). - Исправлено падение при прямых выборках из движка таблицы
Join(без JOIN) и некорректная обработка NULL-значений. #11340 (Artem Zuikov). - Исправлена ошибка, приводившая к сбою в
quantilesExactWeightedArray. #11337 (Nikolai Kochetov). - Теперь слияния останавливаются перед изменением метаданных в запросах
ALTER. #11335 (alesapin). - Снова сделана параллельной запись в
MATERIALIZED VIEWпри параметреparallel_view_processing = 1. Исправляет #10241. #11330 (Nikolai Kochetov). - Исправлена
visitParamExtractRawдля случая, когда извлечённый JSON содержит строки с несбалансированными { или [. #11318 (Ewout). - Исправлено крайне редкое состояние гонки в ThreadPool. #11314 (alexey-milovidov).
- Исправлена незначительная гонка данных в
clickhouse-copier. Выявлена интеграционными тестами. #11313 (alexey-milovidov). - Исправлено потенциальное использование неинициализированной памяти при преобразовании. Пример:
SELECT toIntervalSecond(now64()). #11311 (alexey-milovidov). - Исправлена проблема, из-за которой анализ индексов не работал, если в первичном ключе таблицы был столбец типа Array и запрос фильтровал по этому столбцу с помощью функций
emptyилиnotEmpty. Это исправляет #11286. #11303 (alexey-milovidov). - Исправлена ошибка, при которой оценка скорости выполнения запроса могла быть некорректной, а ограничение
min_execution_speedмогло не работать или работать неправильно, если скорость запроса ограничивалась настройкамиmax_network_bandwidth,max_execution_speedилиpriority. Значение по умолчанию дляtimeout_before_checking_execution_speedизменено на ненулевое, потому что в противном случае настройкиmin_execution_speedиmax_execution_speedне оказывают никакого эффекта. Исправляет #11297. Исправляет #5732. Исправляет #6228. Улучшение удобства использования: устранена конкатенация сообщения об исключении с индикатором прогресса вclickhouse-client. #11296 (alexey-milovidov). - Исправлена ошибка, из-за которой происходило падение при вызове
SET DEFAULT ROLEс некорректными аргументами. Это исправляет #10586. #11278 (Vitaly Baranov). - Исправлен сбой при чтении некорректных данных в формате
Protobuf, что устраняет #5957 и #11203. #11258 (Vitaly Baranov). - Исправлена ошибка, из-за которой словарь
cacheмог возвращать значение по умолчанию вместо корректного (когда все ключи просрочены). Это затрагивает только строковые поля. #11233 (Nikita Mikhaylov). - Исправлена ошибка
Block structure mismatch in QueryPipelineпри чтении изVIEWс константами во внутреннем запросе. Исправляет #11181. #11205 (Nikolai Kochetov). - Исправлено возможное исключение
Invalid status for associated output. #11200 (Nikolai Kochetov). - Теперь
primary.idxбудет проверяться, если он задан в запросеCREATE. #11199 (alesapin). - Исправлена возможная ошибка
Cannot capture columnв функциях высшего порядка при захвате аргумента типаArray(Array(LowCardinality)). #11185 (Nikolai Kochetov). - Исправлена работа
S3-глоббинга, который мог приводить к сбоям при наличии более чем 1000 ключей и на некоторых бэкендах. #11179 (Vladimir Chebotarev). - Если индекс пропуска данных зависит от столбцов, которые будут изменяться во время фонового слияния (для SummingMergeTree, AggregatingMergeTree, а также для TTL GROUP BY), он рассчитывался некорректно. Эта проблема исправлена переносом вычисления индекса на этап после слияния, чтобы индекс вычислялся по объединённым данным. #11162 (Azat Khuzhin).
- Исправлено зависание, которое иногда происходило при выполнении DROP таблицы ENGINE=Kafka (или во время перезапуска сервера). #11145 (filimonov).
- Исправлено чрезмерное резервирование потоков для простых запросов (оптимизация сокращения числа потоков, которая была частично нарушена после изменений в конвейере). #11114 (Azat Khuzhin).
- Убрано логирование в задаче завершения мутации, если в итоге ничего не было завершено. #11109 (alesapin).
- Исправлена взаимоблокировка при запуске сервера после обновления, изменившего структуру таблиц системных логов. #11106 (alesapin).
- Исправлена утечка памяти в registerDiskS3. #11074 (Pavel Kovalenko).
- Исправлена ошибка
No such name in Block::erase()при использовании JOIN вместе с PREWHERE или когда настройкаoptimize_move_to_prewhereпреобразует WHERE в PREWHERE. #11051 (Artem Zuikov). - Исправлена возможная утеря данных при остановке таблицы движка Kafka. #11048 (filimonov).
- Исправлены ошибки при разрешении аргументов функции parseDateTime64BestEffort. #10925. #11038 (Vasily Nemkov).
- Теперь можно выполнять
ADD/DROPиRENAMEодного и того же столбца в одном запросеALTER. Сообщение об ошибке при одновременном выполненииMODIFYиRENAMEстало более понятным. Частично исправляет #10669. #11037 (alesapin). - Исправлен разбор URL S3. #11036 (Vladimir Chebotarev).
- Исправлено отслеживание использования памяти для двухуровневого
GROUP BYпри наличииLIMIT. #11022 (Azat Khuzhin). - Исправлена крайне редкая потенциальная ошибка типа use-after-free в MergeTree, возникавшая в случае неуспешного создания таблицы. #10986 (alexey-milovidov).
- Исправлена обработка метаданных (относительный путь при переименовании) и данных (относительный путь для символьной ссылки) в базе данных Atomic. #10980 (Azat Khuzhin).
- Исправлено падение сервера при одновременном выполнении запросов
ALTERиDROP DATABASEс движком базы данныхAtomic. #10968 (tavplubix). - Исправлен некорректный размер сырых данных в методе getRawData(). #10964 (Igr).
- Исправлена несовместимость двухуровневой агрегации между версией 20.1 и более ранними версиями. Эта несовместимость возникает, когда на инициирующем узле и удалённых узлах используются разные версии ClickHouse, результат GROUP BY имеет большой размер, и агрегация выполняется по одному полю типа String. Это приводит к появлению в результате нескольких необъединённых строк для одного ключа. #10952 (alexey-milovidov).
- Исключена отправка частично записанных файлов через DistributedBlockOutputStream. #10940 (Azat Khuzhin).
- Исправлено аварийное завершение при выполнении
SELECT count(notNullIn(NULL, [])). #10920 (Nikolai Kochetov). - Исправлено зависание, которое иногда происходило при выполнении DROP таблицы с движком Kafka (или во время перезапусков сервера). #10910 (filimonov).
- Теперь можно выполнять несколько операций
ALTER RENAME, напримерa TO b, c TO a. #10895 (alesapin). - Исправлена возможная гонка данных, которая могла возникать при получении результата из состояния агрегатной функции из нескольких потоков для одного и того же столбца. Единственный сценарий (который мне удалось найти), при котором это возможно, — использование функции
finalizeAggregationпри чтении из таблицы с движкомMemory, в которой хранится состояниеAggregateFunctionдля функцииquanite*. #10890 (Nikolai Kochetov). - Исправлена проблема с обратной совместимостью кортежей в таблицах типа Distributed. #10889 (Anton Popov).
- Исправлен SIGSEGV в StringHashTable при обращении к отсутствующему ключу. #10870 (Azat Khuzhin).
- Исправлена проблема с зависанием
WATCHпосле удаления таблицыLiveViewиз базы данных с движкомAtomic. #10859 (tavplubix). - Исправлена ошибка в
ReplicatedMergeTree, из-за которой некоторые операцииALTERсOPTIMIZEмогли зависать, ожидая реплику, которая уже стала неактивной. #10849 (tavplubix). - Теперь ограничения обновляются при переименовании столбца, участвующего в выражении
CONSTRAINT. Исправлена проблема #10844. #10847 (alesapin). - Исправлено возможное чтение неинициализированной памяти в словаре кэша. #10834 (alexey-milovidov).
- Исправлен порядок столбцов после Block::sortColumns() (также добавлен тест, показывающий влияние на реальный сценарий использования — движок Buffer). #10826 (Azat Khuzhin).
- Исправлена проблема с ODBC bridge, возникающая, когда не требуется кавычивание идентификаторов. Это исправляет #7984. #10821 (alexey-milovidov).
- Исправлены отчёты UBSan и MSan в DateLUT. #10798 (alexey-milovidov).
- Используйте
src_typeдля корректного приведения типов в условиях по ключу. Устраняет проблему #6287. #10791 (Andrew Onyshchuk). - Удалить старые патчи для libunwind. https://github.com/ClickHouse-Extras/libunwind/commit/500aa227911bd185a94bfc071d68f4d3b03cb3b1#r39048012 Это позволяет отключить
-fno-omit-frame-pointerв сборкахclang, что в среднем дает как минимум 1 % прироста производительности. #10761 (Amos Bird). - Исправлен avgWeighted при использовании числа с плавающей запятой в качестве веса на нескольких шардах. #10758 (Baudouin Giard).
- Исправлено поведение
parallel_view_processing. Теперь при возникновении исключения все вставки вMATERIALIZED VIEWв любом случае должны быть доведены до конца. Исправляет #10241. #10757 (Nikolai Kochetov). - Исправлены комбинаторы -OrNull и -OrDefault при совместном использовании с -State. #10741 (hcz).
- Исправлен сбой в
generateRandomпри работе с вложенными типами. Исправляет #10583. #10734 (Nikolai Kochetov). - Исправлена потенциальная порча данных в ключевом столбце
LowCardinality(FixedString)вSummingMergeTree, которая могла происходить после слияния. Исправляет #10489. #10721 (Nikolai Kochetov). - Исправлена работа с первичным ключом, обёрнутым в функцию, при использовании модификатора 'FINAL' и оптимизации ORDER BY. #10715 (Anton Popov).
- Исправлено потенциальное переполнение буфера в функции
h3EdgeAngle. #10711 (alexey-milovidov). - Исправлена проблема исчезающих итогов. Итоги могли отфильтровываться, если запрос содержал
JOINили подзапрос с внешним условиемWHERE. Исправляет #10674. #10698 (Nikolai Kochetov). - Исправлена атомарность вставки по HTTP. Исправляет #9666. #10687 (Andrew Onyshchuk).
- Исправлено несколько случаев использования оператора
INс одинаковым набором значений в одном запросе. #10686 (Anton Popov). - Исправлена ошибка, из-за которой HTTP-запросы зависали при закрытии подключения клиента при
readonly=2иcancel_http_readonly_queries_on_client_close=1. Исправляет #7939, #7019, #7736, #7091. #10684 (tavplubix). - Исправлен порядок аргументов в конструкторе AggregateTransform. #10667 (palasonic1).
- Исправлена проблема с отсутствием параллельного выполнения удалённых запросов при включённом
distributed_aggregation_memory_efficient. Исправляет #10655. #10664 (Nikolai Kochetov). - Исправлено возможное некорректное количество строк в результатах запросов с
LIMIT. Исправляет #10566, #10709. #10660 (Nikolai Kochetov). - Исправлена ошибка, из‑за которой блокировались конкурентные операции ALTER при большом количестве частей таблицы. #10659 (alesapin).
- Исправлено разыменование указателя nullptr в StorageBuffer, если сервер был завершён до запуска таблицы. #10641 (alexey-milovidov).
- Исправлена оптимизация предикатов для распределённых запросов (
enable_optimize_predicate_expression=1) в запросах с секциейHAVING(то есть когда требуется фильтрация на сервере-инициаторе) за счёт сохранения порядка выражений (чего достаточно для устранения проблемы), а также принудительного использования агрегатором имён столбцов вместо индексов. Исправления: #10613, #11413. #10621 (Azat Khuzhin). - Исправлено поведение optimize_skip_unused_shards с LowCardinality. #10611 (Azat Khuzhin).
- Исправлена ошибка сегментации в StorageBuffer при возникновении исключения во время запуска сервера. Исправляет проблему #10550. #10609 (tavplubix).
- При выполнении запроса
SYSTEM DROP DNS CACHEтакже сбрасываются кеши, которые используются для проверки, разрешено ли пользователю подключаться с определённых IP-адресов. #10608 (tavplubix). - Исправлены некорректные скалярные результаты во внутреннем запросе
MATERIALIZED VIEWв случае, если этот запрос обращался к зависимой таблице. #10603 (Nikolai Kochetov). - Исправлена обработка условной переменной, используемой для синхронных мутаций. В некоторых случаях сигналы этой условной переменной могли теряться. #10588 (Vladimir Chebotarev).
- Исправлен возможный сбой, возникающий при вызове
createDictionary()до завершенияloadStoredObject(). #10587 (Vitaly Baranov). - Исправлена ошибка с сообщением
the BloomFilter false positive must be a double number between 0 and 1#10551. #10569 (Winter Zhang). - Исправлен
SELECTстолбца-алиаса, у которого тип выражения по умолчанию отличался от типа столбца. #10563 (Azat Khuzhin). - Реализовано сравнение между значениями DateTime64 и String (как и для DateTime). #10560 (Vasily Nemkov).
- Исправлена возможная порча индекса, возникавшая в некоторых случаях после слияния компактных частей в другую компактную часть. #10531 (Anton Popov).
- Отключена по умолчанию оптимизация GROUP BY по sharding_key (
optimize_distributed_group_by_sharding_keyбыла добавлена, но сразу отключена из‑за сложности анализа sharding_key; простой пример — использованиеifв ключе шардинга) и исправлена её работа для WITH ROLLUP/CUBE/TOTALS. #10516 (Azat Khuzhin). - Исправлено: #10263 (после того PR распределённая отправка (dist) через INSERT откладывалась при каждом INSERT). Исправлено: #8756 (тот PR ломает распределённые отправки при одновременном выполнении всех следующих условий (сейчас это, полагаю, маловероятная конфигурация):
internal_replication == false, несколько локальных шардов (активирует код работы с жёсткими ссылками) иdistributed_storage_policy(делает так, чтоlink(2)завершается с ошибкойEXDEV)). #10486 (Azat Khuzhin). - Исправлена ошибка, связанная с ограничением "max_rows_to_sort". #10268 (alexey-milovidov).
- Получать словарь и проверять права доступа только один раз при каждом вызове любой функции чтения внешних словарей. #10928 (Vitaly Baranov).
Улучшение
- Применяется
TTLдля старых данных после выполнения запросаALTER MODIFY TTL. Это поведение контролируется настройкойmaterialize_ttl_after_modify, которая включена по умолчанию. #11042 (Anton Popov). - При разборе C‑подобных escape‑последовательностей с обратной косой чертой в строковых литералах,
VALUESи различных текстовых форматах (это расширение стандарта SQL, характерное для ClickHouse и MySQL), сохранять обратную косую черту, если обнаружена неизвестная escape‑последовательность (например,\%или\w), что делает использование регулярных выраженийLIKEиmatchболее удобным (достаточно написатьname LIKE 'used\_cars'вместоname LIKE 'used\\_cars'), а также повышает совместимость. Это исправляет #10922. #11208 (alexey-milovidov). - При чтении значений типа Decimal лишние цифры после десятичной точки отбрасываются. Такое поведение более совместимо с MySQL и PostgreSQL. Это исправляет #10202. #11831 (alexey-milovidov).
- Разрешить выполнять DROP реплицируемой таблицы, если метаданные в ZooKeeper уже удалены и больше не присутствуют (в том числе при использовании TestKeeper для тестирования после перезапуска сервера). Разрешить выполнять RENAME реплицируемой таблицы даже при ошибке при обращении к ZooKeeper. Это исправляет #10720. #11652 (alexey-milovidov).
- Немного улучшена диагностика при чтении десятичных чисел из строки. Это закрывает #10202. #11829 (alexey-milovidov).
- Исправлен вызов sleep в обработчике сигналов. Он засыпал на более короткое время, чем ожидалось. #11825 (alexey-milovidov).
- (Только для Linux) Метрики производительности ОС (для CPU и I/O) будут работать даже без capability
CAP_NET_ADMIN. #10544 (Alexander Kazakov). - Добавлен псевдоним
hostnameдля функцииhostName. Эту возможность предложил Victor Tarnavskiy из Yandex.Metrica. #11821 (alexey-milovidov). - Добавлена поддержка распределённых DDL-операций (
UPDATE/DELETE/DROP PARTITION) на кластерах с перекрёстной репликацией. #11703 (Nikita Mikhaylov). - Выводить предупреждение вместо ошибки в серверный лог при запуске, если не удаётся слушать один из адресов для прослушивания (например, IPv6 недоступен внутри Docker). Имейте в виду, что если серверу не удаётся слушать все указанные адреса, он, как и раньше, не запустится. Это исправляет #4406. #11687 (alexey-milovidov).
- Создание пользователя и базы данных по умолчанию при запуске Docker-образа. #10637 (Paramtamtam).
- При выводе многострочного запроса в серверный лог строки объединяются. Теперь это корректно работает в случае многострочных строковых литералов, идентификаторов и однострочных комментариев. Это исправляет #3853. #11686 (alexey-milovidov).
- Теперь в следующих командах можно указывать несколько имен: CREATE USER, CREATE ROLE, ALTER USER, SHOW CREATE USER, SHOW GRANTS и так далее. #11670 (Vitaly Baranov).
- Добавлена поддержка распределённого DDL (
UPDATE/DELETE/DROP PARTITION) в кластерах с перекрёстной репликацией. #11508 (frank lee). - Очищать пароль, переданный в командной строке в
clickhouse-clientиclickhouse-benchmark, если пользователь указал его в явном виде. Это предотвращает утечку пароля черезpsи аналогичные инструменты. #11665 (alexey-milovidov). - Не использовать отладочную информацию из файла ELF, если она не соответствует запущенному бинарному файлу. Это необходимо, чтобы избежать вывода некорректных имён функций и мест в исходном коде в стек‑трейсах. Это исправляет #7514. #11657 (alexey-milovidov).
- Возвращать NULL/ноль, если значение разобрано не полностью в функциях parseDateTimeBestEffortOrNull/Zero. Это исправляет #7876. #11653 (alexey-milovidov).
- Пропускать пустые параметры в URL запроса. Они могут появляться, если указать
http://localhost:8123/?&a=bилиhttp://localhost:8123/?a=b&&c=d. Это исправление закрывает #10749. #11651 (alexey-milovidov). - Разрешено использовать
groupArrayArrayиgroupUniqArrayArrayв качествеSimpleAggregateFunction. #11650 (Volodymyr Kuznetsov). - Разрешено сравнивать с константными строками посредством неявных преобразований при анализе условий индекса для других типов. Это может закрыть #11630. #11648 (alexey-milovidov).
- https://github.com/ClickHouse/ClickHouse/pull/7572#issuecomment-642815377 Поддержка конфигурации HTTP-обработчиков по умолчанию. #11628 (Winter Zhang).
- Добавлены дополнительные форматы ввода для работы с движком Kafka. Исправлена проблема с преждевременными сбросами данных. Исправлена проблема с производительностью, возникавшая, когда
kafka_num_consumersбольше числа партиций в топике. #11599 (filimonov). - Улучшена логика
multiple_joins_rewriter_version=2. Исправлена ошибка «unknown column» для псевдонимов лямбда-выражений. #11587 (Artem Zuikov). - Улучшено сообщение об исключении при невозможности разобрать список описания столбцов. Это закрывает #10403. #11537 (alexey-milovidov).
- Улучшена логика
enable_optimize_predicate_expression=1для представлений (VIEW). #11513 (Artem Zuikov). - Добавлена поддержка PREWHERE в таблицах Live View. #11495 (vzakaznikov).
- Автоматически обновлять DNS-кэш, который используется для проверки, разрешено ли пользователю подключаться с данного адреса. #11487 (tavplubix).
- OPTIMIZE FINAL принудительно выполнит слияние, даже если одновременно выполняются другие слияния. Тем самым закрываются задачи #11309 и #11322. #11346 (alexey-milovidov).
- Подавлен вывод результатов отменённых запросов в clickhouse-client. В предыдущих версиях результат мог продолжать выводиться в терминал даже после нажатия Ctrl+C для отмены запроса. Это закрывает #9473. #11342 (alexey-milovidov).
- Теперь файл истории обновляется после каждого запроса, и не возникает состояния гонки, если один и тот же файл истории используется несколькими клиентами. Это исправляет #9897. #11453 (Tagir Kuskarov).
- Улучшены сообщения журнала при перезагрузке конфигурации. #11341 (alexey-milovidov).
- В некоторых случаях из отформатированных запросов в
clickhouse-clientиclickhouse-formatудаляются пробелы в конце строк. #11325 (alexey-milovidov). - Добавлена настройка "output_format_pretty_max_value_width". Если значение длиннее, оно будет усечено, чтобы избежать вывода слишком длинных значений в терминал. Закрывает #11140. #11324 (alexey-milovidov).
- Улучшено сообщение об исключении при нехватке отображений памяти. Закрывает #11027. #11316 (alexey-milovidov).
- Добавлена поддержка типов (U)Int8, (U)Int16 и Date в ASOF JOIN. #11301 (Artem Zuikov).
- Добавлена поддержка параметра kafka_client_id для таблиц Kafka. Также изменено значение по умолчанию параметра
client.id, который ClickHouse использует при взаимодействии с Kafka, — теперь оно более информативно и удобно в использовании. #11252 (filimonov). - Сохранять значение метрики
DistributedFilesToInsertпри исключениях. В предыдущих версиях значение устанавливалось при подготовке к отправке файлов, но становилось нулём, если происходило исключение и некоторые файлы всё ещё ожидали обработки. Теперь оно соответствует количеству ожидающих файлов в файловой системе. #11220 (alexey-milovidov). - Добавлена поддержка составных названий типов данных (таких как
DOUBLE PRECISIONиCHAR VARYING) для улучшения совместимости с SQL. #11214 (Павел Потемкин). - Добавлены синонимы для некоторых типов данных. #10856 (Павел Потемкин).
- Журнал запросов теперь включён по умолчанию. #11184 (Ivan Blinkov).
- Отображать тип аутентификации в таблице system.users и при выполнении запроса SHOW CREATE USER. #11080 (Vitaly Baranov).
- Теперь данные удаляются при явном выполнении
DROP DATABASEдля движка базы данныхMemory. Исправление #10557. #11021 (tavplubix). - Заданы имена для внутренних потоков библиотеки rdkafka. Логи rdkafka теперь выводятся в серверный журнал. #10983 (Azat Khuzhin).
- Поддержка юникодных пробельных символов в запросах. Это помогает, когда запросы копируются из Word или с веб‑страницы. Это исправляет #10896. #10903 (alexey-milovidov).
- Добавлена поддержка использования больших типов UInt в качестве индекса в функции
tupleElement. #10874 (hcz). - Учитывать prefer_localhost_replica/load_balancing при выполнении операции INSERT в таблицу Distributed. #10867 (Azat Khuzhin).
- Добавлены настройки
min_insert_block_size_rows_for_materialized_views,min_insert_block_size_bytes_for_materialized_views. Эти настройки аналогичныmin_insert_block_size_rowsиmin_insert_block_size_bytes, но применяются только к блокам, вставляемым вMATERIALIZED VIEW. Это помогает контролировать схлопывание блоков при вставке в материализованные представления и избегать чрезмерного использования памяти. #10858 (Azat Khuzhin). - Устранено возникновение исключения в реплицируемой очереди при остановке сервера. Исправляет #10819. #10841 (alesapin).
- Обеспечить, чтобы
varSamp,varPopне могли возвращать отрицательные результаты из‑за численных ошибок и чтобыstddevSamp,stddevPopне могли вычисляться из отрицательной дисперсии. Это исправляет #10532. #10829 (alexey-milovidov). - Улучшено сообщение об исключении DNS. Это исправляет #10813. #10828 (alexey-milovidov).
- Изменён HTTP-код ответа на 400 Bad Request в случае некоторых ошибок парсинга. Тем самым исправлена проблема #10636. #10640 (alexey-milovidov).
- Выводить сообщение, если версия clickhouse-client новее, чем clickhouse-server. #10627 (alexey-milovidov).
- Добавлена поддержка запроса
INSERT INTO [db.]table WATCH. #10498 (vzakaznikov). - Добавлена возможность передавать параметр quota_key в clickhouse-client. Тем самым закрывается #10227. #10270 (alexey-milovidov).
Повышение производительности
- Добавлена возможность нескольким репликам одновременно назначать слияния, мутации, удаление, перемещение и замену разделов. Это закрывает #10367. #11639 (alexey-milovidov) #11795 (alexey-milovidov).
- Оптимизация выполнения GROUP BY с учётом ключа сортировки таблицы, включаемая с помощью настройки
optimize_aggregation_in_order. #9113 (dimarub2000). - Запросы SELECT с FINAL выполняются параллельно. Добавлена настройка
max_final_threadsдля ограничения числа используемых потоков. #10463 (Nikolai Kochetov). - Улучшена производительность запросов INSERT с помощью
INSERT SELECTили INSERT через clickhouse-client в случаях, когда создаются небольшие блоки (типичный случай при параллельном разборе). Исправлено в #11275. Исправлена проблема, из-за которой ограничения CONSTRAINT не работали для полей с DEFAULT. Исправлено в #11273. Исправлена проблема, при которой ограничения CONSTRAINT игнорировались для временных (TEMPORARY) таблиц. Исправлено в #11274. #11276 (alexey-milovidov). - Оптимизация, устраняющая агрегатные функции min/max/any по ключам GROUP BY в секции SELECT, управляется настройкой
optimize_aggregators_of_group_by_keys. #11667 (xPoSx). #11806 (Azat Khuzhin). - Новая оптимизация, выносящая все операции за пределы функции
any, включается опциейoptimize_move_functions_out_of_any#11529 (Ruslan). - Улучшена производительность
clickhouse-clientв интерактивном режиме при использовании форматов Pretty. В предыдущих версиях существенная часть времени могла тратиться на вычисление видимой ширины строк в UTF-8. Это закрывает #11323. #11323 (alexey-milovidov). - Повышена производительность запросов с
ORDER BYи небольшимLIMIT(меньше, чемmax_block_size). #11171 (Albert Kidrachev). - Добавлено определение возможностей процессора во время выполнения для выбора и вызова наилучшей реализации функции. Добавлена поддержка генерации кода под несколько целевых платформ. Это закрывает #1017. #10058 (DimasKovas).
- По умолчанию включено
mlockдля бинарного файла ClickHouse. Это предотвращает выгрузку исполняемого файла ClickHouse из памяти при высокой нагрузке на ввод-вывод. #11139 (alexey-milovidov). - Выполняйте запросы с агрегатной функцией
sumи без ключей GROUP BY, чтобы они выполнялись в несколько раз быстрее. #10992 (alexey-milovidov). - Улучшена поразрядная сортировка (используемая в
ORDER BYс простыми ключами) за счёт удаления некоторых избыточных перемещений данных. #10981 (Arslan Gumerov). - Сортировать более крупные фрагменты левой таблицы в MergeJoin. Буферизовать блоки левой таблицы в памяти. Добавлена настройка
partial_merge_join_left_table_buffer_bytesдля управления размерами буферов блоков левой таблицы. #10601 (Artem Zuikov). - Удалены повторяющиеся операторы ORDER BY и DISTINCT в подзапросах; эта оптимизация включается параметром
optimize_duplicate_order_by_and_distinct#10067 (Mikhail Malafeev). - Эта оптимизация устраняет вычисление функций для остальных ключей в секции GROUP BY, включается параметром
optimize_group_by_function_keys#10051 (xPoSx). - Новая оптимизация, выносящая арифметические операции за пределы агрегатных функций, включается с помощью настройки
optimize_arithmetic_operations_in_aggregate_functions#10047 (Ruslan). - Использовать HTTP‑клиент для S3 на базе Poco вместо curl. Это улучшит производительность и снизит потребление памяти хранилищем S3 и табличными функциями. #11230 (Pavel Kovalenko).
- Исправлена проблема с производительностью Kafka, вызванная перепланированием на основе лимитов, которые всегда применялись. #11149 (filimonov).
- Включена настройка percpu_arena:percpu для jemalloc (это уменьшит фрагментацию памяти из‑за пула потоков). #11084 (Azat Khuzhin).
- Оптимизировано использование памяти при чтении ответа HTTP‑клиента S3. #11561 (Pavel Kovalenko).
- Настроены параметры Kafka по умолчанию для повышения производительности. #11388 (filimonov).
Экспериментальная функциональность
- Добавлены типы данных
Point(Tuple(Float64, Float64)) иPolygon(Array(Array(Tuple(Float64, Float64))). #10678 (Alexey Ilyukhov). - Добавлена функция
hasSubstr, которая позволяет искать подпоследовательности в массивах. Примечание: эта функция, вероятно, будет переименована без дополнительного уведомления. #11071 (Ryad Zenine). - Добавлена поддержка OpenCL и алгоритм битонической сортировки (bitonic sort), который может использоваться для сортировки целочисленных типов данных в одном столбце. ClickHouse необходимо собирать с флагом
-DENABLE_OPENCL=1. Чтобы использовать алгоритм битонической сортировки вместо других, необходимо установить значениеbitonic_sortдля параметра настройкиspecial_sortи убедиться, что OpenCL доступен. Эта возможность не улучшает производительность или что-либо ещё, она предоставлена только как пример и для демонстрационных целей. Вероятно, она будет удалена в ближайшем будущем, если не будет дальнейшей разработки в этом направлении. #10232 (Ri).
Улучшения сборки/тестирования/упаковки
- Включить clang-tidy для программ и утилит. #10991 (alexey-milovidov).
- Удалена зависимость от
tzdata: теперь ошибка не возникает, даже если каталог/usr/share/zoneinfoотсутствует. Обратите внимание, что все часовые пояса в ClickHouse работают даже без установленного в системе tzdata. #11827 (alexey-milovidov). - Добавлены стресс‑тесты с MSan и UBSan. Обратите внимание, что у нас уже есть MSan и UBSan для функциональных тестов, при этом "стресс‑тест" — это другой тип тестов. #10871 (alexey-milovidov).
- Выводить идентификатор сборки компилятора в сообщениях о сбоях. Это позволит с большей уверенностью определить, какой бинарный файл аварийно завершил работу. Добавлена новая функция
buildId. #11824 (alexey-milovidov). - Добавлен тест, который гарантирует, что мутации продолжают работать после выполнения запроса FREEZE. #11820 (alexey-milovidov).
- Не допускать тесты с подстрокой "fail" в их именах, так как это затрудняет просмотр результатов тестов в браузере при использовании Ctrl+F для поиска "fail". #11817 (alexey-milovidov).
- Удалены неиспользуемые импорты из HTTPHandlerFactory. #11660 (Bharat Nallan).
- Добавлена случайная выборка экземпляров, на которых выполняется copier. Это необходимо, чтобы избежать ошибки
Too many simultaneous queries. Также увеличен таймаут и уменьшена вероятность сбоя. #11573 (Nikita Mikhaylov). - Исправлено пропущенное include. #11525 (Matwey V. Kornilov).
- Ускорена сборка за счёт удаления старых примерных программ. Также найден осиротевший функциональный тест. #11486 (alexey-milovidov).
- Увеличен размер ccache для сборок в CI. #11450 (alesapin).
- Оставить только unit_tests_dbms в deb-пакете. #11429 (Ilya Yatsishin).
- Обновлена библиотека librdkafka до версии 1.4.2. #11256 (filimonov).
- Рефакторинг файлов сборки CMake. #11390 (Ivan).
- Исправлены несколько нестабильных интеграционных тестов. #11355 (alesapin).
- Добавлена поддержка запуска модульных тестов под UBSan. #11345 (alexey-milovidov).
- Удалён лишний таймаут из интеграционного теста
test_insertion_sync_fails_with_timeout. #11343 (alesapin). - Улучшена проверка на зависшие запросы в clickhouse-test. #11321 (alexey-milovidov).
- Выводить предупреждение, если сервер был собран в debug-режиме или с включёнными санитайзерами. #11304 (alexey-milovidov).
- Теперь clickhouse-test проверяет, доступен ли сервер, перед запуском тестов. #11285 (alesapin).
- Исправлен потенциально нестабильный тест
00731_long_merge_tree_select_opened_files.sh. Он падает нечасто, но во время экспериментов с ThreadFuzzer мы обнаружили в нём потенциальное состояние гонки (#9814). Пример см. по ссылке. #11270 (alexey-milovidov). - Повторять тест в CI, если выполнение
curlзавершилось по тайм‑ауту. Такие ситуации возможны из‑за системных зависаний на 10+ секунд, которые типичны для нашей CI-инфраструктуры. Это исправление для #11267. #11268 (alexey-milovidov). - Добавлен тест для движка таблицы Join от @donmikel. Это закрывает #9158. #11265 (alexey-milovidov).
- Исправлены несколько незначительных ошибок в модульных тестах. #11262 (alesapin).
- Теперь части команды компоновки для библиотеки
cctzне будут перемешиваться с другими библиотеками. #11213 (alesapin). - Компонент /programs/server разделён на программу и библиотеку. #11186 (Ivan).
- Улучшены скрипты сборки protobuf и gRPC. #11172 (Vitaly Baranov).
- Включён ранее не работавший тест производительности. #11158 (alexey-milovidov).
- Создайте корневой бакет S3 для тестов перед запуском любого экземпляра CH. #11142 (Pavel Kovalenko).
- Добавлен тест производительности для неконстантных многоугольников. #11141 (alexey-milovidov).
- Исправление теста
00979_live_view_watch_continuous_aggregates. #11024 (vzakaznikov). - Добавлена возможность запускать ZooKeeper в интеграционных тестах поверх tmpfs. #11002 (alesapin).
- Ожидание odbc-bridge с экспоненциальной задержкой. Предыдущее время ожидания в 200 мс оказалось недостаточным в нашей среде CI. #10990 (alexey-milovidov).
- Исправлен недетерминированный тест. #10989 (alexey-milovidov).
- Добавлен тест на пустые внешние данные. #10926 (alexey-milovidov).
- База данных пересоздаётся для каждого теста. Это улучшает изоляцию тестов. #10902 (alexey-milovidov).
- Добавлено больше assert-ов в код столбцов. #10833 (alexey-milovidov).
- Улучшена интеграция с санитайзерами. Теперь в сообщении о сбое санитайзера выводится информация о query_id. #10832 (alexey-milovidov).
- Исправлено очевидное состояние гонки в проверке «Split build smoke test». #10820 (alexey-milovidov).
- Исправлено ложное срабатывание MSan в MergeTreeIndexFullText. Проблема впервые проявилась в #9968. #10801 (alexey-milovidov).
- Добавлено подавление MSan для клиентской библиотеки MariaDB. #10800 (alexey-milovidov).
- Сборка gRPC не могла найти файлы protobuf, make-файл изменён с добавлением корректной ссылки. #10794 (mnkonkova).
- Включить дополнительные предупреждения (
-Weverything) для модулей base, utils и programs. Обратите внимание, что для большей части кода они уже включены. #10779 (alexey-milovidov). - Механизм подавления предупреждений из библиотек по ошибке был сделан публичным в #10396. #10776 (alexey-milovidov).
- Восстановлен патч, случайно удалённый в #10396. #10774 (alexey-milovidov).
- Исправление ошибок в тестах производительности, часть 2. #10773 (alexey-milovidov).
- Исправлены ошибки в тестах производительности. #10766 (alexey-milovidov).
- Обновлены кросс-сборки для использования компилятора clang-10. #10724 (Ivan).
- Обновлена инструкция по установке RPM-пакетов. Изменение предложено Денисом (логин в Telegram: @ldviolet) и реализовано Аркадием Шейном. #10707 (alexey-milovidov).
- Исправление теста
tests/queries/0_stateless/01246_insert_into_watch_live_view.py. #10670 (vzakaznikov). - Исправлен и повторно включён тест 00979_live_view_watch_continuous_aggregates.py. #10658 (vzakaznikov).
- Исправлена проблема OOM в стресс-тесте ASan. #10646 (alexey-milovidov).
- Исправлено сообщение UBSan (прибавление нуля к nullptr) в HashTable, которое появилось после миграции на clang-10. #10638 (alexey-milovidov).
- Удалён внешний вызов компоновщика
ld(bfd) при обработке tzdata во время компиляции. #10634 (alesapin). - Добавлена возможность использовать
lldдля компоновки блобов (ресурсов). #10632 (alexey-milovidov). - Исправлено предупреждение UBSan в библиотеке
LZ4. #10631 (alexey-milovidov). См. также https://github.com/lz4/lz4/issues/857 - Обновлён LZ4 до последней ветки разработки (dev). #10630 (alexey-milovidov).
- Добавлен автоматически сгенерированный машиночитаемый файл со списком стабильных версий. #10628 (alexey-milovidov).
- Исправлена проверка версии
capnprotoдляcapnp::UnalignedFlatArrayMessageReader. #10618 (Matwey V. Kornilov). - Снижено потребление памяти в тестах. #10617 (alexey-milovidov).
- Исправление жестко прописанных тайм-аутов в новых тестах Live View. #10604 (vzakaznikov).
- Увеличен таймаут при открытии клиента в tests/queries/0_stateless/helpers/client.py. #10599 (vzakaznikov).
- Включён ThinLTO для сборок Clang; продолжение #10435. #10585 (Amos Bird).
- Добавлены фаззеры и выполнена подготовка к интеграции с oss-fuzz. #10546 (kyprizel).
- Исправлена сборка для FreeBSD. #10150 (Ivan).
- Добавлена новая сборка для тестирования запросов с использованием фреймворка pytest. #10039 (Ivan).
Релиз ClickHouse v20.4
Релиз ClickHouse v20.4.8.99-stable 2020-08-10
Исправление ошибки
- Исправлена ошибка в функции
parseDateTimeBestEffort, которая возникала при передаче значения Unix timestamp в качестве аргумента. Это устраняет #13362. #13441 (alexey-milovidov). - Исправлены потенциальные проблемы с низкой производительностью и слегка некорректные результаты агрегатных функций
uniqExact,topK,sumDistinctи подобных, вызываемых для типов Float со значениями NaN. Это также приводило к срабатываниюassertв отладочной сборке. Это исправляет #12491. #13254 (alexey-milovidov). - Исправлена работа функции if с nullable constexpr в качестве условия, которое не является литералом NULL. Исправляет #12463. #13226 (alexey-milovidov).
- Исправлено срабатывание
assertв функцииarrayElementв случае, когда элементы массива имеют тип Nullable и индекс массива также имеет тип Nullable. Это исправляет #12172. #13224 (alexey-milovidov). - Исправлен некорректный анализ индекса при использовании функций. Это могло приводить к ошибочному отсечению частей данных при чтении из таблиц
MergeTree. Исправляет #13060. Исправляет #12406. #13081 (Anton Popov). - Исправлено избыточное ограничение числа потоков для выборок из локальной реплики. #12840 (Nikolai Kochetov).
- Исправлена возможная лишняя строка с переполнением, которая могла появляться в результатах запросов
WITH TOTALS. #12747 (Nikolai Kochetov). - Исправлена проблема с производительностью при работе с большими кортежами, которые в конструкции
INинтерпретируются как функции. На случай, когда по какой-то непонятной причине пользователь пишетWHERE x IN tuple(1, 2, ...)вместоWHERE x IN (1, 2, ...). #12700 (Anton Popov). - Исправлено отслеживание памяти для
input_format_parallel_parsing(за счёт присоединения потока к группе). #12672 (Azat Khuzhin). - Исправлено: теперь допускается проталкивание предиката, когда подзапрос содержит предложение WITH. #12293 #12663 (Winter Zhang).
- Исправлена #10572 ошибка в индексе фильтра Блума при использовании константного выражения. #12659 (Winter Zhang).
- Исправлено падение (
SIGSEGV) вStorageKafka, возникающее при недоступности брокера и в других случаях. #12658 (Azat Khuzhin). - Добавлена поддержка функции
ifс аргументами типаArray(UUID), что исправляет проблему #11066. #12648 (alexey-milovidov). - Исправлена гонка состояний во внешних словарях с layout'ом cache, которая могла приводить к сбою сервера. #12566 (alesapin).
- Удалены данные для таблиц типа Distributed (блоки, поступившие из асинхронных операторов INSERT) при выполнении DROP TABLE. #12556 (Azat Khuzhin).
- Исправлена ошибка, из-за которой старые части данных повреждались после запроса
ALTER DELETEприenable_mixed_granularity_parts=1. Исправлена #12536. #12543 (alesapin). - Улучшено сообщение об ошибке для функции
inпри неверном числе аргументов. #12529 (Anton Popov). - Исправлена проблема производительности при чтении из компактных частей. #12492 (Anton Popov).
- Исправлен сбой в
JOINсо словарём, когда соединение выполняется по выражению над ключом словаря:t JOIN dict ON expr(dict.id) = t.id. Для этого случая отключена оптимизация соединения со словарём. #12458 (Artem Zuikov). - Исправлена возможная ошибка сегментации (segfault) при использовании StorageMerge. Closes #12054. #12401 (tavplubix).
- Исправлен порядок столбцов в модификаторе
WITH FILL. Ранее порядок столбцов в оператореORDER BYне учитывался. #12306 (Anton Popov). - Избегает возникновения исключения «bad cast» при наличии выражения, которое фильтрует данные по виртуальным столбцам (таким как
_tableв таблицахMerge) или по столбцам индексов в системных таблицах, например при фильтрации по имени базы данных при запросе кsystem.tables, если это выражение возвращает типNullable. Исправляет #12166. #12305 (alexey-milovidov). - Показывать ошибку при неудачной загрузке TrieDictionary. #12290 (Vitaly Baranov).
- Функция
arrayFillнекорректно работала для пустых массивов, что могло приводить к сбоям. Это исправляет #12263. #12279 (alexey-milovidov). - Реализованы преобразования к общему типу для типов
LowCardinality. Это позволяет выполнять операцию UNION ALL над таблицами со столбцами типаLowCardinalityи столбцами других типов. Исправляет #8212. Исправляет #4342. #12275 (alexey-milovidov). - Исправлено поведение, при котором при нескольких последовательных вставках в
StorageFileзаголовок для некоторых специальных типов записывался несколько раз. Это исправило #6155. #12197 (Nikita Mikhaylov). - Исправлены логические функции для значений типа UInt8 в случаях, когда они не равны 0 или 1. #12196 (Alexander Kazakov).
- Лимит max_memory_usage* ограничен объёмом резидентной памяти процесса. #12182 (Azat Khuzhin).
- Исправлена проверка аргументов
dictGetпри устранении инъективных функций из GROUP BY. #12179 (Azat Khuzhin). - Не разделяйте имя таблицы источника словаря на схему и собственно имя таблицы, если ODBC‑подключение не поддерживает схемы. #12165 (Vitaly Baranov).
- Исправлена некорректная логика в
ALTER DELETE, которая приводила к удалению записей, когда условие оценивалось как NULL. Это исправляет #9088. Это закрывает #12106. #12153 (alexey-milovidov). - Исправлено преобразование запроса, отправляемого во внешние СУБД (например, MySQL, ODBC) при наличии псевдонимов. Это исправляет #12032. #12151 (alexey-milovidov).
- Исправлено потенциальное переполнение при целочисленном делении. Это исправляет #12119. #12140 (alexey-milovidov).
- Исправлена потенциальная возможность бесконечного цикла в
greatCircleDistanceиgeoDistance. Это устраняет #12117. #12137 (alexey-milovidov). - Нормализована обработка pid-файла. В предыдущих версиях сервер мог отказаться запускаться, если он был принудительно завершён без корректного выключения и при этом существовал другой процесс с тем же pid, что и у ранее запущенного экземпляра сервера. Кроме того, pid-файл мог быть удалён при неудачном запуске сервера, даже если другой сервер продолжал работать. Это исправляет #3501. #12133 (alexey-milovidov).
- Исправлена обработка зависимости таблицы с движком ENGINE=Dictionary от словаря. Тем самым исправлены #10994 и #10397. #12116 (Vitaly Baranov).
- Исправлена проблема с производительностью запросов
SELECTсUNION, вызванная неверным ограничением на общее число потоков. Исправлено #12030. #12103 (Nikolai Kochetov). - Исправлен segfault при работе с комбинаторами
-StateResample. #12092 (Anton Popov). - Исправлены случаи, когда метрики
result_rowsиresult_bytesвsystem.quey_logдля запросов SELECT были пустыми. Исправляет #11595. #12089 (Nikolai Kochetov). - Устранено ненужное ограничение на число потоков для запросов
SELECTкVIEW. Исправлена #11937. #12085 (Nikolai Kochetov). - Исправлена возможная аварийная остановка при использовании некорректного типа для
PREWHERE. Исправлены #12053, #12060. #12060 (Nikolai Kochetov). - Исправлена ошибка
Expected single dictionary argument for functionпри использовании функцииdefaultValueOfArgumentTypeс типомLowCardinality. Исправляет #11808. #12056 (Nikolai Kochetov). - Исправлена ошибка
Cannot capture columnдля функций высшего порядка с аргументомTuple(LowCardinality), тем самым исправлена #9766. #12055 (Nikolai Kochetov). - Теперь разбор метаданных таблиц при загрузке базы данных выполняется параллельно. Это устраняет проблему медленного запуска сервера при большом количестве таблиц. #12045 (tavplubix).
- Агрегатная функция
topKтеперь возвращает Enum для типов Enum. Это исправляет #3740. #12043 (alexey-milovidov). - Исправлена проверка ограничений: теперь она убеждается, что ограничение является константным выражением. Это исправляет #11360. #12042 (alexey-milovidov).
- Исправлено некорректное сравнение кортежей со столбцами типа
Nullable. Исправлена ошибка #11985. #12039 (Nikolai Kochetov). - Исправлен расчёт прав доступа, когда allow_introspection_functions=0. #12031 (Vitaly Baranov).
- Исправлены некорректный результат и потенциальное аварийное завершение работы при вызове функции
ifс аргументами типаFixedStringразличных размеров. Это исправляет #11362. #12021 (alexey-milovidov). - Запрос, в котором функция
neighborявляется единственным возвращаемым выражением, может вернуть пустой результат при вызове функции со смещением-9223372036854775808. Это исправляет #11367. #12019 (alexey-milovidov). - Исправлен расчёт прав доступа при allow_ddl=0. #12015 (Vitaly Baranov).
- Исправлено потенциальное переполнение размера массива в функции
generateRandom, которое могло приводить к падению. Это исправляет #11371. #12013 (alexey-milovidov). - Исправлено потенциальное исключение с плавающей запятой. Это закрывает #11378. #12005 (alexey-milovidov).
- Исправлено неверное имя настройки в сообщении журнала при запуске сервера. #11997 (alexey-milovidov).
- Исправлена ошибка
Query parameter was not setв форматеValues. Исправлена проблема #11918. #11936 (tavplubix). - Сохранять алиасы при подстановках в запрос (параметризованные запросы). Исправляет #11914. #11916 (alexey-milovidov).
- Исправлена ошибка, из-за которой не выполнялись перемещения при изменении политики хранения с политики по умолчанию на другую. #11893 (Vladimir Chebotarev).
- Исправлено потенциальное исключение с плавающей точкой при разборе
DateTime64. Это исправляет #11374. #11875 (alexey-milovidov). - Исправлен учёт памяти в HTTP-интерфейсе (может быть значимым при
wait_end_of_query=1). #11840 (Azat Khuzhin). - Разбирать метаданные, хранящиеся в ZooKeeper, прежде чем выполнять проверку на равенство. #11739 (Azat Khuzhin).
Улучшение производительности
- Индекс не использовался для оператора IN с литералами, регрессия производительности возникла примерно в v19.3. Это исправляет #10574. #12062 (nvartolomei).
Улучшения сборки/тестирования/упаковки
- Установить
ca-certificatesперед первымapt-get updateв Dockerfile. #12095 (Ivan Blinkov).
Релиз ClickHouse v20.4.6.53-stable 2020-06-25
Исправление ошибки
- Исправлен редкий сбой, возникавший при использовании столбца типа
Nullableв условии PREWHERE. Продолжение #11608. #11869 (Nikolai Kochetov). - Запрещено использование arrayJoin внутри функций высшего порядка. Оно приводило к нарушению синхронизации протокола. Это исправляет #3933. #11846 (alexey-milovidov).
- Исправлена ошибка при сравнении
FixedStringс константой типаString. Исправление закрывает #11393. Ошибка появилась в версии 20.4. #11828 (alexey-milovidov). - Исправлен неверный результат функции
if()при наличии значений NULL в условии. #11807 (Artem Zuikov). - Исправлена проблема чрезмерного использования потоков при выполнении запросов. #11788 (Nikolai Kochetov).
- Исправлено неожиданное поведение запросов вида
SELECT *, xyz.*, которые выполнялись успешно, хотя должна была возникать ошибка. #11753 (hexiaoting). - Теперь операции fetch реплик будут отменяться во время изменения метаданных. #11744 (alesapin).
- Исправлена ошибка LOGICAL_ERROR, вызванная некорректным выводом типов сложных литералов во входном формате Values. #11732 (tavplubix).
- Исправлено поведение
ORDER BY ... WITH FILLнад константными столбцами. #11697 (Anton Popov). - Передавать корректные значения таймаутов при взаимодействии с мостом XDBC. Ранее таймауты не учитывались при проверке его работоспособности и получении метаинформации. #11690 (alexey-milovidov).
- Исправлено использование
LIMIT n WITH TIESсовместно с операторомORDER BY, содержащим псевдонимы. #11689 (Anton Popov). - Исправлена ошибка, приводившая к некорректному состоянию
system.mutations. Она могла показывать, что вся мутация уже завершена, хотя на сервере все еще оставались задачиMUTATE_PARTв очереди репликации, и он продолжал пытаться их выполнить. Это исправляет #11611. #11681 (alesapin). - Добавлена поддержка регулярных выражений с флагами без учета регистра. Что исправляет #11101 и #11506. #11649 (alexey-milovidov).
- Удалена оптимизация для тривиального запроса
count, если включена построчная безопасность (row-level security). В предыдущих версиях пользователь получал общее количество записей в таблице вместо отфильтрованного количества. Это исправляет #11352. #11644 (alexey-milovidov). - Исправлены блум-фильтры для типа String (индексы пропуска данных). #11638 (Azat Khuzhin).
- Исправлен редкий сбой, вызванный использованием столбца
Nullableв условииPREWHERE. (Вероятно, это как‑то связано с #11572). #11608 (Nikolai Kochetov). - Исправлена ошибка
Block structure mismatchдля запросов с выборочным чтением из таблицыBuffer. #11602 (Nikolai Kochetov). - Исправлен неверный код выхода clickhouse-client при exception.code() % 256 = 0. #11601 (filimonov).
- Исправлена тривиальная ошибка в сообщении журнала при запуске сервера («Mark cache size was lowered»). Это закрывает #11399. #11589 (alexey-milovidov).
- Исправлена ошибка
Size of offsets does not match size of columnв запросах сPREWHERE column in (subquery)иARRAY JOIN. #11580 (Nikolai Kochetov). - Исправлен редкий сегфолт в
SHOW CREATE TABLE. Исправляет #11490. #11579 (tavplubix). - Все запросы в рамках одной HTTP-сессии имели одинаковый query_id. Исправлено. #11578 (tavplubix).
- Теперь docker-контейнер с clickhouse-server будет отдавать предпочтение IPv6 при проверке доступности сервера. #11550 (Ivan Starkov).
- Исправлены значения
shard_num/replica_numдля<node>, из-за чего некорректно работалuse_compact_format_in_distributed_parts_names. #11528 (Azat Khuzhin). - Исправлена гонка, которая могла приводить к исключению при удалении таблицы. Решение немного нетривиальное, но абсолютно безопасное. Если хотите объяснение, просто напишите мне в Telegram. #11523 (alesapin).
- Исправлена утечка памяти, возникающая при возникновении исключения в процессе агрегирования с функциями
-State. Это исправление закрывает #8995. #11496 (alexey-milovidov). - Если индекс пропуска данных зависит от столбцов, которые будут изменяться во время фонового слияния (для SummingMergeTree, AggregatingMergeTree, а также для TTL GROUP BY), он вычислялся некорректно. Эта проблема исправлена переносом вычисления индекса на этап после слияния, чтобы индекс вычислялся по объединённым данным. #11162 (Azat Khuzhin).
- Удалить старые патчи для libunwind. https://github.com/ClickHouse-Extras/libunwind/commit/500aa227911bd185a94bfc071d68f4d3b03cb3b1#r39048012 Это позволяет отключить
-fno-omit-frame-pointerв сборкахclang, что в среднем улучшает производительность как минимум на 1%. #10761 (Amos Bird). - Исправлена работа первичного ключа, обернутого в функцию, при использовании модификатора 'FINAL' и оптимизации 'ORDER BY'. #10715 (Anton Popov).
Улучшения сборки/тестирования/упаковки
- Исправлено несколько незначительных ошибок в модульных тестах. #11262 (alesapin).
- Исправлено ложное срабатывание MSan в MergeTreeIndexFullText. Проблема впервые появилась в #9968. #10801 (alexey-milovidov).
Релиз ClickHouse v20.4.5.36-stable от 2020-06-10
Исправление ошибок
- Исправлена ошибка
Data compressed with different methods, которая могла возникать при включённомmin_bytes_to_use_direct_io, когда PREWHERE активен и используется SAMPLE или большое число потоков. Это исправляет #11539. #11540 (alexey-milovidov). - Исправлено возвращаемое кодеками значение сжатого размера. #11448 (Nikolai Kochetov).
- Исправлена ошибка, приводившая к падению сервера, когда у столбца задан кодек сжатия с нелитеральными аргументами. Исправляет #11365. #11431 (alesapin).
- Исправлена функция pointInPolygon при использовании NaN в качестве точки. Исправляет проблему #11375. #11421 (Alexey Ilyukhov).
- Исправлена потенциальная попытка чтения неинициализированной памяти при завершении работы MergeTree, если таблица не была успешно создана. #11420 (alexey-milovidov).
- Исправлена функция geohashesInBox для аргументов, выходящих за допустимый диапазон широты/долготы. #11403 (Vasily Nemkov).
- Исправлена возможная ошибка
Pipeline stuckдля запросов с внешней сортировкой и LIMIT. Исправление для #11359. #11366 (Nikolai Kochetov). - Удалена лишняя блокировка при отправке частей в ReplicatedMergeTree. #11354 (alesapin).
- Исправлена работа
\G(вертикальный вывод) в многострочном режиме clickhouse-client. Это закрывает #9933. #11350 (alexey-milovidov). - Исправлена потенциальная ошибка сегментации при использовании базы данных
Lazy. #11348 (alexey-milovidov). - Исправлен сбой в
quantilesExactWeightedArray. #11337 (Nikolai Kochetov). - Теперь слияния останавливаются перед изменением метаданных в запросах
ALTER. #11335 (alesapin). - Снова сделана параллельной запись в
MATERIALIZED VIEWпри настройкеparallel_view_processing = 1. Исправляет #10241. #11330 (Nikolai Kochetov). - Исправлена обработка visitParamExtractRaw, когда извлечённый JSON содержит строки с несбалансированными символами { или [. #11318 (Ewout).
- Исправлено очень редкое состояние гонки в ThreadPool. #11314 (alexey-milovidov).
- Исправлена незначительная гонка данных в clickhouse-copier. Обнаружена интеграционными тестами. #11313 (alexey-milovidov).
- Исправлена возможная работа с неинициализированной памятью при преобразовании. Пример:
SELECT toIntervalSecond(now64()). #11311 (alexey-milovidov). - Исправлена проблема, при которой анализ индекса не работал, если первичный ключ таблицы содержит столбец типа Array и запрос фильтрует по этому столбцу с использованием функций
emptyилиnotEmpty. Это исправляет #11286. #11303 (alexey-milovidov). - Исправлена ошибка, при которой оценка скорости выполнения запроса могла быть некорректной, и ограничение
min_execution_speedмогло не работать или работать неправильно, если запрос ограничивается настройкамиmax_network_bandwidth,max_execution_speedилиpriority. Изменено значение по умолчанию дляtimeout_before_checking_execution_speedна ненулевое, потому что иначе настройкиmin_execution_speedиmax_execution_speedне оказывают никакого влияния. Это исправляет #11297. Это исправляет #5732. Это исправляет #6228. Улучшено удобство использования: устранено объединение сообщения об исключении с индикатором прогресса вclickhouse-client. #11296 (alexey-milovidov). - Исправлен сбой при вызове SET DEFAULT ROLE с некорректными аргументами. Это устраняет #10586. #11278 (Vitaly Baranov).
- Исправлена ошибка, приводившая к сбою при чтении некорректных данных в формате Protobuf. Тем самым исправлены #5957 и #11203. #11258 (Vitaly Baranov).
- Исправлена ошибка, из-за которой cache-dictionary мог возвращать значение по умолчанию вместо корректного (когда все ключи просрочены). Это затрагивает только строковые поля. #11233 (Nikita Mikhaylov).
- Исправлена ошибка
Block structure mismatch in QueryPipelineпри чтении изVIEWс константами во внутреннем запросе. Исправление для #11181. #11205 (Nikolai Kochetov). - Исправлено возможное исключение
Invalid status for associated output. #11200 (Nikolai Kochetov). - Исправлена возможная ошибка
Cannot capture columnдля функций высшего порядка, использующих захваченный аргумент типаArray(Array(LowCardinality)). #11185 (Nikolai Kochetov). - Исправлена обработка шаблонов S3 (globbing), которая могла приводить к сбоям при наличии более чем 1000 ключей, а также на некоторых бэкендах. #11179 (Vladimir Chebotarev).
- Если индекс пропуска данных зависит от столбцов, которые будут изменены во время фонового слияния (для SummingMergeTree, AggregatingMergeTree, а также для TTL GROUP BY), он вычислялся некорректно. Эта проблема исправлена тем, что вычисление индекса перенесено на этап после слияния, чтобы индекс рассчитывался по уже объединённым данным. #11162 (Azat Khuzhin).
- Исправлена проблема с производительностью Kafka, связанная с перепланировками на основе лимитов, которые всегда применялись. #11149 (filimonov).
- Исправление зависания, которое иногда происходило при выполнении DROP таблицы с движком
Kafka(или при перезапуске сервера). #11145 (filimonov). - Исправлено чрезмерное резервирование потоков для простых запросов (оптимизация по снижению количества потоков, частично нарушенная после изменений в конвейере). #11114 (Azat Khuzhin).
- Исправлена оптимизация предикатов для распределённых запросов (
enable_optimize_predicate_expression=1) в запросах с секциейHAVING(т.е. когда требуется фильтрация на сервере-инициаторе) за счёт сохранения порядка выражений, чего достаточно для устранения проблемы, а также за счёт принудительного использования агрегатором имён столбцов вместо индексов. Исправляет: #10613, #11413. #10621 (Azat Khuzhin).
Улучшения сборки/тестирования/упаковки
Релиз ClickHouse v20.4.4.18-stable 2020-05-26
Изменений по сравнению с v20.4.3.16-stable нет.
Релиз ClickHouse v20.4.3.16-stable 2020-05-23
Исправление ошибок
- Удалено логирование при финализации мутаций, если в результате ничего не было финализировано. #11109 (alesapin).
- Исправлена утечка памяти в
registerDiskS3. #11074 (Pavel Kovalenko). - Исправлена возможная потеря данных при остановке таблицы с движком Kafka. #11048 (filimonov).
- Исправлены ошибки при обработке аргументов функции
parseDateTime64BestEffort. #11038 (Vasily Nemkov). - Исправлена крайне редкая потенциальная ошибка типа use-after-free в
MergeTree, возникавшая, если таблица не была успешно создана. #10986, #10970 (alexey-milovidov). - Исправлена обработка метаданных (относительный путь для переименования) и данных (относительный путь для символьной ссылки) для базы данных Atomic. #10980 (Azat Khuzhin).
- Исправлен сбой сервера при одновременном выполнении запросов
ALTERиDROP DATABASEс движком базы данныхAtomic. #10968 (tavplubix). - Исправлен неверный размер сырых данных в методе
getRawData(). #10964 (Igr). - Исправлена несовместимость двухуровневой агрегации между версиями 20.1 и более ранними. Эта несовместимость возникает, когда на инициирующем узле и удалённых узлах используются разные версии ClickHouse, размер результата GROUP BY большой, а агрегация выполняется по одному полю типа String. Это приводит к появлению нескольких необъединённых строк для одного и того же ключа в результате. #10952 (alexey-milovidov).
- Исправлена передача частично записанных файлов через
DistributedBlockOutputStream. #10940 (Azat Khuzhin). - Исправлено падение при выполнении
SELECT count(notNullIn(NULL, [])). #10920 (Nikolai Kochetov). - Исправлено зависание, которое иногда происходило во время выполнения операции
DROPтабличного движкаKafka(или при перезапусках сервера). #10910 (filimonov). - Исправлена проблема, из-за которой было невозможно выполнять несколько
ALTER RENAME, таких какa TO b, c TO a. #10895 (alesapin). - Исправлена возможная гонка, которая могла возникать при получении результата состояния агрегатной функции в нескольких потоках для одного и того же столбца. Единственный способ, при котором это может произойти, — использование функции
finalizeAggregationпри чтении из таблицы с движкомMemory, хранящим состояниеAggregateFunctionдля функцийquantile*. #10890 (Nikolai Kochetov). - Исправлена обратная совместимость с кортежами в таблицах Distributed. #10889 (Anton Popov).
- Исправлено возникновение
SIGSEGVвStringHashTable, если запрашиваемого ключа не существует. #10870 (Azat Khuzhin). - Исправлены зависания
WATCHпосле удаления таблицыLiveViewиз базы данных с движкомAtomic. #10859 (tavplubix). - Исправлена ошибка в
ReplicatedMergeTree, которая могла приводить к зависанию некоторых запросовALTERсOPTIMIZEв ожидании реплики, уже ставшей неактивной. #10849 (tavplubix). - Теперь ограничения обновляются при переименовании столбца, участвующего в выражении
CONSTRAINT. Исправлено #10844. #10847 (alesapin). - Исправлено потенциальное чтение неинициализированной памяти в кеш-словаре. #10834 (alexey-milovidov).
- Исправлен порядок столбцов после
Block::sortColumns(). #10826 (Azat Khuzhin). - Исправлена проблема с мостом
ODBC, возникавшая, когда не требовалось заключать идентификаторы в кавычки. Исправляет #7984. #10821 (alexey-milovidov). - Исправлены отчёты
UBSanиMSanдляDateLUT. #10798 (alexey-milovidov). - Исправлено некорректное приведение типов в условиях по ключу. Исправляет #6287. #10791 (Andrew Onyshchuk).
- Исправлено поведение
parallel_view_processing. Теперь все без исключения вставки вMATERIALIZED VIEWдолжны завершаться, даже если произошло исключение. Исправляет #10241. #10757 (Nikolai Kochetov). - Исправлены комбинаторы
-OrNullи-OrDefaultпри совместном использовании с-State. #10741 (hcz). - Исправлено потенциальное переполнение буфера в функции
h3EdgeAngle. #10711 (alexey-milovidov). - Исправлена ошибка, из-за которой блокировались одновременные ALTER-запросы при большом количестве частей таблицы. #10659 (alesapin).
- Исправлено разыменование
nullptrвStorageBuffer, которое происходило, если сервер завершал работу до запуска таблицы. #10641 (alexey-milovidov). - Исправлена работа
optimize_skip_unused_shardsсLowCardinality. #10611 (Azat Khuzhin). - Исправлена обработка условной переменной для синхронных мутаций. В некоторых случаях сигналы этой условной переменной могли теряться. #10588 (Vladimir Chebotarev).
- Исправлено возможное падение при вызове
createDictionary()до завершения выполненияloadStoredObject(). #10587 (Vitaly Baranov). - Исправлен
SELECTдля столбцаALIAS, у которого тип выражения по умолчанию отличался от типа столбца. #10563 (Azat Khuzhin). - Реализовано сравнение значений типов DateTime64 и String. #10560 (Vasily Nemkov).
- Отключить по умолчанию оптимизацию
GROUP BYпоsharding_key(optimize_distributed_group_by_sharding_keyранее была добавлена и сразу отключена по умолчанию из‑за сложности анализа ключа шардирования, простой пример — использованиеifв ключе шардирования) и исправить её дляWITH ROLLUP/CUBE/TOTALS. #10516 (Azat Khuzhin). - Исправлена #10263. #10486 (Azat Khuzhin).
- Добавлены тесты по настройке
max_rows_to_sort. #10268 (alexey-milovidov). - Добавлена обратная совместимость для операции создания индекса Bloom-фильтра. #10551. #10569 (Winter Zhang).
Релиз ClickHouse v20.4.2.9, 2020-05-12
Изменение, нарушающее обратную совместимость
- Системные таблицы (например, system.query_log, system.trace_log, system.metric_log) используют компактный формат частей данных для частей размером меньше 10 MiB. Компактный формат частей данных поддерживается начиная с версии 20.3. Если вы планируете перейти на версию ниже 20.3, вам следует вручную удалить данные таблиц системных логов в
/var/lib/clickhouse/data/system/. - Когда сравнение строк включает FixedString и сравниваемые аргументы имеют разный размер, сравнение выполняется так, как если бы более короткая строка была дополнена пробелами до длины более длинной. Это сделано для совместимости с SQL, если представить, что тип данных FixedString соответствует SQL CHAR. Это решает проблему #9272. #10363 (alexey-milovidov)
- Команда SHOW CREATE TABLE теперь выводит результат в несколько строк. Теперь он более читабелен и больше похож на MySQL. #10049 (Azat Khuzhin)
- Добавлена настройка
validate_polygons, которая используется в функцииpointInPolygonи по умолчанию включена. #9857 (alexey-milovidov)
Новая функция
- Добавлена поддержка защищённого соединения из ClickHouse к Zookeeper #10184 (Konstantin Lebedev)
- Добавлена поддержка пользовательских HTTP-обработчиков. Описание см. в #5436. #7572 (Winter Zhang)
- Добавлен формат MessagePack для ввода/вывода. #9889 (Kruglov Pavel)
- Добавлен формат ввода Regexp. #9196 (Kruglov Pavel)
- Добавлен формат вывода
Markdownдля встраивания таблиц в документы в формате Markdown. #10317 (Kruglov Pavel) - Добавлена поддержка пользовательского раздела настроек в словарях. Также исправлена ошибка #2829. #10137 (Artem Streltsov)
- Добавлена поддержка пользовательских настроек в DDL-запросах
CREATE DICTIONARY#10465 (Artem Streltsov) - Добавлен простой глобальный профилировщик памяти сервера, который собирает контексты выделения при превышении сервером очередного порога выделения памяти. #10444 (alexey-milovidov)
- Добавлена настройка
always_fetch_merged_part, которая ограничивает реплику: она не выполняет локальное слияние частей и всегда предпочитает загружать их с других реплик. #10379 (alesapin) - Добавлена функция
JSONExtractKeysAndValuesRaw, которая извлекает сырые данные из JSON-объектов #10378 (hcz) - Добавлен учет использования памяти ОС в
system.asynchronous_metrics. #10361 (alexey-milovidov) - Добавлены обобщённые версии функций
leastиgreatest. Теперь они работают с произвольным числом аргументов произвольного типа. Это исправляет #4767 #10318 (alexey-milovidov) - Теперь ClickHouse со своей стороны управляет таймаутами источников словарей. В конфигурацию кэш-словаря добавлены две новые настройки:
strict_max_lifetime_seconds, которая по умолчанию равнаmax_lifetime, иquery_wait_timeout_milliseconds, которая по умолчанию равна одной минуте. Первая настройка также полезна вместе сallow_read_expired_keys(чтобы запретить чтение сильно устаревших ключей). #10337 (Nikita Mikhaylov) - Добавлен параметр
log_queries_min_typeдля фильтрации записей, которые будут попадать вquery_log#10053 (Azat Khuzhin) - Добавлена функция
isConstant. Эта функция проверяет, является ли её аргумент константным выражением и возвращает 1 или 0. Она предназначена для использования при разработке, отладке и в демонстрационных целях. #10198 (alexey-milovidov) - Добавлена joinGetOrNull для возврата NULL при отсутствии ключа вместо возврата значения по умолчанию. #10094 (Amos Bird)
- Считать
NULLравнымNULLв оператореIN, если включена опцияtransform_null_in. #10085 (achimbab) - Добавлен оператор
ALTER TABLE ... RENAME COLUMNдля семейства движков таблиц MergeTree. #9948 (alesapin) - Добавлена поддержка параллельного распределённого INSERT SELECT. #9759 (vxider)
- Добавлена возможность выполнять запросы к Distributed поверх Distributed (без
distributed_group_by_no_merge) ... #9923 (Azat Khuzhin) - Добавлена функция
arrayReduceInRanges, которая агрегирует элементы массива в заданных диапазонах. #9598 (hcz) - Добавлен статус словаря в экспортёр Prometheus. #9622 (Guillaume Tassery)
- Добавлена функция
arrayAUC#8698 (taiyang-li) - Поддержка оператора
DROP VIEWдля повышения совместимости с TPC-H. #9831 (Amos Bird) - Добавлена опция 'strict_order' для windowFunnel() #9773 (achimbab)
- Добавлена поддержка операторов SQL
DATEиTIMESTAMP, напримерSELECT date '2001-01-01'#9691 (Artem Zuikov)
Экспериментальная функция
- Добавлен экспериментальный движок базы данных Atomic. Он поддерживает неблокирующие запросы
DROPиRENAME TABLE, а также атомарный запросEXCHANGE TABLES t1 AND t2#7512 (tavplubix) - Добавлена начальная поддержка ReplicatedMergeTree поверх S3 (пока работает неоптимально) #10126 (Pavel Kovalenko)
Исправление ошибки
- Исправлены некорректные скалярные результаты во внутреннем запросе
MATERIALIZED VIEWдля случая, когда этот запрос содержал зависимую таблицу #10603 (Nikolai Kochetov) - Исправлена ошибка, из-за которой HTTP-запросы зависали при закрытии клиентом соединения, когда
readonly=2иcancel_http_readonly_queries_on_client_close=1. #10684 (tavplubix) - Исправлен segfault в StorageBuffer при генерации исключения во время запуска сервера. Исправляет #10550 #10609 (tavplubix)
- Запрос
SYSTEM DROP DNS CACHEтеперь также очищает кэши, используемые для проверки, разрешено ли пользователю подключаться с определённых IP-адресов #10608 (tavplubix) - Исправлено использование нескольких операторов
INс одним и тем же набором значений в одном запросе. Исправлены #10539 #10686 (Anton Popov) - Исправлено падение функции
generateRandomпри работе с вложенными типами. Исправляет #10583. #10734 (Nikolai Kochetov) - Исправлена ошибка, приводившая к порче данных в ключевом столбце
LowCardinality(FixedString)вSummingMergeTree, которая могла возникнуть после слияния. Исправляет #10489. #10721 (Nikolai Kochetov) - Исправлена логика настройки параметра aggregation_memory_efficient_merge_threads. #10667 (palasonic1)
- Исправлена проблема исчезающих итогов. Итоговые строки могли отфильтровываться, если запрос содержал
JOINили подзапрос с внешним условиемWHERE. Исправляет #10674 #10698 (Nikolai Kochetov) - Исправлена проблема отсутствия параллельного выполнения удалённых запросов при включённом
distributed_aggregation_memory_efficient. Исправление для #10655 #10664 (Nikolai Kochetov) - Исправлено возможное некорректное количество строк в результатах запросов с
LIMIT. Исправлены #10566, #10709, #10660 (Nikolai Kochetov) - Исправлено повреждение индекса, которое в некоторых случаях возникало после слияния компактных частей в другую компактную часть. #10531 (Anton Popov)
- Исправлена проблема, когда мутация завершила все части, но зависла в состоянии
is_done=0. #10526 (alesapin) - Исправлено переполнение в начале эпохи Unix для часовых поясов с дробным смещением от UTC. Устранена проблема #9335. #10513 (alexey-milovidov)
- Улучшена диагностика для форматов ввода. Исправлены #10204 #10418 (tavplubix)
- Исправить числовое переполнение в
simpleLinearRegression()для больших целых чисел #10474 (hcz) - Исправлен use-after-free при остановке Distributed, больше не ожидается отправка всех пакетов #10491 (Azat Khuzhin)
- Добавить сертификаты удостоверяющих центров (CA) в Docker-образ clickhouse-server #10476 (filimonov)
- Исправлен редкий бесконечный цикл, который мог возникать при использовании функции
addressToLineили столбцов типа AggregateFunctionState. #10466 (Alexander Kuzmenkov) - Обработка ошибки ZooKeeper "no node error" при выполнении распределённого запроса #10050 (Daniel Chen)
- Исправлена ошибка, из-за которой сервер не мог подключить таблицу после изменения значения DEFAULT для столбца. #10441 (alesapin)
- Неявно приводить тип выражения значения по умолчанию к типу столбца для столбцов ALIAS #10563 (Azat Khuzhin)
- Не удалять каталог metadata, если
ATTACH DATABASEзавершается с ошибкой #10442 (Winter Zhang) - Устранена зависимость от системного tzdata. Исправлена загрузка часового пояса
Africa/Casablancaна CentOS 8. Исправлены #10211 #10425 (alexey-milovidov) - Исправлены некоторые проблемы, возникавшие при вставке данных с кворумом и их последующем удалении (DROP PARTITION, TTL и т. д.). Это могло приводить к зависанию операций INSERT или ложным исключениям при выполнении SELECT. Исправлены #9946 #10188 (Nikita Mikhaylov)
- Проверка количества и типов аргументов при создании индекса BloomFilter #9623 #10431 (Winter Zhang)
- Используйте
fallback_to_stale_replicasвместоskip_unavailable_shards, в противном случае, если заданы оба параметра и нет актуальных реплик, запрос завершится с ошибкой (патч от @alex-zaitsev) #10422 (Azat Khuzhin) - Исправлена ошибка, из-за которой запрос с ARRAY JOIN, ORDER BY и LIMIT мог возвращать неполный результат. Устраняет #10226. #10427 (Vadim Plakhtinskiy)
- Добавлено имя базы данных к имени словаря после операций DETACH/ATTACH. Исправлены таблица system.dictionaries и запрос
SYSTEM RELOAD#10415 (Azat Khuzhin) - Исправлен потенциально некорректный результат вычисления extremes в конвейере процессоров. #10131 (Nikolai Kochetov)
- Исправлена возможная ошибка сегментации при включённой настройке
distributed_group_by_no_merge(возникшая в версии 20.3.7.46 в #10131). #10399 (Nikolai Kochetov) - Исправлено некорректное разворачивание типов данных
Array(Tuple(...)). Исправлены #10259 #10390 (alexey-milovidov) - Исправлены имена константных столбцов внутри JOIN, которые могли конфликтовать по именам с константными столбцами вне JOIN #9950 (Alexander Kuzmenkov)
- Исправлен порядок столбцов после вызова Block::sortColumns() #10826 (Azat Khuzhin)
- Исправлена возможная ошибка
Pipeline stuckвConcatProcessor, которая могла возникать во время удалённого запроса. #10381 (Nikolai Kochetov) - Не выполняется резервирование диска для агрегаций. Исправляет #9241 #10375 (Azat Khuzhin)
- Исправлено некорректное поведение функций работы с датой и временем для часовых поясов, в которых смещение от UTC переходило между положительным и отрицательным значениями (например, Pacific/Kiritimati). Исправлены #7202 #10369 (alexey-milovidov)
- Предотвращён бесконечный цикл в функции
dictIsIn. Исправлена проблема #515 #10365 (alexey-milovidov) - По умолчанию отключена оптимизация GROUP BY по sharding_key и исправлена её работа для WITH ROLLUP/CUBE/TOTALS #10516 (Azat Khuzhin)
- Проверять код ошибки при проверке частей и не помечать часть как повреждённую, если ошибка вроде «not enough memory». Исправляет #6269 #10364 (alexey-milovidov)
- Показывать информацию о незагруженных словарях в системных таблицах. #10234 (Vitaly Baranov)
- Исправлено разыменование
nullptrвStorageBuffer, если сервер завершил работу до инициализации таблицы. #10641 (alexey-milovidov) - Исправлено условие гонки между
DROPиOPTIMIZEвReplicatedMergeTree.DROPмог оставлять мусор в пути реплики в ZooKeeper, если одновременно выполнялся запросOPTIMIZE. #10312 (tavplubix) - Исправлена ошибка 'Logical error: CROSS JOIN has expressions' для запросов с одновременным использованием соединений через запятую и соединений по именам. Исправлены #9910 #10311 (Artem Zuikov)
- Исправлена работа запросов с
max_bytes_before_external_group_by. #10302 (Artem Zuikov) - Исправлена проблема с ограничением максимальной глубины рекурсии парсера в некоторых случаях. Это исправление устраняет #10283. Исправление может привести к небольшой несовместимости: длинные и глубоко вложенные запросы через clickhouse-client могут перестать выполняться, и при необходимости следует скорректировать настройки
max_query_sizeиmax_parser_depth. #10295 (alexey-milovidov) - Добавлена возможность использования
count(*)с несколькими операциями JOIN. Исправляет #9853 #10291 (Artem Zuikov) - Исправлена ошибка
Pipeline stuck, возникавшая при использованииmax_rows_to_group_byиgroup_by_overflow_mode = 'break'. #10279 (Nikolai Kochetov) - Исправлена ошибка «Cannot add column» при создании словаря
range_hashedс помощью DDL‑запроса. Исправляет #10093. #10235 (alesapin) - Устранено редко возникающее исключение
Cannot drain connections: cancel first. #10239 (Nikolai Kochetov) - Исправлена ошибка, из-за которой ClickHouse выдавал сообщение об ошибке «Unknown function lambda.», когда пользователь пытался выполнить ALTER UPDATE/DELETE для таблиц с ENGINE = Replicated*. Проверка недетерминированных функций теперь корректно обрабатывает lambda-выражения. #10237 (Alexander Kazakov)
- Исправлена достаточно редкая ошибка сегментации в StorageSystemTables, возникающая при выполнении запроса SELECT ... FROM system.tables в базе данных, использующей движок Lazy. #10209 (Alexander Kazakov)
- Исправлено возможное бесконечное выполнение запроса в случае, когда он должен останавливаться по LIMIT при чтении из бесконечного источника, такого как
system.numbersилиsystem.zeros. #10206 (Nikolai Kochetov) - Исправлена функция "generateRandom" для типа Date. Это решает проблему #9973. Исправлен пограничный случай, когда даты с годом 2106 вставляются в таблицы MergeTree со старым стилем партиционирования, при этом партиции именуются годом 1970. #10218 (alexey-milovidov)
- Типы теперь приводятся, если определение таблицы представления не соответствует запросу SELECT. Это исправляет #10180 и #10022 #10217 (alexey-milovidov)
- Исправлена работа
parseDateTimeBestEffortдля строк в формате RFC-2822, когда день недели — вторник или четверг. Это исправляет #10082 #10214 (alexey-milovidov) - Исправлены имена константных столбцов внутри JOIN, которые могли приводить к конфликту с именами констант за пределами JOIN. #10207 (alexey-milovidov)
- Исправлена ошибка в оптимизации переноса в PREWHERE при наличии функций arrayJoin (в определённых случаях). Это исправляет #10092 #10195 (alexey-milovidov)
- Исправлена проблема с появлением разделителя в SCRAMBLE для нативного драйвера mysql-connector-java (JDBC) #10140 (BohuTANG)
- Исправлено использование текущей базы данных при проверке доступа, когда база данных не указана. #10192 (Vitaly Baranov)
- Исправлена операция ALTER для таблиц с компактными частями. #10130 (Anton Popov)
- Добавлена возможность ослабить ограничение на использование недетерминированных функций в мутациях с помощью настройки
allow_nondeterministic_mutations. #10186 (filimonov) - Исправлена ошибка, из-за которой выполнялся
DROP TABLEдля словаря #10165 (Azat Khuzhin) - Преобразовывать блоки, если их структура не совпадает при выполнении
INSERTв таблицу типа Distributed #10135 (Azat Khuzhin) - Количество строк некорректно фиксировалось в логе (как сумма по всем частям), когда вставляемый блок разбивался на части по ключу партиционирования. #10138 (alexey-milovidov)
- Добавлена проверка некоторых аргументов и поддержка идентификаторов в качестве аргументов для MySQL Database Engine #10077 (Winter Zhang)
- Исправлена некорректная проверка
index_granularity_bytesпри создании новой реплики. Исправляет проблему #10098. #10121 (alesapin) - Исправлена ошибка в запросе
CHECK TABLE, возникавшая, если таблица содержит skip-индексы. #10068 (alesapin) - Исправлена работа схемы Distributed-over-Distributed с единственным шардом во вложенной таблице #9997 (Azat Khuzhin)
- Исправлена возможная потеря строк для запросов с
JOINиUNION ALL. Исправляет #9826, #10113. ... #10099 (Nikolai Kochetov) - Исправлена ошибка в словаре при использовании локального сервера ClickHouse в качестве источника. Она могла приводить к повреждению памяти, если типы данных в словаре и источнике были несовместимы. #10071 (alesapin)
- Исправлена проблема с запуском реплицируемых таблиц при обновлении со старой версии ClickHouse, где отсутствует узел
/table/replicas/replica_name/metadata. Исправляет #10037. #10095 (alesapin) - Исправлена ошибка
Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransform. Она возникала при включённой настройкеdistributed_aggregation_memory_efficient, когда распределённый запрос читал агрегированные данные с сочетанием одно- и двухуровневой агрегации с разных шардов. #10063 (Nikolai Kochetov) - Исправлена взаимоблокировка при ошибке присоединения базы данных с материализованным представлением при старте #10054 (Azat Khuzhin)
- Исправлена ошибка сегментации, которая могла возникать при выполнении GROUP BY по строковым ключам с нулевыми байтами в конце (#8636, #8925). ... #10025 (Alexander Kuzmenkov)
- Исправлена ошибка, приводившая к неверным результатам распределённых запросов, когда псевдоним мог переопределять квалифицированное имя столбца. Исправляет #9672 #9714 #9972 (Artem Zuikov)
- Исправлена возможная взаимоблокировка в
SYSTEM RESTART REPLICAS#9955 (tavplubix) - Исправлено количество потоков, используемых для удалённого выполнения запроса (регрессия производительности, начиная с 20.3). Это происходило, когда запрос к таблице
Distributedвыполнялся одновременно на локальных и удалённых шардах. Исправлены #9965 #9971 (Nikolai Kochetov) - Исправлена логика
DeleteOnDestroyвATTACH PART, которая могла приводить к автоматическому удалению присоединённой части, и добавлено несколько тестов #9410 (Vladimir Chebotarev) - Исправлена ошибка, из-за которой DDL-запросы с
ON CLUSTERзависали при запуске сервера. #9927 (Gagan Arneja) - Исправлена ошибка, из-за которой на одном из этапов обработки запросов к некоторым базам данных не выбирались необходимые таблицы. Исправляет #9699. #9949 (achulkov2)
- Исправлена ошибка «Not found column in block» при использовании
JOINвместе сTOTALS. Исправляет #9839 #9939 (Artem Zuikov) - Исправлен разбор нескольких хостов, задаваемых в операторе CREATE USER #9924 (Vitaly Baranov)
- Исправлен
TRUNCATEдля движка таблицы Join (#9917). #9920 (Amos Bird) - Исправлено условие гонки между операциями DROP и OPTIMIZE в
ReplicatedMergeTree. #9901 (alesapin) - Исправлена работа
DISTINCTдля распределённых таблиц (Distributed), при включённом параметреoptimize_skip_unused_shards. #9808 (Azat Khuzhin) - Исправлена ошибка «scalar does not exist» в ALTER-запросах (#9878). ... #9904 (Amos Bird)
- Исправлена ошибка с квалифицированными именами при
distributed_product_mode=\'local\'. Устраняет #4756 и #9891 (Artem Zuikov) - Для запросов INSERT шарды теперь ограничивают настройки, полученные от инициатора, до своих допустимых значений вместо генерации исключения. Это исправление позволяет отправлять запросы INSERT на шард с иными ограничениями. Это изменение улучшает исправление #9447. #9852 (Vitaly Baranov)
- Добавлены повторные попытки при коммите смещений брокеру Kafka, поскольку он может отклонить коммит, если в течение
offsets.commit.timeout.msбыло доступно недостаточно реплик для топика__consumer_offsets#9884 (filimonov) - Исправлено поведение движка Distributed при использовании виртуальных столбцов базовой таблицы в
WHERE#9847 (Azat Khузhin) - Исправлены некоторые случаи, когда часовой пояс аргумента функции учитывался некорректно. #9574 (Vasily Nemkov)
- Исправлена ошибка 'Different expressions with the same alias' в запросе с PREWHERE и WHERE на распределённой таблице при установленном
SET distributed_product_mode = 'local'. #9871 (Artem Zuikov) - Исправлено чрезмерное потребление памяти при выполнении мутаций для таблиц со составным первичным ключом. Это исправляет #9850. #9860 (alesapin)
- Исправлен расчет прав доступа для функций интроспекции на основе настройки
allow_introspection_functions. #9840 (Vitaly Baranov) - Исправлен параметр max_distributed_connections (с и без Processors) #9673 (Azat Khuzhin)
- Исправлено возможное исключение
Got 0 in totals chunk, expected 1на стороне клиента. Оно возникало для запросов сJOINв случае, если таблица, присоединённая справа, не содержала ни одной строки. Пример:select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;. Исправляет #9777. ... #9823 (Nikolai Kochetov) - Исправлена ошибка 'COMMA to CROSS JOIN rewriter is not enabled or cannot rewrite query' в случае подзапросов с COMMA JOIN вне списков таблиц (например, в WHERE). Исправляет #9782 #9830 (Artem Zuikov)
- Исправлено падение сервера при включённом параметре
optimize_skip_unused_shards, когда выражение для ключа не может быть преобразовано к типу поля ключа #9804 (Azat Khuzhin) - Исправлена обработка пустой строки в
splitByString. #9767 (hcz) - Исправлен некорректно работавший запрос
ALTER TABLE DELETE COLUMNдля компактных партиций. #9779 (alesapin) - Исправлено отсутствие
rows_before_limit_at_leastпри выполнении запросов через HTTP (с конвейером процессоров). Исправляет #9730 #9757 (Nikolai Kochetov) - Устранено чрезмерное потребление памяти в запросах
ALTER(мутациях). Это исправляет #9533 и #9670. #9754 (alesapin) - Исправлена возможная постоянная ошибка с сообщением «Cannot schedule a task». #9154 (Azat Khuzhin)
- Исправлена ошибка в экранировании обратными кавычками в DDL внешних словарей. Ошибка #9619 устранена. #9734 (alesapin)
- Исправлена гонка данных в
text_log. Она не приводила ни к каким реальным ошибкам. #9726 (alexey-milovidov) - Исправлена ошибка в репликации, из-за которой репликация не работала, если пользователь выполнил мутации в предыдущей версии. Это исправляет #9645. #9652 (alesapin)
- Исправлены ошибочные внутренние имена функций
sumKahanиsumWithOverflow. Это приводило к исключению при использовании этих функций в удалённых запросах. #9636 (Azat Khuzhin) - Добавлена настройка
use_compact_format_in_distributed_parts_names, которая позволяет записывать файлы для запросовINSERTв таблицуDistributedв более компактном формате. Это исправляет #9647. #9653 (alesapin) - Исправлены операции RIGHT и FULL JOIN при использовании LowCardinality в ключах JOIN. #9610 (Artem Zuikov)
- Исправлены возможные исключения
Size of filter does not match size of columnиInvalid number of rows in ChunkвMergeTreeRangeReader. Они могли возникать при выполненииPREWHEREв отдельных случаях. #9612 (Anton Popov) - Добавлена поддержка выполнения команды
ALTER ON CLUSTERдля таблиц типа Distributed с внутренней репликацией. Исправляет #3268 #9617 (shinoi2) - Исправлена проблема, из-за которой часовой пояс не сохранялся при использовании простого арифметического выражения вроде
time + 1(в отличие от выраженияtime + INTERVAL 1 SECOND). Исправление связано с #5743 #9323 (alexey-milovidov)
Улучшение
- При сравнении
DateTimeсо строковым литералом теперь используется часовой пояс. Это исправляет #5206. #10515 (alexey-milovidov) - Выводить подробную диагностическую информацию, если значение Decimal не удаётся распарсить из текстового формата ввода. #10205 (alexey-milovidov)
- Добавлены метрики задач и памяти для пулов планировщика distributed/buffer #10449 (Azat Khuzhin)
- Отображать результат сразу, как только он готов, для запросов SELECT DISTINCT в clickhouse-local и HTTP-интерфейсе. Это исправляет #8951 #9559 (alexey-milovidov)
- Теперь можно использовать запрос
SAMPLE OFFSETвместоcityHash64(PRIMARY KEY) % N == nдля разбиения вclickhouse-copier. Чтобы воспользоваться этой возможностью, передайте--experimental-use-sample-offset 1в качестве аргумента командной строки. #10414 (Nikita Mikhaylov) - Разрешён разбор BOM в TSV, если в значении первого столбца BOM не может присутствовать. Это исправляет #10301 #10424 (alexey-milovidov)
- Добавлена поддержка вставки вложенных полей формата Avro #10354 (Andrew Onyshchuk)
- Разрешено изменять столбец в режиме без изменения данных, если указан тот же тип. #10382 (Vladimir Chebotarev)
- Автоматический
distributed_group_by_no_mergeдля GROUP BY по ключу шардирования (если установленoptimize_skip_unused_shards) #10341 (Azat Khuzhin) - Оптимизация запросов с LIMIT/LIMIT BY/ORDER BY для распределённых таблиц с GROUP BY sharding_key #10373 (Azat Khuzhin)
- Добавлена настройка
max_server_memory_usageдля ограничения общего потребления памяти сервером. МетрикаMemoryTrackingтеперь вычисляется без дрейфа. Настройкаmax_memory_usage_for_all_queriesустарела и больше ни на что не влияет. Это закрывает #10293. #10362 (alexey-milovidov) - Добавлен параметр конфигурации
system_tables_lazy_load. Если его значение — false, системные таблицы журналов загружаются при запуске сервера. Alexander Burmak, Svyatoslav Tkhon Il Pak, #9642 #10359 (alexey-milovidov) - Использовать пул фоновых потоков (background_schedule_pool_size) для распределённой отправки #10263 (Azat Khuzhin)
- Использовать пул фоновых потоков для фоновых операций сброса буфера. #10315 (Azat Khuzhin)
- Реализована поддержка одного частного случая удаления частично записанных частей. Это исправляет #9940. #10221 (alexey-milovidov)
- Используйте isInjective() вместо вручную составленного списка таких функций для оптимизации GROUP BY. #10342 (Azat Khuzhin)
- Не выводить сообщение об ошибке в лог, если клиент отправляет пакет RST сразу после установления соединения. Это типичное поведение балансировщика IPVS в связке с keepalived и VRRP. Исправляет #1851 #10274 (alexey-milovidov)
- Разрешён разбор значения
+infдля числовых типов с плавающей точкой. Это закрывает #1839 #10272 (alexey-milovidov) - Реализована табличная функция
generateRandomдля типов данных Nested. Это закрывает задачи #9903 #10219 (alexey-milovidov) - Добавлен параметр
max_allowed_packedв интерфейс совместимости с MySQL, позволяющий некоторым клиентам взаимодействовать с ClickHouse по протоколу MySQL. #10199 (BohuTANG) - Разрешено использование литералов в GLOBAL IN (т.е.
SELECT * FROM remote('localhost', system.one) WHERE dummy global in (0)) #10196 (Azat Khuzhin) - Исправлены различные мелкие ошибки в интерактивном режиме clickhouse-client #10194 (alexey-milovidov)
- Устранена избыточная загрузка словарей (system.tables, DROP/SHOW CREATE TABLE) #10164 (Azat Khuzhin)
- Обновление RWLock: добавлен параметр тайм-аута для getLock() и переработана реализация для обеспечения фазовой справедливости #10073 (Alexander Kazakov)
- Улучшена совместимость с нативным драйвером mysql-connector-java (JDBC) #10021 (BohuTANG)
- Функция
toStringсчитается монотонной и может использоваться для анализа индекса даже когда применяется в тавтологических выражениях с аргументом типа String или LowCardinality(String). #10110 (Amos Bird) - Добавлена поддержка клаузы
ON CLUSTERдля команд{CREATE|DROP} USER/ROLE/ROW POLICY/SETTINGS PROFILE/QUOTA,GRANT. #9811 (Vitaly Baranov) - Поддержка адресации в стиле virtual-hosted для URI S3 #9998 (Pavel Kovalenko)
- Теперь тип layout для словарей без аргументов можно указывать без круглых скобок в DDL‑запросах к словарям. Исправлена ошибка #10057. #10064 (alesapin)
- Добавлена возможность использовать диапазоны чисел с ведущими нулями в пути к файлу #9989 (Olga Khvostikova)
- Более эффективное использование памяти при CROSS JOIN. #10029 (Artem Zuikov)
- При получении структуры удалённой таблицы пытаться подключиться ко всем шардам кластера, если установлен skip_unavailable_shards. #7278 (nvartolomei)
- Добавлены столбцы
total_rows/total_bytesв таблицуsystem.tables. #9919 (Azat Khuzhin) - Таблицы системных логов теперь по умолчанию используют полиморфные части. #9905 (Anton Popov)
- Добавлен столбец
typeв system.settings/merge_tree_settings #9909 (Azat Khuzhin) - Проверять доступные инструкции CPU при запуске сервера как можно раньше. #9888 (alexey-milovidov)
- Удалён этап
ORDER BYиз мутаций, поскольку чтение выполняется из одной упорядоченной части в одном потоке. Также добавлена проверка, что строки в мутациях упорядочены по ключу сортировки и этот порядок не нарушается. #9886 (alesapin) - Реализован оператор LIKE для типа FixedString в левой части оператора. Это необходимо для лучшей поддержки запросов TPC-DS. #9890 (alexey-milovidov)
- Добавлена настройка
force_optimize_skip_unused_shards_no_nested, которая отключаетforce_optimize_skip_unused_shardsдля вложенных таблиц Distributed #9812 (Azat Khuzhin) - Теперь размер столбцов для частей данных MergeTree вычисляется только один раз. #9827 (alesapin)
- Вычислять константные выражения для
optimize_skip_unused_shards(например,SELECT * FROM foo_dist WHERE key=xxHash32(0)) #8846 (Azat Khuzhin) - Проверка на использование столбца типа
DateилиDateTimeв TTL-выражениях была удалена. #9967 (Vladimir Chebotarev) - Оптимизирована реализация жёстких ссылок в DiskS3. #9760 (Pavel Kovalenko)
- Параметр
set multiple_joins_rewriter_version = 2включает вторую версию преобразования нескольких JOIN, которая сохраняет неконфликтующие имена столбцов без изменений. Она поддерживает несколько операторов JOIN сUSINGи позволяет использоватьselect *для JOIN с подзапросами. #9739 (Artem Zuikov) - Реализован «неблокирующий» ALTER для StorageMergeTree #9606 (alesapin)
- Добавлена полная поддержка таблиц MergeTree на диске DiskS3 #9646 (Pavel Kovalenko)
- Добавлена поддержка пустых строк в качестве разделителей в функции
splitByString. #9742 (hcz) - В таблицу
system.trace_logдобавлен столбецtimestamp_ns. Он содержит высокоточный временной штамп события трассировки и позволяет строить временные шкалы профилей потоков («flame charts»). #9696 (Alexander Kuzmenkov) - Предотвращено перемешивание сообщений лога с прогрессом выполнения запроса при включённой настройке
send_logs_level. #9634 (Azat Khuzhin) - Добавлена поддержка
MATERIALIZE TTL IN PARTITION. #9581 (Vladimir Chebotarev) - Поддержка сложных типов во вложенных полях Avro #10502 (Andrew Onyshchuk)
Повышение производительности
- Улучшена логика вставки в правую таблицу для Partial MergeJoin. #10467 (Artem Zuikov)
- Повышена производительность строчно-ориентированных форматов (более чем на 10% для CSV и более чем на 35% для Avro в случае узких таблиц). #10503 (Andrew Onyshchuk)
- Повышена производительность запросов с явно заданными наборами в правой части оператора IN и кортежами в левой части. #10385 (Anton Popov)
- Снижено потребление памяти для хеш-таблицы в HashJoin. #10416 (Artem Zuikov)
- Специальный HashJoin поверх StorageDictionary. Позволяет переписывать функции
dictGet()в JOIN. Само по себе это не нарушает обратную совместимость, но может проявить #8400 на некоторых установках. #10133 (Artem Zuikov) - Включена параллельная вставка материализованного представления, если это поддерживается его целевой таблицей. #10052 (vxider)
- Повышена производительность анализа индексов с монотонными функциями. #9607#10026 (Anton Popov)
- Используются SIMD-интринсики SSE2 и SSE4.2 для ускорения токенизации в bloom-фильтрах. #9968 (Vasily Nemkov)
- Повышена производительность запросов с явно заданными наборами в правой части оператора
IN. Это исправляет регрессию производительности в версии 20.3. #9740 (Anton Popov) - Теперь clickhouse-copier разбивает каждый раздел на несколько частей и копирует их независимо. #9075 (Nikita Mikhaylov)
- Добавлены дополнительные методы агрегации. Например, запрос TPC-H 1 теперь выберет
FixedHashMap<UInt16, AggregateDataPtr>и получит прирост производительности на 25%. #9829 (Amos Bird) - Используется единый счетчик строк для нескольких потоков в преобразовании pre-limit. Это помогает избежать объединения конвейерных потоков в запросах с
limit, но безorder by(например,select f(x) from (select x from t limit 1000000000)) и использовать несколько потоков для дальнейшей обработки. #9602 (Nikolai Kochetov)
Улучшения сборки/тестирования/упаковки
- Использовать форк библиотек AWS SDK из ClickHouse-Extras #10527 (Pavel Kovalenko)
- Добавлены интеграционные тесты для нового запроса ALTER RENAME COLUMN. #10654 (vzakaznikov)
- Исправлено возможное переполнение знакового целого при вызове функции
now64с неверными аргументами. Это исправление устраняет #8973 #10511 (alexey-milovidov) - Разделены настройки fuzzer и sanitizer для совместимости конфигурации сборки с Oss-fuzz. #10494 (kyprizel)
- Исправления для clang-tidy под clang-10. #10420 (alexey-milovidov)
- Отображать абсолютные пути в сообщениях об ошибках, иначе KDevelop не сможет перейти к нужному файлу и вместо этого откроет новый. #10434 (alexey-milovidov)
- Добавлена переменная окружения
ASAN_OPTIONSдля анализа ошибок в стресс-тестах CI с AddressSanitizer. #10440 (Nikita Mikhaylov) - Включена поддержка ThinLTO для сборок clang (экспериментально). #10435 (alexey-milovidov)
- Удалена случайная зависимость от Z3, которая могла появиться, если в системе установлен решатель Z3. #10426 (alexey-milovidov)
- Переместить Docker-файлы интеграционных тестов в директорию docker/. #10335 (Ilya Yatsishin)
- Разрешено использование
clang-10в CI. Это гарантирует, что проблема #10238 исправлена. #10384 (alexey-milovidov) - Обновлён OpenSSL до актуальной версии из ветки upstream master. Исправлена проблема, при которой подключения по TLS могли завершаться с ошибками
OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal errorиSSL Exception: error:2400006E:random number generator::error retrieving entropy. Проблема присутствовала в версии 20.1. #8956 (alexey-milovidov) - Исправлена сборка с clang-10. #10238 #10370 (Amos Bird)
- Добавлен тест производительности для Parallel INSERT для материализованного представления. #10345 (vxider)
- Исправлен нестабильный тест
test_settings_constraints_distributed.test_insert_clamps_settings. #10346 (Vitaly Baranov) - Добавлена утилита для загрузки результатов тестов в CI ClickHouse #10330 (Ilya Yatsishin)
- Преобразование результатов тестов в формат JSONEachRow в утилите junit_to_html #10323 (Ilya Yatsishin)
- Обновлён cctz. #10215 (alexey-milovidov)
- Добавлена возможность создавать HTML‑отчет из исходного JUnit XML‑отчета. #10247 (Ilya Yatsishin)
- Обновлена проверка минимально допустимой версии компилятора. Исправлена коренная причина проблемы #10250 #10256 (alexey-milovidov)
- Базовая поддержка таблиц Live View поверх распределённых таблиц #10179 (vzakaznikov)
- Исправлено ложное срабатывание MSan в MergeTreeIndexFullText. Проблема впервые появилась в #9968. #10801 (alexey-milovidov)
- clickhouse-docker-util #10151 (filimonov)
- Обновлён pdqsort до актуальной версии #10171 (Ivan)
- Обновлена libdivide до v3.0 #10169 (Ivan)
- Добавлена проверка для включённых polymorphic parts. #10086 (Anton Popov)
- Добавлена сборка с кросс-компиляцией для FreeBSD. Это исправляет #9465 #9643 (Ivan)
- Добавить тест производительности для #6924 #6980 (filimonov)
- Добавлена поддержка
/dev/nullв движокFileдля ускорения тестирования производительности #8455 (Amos Bird) - Переместить все каталоги из /dbms на один уровень выше #9974 (Ivan)
- Добавлен тест, проверяющий, что чтение из MergeTree в одном потоке происходит в правильном порядке. Дополнение к #9670 #9762 (alexey-milovidov)
- Исправлен тест
00964_live_view_watch_events_heartbeat.py, чтобы избежать состояния гонки. #9944 (vzakazников) - Исправлен интеграционный тест
test_settings_constraints#9962 (Vitaly Baranov) - Каждая функция в отдельном файле, часть 12. #9922 (alexey-milovidov)
- Добавлен тест производительности для случая чрезвычайно медленного разбора массива кортежей. #9872 (alexey-milovidov)
- Обновлена версия zstd до 1.4.4. В ней есть небольшие улучшения производительности и коэффициента сжатия. Если вы запускаете реплики с разными версиями ClickHouse, вы можете увидеть осмысленные сообщения об ошибках
Data after merge is not byte-identical to data on another replicas.с пояснением. Эти сообщения являются нормой, и вам не следует беспокоиться. #10663 (alexey-milovidov) - Исправлена проблема с отчётом TSan в
system.stack_trace. #9832 (alexey-milovidov) - Удалена зависимость от
clock_getres. #9833 (alexey-milovidov) - Добавлена проверка имён идентификаторов с помощью clang-tidy. #9799 (alexey-milovidov)
- Обновлён Docker-образ «builder». Этот образ не используется в CI, но полезен для разработчиков. #9809 (alexey-milovidov)
- Удалён устаревший инструмент
performance-test, который больше не используется в CI.clickhouse-performance-test— отличный инструмент, но сейчас мы используем гораздо более совершенное решение, выполняющее сравнительное тестирование с использованием сложных статистических формул, чтобы получать достоверные результаты несмотря на всевозможные изменения в окружении. #9796 (alexey-milovidov) - Добавлено большинство проверок Clang Static Analyzer. #9765 (alexey-milovidov)
- Обновлён Poco до версии 1.9.3 в рамках подготовки к поддержке URI MongoDB. #6892 (Alexander Kuzmenkov)
- Исправлена ошибка сборки с
-DUSE_STATIC_LIBRARIES=0 -DENABLE_JEMALLOC=0#9651 (Artem Zuikov) - Для скрипта журнала изменений: если merge-коммит был перенесён (cherry-picked) в релизную ветку, брать название PR из описания коммита. #9708 (Nikolai Kochetov)
- Добавлена поддержка тега
vX.X-conflictsв скрипте backport. #9705 (Nikolai Kochetov) - Исправлен
auto-labelдля скрипта бэкпорта. #9685 (Nikolai Kochetov) - Использовать libc++ при кросс-сборке для Darwin, чтобы обеспечить一致ность с нативной сборкой. #9665 (Hui Wang)
- Исправлен флапающий тест
01017_uniqCombined_memory_usage. Продолжение #7236. #9667 (alexey-milovidov) - Исправлена сборка с нативным компилятором Clang под macOS #9649 (Ivan)
- Позволяет добавлять различные сбои вокруг функций
pthread_mutex_lock,pthread_mutex_unlock. #9635 (alexey-milovidov) - Добавлена поддержка
clang-tidyв скриптpackager. #9625 (alexey-milovidov) - Добавлена возможность использовать внешнюю библиотеку msgpack. #10168 (Azat Khuzhin)
Релиз ClickHouse v20.3
Релиз ClickHouse v20.3.21.2-lts, 2020-11-02
Исправление ошибок
- Исправлен
dictGetвsharding_key(и в похожих местах, то есть когда контекст функции хранится постоянно). #16205 (Azat Khuzhin). - Исправлен некорректный пустой результат для запроса из таблицы
Distributed, если запрос содержитWHERE,PREWHEREиGLOBAL IN. Исправляет #15792. #15933 (Nikolai Kochetov). - Исправлено отсутствие или появление лишних заголовков в форматах
TSV/CSVWithNames. Это исправляет #12504. #13343 (Azat Khuzhin).
Релиз ClickHouse v20.3.20.6-lts, 2020-10-09
Исправление ошибок
- Мутация могла зависнуть в ожидании несуществующей части после
MOVEилиREPLACE PARTITIONили, в редких случаях, послеDETACHилиDROP PARTITION. Исправлено. #15724, #15537 (tavplubix). - Исправлено зависание запросов с большим количеством подзапросов к одной и той же таблице движка
MySQL. Ранее, если в запросе было больше 16 подзапросов к одной и той же таблицеMySQL, он зависал навсегда. #15299 (Anton Popov). - Исправлена ошибка «Unknown identifier» в
GROUP BY, когда запрос содержитJOINпо таблицеMerge. #15242 (Artem Zuikov). - Исправлено проталкивание предикатов (predicate push down), чтобы оно работало, когда подзапрос содержит функцию
finalizeAggregation. Исправляет #14847. #14937 (filimonov). - Одновременные запросы
ALTER ... REPLACE/MOVE PARTITION ...могли приводить к взаимной блокировке. Исправлено. #13626 (tavplubix).
Релиз ClickHouse v20.3.19.4-lts, 2020-09-18
Исправление ошибок
- Исправлена редкая ошибка в запросах
SELECT, когда запрашиваемый столбец имеет выражениеDEFAULT, зависящее от другого столбца, который также имеетDEFAULT, но не присутствует в запросеSELECTи отсутствует на диске. Частично исправляет #14531. #14845 (alesapin). - Исправлена ошибка, когда мутация
ALTER UPDATEс Nullable-столбцом в выражении присваивания и константным значением (например,UPDATE x = 42) приводила к некорректному значению в столбце или сегфолту. Исправляет #13634, #14045. #14646 (alesapin). - Исправлен неверный результат умножения Decimal, вызванный неправильным масштабом (scale) десятичного результата в результирующем столбце. #14603 (Artem Zuikov).
Improvement
- Добавлена поддержка пользовательских кодеков в компактных партах. #12183 (Anton Popov).
ClickHouse release v20.3.18.10-lts, 2020-09-08
Bug Fix
- Останавливать выполнение запроса, если исключение произошло в самом
PipelineExecutor. Это позволяет предотвратить редкие случаи зависания запроса. Продолжение #14334. #14402 (Nikolai Kochetov). - Исправлено поведение, при котором cache-dictionary иногда возвращал значение по умолчанию вместо имеющегося значения из источника. #13624 (Nikita Mikhaylov).
- Исправлен разбор политик строк (row policies) из users.xml, когда имена баз данных или таблиц содержат точки. Это исправляет #5779, #12527. #13199 (Vitaly Baranov).
- Исправлен CAST(Nullable(String), Enum()). #12745 (Azat Khuzhin).
- Исправлена гонка данных в
text_log. Она не соответствует какой-либо реальной ошибке. #9726 (alexey-milovidov).
Improvement
- Исправлено неверное сообщение об ошибке для длинных запросов. Можно было получить синтаксическую ошибку, отличную от
Max query size exceeded, для корректного запроса. #13928 (Nikolai Kochetov). - Возвращать NULL/ноль, когда значение разбирается не полностью, в функциях parseDateTimeBestEffortOrNull/Zero. Это исправляет #7876. #11653 (alexey-milovidov).
Performance Improvement
- Незначительно оптимизированы очень короткие запросы с LowCardinality. #14129 (Anton Popov).
Build/Testing/Packaging Improvement
- Исправлен отчёт UBSan (добавление нуля к nullptr) в HashTable, появившийся после миграции на clang-10. #10638 (alexey-milovidov).
Релиз ClickHouse v20.3.17.173-lts, 2020-08-15
Исправление ошибок
- Исправлено падение в JOIN с StorageMerge при
set enable_optimize_predicate_expression=1. #13679 (Artem Zuikov). - Исправлен некорректный возвращаемый тип при сравнении кортежей с элементами
NULL. Исправляет #12461. #13420 (Nikolai Kochetov). - Исправлена обработка запросов с константными столбцами и префиксом первичного ключа в
ORDER BY. #13396 (Anton Popov). - Для чисел с установленным старшим битом (MSB) в roundUpToPowerOfTwoOrZero() теперь возвращается переданное число. #13234 (Azat Khuzhin).
Релиз ClickHouse v20.3.16.165-lts 2020-08-10
Исправление ошибок
- Исправлена ошибка в функции
parseDateTimeBestEffort, возникавшая при передаче Unix‑времени в качестве аргумента. Это исправляет #13362. #13441 (alexey-milovidov). - Исправлена проблема с потенциально низкой производительностью и слегка некорректным результатом для агрегатных функций
uniqExact,topK,sumDistinctи подобных, вызываемых для типов с плавающей запятой (Float) со значениямиNaN. Это также приводило к срабатыванию assert в отладочной сборке. Исправляет #12491. #13254 (alexey-milovidov). - Исправлена работа функции if с nullable constexpr в качестве условия, не являющегося литералом NULL. Устраняет #12463. #13226 (alexey-milovidov).
- Исправлена проверка
assertв функцииarrayElementв случае, когда элементы массива имеют тип Nullable, а индекс массива также имеет тип Nullable. Это исправляет #12172. #13224 (alexey-milovidov). - Исправлено ненужное ограничение числа потоков при выполнении запросов SELECT к локальной реплике. #12840 (Nikolai Kochetov).
- Исправлено возможное появление в данных лишней строки переполнения для запросов
WITH TOTALS. #12747 (Nikolai Kochetov). - Исправлена проблема с производительностью при работе с большими кортежами, которые интерпретировались как функции в выражении
IN. Случай, когда пользователь по какой-то неясной причине пишетWHERE x IN tuple(1, 2, ...)вместоWHERE x IN (1, 2, ...). #12700 (Anton Popov). - Исправлено отслеживание памяти для input_format_parallel_parsing (за счёт присоединения потока к группе). #12672 (Azat Khuzhin).
- Исправлено #12293: разрешено проталкивание предикатов, когда подзапрос содержит предложение WITH. #12663 (Winter Zhang).
- Исправлена #10572 — некорректная работа индекса фильтра Блума с константным выражением. #12659 (Winter Zhang).
- Исправлено возникновение SIGSEGV в StorageKafka при недоступности брокера (и не только). #12658 (Azat Khuzhin).
- Исправлено состояние гонки во внешних словарях с типом кэша, которое могло приводить к падению сервера. #12566 (alesapin).
- Исправлена ошибка, из-за которой повреждались старые куски данных после выполнения запроса
ALTER DELETEприenable_mixed_granularity_parts=1. Исправляет #12536. #12543 (alesapin). - Улучшено сообщение об исключении для функции
inпри некорректном количестве аргументов. #12529 (Anton Popov). - Исправлена проблема с производительностью при чтении из компактных частей. #12492 (Anton Popov).
- Исправлена взаимоблокировка при включённом
text_log. #12452 (alexey-milovidov). - Исправлена возможная ошибка сегментации при использовании
StorageMerge. Закрывает #12054. #12401 (tavplubix). - Исправлена работа
TOTALS/ROLLUP/CUBEдля агрегатных функций с аргументами-StateиNullable. Устраняет #12163. #12376 (alexey-milovidov). - Исправлен порядок столбцов в модификаторе
WITH FILL. Ранее порядок столбцов в оператореORDER BYне соблюдался. #12306 (Anton Popov). - Избегает возникновения исключения "bad cast" при использовании выражения, фильтрующего данные по виртуальным столбцам (таким как
_tableв таблицахMerge) или по столбцам "index" в системных таблицах, например при фильтрации по имени базы данных при запросе кsystem.tables, и которое возвращает типNullable. Это исправляет #12166. #12305 (alexey-milovidov). - Показывать ошибку при сбое загрузки
TrieDictionary. #12290 (Vitaly Baranov). - Функция
arrayFillработала некорректно для пустых массивов, что могло приводить к аварийному завершению работы. Это исправляет #12263. #12279 (alexey-milovidov). - Реализованы преобразования к общему типу для типов
LowCardinality. Это позволяет выполнять UNION ALL таблиц со столбцами типаLowCardinalityи другими столбцами. Это исправляет #8212. Это исправляет #4342. #12275 (alexey-milovidov). - Исправлено поведение, при котором в ходе нескольких последовательных вставок в
StorageFileзаголовок для некоторых специальных типов записывался более одного раза. Это исправило #6155. #12197 (Nikita Mikhaylov). - Исправлены логические функции для значений типа UInt8 в случаях, когда они не равны 0 или 1. #12196 (Alexander Kazakov).
- Исправлена проверка аргументов
dictGetпри устранении инъективных функций в GROUP BY. #12179 (Azat Khuzhin). - Исправлена некорректная логика в
ALTER DELETE, приводившая к удалению записей, когда условие имело значение NULL. Это исправляет #9088. Это закрывает #12106. #12153 (alexey-milovidov). - Исправлена трансформация запроса, отправляемого во внешние СУБД (например, MySQL, ODBC), при использовании псевдонимов. Это исправляет #12032. #12151 (alexey-milovidov).
- Устранено возможное переполнение при целочисленном делении, что исправляет #12119. #12140 (alexey-milovidov).
- Исправлен потенциальный бесконечный цикл в
greatCircleDistance,geoDistance, что устраняет #12117. #12137 (alexey-milovidov). - Исправлено возникновение исключения
There is no queryдля материализованных представлений с JOIN или с подзапросами, обращающимися к системным логам (system.query_log, metric_log и т. д.) или к базовой таблице с движком Buffer. #12120 (filimonov). - Исправлена проблема с производительностью запросов
SELECTсUNION, которая возникала из‑за некорректного лимита на общее число потоков. Исправляет #12030. #12103 (Nikolai Kochetov). - Исправлена ошибка сегментации с комбинаторами
-StateResample. #12092 (Anton Popov). - Исправлено избыточное ограничение числа потоков при выполнении SELECT из
VIEW. Исправляет #11937. #12085 (Nikolai Kochetov). - Исправлено возможное аварийное завершение работы при использовании некорректного типа для
PREWHERE. Исправлены #12053, #12060. #12060 (Nikolai Kochetov). - Исправлена ошибка
Expected single dictionary argument for functionв функцииdefaultValueOfArgumentTypeпри использовании типаLowCardinality. Исправляет #11808. #12056 (Nikolai Kochetov). - Исправлена ошибка
Cannot capture columnв функциях высшего порядка с аргументомTuple(LowCardinality). Исправляет #9766. #12055 (Nikolai Kochetov). - Теперь метаданные таблиц при загрузке базы данных разбираются параллельно. Это устраняет медленный запуск сервера при большом количестве таблиц. #12045 (tavplubix).
- Сделать так, чтобы агрегатная функция
topKвозвращала Enum для типов Enum. Это исправляет #3740. #12043 (alexey-milovidov). - Исправлена проверка ограничений: теперь проверяется, что ограничение является константным выражением. Это исправляет #11360. #12042 (alexey-milovidov).
- Исправлено некорректное сравнение кортежей со столбцами
Nullable. Устранена проблема #11985. #12039 (Nikolai Kochetov). - Исправлены некорректный результат и потенциальный сбой при вызове функции
ifс аргументами типаFixedStringразных размеров. Это исправление устраняет #11362. #12021 (alexey-milovidov). - Запрос, в котором функция
neighborявляется единственным возвращаемым выражением, может возвращать пустой результат, если функция вызывается со смещением-9223372036854775808. Это исправляет #11367. #12019 (alexey-milovidov). - Исправлено потенциальное переполнение массива в generateRandom, которое могло приводить к аварийному завершению работы. Это устраняет #11371. #12013 (alexey-milovidov).
- Устранено потенциальное исключение с плавающей запятой, что закрывает #11378. #12005 (alexey-milovidov).
- Исправлено неверное имя настройки в сообщении лога при запуске сервера. #11997 (alexey-milovidov).
- Исправлена ошибка
Query parameter was not setдля форматаValues. Исправляет #11918. #11936 (tavplubix). - Сохраняются псевдонимы для подстановок в запросе (параметризованные запросы). Исправляет #11914. #11916 (alexey-milovidov).
- Исправлено потенциальное исключение с плавающей точкой при разборе DateTime64. Это исправляет #11374. #11875 (alexey-milovidov).
- Исправлен учет памяти при работе через
HTTP‑интерфейс (исправление особенно важно приwait_end_of_query=1). #11840 (Azat Khuzhin). - Исправлен некорректный результат работы
if()с NULL-значениями в условии. #11807 (Artem Zuikov). - Разбирать метаданные, сохранённые в ZooKeeper, перед проверкой на равенство. #11739 (Azat Khuzhin).
- Исправлено использование
LIMIT n WITH TIESвместе с операторомORDER BY, в котором используются псевдонимы. #11689 (Anton Popov). - Исправлено потенциальное чтение неинициализированной памяти в кеширующем словаре. #10834 (alexey-milovidov).
Улучшение производительности
- Индекс не использовался для оператора IN с литералами, регрессия производительности, возникшая примерно в v19.3. Это исправляет #10574. #12062 (nvartolomei).
Релиз ClickHouse v20.3.12.112-lts от 2020-06-25
Исправление ошибки
- Исправлено редкое падение, возникавшее при использовании столбца типа
Nullableв условии PREWHERE. Продолжение #11608. #11869 (Nikolai Kochetov). - Запретить использование arrayJoin внутри функций высшего порядка. Это приводило к нарушению синхронизации протокола. Закрывает #3933. #11846 (alexey-milovidov).
- Исправлена проблема чрезмерного использования потоков при выполнении запросов. #11788 (Nikolai Kochetov).
- Исправлено неожиданное поведение запросов вида
SELECT *, xyz.*, которые выполнялись успешно, хотя ожидалась ошибка. #11753 (hexiaoting). - Теперь реплицированные операции fetch будут отменяться при изменении метаданных. #11744 (alesapin).
- Исправлена ошибка LOGICAL_ERROR, возникавшая из-за некорректного вывода типа сложных литералов во входном формате Values. #11732 (tavplubix).
- Исправлена работа
ORDER BY ... WITH FILLнад константными столбцами. #11697 (Anton Popov). - Передавать корректные тайм-ауты при взаимодействии с мостом XDBC. Ранее тайм-ауты не учитывались при проверке его работоспособности и получении метаинформации. #11690 (alexey-milovidov).
- Исправлена ошибка, из-за которой
system.mutationsмог находиться в некорректном состоянии: таблица могла показывать, что вся мутация уже завершена, хотя на сервере все еще оставались заданияMUTATE_PARTв очереди репликации, и он пытался их выполнить. Исправляет #11611. #11681 (alesapin). - Добавлена поддержка регулярных выражений с флагами, игнорирующими регистр. Тем самым исправляются #11101 и #11506. #11649 (alexey-milovidov).
- Удалена оптимизация тривиального запроса подсчёта, если включена защита на уровне строк (row-level security). В предыдущих версиях пользователь получал общее количество записей в таблице вместо отфильтрованного. Это исправляет #11352. #11644 (alexey-milovidov).
- Исправлены блум-фильтры для типа String (индексы пропуска данных). #11638 (Azat Khuzhin).
- Исправлен редкий сбой, вызванный использованием колонки типа
Nullableв условии PREWHERE. (Вероятно, это как‑то связано с #11572). #11608 (Nikolai Kochetov). - Исправлена ошибка
Block structure mismatchдля запросов с сэмплированием, читающих из таблицыBuffer. #11602 (Nikolai Kochetov). - Исправлен неверный код выхода clickhouse-client при exception.code() % 256 == 0. #11601 (filimonov).
- Исправлена тривиальная ошибка в сообщении журнала при запуске сервера: «Mark cache size was lowered». Это закрывает #11399. #11589 (alexey-milovidov).
- Исправлена ошибка
Size of offsets does not match size of column, возникавшая в запросах сPREWHERE column in (subquery)иARRAY JOIN. #11580 (Nikolai Kochetov). - Все запросы в HTTP-сессии имели одинаковый query_id. Исправлено. #11578 (tavplubix).
- Теперь Docker-контейнер clickhouse-server будет отдавать предпочтение IPv6 при проверке доступности сервера. #11550 (Ivan Starkov).
- Исправлены значения shard_num/replica_num для
<node>(ранее нарушали работу параметра use_compact_format_in_distributed_parts_names). #11528 (Azat Khuzhin). - Исправлена утечка памяти при генерации исключения в процессе агрегации с функциями
-State. Это исправляет #8995. #11496 (alexey-milovidov). - Исправлена ошибка, приводившая к неверным результатам распределённых запросов, когда псевдоним мог переопределить квалифицированное имя столбца. Исправлены #9672 #9714. #9972 (Artem Zuikov).
Релиз ClickHouse v20.3.11.97-lts 2020-06-10
Новая возможность
- Теперь ClickHouse самостоятельно контролирует таймауты источников словарей. В конфигурацию кэшируемого словаря добавлены две новые настройки:
strict_max_lifetime_seconds, которая по умолчанию равнаmax_lifetime, иquery_wait_timeout_milliseconds, которая по умолчанию равна одной минуте. Первая настройка также полезна вместе с настройкойallow_read_expired_keys(чтобы запретить чтение сильно устаревших ключей). #10337 (Nikita Mikhaylov).
Исправление ошибки
- Исправлена ошибка
Data compressed with different methods, которая могла возникать при включённомmin_bytes_to_use_direct_ioи активном PREWHERE при использовании SAMPLE или большого числа потоков. Исправляет #11539. #11540 (alexey-milovidov). - Исправлено возвращаемое значение сжатого размера для кодеков. #11448 (Nikolai Kochetov).
- Исправлено падение сервера, когда для столбца установлен кодек сжатия с аргументами, отличными от литералов. Исправляет #11365. #11431 (alesapin).
- Исправлена функция pointInPolygon при использовании NaN в качестве точки. Исправляет #11375. #11421 (Alexey Ilyukhov).
- Исправлено падение при выполнении операции JOIN над LowCarinality(T) и Nullable(T). #11380. #11414 (Artem Zuikov).
- Исправлен код ошибки для неверного ключа
USING. #11373. #11404 (Artem Zuikov). - Исправлена работа
geohashesInBoxпри аргументах, выходящих за допустимый диапазон широт и долгот. #11403 (Vasily Nemkov). - Улучшены сообщения об ошибках для функций
joinGet(). #11389 (Artem Zuikov). - Исправлена потенциальная ошибка
Pipeline stuckдля запросов с внешней сортировкой и оператором LIMIT. Исправляет #11359. #11366 (Nikolai Kochetov). - Удалена избыточная блокировка при отправке партий в ReplicatedMergeTree. #11354 (alesapin).
- Исправлена поддержка
\G(вертикальный формат вывода) в clickhouse-client в режиме многострочного ввода. Закрывает #9933. #11350 (alexey-milovidov). - Исправлены сбой при прямых запросах SELECT из StorageJoin (без JOIN) и неверное свойство Nullable. #11340 (Artem Zuikov).
- Исправлен сбой в
quantilesExactWeightedArray. #11337 (Nikolai Kochetov). - Теперь слияния останавливаются перед изменением метаданных в запросах
ALTER. #11335 (alesapin). - Снова сделана параллельной запись в
MATERIALIZED VIEWпри установке параметраparallel_view_processing = 1. Исправляет #10241. #11330 (Nikolai Kochetov). - Исправлена функция visitParamExtractRaw при обработке JSON, содержащего строки с несбалансированными символами { или [. #11318 (Ewout).
- Исправлена крайне редкая гонка в ThreadPool. #11314 (alexey-milovidov).
- Исправлена потенциальная работа с неинициализированной памятью при преобразовании. Пример:
SELECT toIntervalSecond(now64()). #11311 (alexey-milovidov). - Исправлена проблема, из-за которой анализ индекса не работал, если в таблице был столбец типа Array в первичном ключе и запрос фильтровал по этому столбцу с помощью функций
emptyилиnotEmpty. Это исправляет #11286. #11303 (alexey-milovidov). - Исправлена ошибка, из-за которой оценка скорости выполнения запроса могла быть некорректной, а ограничение
min_execution_speedмогло не работать или работать неправильно, если выполнение запроса ограничивалось настройкамиmax_network_bandwidth,max_execution_speedилиpriority. Значение по умолчанию параметраtimeout_before_checking_execution_speedизменено на ненулевое, потому что иначе настройкиmin_execution_speedиmax_execution_speedне оказывают никакого эффекта. Это исправляет #11297. Это исправляет #5732. Это исправляет #6228. Улучшение удобства использования: предотвращено объединение сообщения об исключении с индикатором прогресса вclickhouse-client. #11296 (alexey-milovidov). - Исправлена ошибка, приводившая к сбою при чтении некорректных данных в формате Protobuf. Тем самым исправлены #5957 и #11203. #11258 (Vitaly Baranov).
- Исправлена ошибка, при которой cache-dictionary мог возвращать значение по умолчанию вместо корректного (когда все ключи просрочены). Это затрагивает только строковые поля. #11233 (Nikita Mikhaylov).
- Исправлена ошибка
Block structure mismatch in QueryPipelineпри чтении изVIEWс константами во внутреннем запросе. Исправлена #11181. #11205 (Nikolai Kochetov). - Исправлено возможное исключение
Invalid status for associated output. #11200 (Nikolai Kochetov). - Исправлена потенциальная ошибка
Cannot capture columnдля функций высшего порядка с захваченным аргументом типаArray(Array(LowCardinality)). #11185 (Nikolai Kochetov). - Исправлена обработка шаблонов S3 (globbing), которая могла приводить к сбоям при наличии более 1000 ключей и на некоторых бэкендах. #11179 (Vladimir Chebotarev).
- Если индекс пропуска данных зависит от столбцов, которые будут изменены во время фонового слияния (для SummingMergeTree, AggregatingMergeTree, а также для TTL GROUP BY), он вычислялся некорректно. Эта проблема исправлена переносом расчёта индекса на этап после слияния, чтобы индекс вычислялся по уже объединённым данным. #11162 (Azat Khuzhin).
- Исправлено чрезмерное резервирование потоков для простых запросов (оптимизация, уменьшающая количество потоков и частично нарушенная после изменений в конвейере). #11114 (Azat Khuzhin).
- Исправлена оптимизация предикатов для распределённых запросов (
enable_optimize_predicate_expression=1) для запросов с предложениемHAVING(т.е. когда требуется фильтрация на сервере-инициаторе) за счёт сохранения порядка выражений (чего достаточно для устранения проблемы), а также принудительного использования агрегатором имён столбцов вместо их позиций. Исправления: #10613, #11413. #10621 (Azat Khuzhin). - Добавлена логика повторной попытки коммита смещения, чтобы снизить вероятность получения дубликатов из Kafka в редких случаях, когда коммит смещения не удался. #9884 (filimonov).
Улучшение производительности
- Получать словарь и проверять права доступа только один раз при каждом вызове функции, читающей внешние словари. #10928 (Vitaly Baranov).
Улучшение сборки/тестирования/упаковки
Релиз ClickHouse v20.3.10.75-lts 2020-05-23
Исправление ошибок
- Удалено логирование в задаче финализации мутаций, если в итоге не была финализирована ни одна мутация. #11109 (alesapin).
- Исправлены ошибки разрешения аргументов функции
parseDateTime64BestEffort. #11038 (Vasily Nemkov). - Исправлен некорректный размер сырых данных в методе
getRawData(). #10964 (Igr). - Исправлена несовместимость двухуровневой агрегации между версиями 20.1 и более ранними. Эта несовместимость проявляется, когда на инициирующем узле и удалённых узлах используются разные версии ClickHouse, размер результата
GROUP BYвелик, и агрегация выполняется по одному полю типаString. Это приводит к появлению нескольких необъединённых строк для одного ключа в результате. #10952 (alexey-milovidov). - Исправлена проблема с обратной совместимостью с кортежами в таблицах
Distributed. #10889 (Anton Popov). - Исправлена ошибка
SIGSEGVвStringHashTable, возникавшая, если такого ключа не существует. #10870 (Azat Khuzhin). - Исправлена ошибка в
ReplicatedMergeTree, из-за которой некоторые операцииALTERдля запросаOPTIMIZEмогли зависать в ожидании реплики после того, как она становилась неактивной. #10849 (tavplubix). - Исправлен порядок столбцов после
Block::sortColumns(). #10826 (Azat Khuzhin). - Исправлена проблема с мостом
ODBC, возникавшая при отключённом кавычировании идентификаторов. Устраняет #7984. #10821 (alexey-milovidov). - Исправлены сообщения
UBSanиMSanдляDateLUT. #10798 (alexey-milovidov). - Исправлено некорректное преобразование типов в условиях по ключу. Устраняет #6287. #10791 (Andrew Onyshchuk)
- Исправлено поведение
parallel_view_processing. Теперь все вставки вMATERIALIZED VIEWдолжны завершаться во всех случаях, даже при возникновении исключения. Исправляет #10241. #10757 (Nikolai Kochetov). - Исправлены комбинаторы -
OrNullи-OrDefaultпри совместном использовании с-State. #10741 (hcz). - Исправлен сбой в
generateRandomпри работе с вложенными типами. Устранена проблема #10583. #10734 (Nikolai Kochetov). - Исправлено повреждение данных для ключевого столбца
LowCardinality(FixedString)вSummingMergeTree, которое могло возникать после слияния. Исправляет #10489. #10721 (Nikolai Kochetov). - Исправлено возможное переполнение буфера в функции
h3EdgeAngle. #10711 (alexey-milovidov). - Исправлена проблема исчезающих итогов. Итоги могли пропадать, если запрос содержал
JOINили подзапрос с внешним условиемWHERE. Исправляет #10674. #10698 (Nikolai Kochetov). - Исправлено несколько использований оператора
INс одним и тем же набором в одном запросе. #10686 (Anton Popov). - Исправлена ошибка, из-за которой HTTP-запросы зависали при закрытии клиентского соединения при
readonly=2иcancel_http_readonly_queries_on_client_close=1. Исправляет #7939, #7019, #7736, #7091. #10684 (tavplubix). - Исправлен порядок параметров в конструкторе
AggregateTransform. #10667 (palasonic1). - Устранено отсутствие параллельного выполнения удалённых запросов при включённом
distributed_aggregation_memory_efficient. Исправляет проблему #10655. #10664 (Nikolai Kochetov). - Исправлена возможная ошибка в количестве строк для запросов с
LIMIT. Исправляет #10566, #10709. #10660 (Nikolai Kochetov). - Исправлена ошибка, из-за которой блокировались параллельные операции ALTER, когда таблица содержала много частей. #10659 (alesapin).
- Исправлена ошибка, из-за которой при выполнении запроса
SYSTEM DROP DNS CACHEтакже сбрасывались кэши, используемые для проверки, разрешено ли пользователю подключаться с определённых IP-адресов. #10608 (tavplubix). - Исправлены некорректные скалярные результаты во внутреннем запросе
MATERIALIZED VIEWв случаях, когда этот запрос содержал зависимую таблицу. #10603 (Nikolai Kochetov). - Исправлен запрос
SELECTдля столбцаALIAS, у которого тип выражения по умолчанию отличался от типа столбца. #10563 (Azat Khuzhin). - Реализовано сравнение между значениями типов DateTime64 и String. #10560 (Vasily Nemkov).
- Исправлено повреждение индекса, которое в некоторых случаях могло возникать после слияния компактных частей в другую компактную часть. #10531 (Anton Popov).
- Исправлена ситуация, когда мутация завершала обработку всех частей, но зависала в состоянии
is_done=0. #10526 (alesapin). - Исправлено переполнение в начале эпохи Unix для часовых поясов с дробным смещением от
UTC. Это исправляет #9335. #10513 (alexey-milovidov). - Исправлено некорректное завершение работы хранилища
Distributed. #10491 (Azat Khuzhin). - Исправлено переполнение целых чисел в
simpleLinearRegressionпри работе с большими целыми значениями. #10474 (hcz).
Улучшения сборки/тестирования/упаковки
- Исправлен отчёт UBSan в библиотеке LZ4. #10631 (alexey-milovidov).
- Исправлена сборка с clang-10. #10238. #10370 (Amos Bird).
- Добавлены тесты, воспроизводящие сбой, связанные с настройкой
max_rows_to_sort. #10268 (alexey-milovidov). - Добавлены улучшения при выводе диагностической информации во входных форматах. Исправлена #10204. #10418 (tavplubix).
- В docker-образ clickhouse-server добавлены CA-сертификаты. #10476 (filimonov).
Исправление ошибки
- Исправлена ошибка
the BloomFilter false positive must be a double number between 0 and 1. #10551. #10569 (Winter Zhang).
Релиз ClickHouse v20.3.8.53, 2020-04-23
Исправление ошибки
- Исправлено некорректное поведение функций работы с датой и временем для часовых поясов, в которых смещение относительно UTC изменялось между положительным и отрицательным значениями (например, Pacific/Kiritimati). Это исправляет #7202 #10369 (alexey-milovidov)
- Исправлена возможная ошибка сегментации при включённом
distributed_group_by_no_merge, возникшая в версии 20.3.7.46 из-за #10131. #10399 (Nikolai Kochetov) - Исправлена некорректная развёртка типов данных
Array(Tuple(...)). Это исправляет #10259 #10390 (alexey-milovidov) - Отменено резервирование дисков в Aggregator. Это исправляет ошибку в резервировании дискового пространства, из-за которой крупная внешняя агрегация могла завершаться сбоем, даже если могла бы успешно выполниться #10375 (Azat Khuzhin)
- Исправлена гонка между
DROPиOPTIMIZEвReplicatedMergeTree.DROPмог оставлять мусор в пути реплики в ZooKeeper при параллельном выполнении запросаOPTIMIZE. #10312 (tavplubix) - Исправлена ошибка, из-за которой сервер не мог выполнить ATTACH TABLE после изменения значения по умолчанию столбца. #10441 (alesapin)
- Не удаляйте каталог metadata, если операция ATTACH DATABASE завершается ошибкой до загрузки таблиц. #10442 (Winter Zhang)
- Исправлено несколько ошибок, возникавших, когда часть данных вставлялась с кворумом, затем каким‑то образом удалялась (DROP PARTITION, TTL), что приводило к зависанию INSERT-запросов или ложным исключениям в SELECT-запросах. Это исправляет #9946 #10188 (Nikita Mikhaylov)
- Исправлена возможная ошибка
Pipeline stuckвConcatProcessor, которая могла возникать при выполнении удалённого запроса. #10381 (Nikolai Kochetov) - Исправлено некорректное поведение в
HashTable, которое вызывало ошибку компиляции при попытке прочитатьHashMapиз буфера. #10386 (palasonic1) - Добавлена возможность использовать
count(*)с несколькими JOIN. Исправляет #9853 #10291 (Artem Zuikov) - Предпочтительнее использовать
fallback_to_stale_replicasвместоskip_unavailable_shards, иначе, если заданы обе настройки и нет актуальных реплик, запрос завершится с ошибкой (патч от @alex-zaitsev). Исправления: #2564. #10422 (Azat Khuzhin) - Устранена проблема, при которой запрос с ARRAY JOIN, ORDER BY и LIMIT мог возвращать неполный результат. Исправление для #10226. Автор: Vadim Plakhtinskiy. #10427 (alexey-milovidov)
- Добавлена проверка количества и типа аргументов при создании индекса BloomFilter #9623 #10431 (Winter Zhang)
Повышение производительности
- Повышена производительность запросов с явно заданными наборами в правой части оператора
INи кортежами в левой части. Это исправляет регрессию производительности в версии 20.3. #9740, #10385 (Anton Popov)
Релиз ClickHouse v20.3.7.46, 2020-04-17
Исправление ошибок
- Исправлена ошибка
Logical error: CROSS JOIN has expressionsдля запросов со смешанным использованием запятых иJOINпо имени. #10311 (Artem Zuikov). - Исправлены запросы с
max_bytes_before_external_group_by. #10302 (Artem Zuikov). - Исправлена оптимизация переноса в
PREWHEREпри наличии функцийarrayJoin(в некоторых случаях). Это исправляет #10092. #10195 (alexey-milovidov). - Добавлена возможность ослабить ограничение на использование недетерминированных функций в мутациях с помощью настройки
allow_nondeterministic_mutations. #10186 (filimonov).
Релиз ClickHouse v20.3.6.40, 2020-04-16
Новая функциональность
- Добавлена функция
isConstant. Эта функция проверяет, является ли её аргумент константным выражением и возвращает 1 или 0. Предназначена для разработки, отладки и демонстрационных целей. #10198 (alexey-milovidov).
Исправление ошибок
- Исправлена ошибка
Pipeline stuck, возникавшая при использованииmax_rows_to_group_byиgroup_by_overflow_mode = 'break'. #10279 (Nikolai Kochetov). - Исправлено редкое исключение
Cannot drain connections: cancel first. #10239 (Nikolai Kochetov). - Исправлена ошибка, из‑за которой ClickHouse выдавал сообщение об ошибке "Unknown function lambda.", когда пользователь пытался выполнить ALTER UPDATE/DELETE над таблицами с ENGINE = Replicated*. Проверка недетерминированных функций теперь корректно обрабатывает lambda‑выражения. #10237 (Alexander Kazakov).
- Исправлена функция generateRandom для типа Date. Это исправляет #9973. Исправлен пограничный случай, когда даты с годом 2106 вставляются в таблицы MergeTree со старым стилем партиционирования, но партиции имеют имена с годом 1970. #10218 (alexey-milovidov).
- Преобразовывать типы, если определение таблицы для представления не соответствует запросу SELECT. Это исправляет #10180 и #10022. #10217 (alexey-milovidov).
- Исправлена обработка в
parseDateTimeBestEffortстрок в формате RFC-2822, если день недели — вторник или четверг. Это исправляет #10082. #10214 (alexey-milovidov). - Исправлены имена константных столбцов внутри JOIN, которые могли конфликтовать с именами констант вне JOIN. #10207 (alexey-milovidov).
- Исправлено возможное бесконечное выполнение запроса в случаях, когда запрос должен останавливаться на LIMIT при чтении из бесконечного источника, такого как
system.numbersилиsystem.zeros. #10206 (Nikolai Kochetov). - Исправлено использование текущей базы данных для проверки доступа, когда база данных не указана. #10192 (Vitaly Baranov).
- Преобразовывать блоки, если структура не совпадает при выполнении INSERT в Distributed(). #10135 (Azat Khuzhin).
- Исправлен потенциально некорректный результат для
extremesв конвейере процессоров. #10131 (Nikolai Kochetov). - Исправлены некоторые типы запросов ALTER с компактными частями. #10130 (Anton Popov).
- Исправлена некорректная проверка
index_granularity_bytesпри создании новой реплики. Решена проблема #10098. #10121 (alesapin). - Исправлен SIGSEGV при выполнении INSERT в таблицу Distributed, когда её структура отличается от структуры базовых таблиц. #10105 (Azat Khuzhin).
- Исправлена возможная потеря строк в запросах с
JOINиUNION ALL. Устранены проблемы #9826, #10113. #10099 (Nikolai Kochetov). - Исправлен запуск реплицируемых таблиц при обновлении со старой версии ClickHouse, в которой отсутствует узел
/table/replicas/replica_name/metadata. Исправлено #10037. #10095 (alesapin). - Добавлена проверка аргументов и поддержка передачи идентификаторов в качестве аргументов для движка базы данных MySQL. #10077 (Winter Zhang).
- Исправлена ошибка в источнике словаря ClickHouse при использовании локального сервера ClickHouse. Ошибка могла приводить к повреждению памяти, если типы данных в словаре и источнике были несовместимы. #10071 (alesapin).
- Исправлена ошибка в запросе
CHECK TABLEпри наличии в таблице пропускающих индексов. #10068 (alesapin). - Исправлена ошибка
Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransform. Она возникала при включённом параметреdistributed_aggregation_memory_efficient, когда распределённый запрос читал агрегированные данные с разными уровнями из разных шардов (смешанная одно- и двухуровневая агрегация). #10063 (Nikolai Kochetov). - Исправлена ошибка сегментации, которая могла возникать в
GROUP BYпо строковым ключам, содержащим нулевые байты в конце (#8636, #8925). #10025 (Alexander Kuzmenkov). - Исправлено количество потоков, используемых для удалённого выполнения запросов (регрессия производительности, начиная с 20.3). Ошибка проявлялась, когда запрос к таблице
Distributedодновременно выполнялся на локальных и удалённых шардах. Исправляет #9965. #9971 (Nikolai Kochetov). - Исправлена ошибка, из-за которой на одном из этапов обработки запросов к некоторым базам данных не извлекались необходимые таблицы. Исправление для #9699. #9949 (achulkov2).
- Исправлена ошибка 'Not found column in block', возникавшая при использовании
JOINвместе сTOTALS. Исправляет #9839. #9939 (Artem Zuikov). - Исправлена ошибка, из-за которой DDL-запросы с
ON CLUSTERзависали при старте сервера. #9927 (Gagan Arneja). - Исправлен разбор нескольких хостов при их указании в команде CREATE USER, например
CREATE USER user6 HOST NAME REGEXP 'lo.?*host', NAME REGEXP 'lo*host'. #9924 (Vitaly Baranov). - Исправлена команда
TRUNCATEдля движка таблицы Join (#9917). #9920 (Amos Bird). - Исправлена ошибка «scalar does not exist» в ALTER-запросах (#9878). #9904 (Amos Bird).
- Исправлено состояние гонки между командами
DROPиOPTIMIZEвReplicatedMergeTree. #9901 (alesapin). - Исправлена ошибка с квалифицированными именами в
distributed_product_mode='local'. Исправлена #4756. #9891 (Artem Zuikov). - Исправлено вычисление прав доступа для интроспекционных функций на основе настройки 'allow_introspection_functions'. #9840 (Vitaly Baranov).
Улучшения в сборке/тестировании/упаковке
- Исправлен интеграционный тест
test_settings_constraints. #9962 (Vitaly Baranov). - Удалена зависимость от
clock_getres. #9833 (alexey-milovidov).
Релиз ClickHouse v20.3.5.21, 2020-03-27
Исправление ошибок
- Исправлена ошибка «Different expressions with the same alias», возникавшая, когда запрос содержал PREWHERE и WHERE по распределённой таблице и
SET distributed_product_mode = 'local'. #9871 (Artem Zuikov). - Исправлено чрезмерное потребление памяти мутациями для таблиц со составным первичным ключом. Исправляет #9850. #9860 (alesapin).
- Для запросов INSERT шард теперь ограничивает настройки, полученные от инициатора, собственными ограничениями вместо выбрасывания исключения. Это исправление позволяет отправлять запросы INSERT на шард с другими ограничениями. Это изменение улучшает исправление #9447. #9852 (Vitaly Baranov).
- Исправлена ошибка «COMMA to CROSS JOIN rewriter is not enabled or cannot rewrite query» в случае подзапросов с COMMA JOIN вне списка таблиц (то есть в WHERE). Исправляет #9782. #9830 (Artem Zuikov).
- Исправлено возможное исключение
Got 0 in totals chunk, expected 1на клиенте. Оно возникало для запросов сJOIN, если в присоединяемой правой таблице было ноль строк. Пример:select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;. Исправляет #9777. #9823 (Nikolai Kochetov). - Исправлен SIGSEGV при
optimize_skip_unused_shards, когда тип не может быть преобразован. #9804 (Azat Khuzhin). - Исправлен некорректный запрос
ALTER TABLE DELETE COLUMNдля компактных частей. #9779 (alesapin). - Исправлен max_distributed_connections (с и без Processors). #9673 (Azat Khuzhin).
- Исправлено несколько случаев, когда часовой пояс аргумента функции использовался некорректно. #9574 (Vasily Nemkov).
Улучшения
- Удалён этап ORDER BY из мутаций, потому что чтение выполняется из одной упорядоченной части в одном потоке. Также добавлена проверка, что порядок строк в мутации соответствует порядку по ключу сортировки и этот порядок не нарушается. #9886 (alesapin).
Релиз ClickHouse v20.3.4.10, 2020-03-20
Исправление ошибок
- Этот релиз также содержит все исправления ошибок из 20.1.8.41
- Исправлена отсутствующая метрика
rows_before_limit_at_leastдля запросов по HTTP (с конвейером процессоров). Это исправляет #9730. #9757 (Nikolai Kochetov)
ClickHouse release v20.3.3.6, 2020-03-17
Исправление ошибок
- Этот релиз также содержит все исправления ошибок из 20.1.7.38
- Исправлена ошибка в репликации, из-за которой репликация не работала, если пользователь выполнял мутации в предыдущей версии. Это исправляет #9645. #9652 (alesapin). Это снова делает версию 20.3 обратно совместимой.
- Добавлена настройка
use_compact_format_in_distributed_parts_names, которая позволяет записывать файлы для запросовINSERTв таблицуDistributedв более компактном формате. Это исправляет #9647. #9653 (alesapin). Это снова делает версию 20.3 обратно совместимой.
ClickHouse release v20.3.2.1, 2020-03-12
Обратное несовместимое изменение
- Исправлена ошибка
file name too longпри записи данных в таблицыDistributedпри большом количестве реплик. Исправлена проблема, из-за которой учетные данные реплик выводились в журнал сервера. Формат имени каталога на диске был изменен на[shard{shard_index}[_replica{replica_index}]]. #8911 (Mikhail Korotov) После обновления до новой версии вы не сможете откатиться на старую без ручного вмешательства, так как старая версия сервера не распознает новый формат каталогов. Если вы хотите выполнить откат, вам необходимо вручную переименовать соответствующие каталоги в старый формат. Это изменение актуально только в том случае, если вы использовали асинхронныеINSERTв таблицыDistributed. В версии 20.3.3 мы введем настройку, которая позволит постепенно включать новый формат. - Изменён формат записей журнала репликации для команд мутаций. Перед установкой новой версии необходимо дождаться, пока старые мутации будут обработаны.
- Реализован простой профилировщик памяти, который сохраняет стек-трейсы в
system.trace_logна каждые N байт сверх мягкого лимита по выделению памяти #8765 (Ivan) #9472 (alexey-milovidov). Столбец таблицыsystem.trace_logбыл переименован изtimer_typeвtrace_type. Это потребует изменений во внешних инструментах анализа производительности и обработки флеймграфов. - Использовать везде идентификатор потока ОС вместо внутреннего номера потока. Это исправляет #7477. Старый
clickhouse-clientне может получать логи, которые сервер отправляет при включённой настройкеsend_logs_level, потому что были изменены имена и типы структурированных сообщений логов. С другой стороны, разные версии сервера могут отправлять друг другу логи с разными типами. Если вы не используете настройкуsend_logs_level, вам не о чем беспокоиться. #8954 (alexey-milovidov) - Удалена функция
indexHint#9542 (alexey-milovidov) - Удалены функции
findClusterIndex,findClusterValue. Это исправляет проблему #8641. Если вы использовали эти функции, отправьте письмо наclickhouse-feedback@yandex-team.com#9543 (alexey-milovidov) - Теперь нельзя создавать столбцы или добавлять столбцы с подзапросом
SELECTв качестве значения по умолчанию. #9481 (alesapin) - Теперь для подзапросов в JOIN требуются псевдонимы. #9274 (Artem Zuikov)
- Улучшена логика запросов
ALTER MODIFY/ADD. Теперь нельзяADDстолбец без указания типа,MODIFYвыражения по умолчанию не меняет тип столбца, аMODIFYтипа не приводит к потере значения выражения по умолчанию. Исправлено #8669. #9227 (alesapin) - Необходимо перезапустить сервер, чтобы применить изменения в конфигурации логирования. Это временное решение, позволяющее избежать ошибки, из-за которой сервер продолжает записывать логи в удалённый файл (см. #8696). #8707 (Alexander Kuzmenkov)
- Настройка
experimental_use_processorsвключена по умолчанию. Она включает использование нового конвейера обработки запросов. Это внутреннее изменение, и мы не ожидаем видимых эффектов. Если вы заметите какие-либо проблемы, установите её обратно в 0. #8768 (alexey-milovidov)
Новая функция
- Добавлены форматы ввода/вывода
AvroиAvroConfluent#8571 (Andrew Onyshchuk) #8957 (Andrew Onyshchuk) #8717 (alexey-milovidov) - Многопоточное и неблокирующее обновление истекших ключей в словарях
cache(с необязательным разрешением на чтение старых значений). #8303 (Nikita Mikhaylov) - Добавлен запрос
ALTER ... MATERIALIZE TTL. Он выполняет мутацию, которая принудительно удаляет просроченные по TTL данные и пересчитывает метаинформацию о TTL во всех частях. #8775 (Anton Popov) - При необходимости переключаться с HashJoin на MergeJoin (на диске) #9082 (Artem Zuikov)
- Добавлена команда
MOVE PARTITIONдля оператораALTER TABLE#4729 #6168 (Guillaume Tassery) - Перезагрузка конфигурации хранилища из конфигурационного файла на лету. #8594 (Vladimir Chebotarev)
- Разрешено изменять
storage_policyтолько на не менее «богатую» политику. #8107 (Vladimir Chebotarev) - Добавлена поддержка глобов/подстановочных символов в хранилище S3 и табличной функции. #8851 (Vladimir Chebotarev)
- Реализованы функции
bitAnd,bitOr,bitXor,bitNotдля типа данныхFixedString(N). #9091 (Guillaume Tassery) - Добавлена функция
bitCount. Это решает проблему #8702. #8708 (alexey-milovidov) #8749 (ikopylov) - Добавлена табличная функция
generateRandomдля генерации случайных строк с заданной схемой. Позволяет заполнять произвольную тестовую таблицу данными. #8994 (Ilya Yatsishin) JSONEachRowFormat: добавлена поддержка частного случая, когда объекты находятся в массиве верхнего уровня. #8860 (Kruglov Pavel)- Теперь можно создать столбец с выражением
DEFAULT, которое зависит от столбца с выражениемALIASпо умолчанию. #9489 (alesapin) - Теперь в
clickhouse-obfuscatorможно указывать--limit, превышающий размер исходных данных. Данные будут повторяться с другим случайным seed. #9155 (alexey-milovidov) - Добавлена функция
groupArraySample(аналогичнаяgroupArray) с алгоритмом резервуарной выборки (reservoir sampling). #8286 (Amos Bird) - Теперь вы можете отслеживать размер очереди обновлений в словарях
cache/complex_key_cacheс помощью системных метрик. #9413 (Nikita Mikhaylov) - Добавлена возможность использовать CRLF как разделитель строк в формате вывода CSV, когда настройка
output_format_csv_crlf_end_of_lineустановлена в значение 1 #8934 #8935 #8963 (Mikhail Korotov) - Реализованы дополнительные функции API H3:
h3GetBaseCell,h3HexAreaM2,h3IndexesAreNeighbors,h3ToChildren,h3ToStringиstringToH3#8938 (Nico Mandery) - Добавлена новая настройка:
max_parser_depthдля управления максимальным размером стека и выполнения больших сложных запросов. Это исправляет #6681 и #7668. #8647 (Maxim Smirnov) - Добавлена настройка
force_optimize_skip_unused_shards, которая вызывает исключение, если невозможно пропустить неиспользуемые шарды #8805 (Azat Khuzhin) - Добавлена возможность настраивать несколько дисков/томов для хранения данных, отправляемых движком
Distributed#8756 (Azat Khuzhin) - Добавлена поддержка политики хранения (
<tmp_policy>) для временных данных. #8750 (Azat Khuzhin) - Добавлен HTTP‑заголовок
X-ClickHouse-Exception-Code, который устанавливается, если было выброшено исключение до отправки данных. Реализация #4971. #8786 (Mikhail Korotov) - Добавлена функция
ifNotFinite. Это просто синтаксический сахар:ifNotFinite(x, y) = isFinite(x) ? x : y. #8710 (alexey-milovidov) - Добавлен столбец
last_successful_update_timeв таблицуsystem.dictionaries#9394 (Nikita Mikhaylov) - Добавлена функция
blockSerializedSize(размер на диске без учёта сжатия) #8952 (Azat Khuzhin) - Добавлена функция
moduloOrZero#9358 (hcz) - Добавлены системные таблицы
system.zerosиsystem.zeros_mt, а также табличные функцииzeros()иzeros_mt(). Таблицы (и табличные функции) содержат единственный столбец с именемzeroи типомUInt8. Этот столбец содержит нули. Они нужны для тестовых целей как самый быстрый способ генерации большого числа строк. Это исправляет #6604 #9593 (Nikolai Kochetov)
Экспериментальная функция
- Добавлен новый компактный формат частей в таблицах семейства
MergeTree, в котором все столбцы хранятся в одном файле. Это помогает увеличить производительность при небольших и частых вставках данных. Старый формат (один файл на столбец) теперь называется широким. Формат хранения данных управляется настройкамиmin_bytes_for_wide_partиmin_rows_for_wide_part. #8290 (Anton Popov) - Поддержка хранилища S3 для таблиц
Log,TinyLogиStripeLog. #8862 (Pavel Kovalenko)
Исправление ошибки
- Исправлено неконсистентное использование пробелов в сообщениях лога. #9322 (alexey-milovidov)
- Исправлена ошибка, из-за которой массивы безымянных кортежей при создании таблицы разворачивались в тип Nested. #8866 (achulkov2)
- Исправлена проблема, при которой могла возникать ошибка «Too many open files», если в таблице
Fileили табличной функцииfileбыло слишком много файлов, соответствующих шаблону glob. Теперь файлы открываются по требованию. Это исправляет #8857 #8861 (alexey-milovidov) - Оператор DROP TEMPORARY TABLE теперь удаляет только временную таблицу. #8907 (Vitaly Baranov)
- Удалять устаревшую партицию при остановке сервера или выполнении DETACH/ATTACH таблицы. #8602 (Guillaume Tassery)
- Для диска по умолчанию изменён способ расчёта объёма свободного места на основе подкаталога
data. Исправлена ошибка, из-за которой объём свободного пространства вычислялся некорректно, если каталогdataбыл примонтирован на отдельное устройство (редкий случай). Это исправляет #7441 #9257 (Mikhail Korotov) - Разрешено использование соединения таблиц через запятую (comma/cross join) с IN () внутри. #9251 (Artem Zuikov)
- Добавлена возможность переписывать CROSS в INNER JOIN, если в секции WHERE присутствует оператор [NOT] LIKE. #9229 (Artem Zuikov)
- Исправлено возможное получение некорректного результата после
GROUP BYпри включённой настройкеdistributed_aggregation_memory_efficient. Исправляет #9134. #9289 (Nikolai Kochetov) - Найденные ключи засчитывались как промахи в метриках кэш-словарей. #9411 (Nikita Mikhaylov)
- Исправлена несовместимость протокола репликации, внесённая в #8598. #9412 (alesapin)
- Исправлено условие гонки в
queue_task_handleпри запуске таблицReplicatedMergeTree. #9552 (alexey-milovidov) - Ключевое слово
NOTне работало в запросеSHOW TABLES NOT LIKE#8727 #8940 (alexey-milovidov) - Добавлена проверка диапазона для функции
h3EdgeLengthM. Без этой проверки возможно переполнение буфера. #8945 (alexey-milovidov) - Исправлена ошибка в пакетных вычислениях тернарных логических операторов с числом аргументов более 10. #8718 (Alexander Kazakov)
- Исправлена ошибка оптимизации PREWHERE, которая могла приводить к ошибкам сегментации (segmentation fault) или к исключению
Inconsistent number of columns got from MergeTreeRangeReader. #9024 (Anton Popov) - Исправлено неожиданное исключение
Timeout exceeded while reading from socket, которое иногда возникает при защищённом подключении до фактического истечения тайм-аута и при включённом профайлере запросов. Также добавлен параметрconnect_timeout_with_failover_secure_ms(по умолчанию 100 мс), аналогичныйconnect_timeout_with_failover_ms, но используемый для защищённых подключений (так как SSL-рукопожатие медленнее, чем обычное TCP‑подключение) #9026 (tavplubix) - Исправлена ошибка при финализации мутаций, из-за которой мутация могла зависнуть в состоянии с
parts_to_do=0иis_done=0. #9022 (alesapin) - Используйте новую логику ANY JOIN с параметром
partial_merge_join. Теперь можно выполнять соединенияANY|ALL|SEMI LEFTиALL INNERсpartial_merge_join=1. #8932 (Artem Zuikov) - Теперь шард приводит настройки, полученные от инициатора, к собственным ограничениям вместо генерации исключения. Это исправление позволяет отправлять запросы на шард с отличающимися ограничениями. #9447 (Vitaly Baranov)
- Исправлена проблема с управлением памятью в
MergeTreeReadPool. #8791 (Vladimir Chebotarev) - Исправлено семейство функций
toDecimal*OrNull()при вызове со строковым аргументомe. Исправляет #8312 #8764 (Artem Zuikov) - Убедитесь, что
FORMAT Nullне отправляет данные клиенту. #8767 (Alexander Kuzmenkov) - Исправлена ошибка, из-за которой метка времени в
LiveViewBlockInputStreamне обновлялась.LIVE VIEW— экспериментальная функция. #8644 (vxider) #8625 (vxider) - Исправлено некорректное поведение
ALTER MODIFY TTL, которое не позволяло удалить старые выражения TTL. #8422 (Vladimir Chebotarev) - Исправлено предупреждение UBSan в MergeTreeIndexSet, что устраняет #9250 #9365 (alexey-milovidov)
- Исправлено поведение функций
matchиextract, когда haystack содержит ноль байт. Поведение было некорректным, когда haystack являлся константой. Это исправляет #9160 #9163 (alexey-milovidov) #9345 (alexey-milovidov) - Предотвращено выбрасывание исключений из деструктора в сторонней библиотеке Apache Avro. #9066 (Andrew Onyshchuk)
- Не фиксируйте пакет, полученный из
Kafka, частично, так как это может привести к пропускам в данных. #8876 (filimonov) - Исправлена работа функции
joinGetс nullable-типами возвращаемых значений. #8919 #9014 (Amos Bird) - Исправлена проблема несовместимости данных при сжатии с помощью кодека
T64. #9016 (Artem Zuikov) Исправлены идентификаторы типов данных в кодеке сжатияT64, приводившие к некорректному (де)сжатию в затронутых версиях. #9033 (Artem Zuikov) - Добавлена настройка
enable_early_constant_folding; в случаях, когда её использование приводит к ошибкам, она отключается. #9010 (Artem Zuikov) - Исправлен оптимизатор проталкивания предикатов для VIEW и включён тест #9011 (Winter Zhang)
- Исправлена ошибка сегментации в таблицах
Merge, которая могла возникать при чтении из хранилищFile#9387 (tavplubix) - Добавлена проверка политики хранения в
ATTACH PARTITION FROM,REPLACE PARTITION,MOVE TO TABLE. Без неё после перезапуска данные части таблицы могли стать недоступны и помешать запуску ClickHouse. #9383 (Vladimir Chebotarev) - Исправлена работа операторов ALTER, если для таблицы задан TTL. #8800 (Anton Popov)
- Исправлено состояние гонки, которое могло возникать при выполнении команды
SYSTEM RELOAD ALL DICTIONARIES, если в это время какой-либо словарь изменялся/добавлялся/удалялся. #8801 (Vitaly Baranov) - В предыдущих версиях движок базы данных
Memoryиспользовал пустой путь к данным, поэтому таблицы создавались в директорииpath(например,/var/lib/clickhouse/), а не в директории данных самой базы данных (например,/var/lib/clickhouse/db_name). #8753 (tavplubix) - Исправлены неверные сообщения журнала об отсутствующем диске или политике по умолчанию. #9530 (Vladimir Chebotarev)
- Исправлена ошибка в работе not(has()) для индекса bloom_filter для типов массивов. #9407 (achimbab)
- Разрешить использование первых столбцов в таблице с движком
Logв качестве алиасов #9231 (Ivan) - Исправлен порядок диапазонов при чтении из таблицы
MergeTreeв одном потоке. Это могло приводить к исключениям вMergeTreeRangeReaderили некорректным результатам запросов. #9050 (Anton Popov) - Изменить
reinterpretAsFixedString, чтобы она возвращалаFixedStringвместоString. #9052 (Andrew Onyshchuk) - Исключены крайне редкие случаи, когда пользователь мог получить неверное сообщение об ошибке (
Successвместо подробного описания ошибки). #9457 (alexey-milovidov) - Не падать при использовании формата
Templateс пустым шаблоном строки. #8785 (Alexander Kuzmenkov) - Файлы метаданных для системных таблиц могли создаваться не в том месте #8653 (tavplubix). Исправлена проблема #8581.
- Исправлена гонка данных для
exception_ptrв кэш-словаре #8303. #9379 (Nikita Mikhaylov) - Не генерировать исключение для запроса
ATTACH TABLE IF NOT EXISTS. Ранее оно генерировалось, если таблица уже существовала, несмотря на предложениеIF NOT EXISTS. #8967 (Anton Popov) - Исправлено отсутствие закрывающей скобки в сообщении об исключении. #8811 (alexey-milovidov)
- Исключено появление сообщения
Possible deadlock avoidedпри запуске clickhouse-client в интерактивном режиме. #9455 (alexey-milovidov) - Исправлена проблема, из-за которой заполнение (padding) в конце значения, закодированного в base64, могло быть некорректным. Обновлена библиотека base64. Это исправляет #9491, закрывает #9492 #9500 (alexey-milovidov)
- Предотвращает потерю данных в
Kafkaв редких случаях, когда возникает исключение после чтения суффикса, но до его коммита. Исправляет #9378 #9507 (filimonov) - Исправлено исключение при выполнении
DROP TABLE IF EXISTS#8663 (Nikita Vasilev) - Исправлено падение при попытке пользователя выполнить
ALTER MODIFY SETTINGдля таблиц семейства движковMergeTreeв старом формате. #9435 (alesapin) - Поддержка чисел типа UInt64, которые не помещаются в Int64, в JSON-функциях. Обновлён SIMDJSON до актуальной ветки master. Исправляет #9209 #9344 (alexey-milovidov)
- Исправлено выполнение обратных предикатов при использовании нестрого монотонного функционального индекса. #9223 (Alexander Kazakov)
- Не сворачивать константу
INвGROUP BY#8868 (Amos Bird) - Исправлена ошибка в мутациях
ALTER DELETE, которая приводила к повреждению индекса. Это исправляет #9019 и #8982. Также исправлены крайне редкие условия гонки в запросахALTERдляReplicatedMergeTree. #9048 (alesapin) - При включённой настройке
compile_expressionsпри использовании типаNullableможет возникнуть ошибкаunexpected columnвLLVMExecutableFunction#8910 (Guillaume Tassery) - Несколько исправлений для движка
Kafka: 1) исправлены дубликаты, которые появлялись во время ребалансировки группы потребителей. 2) Исправлены редкие «пропуски», возникавшие при опросе данных из нескольких партиций одним poll с частичным коммитом (теперь мы всегда обрабатываем и коммитим весь опрошенный блок сообщений). 3) Исправлен сброс (flush) по размеру блока (до этого корректно работал только сброс по тайм-ауту). 4) улучшена процедура подписки (с обратной связью по assignment). 5) Ускорены тесты (с использованием значений интервалов и тайм-аутов по умолчанию). Из-за того, что ранее данные не сбрасывались по размеру блока (как должно быть согласно документации), этот PR может привести к некоторой деградации производительности с настройками по умолчанию (из-за более частых и меньших по размеру сбросов, которые менее оптимальны). Если вы столкнетесь с проблемами производительности после этого изменения — увеличьтеkafka_max_block_sizeв таблице до большего значения (например,CREATE TABLE ...Engine=Kafka ... SETTINGS ... kafka_max_block_size=524288). Исправляет #7259 #8917 (filimonov) - Исправлена ошибка, приводившая к исключению
Parameter out of boundв некоторых запросах после оптимизаций PREWHERE. #8914 (Baudouin Giard) - Исправлена обработка аргументов с разной константностью в функции
arrayZip. #8705 (alexey-milovidov) - При выполнении запроса
CREATEсворачивать константные выражения в аргументах движка хранения. Заменять пустое имя базы данных на текущую базу данных. Исправлены #6508, #3492, #9262 (tavplubix) - Теперь нельзя создавать или добавлять столбцы с простыми циклическими псевдонимами, такими как
a DEFAULT b, b DEFAULT a. #9603 (alesapin) - Исправлена ошибка с двойным перемещением, которая могла приводить к повреждению исходной части данных. Это актуально, если вы используете
ALTER TABLE MOVE#8680 (Vladimir Chebotarev) - Теперь идентификатор
intervalкорректно разбирается без обратных кавычек. Исправлена проблема, из-за которой запрос не удавалось выполнить даже при заключении идентификатораintervalв обратные или двойные кавычки. Исправляет #9124. #9142 (alexey-milovidov) - Исправлены fuzz-тест и некорректное поведение функций
bitTestAll/bitTestAny. #9143 (alexey-milovidov) - Исправлен возможный сбой или неверное число строк в
LIMIT n WITH TIESпри большом количестве строк, совпадающих с n-й строкой. #9464 (tavplubix) - Исправлены мутации для частей, записанных при включённом
insert_quorum. #9463 (alesapin) - Исправлена гонка данных при уничтожении
Poco::HTTPServer. Она могла возникнуть, когда сервер запускался и сразу же останавливался. #9468 (Anton Popov) - Исправлена ошибка, из-за которой при выполнении
SHOW CREATE TABLE a_table_that_does_not_existотображалось вводящее в заблуждение сообщение об ошибке. #8899 (achulkov2) - Исправлено исключение
Parameters are out of boundв редких случаях, когда в предложенииSELECTприсутствует константа при наличии предложенийORDER BYиLIMIT. #8892 (Guillaume Tassery) - Исправлена ошибка финализации мутаций, из-за которой уже выполненная мутация могла иметь статус
is_done=0. #9217 (alesapin) - Предотвращено выполнение
ALTER ADD INDEXдля таблиц MergeTree со старым синтаксисом, поскольку он не работает. #8822 (Mikhail Korotov) - Во время запуска сервера не обращайтесь к таблице, от которой зависит
LIVE VIEW, чтобы сервер смог успешно запуститься. Также удаляйте зависимостиLIVE VIEWпри отсоединенииLIVE VIEW.LIVE VIEW— экспериментальная функция. #8824 (tavplubix) - Исправлена возможная ошибка сегментации в
MergeTreeRangeReaderпри выполненииPREWHERE. #9106 (Anton Popov) - Исправлено возможное несовпадение контрольных сумм для столбцов с TTL. #9451 (Anton Popov)
- Исправлена ошибка, из‑за которой части не переносились в фоновом режиме по правилам TTL в случае, когда был только один том. #8672 (Vladimir Chebotarev)
- Исправлена проблема
Method createColumn() is not implemented for data type Set. Тем самым исправлена #7799. #8674 (alexey-milovidov) - Теперь мы будем чаще выполнять финализацию мутаций. #9427 (alesapin)
- Исправлена
intDivза счёт уменьшения константы на единицу #9351 (hcz) - Исправлена возможная гонка в
BlockIO. #9356 (Nikolai Kochetov) - Исправлена ошибка, приводившая к завершению работы сервера при попытке использовать или удалить таблицу
Kafka, созданную с неверными параметрами. #9513 (filimonov) - Добавлено обходное решение на случай, если ОС возвращает неверный результат для функции
timer_create. #8837 (alexey-milovidov) - Исправлена ошибка в использовании параметра
min_marks_for_seek. Исправлено сообщение об ошибке, возникавшей при отсутствии ключа шардинга в таблице Distributed при попытке пропустить неиспользуемые шарды. #8908 (Azat Khuzhin)
Улучшение
- Реализованы запросы
ALTER MODIFY/DROPна основе мутаций для семейства движковReplicatedMergeTree*. Теперь операторыALTERблокируют только на этапе обновления метаданных и не блокируют после него. #8701 (alesapin) - Добавлена возможность переписывать CROSS JOIN в INNER JOIN при наличии предложения
WHERE, содержащего неквалифицированные имена. #9512 (Artem Zuиков) - Добавить для запросов
SHOW TABLESиSHOW DATABASESподдержку выраженийWHEREиFROM/IN#9076 (sundyli) - Добавлен параметр
deduplicate_blocks_in_dependent_materialized_views. #9070 (urykhy) - После недавних изменений клиент MySQL начал выводить бинарные строки в шестнадцатеричном виде, из-за чего они стали нечитаемыми (#9032). Обходной путь в ClickHouse — пометить строковые столбцы как UTF-8, что подходит не всегда, но в большинстве случаев. #9079 (Yuriy Baranov)
- Добавлена поддержка ключей типов String и FixedString в функции
sumMap#8903 (Baudouin Giard) - Поддержка строковых ключей в столбцах Map в SummingMergeTree #8933 (Baudouin Giard)
- Сигнализировать пулу потоков о завершении потока, даже если поток завершился с исключением #8736 (Ding Xiang Fei)
- Добавлена возможность задавать
query_idвclickhouse-benchmark#9416 (Anton Popov) - Не допускается использование некорректных выражений в запросе
ALTER TABLE ... PARTITION partition. Это исправляет #7192 #8835 (alexey-milovidov) - Таблица
system.table_enginesтеперь предоставляет информацию о поддержке функций (таких какsupports_ttlилиsupports_sort_order). #8830 (Max Akhmedov) system.metric_logтеперь включен по умолчанию. Он будет содержать строки со значениями ProfileEvents и CurrentMetrics, собираемыми с интерваломcollect_interval_milliseconds(одна секунда по умолчанию). Таблица очень маленькая (обычно размером в несколько мегабайт), поэтому разумно собирать эти данные по умолчанию. #9225 (alexey-milovidov)- Инициализирован профилировщик запросов для всех потоков в группе, что, в частности, позволяет полностью профилировать запросы INSERT. Исправляет #6964 #8874 (Ivan)
- Теперь временное представление
LIVE VIEWсоздаётся с помощьюCREATE LIVE VIEW name WITH TIMEOUT [42] ...вместоCREATE TEMPORARY LIVE VIEW ..., поскольку предыдущий синтаксис не был согласован сCREATE TEMPORARY TABLE ...#9131 (tavplubix) - Добавлен параметр конфигурации text_log.level для ограничения записей, попадающих в таблицу
system.text_log#8809 (Azat Khuzhin) - Добавлена возможность размещать загруженную часть на дисках/томах в соответствии с правилами TTL #8598 (Vladimir Chebotarev)
- Для внешних словарей MySQL добавлена возможность совместного использования пула подключений MySQL между словарями, что значительно снижает количество подключений к серверам MySQL. #9409 (Clément Rodriguez)
- В
clickhouse-benchmarkотображать ближайшее фактическое время выполнения запросов для квантилей вместо интерполированных значений. Лучше показывать значения, соответствующие времени выполнения конкретных запросов. #8712 (alexey-milovidov) - Добавлена возможность задавать ключ и временную метку сообщения при вставке данных в Kafka. Исправлены #7198 #8969 (filimonov)
- Если сервер запущен из терминала, номер потока, идентификатор запроса и приоритет лога выделяются цветом. Это улучшает читаемость коррелированных лог-сообщений для разработчиков. #8961 (alexey-milovidov)
- Улучшено сообщение об ошибке при загрузке таблиц базы данных
Ordinary. #9527 (alexey-milovidov) - Реализована поддержка
arraySliceдля массивов состояний агрегатных функций. Исправляет #9388 #9391 (alexey-milovidov) - Разрешено использование константных функций и константных массивов в правой части оператора IN. #8813 (Anton Popov)
- Если при получении данных для system.replicas произошло исключение ZooKeeper, выводить его в отдельном столбце. Реализует #9137 #9138 (alexey-milovidov)
- Атомарное удаление частей данных MergeTree при удалении. #8402 (Vladimir Chebotarev)
- Добавлена поддержка безопасности на уровне строк (row-level security) для распределённых таблиц (Distributed). #8926 (Ivan)
- Теперь в значениях настроек распознаются суффиксы (например, KB, KiB и т. д.). #8072 (Mikhail Korotov)
- Предотвращено переполнение памяти при построении результата большого JOIN. #8637 (Artem Zuikov)
- В интерактивном режиме
clickhouse-clientв подсказки добавлены имена кластеров. #8709 (alexey-milovidov) - Инициализация профилировщика запросов для всех потоков в группе, что, например, позволяет полностью профилировать запросы INSERT #8820 (Ivan)
- В таблицу
system.query_logдобавлен столбецexception_code. #8770 (Mikhail Korotov) - Включён сервер, совместимый с MySQL, на порту
9004в файле конфигурации сервера по умолчанию. Исправлена команда для генерации пароля в примере конфигурации. #8771 (Yuriy Baranov) - Предотвращено аварийное завершение при остановке, если файловая система смонтирована только для чтения. Исправляет #9094 #9100 (alexey-milovidov)
- Улучшено сообщение об исключении, когда для HTTP POST-запроса требуется указать длину. #9453 (alexey-milovidov)
- Добавлены виртуальные столбцы
_pathи_fileв движкиHDFSиFile, а также в табличные функцииhdfsиfile#8489 (Olga Khvостикova) - Исправлена ошибка
Cannot find columnпри вставке данных вMATERIALIZED VIEW, если во внутреннюю таблицу представления был добавлен новый столбец. #8766 #8788 (vzakaznikov) #8788 #8806 (Nikolai Kochetov) #8803 (Nikolai Kochetov) - Исправлена отправка прогресса по нативному клиент-серверному протоколу: теперь он отправляется после финального обновления (как в случае с логами). Это может быть актуально только для некоторых сторонних инструментов, использующих нативный протокол. #9495 (Azat Khuzhin)
- Добавлена системная метрика, отслеживающая количество клиентских соединений по протоколу MySQL (#9013). #9015 (Eugene Klimov)
- Теперь HTTP-ответы содержат заголовок
X-ClickHouse-Timezoneс тем же значением часового пояса, которое возвращаетSELECT timezone(). #9493 (Denis Glazachev)
Улучшения производительности
- Повышена производительность анализа индекса с оператором IN #9261 (Anton Popov)
- Более простой и эффективный код в Logical Functions + рефакторинг кода. Доработка по отношению к #8718 #8728 (Alexander Kazakov)
- Общее улучшение производительности (в диапазоне 5%..200% для затронутых запросов) за счёт ещё более строгого aliasing с использованием возможностей C++20. #9304 (Amos Bird)
- Более строгий aliasing для внутренних циклов функций сравнения. #9327 (alexey-milovidov)
- Более строгий aliasing для внутренних циклов арифметических функций. #9325 (alexey-milovidov)
- Реализация
ColumnVector::replicate()стала примерно в 3 раза быстрее; через неё реализованаColumnConst::convertToFullColumn(). Это также будет полезно в тестах при материализации констант. #9293 (Alexander Kazakov) - Ещё одно небольшое улучшение производительности
ColumnVector::replicate()(ускоряет функциюmaterializeи функции высшего порядка), дальнейшая доработка по #9293 #9442 (Alexander Kazakov) - Улучшена производительность агрегатной функции
stochasticLinearRegression. Этот патч предоставлен Intel. #8652 (alexey-milovidov) - Улучшена производительность функции
reinterpretAsFixedString. #9342 (alexey-milovidov) - Блоки данных не отправляются клиенту для формата
Nullв конвейере процессоров. #8797 (Nikolai Kochetov) #8767 (Alexander Kuzmenkov)
Улучшения сборки/тестирования/упаковки
- Обработка исключений теперь корректно работает в Windows Subsystem for Linux. Подробности см. в https://github.com/ClickHouse-Extras/libunwind/pull/3. Это исправляет ошибки #6480 и #9564 (sobolevsv)
- Заменён
readlineнаreplxxдля интерактивного редактирования строк вclickhouse-client#8416 (Ivan) - Улучшено время сборки и снижено количество инстанцирований шаблонов в FunctionsComparison. #9324 (alexey-milovidov)
- Добавлена интеграция
clang-tidyв CI. См. также #6044 #9566 (alexey-milovidov) - Теперь в CI мы линкуем ClickHouse с помощью
lldдаже при использованииgcc. #9049 (alesapin) - Позволяет случайным образом изменять планирование потоков и вносить сбои, когда установлены переменные окружения
THREAD_FUZZER_*. Это помогает при тестировании. #9459 (alexey-milovidov) - Включена поддержка защищённых сокетов для stateless-тестов #9288 (tavplubix)
- Повысить надёжность SPLIT_SHARED_LIBRARIES=OFF #9156 (Azat Khuzhin)
- Сделайте тест "performance_introspection_and_logging" устойчивым к случайным зависаниям сервера. Это может произойти в среде CI. См. также #9515 #9528 (alexey-milovidov)
- Проверять XML при проверке стиля кода. #9550 (alexey-milovidov)
- Исправлено состояние гонки в тесте
00738_lock_for_inner_table. Этот тест использовал sleep. #9555 (alexey-milovidov) - Удалены тесты производительности типа
once. Это необходимо для запуска всех тестов производительности в режиме статистического сравнения (более надёжно). #9557 (alexey-milovidov) - Добавлен тест производительности для арифметических функций. #9326 (alexey-milovidov)
- Добавлен тест производительности для агрегатных функций
sumMapиsumMapWithOverflow. Продолжение к #8933 #8947 (alexey-milovidov) - Добавлена проверка стиля для ErrorCodes. #9370 (alexey-milovidov)
- Добавлен скрипт для истории тестов. #8796 (alesapin)
- Добавлено предупреждение GCC
-Wsuggest-overrideдля поиска и исправления всех случаев, когда должно использоваться ключевое словоoverride. #8760 (kreuzerkrieg) - Игнорировать слабый символ в Mac OS X, так как он должен быть определён #9538 (Deleted user)
- Нормализовано время выполнения некоторых запросов в тестах производительности. Это сделано в рамках подготовки к запуску всех тестов производительности в сравнительном режиме. #9565 (alexey-milovidov)
- Исправлены некоторые тесты для поддержки pytest при выполнении тестов запросов #9062 (Ivan)
- Включить SSL при сборке с MSan, чтобы сервер не падал при запуске stateless-тестов #9531 (tavplubix)
- Исправлена подстановка базы данных в результатах тестов #9384 (Ilya Yatsishin)
- Исправления сборки для различных платформ #9381 (proller) #8755 (proller) #8631 (proller)
- В тестовый Docker-образ stateless-with-coverage добавлен раздел disks #9213 (Pavel Kovalenko)
- Исключены файлы из дерева исходников при сборке с GRPC #9588 (Amos Bird)
- Незначительно ускорено время сборки за счёт удаления SessionCleaner из Context. Упрощён код SessionCleaner. #9232 (alexey-milovidov)
- Обновлена проверка зависших запросов в скрипте clickhouse-test #8858 (Alexander Kazakov)
- Удалены некоторые ненужные файлы из репозитория. #8843 (alexey-milovidov)
- Изменён тип тестов производительности math с
onceнаloop. #8783 (Nikolai Kochetov) - Добавлен docker-образ, который позволяет собирать интерактивный HTML-отчёт‑браузер кода для нашей кодовой базы. #8781 (alesapin) См. Woboq Code Browser
- Подавлено несколько сбоев тестов под MSan. #8780 (Alexander Kuzmenkov)
- Ускорен тест "exception while insert". Этот тест часто завершался по таймауту в сборке debug-with-coverage. #8711 (alexey-milovidov)
- Обновлены
libcxxиlibcxxabiдо ветки master. В рамках подготовки к #9304 #9308 (alexey-milovidov) - Исправлен нестабильно работающий тест
00910_zookeeper_test_alter_compression_codecs. #9525 (alexey-milovidov) - Очистить дублирующиеся флаги компоновщика. Убедиться, что компоновщик не будет пытаться разрешить неожиданный символ. #9433 (Amos Bird)
- Добавлен драйвер
clickhouse-odbcв тестовые образы. Это позволяет тестировать взаимодействие ClickHouse с самим собой через собственный ODBC-драйвер. #9348 (filimonov) - Исправлено несколько ошибок в модульных тестах. #9047 (alesapin)
- Включено предупреждение GCC
-Wmissing-include-dirsдля выявления всех несуществующих include‑директорий — в основном возникающих из‑за ошибок скриптов CMake #8704 (kreuzerkrieg) - Описать причины, по которым профилировщик запросов может не работать. Предназначено для #9049 #9144 (alexey-milovidov)
- Обновлён OpenSSL до актуального upstream master. Исправлена проблема, при которой TLS‑соединения могли завершаться с сообщениями
OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal errorиSSL Exception: error:2400006E:random number generator::error retrieving entropy. Проблема наблюдалась в версии 20.1. #8956 (alexey-milovidov) - Обновление Dockerfile сервера #8893 (Ilya Mazaev)
- Незначительные исправления в скрипте build-gcc-from-sources #8774 (Michael Nacharov)
- Заменить
numbersнаzerosв тестах производительности, где столбецnumberне используется. Это даст более чистые результаты тестов. #9600 (Nikolai Kochetov) - Исправлена ошибка переполнения стека при использовании
initializer_listв конструкторахColumn. #9367 (Deleted user) - Обновлена librdkafka до v1.3.0. Включены поставляемые в комплекте библиотеки
rdkafkaиgsaslна Mac OS X. #9000 (Andrew Onyshchuk) - исправление сборки под GCC 9.2.0 #9306 (vxider)
Релиз ClickHouse v20.1
Релиз ClickHouse v20.1.16.120-stable 2020-60-26
Исправление ошибок
- Исправлен редкий сбой, вызванный использованием столбца
Nullableв условии prewhere. Продолжение #11608. #11869 (Nikolai Kochetov). - Запрещён
arrayJoinвнутри функций высшего порядка. Это приводило к нарушению синхронизации протокола. Закрывает #3933. #11846 (alexey-milovidov). - Исправлено неожиданное поведение запросов вида
SELECT *, xyz.*, которые успешно выполнялись, хотя ожидалась ошибка. #11753 (hexiaoting). - Исправлена LOGICAL_ERROR, вызванная некорректным выводом типов сложных литералов во входном формате Values. #11732 (tavplubix).
- Исправлен
ORDER BY ... WITH FILLдля константных столбцов. #11697 (Anton Popov). - Передаются корректные таймауты при взаимодействии с мостом XDBC. Ранее таймауты не соблюдались при проверке доступности моста и получении метаинформации. #11690 (alexey-milovidov).
- Добавлена поддержка регулярных выражений с флагами нечувствительности к регистру. Исправляет #11101 и #11506. #11649 (alexey-milovidov).
- Исправлены фильтры Блума для String (индексы пропуска данных). #11638 (Azat Khuzhin).
- Исправлен редкий сбой, вызванный использованием столбца
Nullableв условии prewhere. (Вероятно, это как-то связано с #11572). #11608 (Nikolai Kochetov). - Исправлен неверный код выхода clickhouse-client, когда exception.code() % 256 = 0. #11601 (filimonov).
- Исправлена тривиальная ошибка в сообщении лога "Mark cache size was lowered" при запуске сервера. Закрывает #11399. #11589 (alexey-milovidov).
- Теперь Docker-контейнер clickhouse-server будет отдавать предпочтение IPv6 при проверке доступности сервера. #11550 (Ivan Starkov).
- Исправлена утечка памяти, возникавшая при генерации исключения в середине агрегации с функциями с суффиксом
-State. Исправляет #8995. #11496 (alexey-milovidov). - Исправлено использование первичного ключа, обёрнутого в функцию с модификатором 'FINAL' и оптимизацией 'ORDER BY'. #10715 (Anton Popov).
Релиз ClickHouse v20.1.15.109-stable 2020-06-19
Исправление ошибки
Релиз ClickHouse v20.1.14.107-stable 2020-06-11
Исправление ошибки
- Исправлена ошибка
Size of offsets does not match size of columnдля запросов сPREWHERE column in (subquery)иARRAY JOIN. #11580 (Nikolai Kochetov).
Релиз ClickHouse v20.1.13.105-stable 2020-06-10
Исправление ошибки
- Исправлена ошибка
Data compressed with different methods, возникавшая, когда был включёнmin_bytes_to_use_direct_io, а PREWHERE использовался совместно с SAMPLE или большим числом потоков. Это исправляет #11539. #11540 (alexey-milovidov). - Исправлен возврат сжатого размера для кодеков. #11448 (Nikolai Kochetov).
- Исправлен сбой сервера, возникавший, когда у столбца был кодек сжатия с нелитеральными аргументами. Исправляет проблему #11365. #11431 (alesapin).
- Исправлена ошибка в
pointInPolygonпри использовании NaN в качестве точки. Исправление для #11375. #11421 (Alexey Ilyukhov). - Исправлена функция geohashesInBox для аргументов, выходящих за пределы диапазона широты/долготы. #11403 (Vasily Nemkov).
- Исправлена потенциальная ошибка
Pipeline stuckпри выполнении запросов с внешней сортировкой и ограничением (LIMIT). Исправляет #11359. #11366 (Nikolai Kochetov). - Исправлен сбой в
quantilesExactWeightedArray. #11337 (Nikolai Kochetov). - Снова сделана параллельной запись в
MATERIALIZED VIEWс настройкойparallel_view_processing = 1. Исправляет #10241. #11330 (Nikolai Kochetov). - Исправлена visitParamExtractRaw в случае, когда извлечённый JSON содержит строки с несбалансированными { или [. #11318 (Ewout).
- Исправлена крайне редкая гонка (race condition) в ThreadPool. #11314 (alexey-milovidov).
- Исправлена потенциальная проблема с неинициализированной памятью при преобразовании. Пример:
SELECT toIntervalSecond(now64()). #11311 (alexey-milovidov). - Исправлена проблема, из-за которой анализ индекса не работал, если в первичном ключе таблицы присутствует столбец типа Array и запрос фильтрует по этому столбцу с использованием функций
emptyилиnotEmpty. Это исправляет #11286. #11303 (alexey-milovidov). - Исправлена ошибка, из-за которой оценка скорости выполнения запроса могла быть некорректной, а ограничение
min_execution_speedмогло не работать или работать неправильно, если запрос ограничивался настройкамиmax_network_bandwidth,max_execution_speedилиpriority. Значение по умолчанию дляtimeout_before_checking_execution_speedизменено на ненулевое, потому что иначе настройкиmin_execution_speedиmax_execution_speedне оказывают никакого эффекта. Это исправляет #11297. Это исправляет #5732. Это исправляет #6228. Улучшение удобства использования: исключено склеивание сообщения об исключении с индикатором прогресса вclickhouse-client. #11296 (alexey-milovidov). - Исправлено падение при чтении некорректных данных в формате Protobuf. Исправлены #5957, #11203. #11258 (Vitaly Baranov).
- Исправлена возможная ошибка
Cannot capture columnдля функций высшего порядка, захватывающих аргумент типаArray(Array(LowCardinality)). #11185 (Nikolai Kochetov). - Если индекс пропуска данных зависит от столбцов, которые будут изменяться в процессе фонового слияния (для SummingMergeTree, AggregatingMergeTree, а также для TTL GROUP BY), он вычислялся некорректно. Эта проблема исправлена переносом вычисления индекса на этап после слияния, чтобы индекс рассчитывался по уже слитым данным. #11162 (Azat Khuzhin).
- Убрано логирование в задаче финализации мутаций, если ничего не было финализировано. #11109 (alesapin).
- Исправлены ошибки обработки аргументов функции parseDateTime64BestEffort. #10925. #11038 (Vasily Nemkov).
- Исправлен неверный размер сырых данных в методе getRawData(). #10964 (Igr).
- Исправлена проблема с обратной совместимостью кортежей в таблицах Distributed. #10889 (Anton Popov).
- Исправлен SIGSEGV в StringHashTable (при отсутствии такого ключа). #10870 (Azat Khuzhin).
- Исправлена ошибка в
ReplicatedMergeTree, которая могла приводить к зависанию некоторых запросовALTERсOPTIMIZEв ожидании реплики, ставшей неактивной. #10849 (tavplubix). - Исправлен порядок столбцов после Block::sortColumns() (также добавлен тест, показывающий, что это затрагивает реальный сценарий использования — движок Buffer). #10826 (Azat Khuzhin).
- Исправлена проблема с ODBC bridge при отключённом заключении идентификаторов в кавычки. Это исправляет #7984. #10821 (alexey-milovidov).
- Исправлены ошибки, выявленные UBSan и MSan, в DateLUT. #10798 (alexey-milovidov).
-
- Используйте
src_typeдля корректного приведения типов в условиях по ключу. Исправляет #6287. #10791 (Andrew Onyshchuk).
- Используйте
- Исправлено поведение
parallel_view_processing. Теперь все вставки вMATERIALIZED VIEWдолжны завершаться даже при возникновении исключения. Исправляет #10241. #10757 (Nikolai Kochetov). - Исправлена работа комбинаторов -OrNull и -OrDefault при их совместном использовании с комбинатором -State. #10741 (hcz).
- Исправлена проблема с исчезающими итогами. Итоги могли быть отфильтрованы, если запрос содержал
JOINили подзапрос с внешним условиемWHERE. Исправляет #10674. #10698 (Nikolai Kochetov). - Исправлено повторяющееся использование оператора
INс одним и тем же набором значений в одном запросе. #10686 (Anton Popov). - Исправлен порядок аргументов в конструкторе AggregateTransform. #10667 (palasonic1).
- Устранена проблема отсутствия параллельного выполнения удалённых запросов при включённом
distributed_aggregation_memory_efficient. Исправляет #10655. #10664 (Nikolai Kochetov). - Исправлена оптимизация предикатов для распределённых запросов (
enable_optimize_predicate_expression=1) для запросов с секциейHAVING(то есть когда требуется фильтрация на сервере-инициаторе) за счёт сохранения порядка выражений (и этого достаточно для устранения проблемы), а также за счёт принудительного использования агрегатором имён столбцов вместо индексов. Исправления: #10613, #11413. #10621 (Azat Khuzhin). - Исправлена ошибка
the BloomFilter false positive must be a double number between 0 and 1#10551. #10569 (Winter Zhang). - Исправлен
SELECTдля псевдонима столбца, у которого тип выражения по умолчанию отличается от типа столбца. #10563 (Azat Khuzhin). -
- Реализовано сравнение значений типов DateTime64 и String (аналогично DateTime). #10560 (Vasily Nemkov).
Релиз ClickHouse v20.1.12.86, 2020-05-26
Исправление ошибки
- Исправлена несовместимость двухуровневой агрегации между версиями 20.1 и более ранними. Эта несовместимость возникает, когда на инициирующем узле и удалённых узлах используются разные версии ClickHouse, размер результата GROUP BY большой, а агрегация выполняется по одному строковому полю (String). Это приводит к появлению в результате нескольких необъединённых строк для одного ключа. #10952 (alexey-milovidov).
- Исправлено повреждение данных для ключевого столбца
LowCardinality(FixedString)вSummingMergeTree, которое могло возникнуть после слияния. Исправляет #10489. #10721 (Nikolai Kochetov). - Исправлена ошибка, которая приводила к зависанию HTTP-запросов при закрытии клиента, когда
readonly=2иcancel_http_readonly_queries_on_client_close=1. Исправлены #7939, #7019, #7736, #7091. #10684 (tavplubix). - Исправлена ошибка, из-за которой при выполнении запроса
SYSTEM DROP DNS CACHEтакже сбрасывались кэши, используемые для проверки, разрешено ли пользователю подключаться с определённых IP-адресов. #10608 (tavplubix). - Исправлены некорректные скалярные результаты во внутреннем запросе
MATERIALIZED VIEW, если этот запрос содержал зависимую таблицу. #10603 (Nikolai Kochetov). - Исправлена ситуация, когда мутация завершала все части, но зависала в состоянии
is_done=0. #10526 (alesapin). - Исправлена ошибка переполнения в начале эпохи Unix для часовых поясов с дробным смещением относительно UTC. Это исправляет проблему #9335. #10513 (alexey-milovidov).
- Исправлено некорректное завершение работы хранилища Distributed. #10491 (Azat Khuzhin).
- Исправлено переполнение целых чисел в
simpleLinearRegressionпри очень больших целых значениях. #10474 (hcz). - Исправлено удаление каталога метаданных при ошибке выполнения команды
ATTACH DATABASE. #10442 (Winter Zhang). - Добавлена проверка числа и типов аргументов при создании индекса
BloomFilter#9623. #10431 (Winter Zhang). - Исправлена ошибка, когда запрос с
ARRAY JOIN,ORDER BYиLIMITмог возвращать неполный результат. Это исправление закрывает #10226. #10427 (alexey-milovidov). - Рекомендуется использовать
fallback_to_stale_replicasвместоskip_unavailable_shards. #10422 (Azat Khuzhin). - Исправлено некорректное разворачивание типов данных
Array(Tuple(...)), что устраняет ошибку #10259. #10390 (alexey-milovidov). - Исправлено некорректное поведение
HashTable, которое вызывало ошибку компиляции при чтенииHashMapиз буфера. #10386 (palasonic1). - Исправлена возможная ошибка
Pipeline stuckвConcatProcessor, которая могла возникать при выполнении удалённого запроса. #10381 (Nikolai Kochetov). - Исправлена ошибка
Pipeline stuckпри использованииmax_rows_to_group_byиgroup_by_overflow_mode = 'break'. #10279 (Nikolai Kochetov). - Исправлено несколько ошибок, возникавших, когда часть данных вставлялась с кворумом, затем каким‑то образом удалялась (DROP PARTITION, TTL), что приводило к зависанию INSERT‑запросов или ложным исключениям при выполнении SELECT. Это исправляет #9946. #10188 (Nikita Mikhaylov).
- Исправлена несовместимость при использовании на удалённых серверах версий ниже 18.12.17, а на инициирующем сервере — более новой версии, при выполнении GROUP BY как по фиксированным, так и по нефиксированным ключам и при использовании двухуровневого метода группировки. #3254 (alexey-milovidov).
Улучшения сборки/тестирования/упаковки
Релиз ClickHouse v20.1.10.70, 2020-04-17
Исправление ошибки
- Исправлено редкое потенциальное исключение
Cannot drain connections: cancel first. #10239 (Nikolai Kochetov). - Исправлена ошибка, из-за которой ClickHouse выдавал сообщение об ошибке
'Unknown function lambda.'при попытке пользователя выполнитьALTER UPDATE/DELETEдля таблиц сENGINE = Replicated*. Проверка недетерминированных функций теперь корректно обрабатывает lambda-выражения. #10237 (Alexander Kazakov). - Исправлена работа функции
parseDateTimeBestEffortсо строками в формате RFC-2822, если день недели — вторник или четверг. Это исправляет #10082. #10214 (alexey-milovidov). - Исправлены имена столбцов констант внутри оператора
JOIN, которые могли конфликтовать с именами констант внеJOIN. #10207 (alexey-milovidov). - Исправлена возможная бесконечная работа запроса, который должен останавливаться на LIMIT при чтении из бесконечного источника, такого как
system.numbersилиsystem.zeros. #10206 (Nikolai Kochetov). - Исправлена оптимизация move-to-prewhere при наличии функций
arrayJoin(в некоторых случаях). Это исправляет #10092. #10195 (alexey-milovidov). - Добавлена возможность ослабить ограничение на использование недетерминированных функций в мутациях с помощью настройки
allow_nondeterministic_mutations. #10186 (filimonov). - Преобразовывать блоки, если их структура не совпадает со структурой таблицы при выполнении
INSERTв таблицу с движкомDistributed. #10135 (Azat Khuzhin). - Исправлен
SIGSEGVприINSERTв таблицуDistributed, когда её структура отличается от структуры базовых таблиц. #10105 (Azat Khuzhin). - Исправлена потенциальная потеря строк в запросах с
JOINиUNION ALL. Исправлены #9826, #10113. #10099 (Nikolai Kochetov). - Добавлена проверка аргументов и поддержка аргументов-идентификаторов для движка базы данных MySQL. #10077 (Winter Zhang).
- Исправлена ошибка в источнике словаря ClickHouse при использовании локального сервера ClickHouse. Ошибка могла приводить к повреждению памяти, если типы в словаре и источнике были несовместимы. #10071 (alesapin).
- Исправлена ошибка
Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransform. Она возникала при включённой настройкеdistributed_aggregation_memory_efficient, когда распределённый запрос читал агрегированные данные с разным уровнем агрегации с разных шардов (смешение одноуровневой и двухуровневой агрегации). #10063 (Nikolai Kochetov). - Исправлена ошибка сегментации, которая могла возникать при выполнении
GROUP BYпо строковым ключам, содержащим завершающие нулевые байты (#8636, #8925). #10025 (Alexander Kuzmenkov). - Исправлена ошибка, из-за которой на одном из этапов обработки запросов к некоторым базам данных не извлекались необходимые таблицы. Исправляет #9699. #9949 (achulkov2).
- Исправлена ошибка
'Not found column in block', возникавшая, когда в запросе сTOTALSиспользовалсяJOIN. Исправление #9839. #9939 (Artem Zuikov). - Исправлена ошибка, из-за которой DDL-запросы с
ON CLUSTERзависали при запуске сервера. #9927 (Gagan Arneja). - Исправлена операция
TRUNCATEдля движка таблицы Join (#9917). #9920 (Amos Bird). - Исправлена ошибка
'scalar does not exist'в запросах ALTER (#9878). #9904 (Amos Bird). - Исправлена гонка между операциями drop и optimize в
ReplicatedMergeTree. #9901 (alesapin). - Исправлена логика
DeleteOnDestroyвATTACH PART, которая могла приводить к автоматическому удалению присоединённой части, и добавлено несколько тестов. #9410 (Vladimir Chebotarev).
Улучшения сборки/тестирования/упаковки
- Исправлен юнит-тест
collapsing_sorted_stream. #9367 (Deleted user).
Релиз ClickHouse v20.1.9.54, 2020-03-28
Исправления ошибок
- Исправлена ошибка
'Different expressions with the same alias', возникающая, когда запрос содержитPREWHEREиWHEREпо распределённой таблице и установленоSET distributed_product_mode = 'local'. #9871 (Artem Zuikov). - Исправлено избыточное потребление памяти мутациями для таблиц с составным первичным ключом. Это исправляет #9850. #9860 (alesapin).
- Для запросов INSERT шард теперь ограничивает настройки, полученные от инициатора, собственными ограничениями шарда вместо генерации исключения. Это исправление позволяет отправлять запросы
INSERTна шард с другими ограничениями. Это изменение улучшает исправление #9447. #9852 (Vitaly Baranov). - Исправлено возможное исключение
Got 0 in totals chunk, expected 1на клиенте. Оно возникало для запросов сJOINв случае, если в правой соединяемой таблице не было ни одной строки. Пример:select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;. Исправляет #9777. #9823 (Nikolai Kochetov). - Исправлен
SIGSEGVсoptimize_skip_unused_shards, когда тип не может быть преобразован. #9804 (Azat Khuzhin). - Исправлено несколько случаев, когда часовой пояс аргумента функции использовался некорректно. #9574 (Vasily Nemkov).
Улучшения
- Удалён этап
ORDER BYиз мутаций, потому что чтение выполняется из одной упорядоченной части в одном потоке. Также добавлена проверка, что порядок строк в мутации соответствует порядку по ключу сортировки и что этот порядок не нарушается. #9886 (alesapin).
Улучшения сборки/тестирования/упаковки
- Удалены дублирующиеся флаги компоновщика. Гарантируется, что компоновщик не будет искать неожиданный символ. #9433 (Amos Bird).
Релиз ClickHouse v20.1.8.41, 2020-03-20
Исправление ошибок
- Исправлено возможное постоянное возникновение ошибки
Cannot schedule a task(из-за необработанного исключения вParallelAggregatingBlockInputStream::Handler::onFinish/onFinishThread). Это исправление закрывает #6833. #9154 (Azat Khuzhin) - Исправлено чрезмерное потребление памяти в запросах
ALTER(мутациях). Это исправление закрывает #9533 и #9670. #9754 (alesapin) - Исправлена ошибка при использовании обратных кавычек в DDL внешних словарей. Это исправление закрывает #9619. #9734 (alesapin)
Релиз ClickHouse v20.1.7.38, 2020-03-18
Исправление ошибки
- Исправлены неверные внутренние имена функций
sumKahanиsumWithOverflow. Это приводило к исключению при использовании этих функций в удалённых запросах. #9636 (Azat Khuzhin). Эта проблема была во всех релизах ClickHouse. - Разрешить выполнение
ALTER ON CLUSTERдля таблицDistributedс внутренней репликацией. Это исправляет #3268. #9617 (shinoi2). Эта проблема присутствовала во всех релизах ClickHouse. - Исправлены возможные исключения
Size of filter does not match size of columnиInvalid number of rows in ChunkвMergeTreeRangeReader. Они могли возникать при выполненииPREWHEREв некоторых случаях. Устраняет #9132. #9612 (Anton Popov) - Исправлена ошибка: часовой пояс не сохранялся, если использовалось простое арифметическое выражение вроде
time + 1(в отличие от выраженияtime + INTERVAL 1 SECOND). Это исправляет #5743. #9323 (alexey-milovidov). Эта ошибка присутствовала во всех релизах ClickHouse. - Теперь нельзя создавать или добавлять столбцы с простыми циклическими алиасами вроде
a DEFAULT b, b DEFAULT a. #9603 (alesapin) - Исправлена проблема, при которой заполнение (padding) в конце значения в кодировке base64 могло оказаться некорректным. Обновлена библиотека base64. Это исправляет #9491, закрывает #9492 и #9500 (alexey-milovidov)
- Исправлена гонка данных при уничтожении
Poco::HTTPServer. Она могла возникать, когда сервер запускался и сразу же останавливался. #9468 (Anton Popov) - Исправлен возможный сбой/неверное количество строк в
LIMIT n WITH TIESпри наличии большого числа строк, совпадающих с n-й строкой. #9464 (tavplubix) - Исправлено возможное несоответствие контрольных сумм при использовании TTL для столбцов. #9451 (Anton Popov)
- Исправлена ошибка, приводившая к падению при попытке пользователя выполнить
ALTER MODIFY SETTINGдля семейств движков таблицMergeTreeстарого формата. #9435 (alesapin) - Теперь мы будем пытаться чаще финализировать мутации. #9427 (alesapin)
- Исправлена несовместимость протокола репликации, появившаяся в #8598. #9412 (alesapin)
- Исправлена обработка not(has()) для индекса bloom_filter по столбцам массивного типа. #9407 (achimbab)
- Исправлено поведение функций
matchиextract, когда haystack имеет длину ноль байт. Поведение было некорректным, когда haystack был константой. Это исправляет #9160 #9163 (alexey-milovidov) #9345 (alexey-milovidov)
Улучшения сборки/тестирования/упаковки
- Обработка исключений теперь корректно работает в подсистеме Windows для Linux (WSL). См.: https://github.com/ClickHouse-Extras/libunwind/pull/3. Это устраняет #6480, #9564 (sobolevsv)
Релиз ClickHouse v20.1.6.30, 2020-03-05
Исправление ошибки
- Исправлена несовместимость данных при сжатии с использованием кодека
T64. #9039 (abyss7) - Исправлен порядок диапазонов при однопоточном чтении из таблицы MergeTree. Исправляет #8964. #9050 (CurtizJ)
- Устранён возможный сбой сегментации (segfault) в
MergeTreeRangeReaderпри выполненииPREWHERE. Исправляет ошибку #9064. #9106 (CurtizJ) - Исправлена функция
reinterpretAsFixedString, теперь она возвращаетFixedStringвместоString. #9052 (oandrew) - Исправлен
joinGetдля Nullable-типов возвращаемых значений. Исправление для #8919 #9014 (amosbird) - Исправлены fuzz-тест и некорректное поведение функций bitTestAll/bitTestAny. #9143 (alexey-milovidov)
- Исправлено поведение функций match и extract при нулевой длине haystack. Неверное поведение наблюдалось, когда haystack был константой. Исправляет #9160 #9163 (alexey-milovidov)
- Исправлено выполнение инвертированных предикатов при использовании нестрого монотонного функционального индекса. Исправлена ошибка #9034 #9223 (Akazz)
- Разрешить преобразование
CROSSвINNER JOIN, если в секцииWHEREиспользуется оператор[NOT] LIKE. Исправляет #9191 #9229 (4ertus2) - Разрешить использование псевдонима в качестве первого столбца (столбцов) в таблице с движком Log. #9231 (abyss7)
- Разрешено объединение через запятую с
IN()внутри. Исправляет #7314. #9251 (4ertus2) - Улучшена логика запросов
ALTER MODIFY/ADD. Теперь нельзя выполнитьADDстолбца без указания типа,MODIFYвыражения значения по умолчанию не изменяет тип столбца, аMODIFYтипа не приводит к потере значения выражения по умолчанию. Исправляет #8669. #9227 (alesapin) - Исправлена проблема с финализацией мутаций, из-за которой уже выполненная мутация могла иметь статус is_done=0. #9217 (alesapin)
- Добавлена поддержка конвейера «Processors» для system.numbers и system.numbers_mt. Также исправлена ошибка, из-за которой параметр
max_execution_timeигнорировался. #7796 (KochetovNicolai) - Исправлен некорректный подсчёт метрики
DictCacheKeysRequestedFound. #9411 (nikitamikhaylov) - Добавлена проверка политики хранения в
ATTACH PARTITION FROM,REPLACE PARTITION,MOVE TO TABLE, отсутствие которой могло приводить к тому, что данные части становились недоступны после перезапуска и мешали запуску ClickHouse. #9383 (excitoon) - Исправлено срабатывание UBSan в
MergeTreeIndexSet, что исправляет #9250 #9365 (alexey-milovidov) - Исправлена потенциальная гонка данных в BlockIO. #9356 (KochetovNicolai)
- Поддержка чисел типа
UInt64, которые не помещаются в Int64, в функциях, связанных с JSON. ОбновлёнSIMDJSONдо ветки master. Это исправляет #9209 #9344 (alexey-milovidov) - Исправлена проблема, из-за которой объем свободного места вычислялся некорректно при монтировании каталога данных на отдельное устройство. Для диска по умолчанию свободное место теперь вычисляется на основе подкаталога data. Это исправляет #7441 #9257 (millb)
- Исправлена проблема, из-за которой TLS-подключения могли завершаться с ошибкой
OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error and SSL Exception: error:2400006E:random number generator::error retrieving entropy.Обновлён OpenSSL до версии upstream master. #8956 (alexey-milovidov) - При выполнении запроса
CREATEсворачивать константные выражения в аргументах движка хранения. Заменять пустое имя базы данных на текущую базу данных. Это исправляет #6508, #3492. Также исправлена проверка локального адреса в ClickHouseDictionarySource. #9262 (tabplubix) - Исправлена ошибка сегментации памяти в
StorageMerge, которая могла возникать при чтении изStorageFile. #9387 (tabplubix) - Предотвращает потерю данных в
Kafkaв редких случаях, когда исключение происходит после чтения суффикса, но до фиксации смещения. Исправляет #9378. Связано: #7175 #9507 (filimonov) - Исправлена ошибка, приводившая к завершению работы сервера при попытке использования/удаления таблицы
Kafka, созданной с некорректными параметрами. Исправляет #9494. Включает #9507. #9513 (filimonov)
Новая функциональность
- Добавлена настройка
deduplicate_blocks_in_dependent_materialized_viewsдля управления поведением идемпотентных вставок в таблицы с материализованными представлениями. Эта новая возможность была добавлена в багфикс-релиз по специальному запросу от Altinity. #9070 (urykhy)
Релиз ClickHouse v20.1.2.4, 2020-01-22
Обратная несовместимость
- Настройка
merge_tree_uniform_read_distributionобъявлена устаревшей. Сервер всё ещё распознаёт эту настройку, но она не оказывает никакого эффекта. #8308 (alexey-milovidov) - Изменён тип возвращаемого значения функции
greatCircleDistanceнаFloat32, потому что теперь результат вычисления имеет типFloat32. #7993 (alexey-milovidov) - Теперь ожидается, что параметры запроса представлены в «экранированном» формате. Например, чтобы передать строку
a<tab>b, вы должны написатьa\tbилиa\<tab>bи, соответственно,a%5Ctbилиa%5C%09bв URL. Это необходимо для того, чтобы появилась возможность передавать NULL как\N. Это исправляет #7488. #8517 (alexey-milovidov) - Включена настройка
use_minimalistic_part_header_in_zookeeperдляReplicatedMergeTreeпо умолчанию. Это существенно уменьшит объём данных, хранящихся в ZooKeeper. Эта настройка поддерживается начиная с версии 19.1, и мы уже используем её в продакшене в нескольких сервисах без каких-либо проблем более полугода. Отключите эту настройку, если у вас есть возможность даунгрейда до версий ниже 19.1. #6850 (alexey-milovidov) - Индексы для пропуска данных готовы к использованию в продакшене и включены по умолчанию. Настройки
allow_experimental_data_skipping_indices,allow_experimental_cross_to_join_conversionиallow_experimental_multiple_joins_emulationтеперь устарели и ничего не делают. #7974 (alexey-milovidov) - Добавлена новая логика
ANY JOINдляStorageJoin, согласованная с операциейJOIN. Чтобы обновиться без изменения поведения, вам необходимо добавитьSETTINGS any_join_distinct_right_table_keys = 1в метаданные таблиц движка Join или пересоздать эти таблицы после обновления. #8400 (Artem Zuikov) - Теперь для применения изменений в конфигурации логирования требуется перезапуск сервера. Это временное обходное решение, позволяющее избежать ошибки, при которой сервер пишет лог в удалённый файл журнала (см. #8696). #8707 (Alexander Kuzmenkov)
Новая функция
- Добавлена информация о путях частей в
system.merges. #8043 (Vladimir Chebotarev) - Добавлена возможность выполнения запроса
SYSTEM RELOAD DICTIONARYв режимеON CLUSTER. #8288 (Guillaume Tassery) - Добавлена возможность выполнять запросы
CREATE DICTIONARYс модификаторомON CLUSTER. #8163 (alesapin) - Теперь профиль пользователя в
users.xmlможет наследовать несколько профилей. #8343 (Mikhail f. Shiryaev) - Добавлена таблица
system.stack_trace, позволяющая просматривать стек-трейсы всех потоков сервера. Это полезно разработчикам для анализа состояния сервера. Это исправляет #7576. #8344 (alexey-milovidov) - Добавлен тип данных
DateTime64с настраиваемой точностью до долей секунды. #7170 (Vasily Nemkov) - Добавлена табличная функция
clusterAllReplicas, которая позволяет выполнять запросы ко всем узлам в кластере. #8493 (kiran sunkari) - Добавлена агрегатная функция
categoricalInformationValue, которая вычисляет информационную ценность дискретного признака. #8117 (hcz) - Ускорен разбор файлов данных в форматах
CSV,TSVиJSONEachRowза счёт параллельного парсинга. #7780 (Alexander Kuzmenkov) - Добавлена функция
bankerRound, выполняющая банковское округление. #8112 (hcz) - Добавлена поддержка большего количества языков во встроенном словаре названий регионов: 'ru', 'en', 'ua', 'uk', 'by', 'kz', 'tr', 'de', 'uz', 'lv', 'lt', 'et', 'pt', 'he', 'vi'. #8189 (alexey-milovidov)
- Улучшена согласованность работы
ANY JOIN. Теперьt1 ANY LEFT JOIN t2эквивалентенt2 ANY RIGHT JOIN t1. #7665 (Artem Zuikov) - Добавлена настройка
any_join_distinct_right_table_keys, которая включает прежнее поведение дляANY INNER JOIN. #7665 (Artem Zuikov) - Добавлены новые типы соединений
SEMIиANTI JOIN. Старое поведениеANY INNER JOINтеперь доступно какSEMI LEFT JOIN. #7665 (Artem Zuikov) - Добавлен формат
Distributedдля движкаFileи табличной функцииfile, позволяющий читать из файлов.bin, создаваемых асинхронными вставками в таблицуDistributed. #8535 (Nikolai Kochetov) - Добавлен необязательный аргумент столбца для сброса для
runningAccumulate, который позволяет сбрасывать результаты агрегации для каждого нового значения ключа. #8326 (Sergey Kononenko) - Добавлена возможность использовать ClickHouse в качестве endpoint-а Prometheus. #7900 (vdimir)
- Добавлен раздел
<remote_url_allow_hosts>вconfig.xml, который ограничивает список разрешённых хостов для удалённых движков таблиц и табличных функцийURL,S3,HDFS. #7154 (Mikhail Korotov) - Добавлена функция
greatCircleAngle, которая вычисляет расстояние на сфере в градусах. #8105 (alexey-milovidov) - Изменён радиус Земли для соответствия библиотеке H3. #8105 (alexey-milovidov)
- Добавлены форматы
JSONCompactEachRowиJSONCompactEachRowWithNamesAndTypesдля ввода и вывода данных. #7841 (Mikhail Korotov) - Добавлена возможность для файловых движков таблиц и табличных функций (
File,S3,URL,HDFS), которая позволяет читать и записывать файлыgzipна основе дополнительного параметра движка или расширения файла. #7840 (Andrey Bodrov) - Добавлена функция
randomASCII(length), генерирующая строку со случайным набором печатаемых ASCII-символов. #8401 (BayoNet) (ASCII) - Добавлена функция
JSONExtractArrayRaw, которая возвращает массив неразобранных элементов JSON-массива из строки в форматеJSON. #8081 (Oleg Matrokhin) - Добавлена функция
arrayZip, которая позволяет объединять несколько массивов одинаковой длины в один массив кортежей. #8149 (Winter Zhang) - Добавлена возможность перемещать данные между дисками на основе настроенных
TTL-выражений для семейства движков таблиц*MergeTree. #8140 (Vladimir Chebotarev) - Добавлена новая агрегатная функция
avgWeightedдля вычисления взвешенного среднего. #7898 (Andrey Bodrov) - Теперь параллельный разбор включён по умолчанию для форматов
TSV,TSKV,CSVиJSONEachRow. #7894 (Nikita Mikhaylov) - Добавлены несколько географических функций из библиотеки
H3:h3GetResolution,h3EdgeAngle,h3EdgeLength,h3IsValidиh3kRing. #8034 (Konstantин Malanchev) - Добавлена поддержка сжатия brotli (
br) в хранилищах, работающих с файлами, и табличных функциях. Тем самым исправлена #8156. #8526 (alexey-milovidov) - Добавлены функции
groupBit*для типаSimpleAggregationFunction. #8485 (Guillaume Tassery)
Исправление ошибки
- Исправлено переименование таблиц с движком
Distributed, устранена проблема #7868. #8306 (tavplubix) - Теперь словари поддерживают
EXPRESSIONдля атрибутов в произвольных строках в SQL-диалекте, отличном от ClickHouse. #8098 (alesapin) - Исправлен некорректно работающий запрос
INSERT SELECT FROM mysql(...). Тем самым исправлены #8070 и #7960. #8234 (tavplubix) - Исправлена ошибка «Mismatch column sizes» при вставке значения
Tupleпо умолчанию изJSONEachRow. Исправляет #5653. #8606 (tavplubix) - Теперь при одновременном использовании
WITH TIESиLIMIT BYбудет выброшено исключение. Также добавлена возможность использоватьTOPсLIMIT BY. Это исправляет #7472. #7637 (Nikita Mikhaylov) - Устранена непреднамеренная зависимость от новой версии glibc в исполняемом файле
clickhouse-odbc-bridge. #8046 (Amos Bird) - Исправлена ошибка в функции проверки семейства движков
*MergeTree. Теперь она не приводит к ошибке в случае, если количество строк в последнем грануле и последней (нефинальной) метке одинаково. #8047 (alesapin) - Исправлена вставка в столбцы типа
Enum*после выполнения запросаALTER, когда базовый числовой тип совпадает с типом, заданным для таблицы. Это исправляет #7836. #7908 (Anton Popov) - Разрешён неконстантный отрицательный аргумент "size" для функции
substring. Ранее он был запрещён по ошибке. Это исправляет #4832. #7703 (alexey-milovidov) - Исправлена ошибка разбора при передаче некорректного количества аргументов в табличный движок
(O|J)DBC. #7709 (alesapin) - Теперь при отправке логов в syslog используется имя команды запущенного процесса clickhouse. В предыдущих версиях вместо имени команды передавалась пустая строка. #8460 (Michael Nacharov)
- Исправлена проверка допустимых хостов для
localhost. Этот PR исправляет решение, предложенное в #8241. #8342 (Vitaly Baranov) - Исправлено редкое аварийное завершение работы в функциях
argMinиargMaxпри длинных строковых аргументах, когда результат используется в функцииrunningAccumulate. Это исправляет #8325 #8341 (dinosaur) - Исправлена проблема чрезмерного выделения памяти для таблиц с движком
Buffer. #8345 (Azat Khuzhin) - Исправлена потенциальная ошибка в функциях, которые могут принимать
NULLодним из аргументов и возвращать значение, отличное отNULL. #8196 (alexey-milovidov) - Улучшены вычисления метрик в пуле потоков фоновых процессов для движков таблиц
MergeTree. #8194 (Vladimir Chebotarev) - Исправлена работа функции
INв предложенииWHEREпри наличии фильтра на уровне строк таблицы. Исправлены #6687 #8357 (Ivan) - Теперь выбрасывается исключение, если целочисленное значение параметра настройки разобрано не полностью. #7678 (Mikhail Korotov)
- Исправлено исключение при использовании агрегатной функции в запросе к распределённой таблице с более чем двумя локальными шардами. #8164 (小路)
- Теперь фильтр Блума может обрабатывать массивы нулевой длины и не выполняет избыточные вычисления. #8242 (achimbab)
- Исправлена проверка допуска клиентского хоста путём сопоставления клиентского хоста с
host_regexp, указанным вusers.xml. #8241 (Vitaly Baranov) - Ослаблена неоднозначная проверка столбцов, приводившая к ложным срабатываниям при нескольких
JOIN ON. #8385 (Artem Zuikov) - Исправлен возможный сбой сервера (
std::terminate), возникавший, когда сервер не мог отправить или записать данные в форматахJSONилиXMLсо значениями типа данныхString(которые требуют проверки на корректностьUTF-8), либо при сжатии результирующих данных алгоритмом Brotli, а также в некоторых других редких случаях. Это исправляет #7603 #8384 (alexey-milovidov) - Исправлено условие гонки в
StorageDistributedDirectoryMonitor, обнаруженное CI. Это устраняет #8364. #8383 (Nikolai Kochetov) - Теперь фоновые слияния в семействе движков таблиц
*MergeTreeточнее сохраняют порядок томов, заданный политикой хранения. #8549 (Vladimir Chebotarev) - Теперь табличный движок
Kafkaкорректно работает с форматомNative. Это исправляет #6731 #7337 #8003. #8016 (filimonov) - Исправлены форматы с заголовками (такие как
CSVWithNames), которые выбрасывали исключение о достижении конца файла (EOF) для движка таблицыKafka. #8016 (filimonov) - Исправлена ошибка при построении множества из подзапроса в правой части выражения
IN. Что устраняет ошибки #5767 и #2542. #7755 (Nikita Mikhaylov) - Исправлено возможное аварийное завершение при чтении из хранилища
File. #7756 (Nikolai Kochetov) - Исправлено чтение файлов в формате
Parquet, содержащих столбцы типаlist. #8334 (maxulan) - Исправлена ошибка
Not found columnдля распределённых запросов, в которых условиеPREWHEREзависит от ключа выборки, еслиmax_parallel_replicas > 1. #7913 (Nikolai Kochetov) - Исправлена ошибка
Not found column, возникавшая, если запрос использовалPREWHERE, зависящий от алиаса таблицы, и результирующий набор оказывался пустым из-за условия по первичному ключу. #7911 (Nikolai Kochetov) - Исправлен возвращаемый тип функций
randиrandConstantпри аргументе типаNullable. Теперь функции всегда возвращаютUInt32и никогдаNullable(UInt32). #8204 (Nikolai Kochetov) - Отключено проталкивание предикатов для выражения
WITH FILL. Это исправляет #7784. #7789 (Winter Zhang) - Исправлен некорректный результат функции
count()дляSummingMergeTreeпри использовании модификатораFINAL. #3280 #7786 (Nikita Mikhaylov) - Исправлен возможный некорректный результат для константных функций с удалённых серверов. Это происходило для запросов с функциями, такими как
version(),uptime()и т. п., которые возвращают разные константные значения для разных серверов. Это исправление закрывает #7666. #7689 (Nikolai Kochetov) - Исправлена сложная ошибка в оптимизации проталкивания предикатов, которая приводила к неверным результатам. Это исправление устраняет множество проблем, связанных с оптимизацией проталкивания предикатов. #8503 (Winter Zhang)
- Исправлено аварийное завершение при выполнении запроса
CREATE TABLE .. AS dictionary. #8508 (Azat Khuzhin) - Несколько улучшений в грамматике ClickHouse в файле
.g4. #8294 (taiyang-li) - Исправлена ошибка, приводившая к сбоям в операциях
JOINс таблицами с движкомJoin. Это устраняет #7556 #8254 #7915 #8100. #8298 (Artem Zuikov) - Исправлена лишняя перезагрузка словарей при
CREATE DATABASE. #7916 (Azat Khuzhin) - Ограничено максимальное число потоков чтения из
StorageFileиStorageHDFS. Исправляет #7650. #7981 (alesapin) - Исправлена ошибка в запросе
ALTER ... MODIFY ... CODEC, когда пользователь указывает одновременно выражение по умолчанию и кодек. Исправляет проблему 8593. #8614 (alesapin) - Исправлена ошибка в фоновом слиянии столбцов с типом
SimpleAggregateFunction(LowCardinality). #8613 (Nikolai Kochetov) - Исправлена проверка типов в функции
toDateTime64. #8375 (Vasily Nemkov) - Теперь сервер не падает при выполнении
LEFTилиFULL JOINс использованием движка Join и неподдерживаемыми настройкамиjoin_use_nulls. #8479 (Artem Zuikov) - Теперь запрос
DROP DICTIONARY IF EXISTS db.dictне выбрасывает исключение, если база данныхdbне существует. #8185 (Vitaly Baranov) - Исправлены возможные аварийные завершения работы табличных функций (
file,mysql,remote), вызванные использованием ссылки на удалённый объектIStorage. Исправлен некорректный разбор столбцов, указанных при вставке в табличную функцию. #7762 (tavplubix) - Перед запуском
clickhouse-serverубедитесь, что сеть уже поднята и доступна. Это исправляет #7507. #8570 (Zhichang Yu) - Исправлена обработка таймаутов для защищённых соединений, чтобы запросы не зависали бесконечно. Это исправляет #8126. #8128 (alexey-milovidov)
- Исправлена избыточная конкуренция между параллельными рабочими потоками в
clickhouse-copier. #7816 (Ding Xiang Fei) - Теперь мутации не пропускают присоединённые парты, даже если их версия мутации больше текущей версии мутации. #7812 (Zhichang Yu) #8250 (alesapin)
- Игнорировать лишние копии частей данных
*MergeTreeпосле переноса их на другой диск и перезапуска сервера. #7810 (Vladimir Chebotarev) - Исправлено падение при
FULL JOINсLowCardinalityв ключеJOIN. #8252 (Artem Zuikov) - Запрещено использовать одно и то же имя столбца более одного раза в запросе
INSERT, напримерINSERT INTO tbl (x, y, x). Это исправляет #5465, #7681. #7685 (alesapin) - Добавлен резервный вариант определения количества физических ядер CPU для неизвестных процессоров (с использованием количества логических ядер CPU). Это исправляет #5239. #7726 (alexey-milovidov)
- Исправлена ошибка
There's no column, возникавшая для материализованных и alias-столбцов. #8210 (Artem Zuikov) - Исправлено падение сервера при использовании запроса
EXISTSбез указанияTABLEилиDICTIONARY, напримерEXISTS t. Исправлена ошибка #8172. Ошибка появилась в версии 19.17. #8213 (alexey-milovidov) - Исправлена редкая ошибка с текстом
"Sizes of columns does not match", которая могла возникать при использовании столбца типаSimpleAggregateFunction. #7790 (Boris Granveaud) - Исправлена ошибка, из-за которой пользователь с пустым
allow_databasesполучал доступ ко всем базам данных (и аналогично дляallow_dictionaries). #7793 (DeifyTheGod) - Исправлен сбой клиента, если сервер уже разорвал соединение. #8071 (Azat Khuzhin)
- Исправлено поведение
ORDER BYпри сортировке по префиксу первичного ключа и суффиксу, не входящему в него. #7759 (Anton Popov) - Проверять, присутствует ли в таблице квалифицированный столбец. Исправляет #6836. #7758 (Artem Zuikov)
- Исправлено поведение, при котором
ALTER MOVE, запущенный сразу после завершения слияния, перемещал суперчасть вместо указанной части. Исправляет #8103. #8104 (Vladimir Chebotarev) - Исправлена возможная аварийная остановка сервера при использовании
UNIONс разным количеством столбцов. Исправляет проблему #7279. #7929 (Nikolai Kochetov) - Исправлен размер результирующей подстроки для функции
substrпри отрицательном значении размера. #8589 (Nikolai Kochetov) - Теперь сервер не выполняет мутацию части в
MergeTree, если в фоновом пуле недостаточно свободных потоков. #8588 (tavplubix) - Исправлена небольшая опечатка при форматировании AST для
UNION ALL. #7999 (litao91) - Исправлены некорректные результаты bloom-фильтра для отрицательных чисел. Это исправляет #8317. #8566 (Winter Zhang)
- Исправлено потенциальное переполнение буфера в
decompress. Злоумышленник мог передать специально сформированные сжатые данные, которые приводили к чтению за пределами буфера. Проблема была обнаружена Эльдаром Зайтовым из команды информационной безопасности «Яндекса». #8404 (alexey-milovidov) - Исправлен некорректный результат из-за переполнения целых чисел в
arrayIntersect. #7777 (Nikolai Kochetov) - Теперь запрос
OPTIMIZE TABLEне будет ждать выполнения операции репликами, находящимися офлайн. #8314 (javi santana) - Исправлен парсер
ALTER TTLдля таблицReplicated*MergeTree. #8318 (Vladimir Chebotarev) - Исправлено взаимодействие между сервером и клиентом, чтобы сервер читал информацию о временных таблицах после ошибки запроса. #8084 (Azat Khuzhin)
- Исправлена ошибка функции
bitmapAndпри пересечении агрегированного и скалярного битмапов. #8082 (Yue Huang) - Уточнено определение
ZXidв соответствии с руководством программиста ZooKeeper (ZooKeeper Programmer's Guide), что позволило исправить ошибку вclickhouse-cluster-copier. #8088 (Ding Xiang Fei) - Табличная функция
odbcтеперь учитывает параметрexternal_table_functions_use_nulls. #7506 (Vasily Nemkov) - Исправлена ошибка, которая приводила к редкой гонке данных. #8143 (Alexander Kazakov)
- Теперь
SYSTEM RELOAD DICTIONARYполностью перезагружает словарь, игнорируяupdate_field, что исправляет проблему #7440. #8037 (Vitaly Baranov) - Добавлена возможность в запросе CREATE проверять существование словаря. #8032 (alesapin)
- Исправлен парсинг типов
Float*в форматеValues. Это исправляет #7817. #7870 (tavplubix) - Исправлен сбой, возникавший при невозможности зарезервировать дисковое пространство в некоторых фоновых операциях семейства движков таблиц
*MergeTree. #7873 (Vladimir Chebotarev) - Исправлен сбой операции слияния, возникавший при наличии в таблице столбца
SimpleAggregateFunction(LowCardinality). Это исправляет #8515. #8522 (Azat Khuzhin) - Восстановлена поддержка всех локалей ICU и добавлена возможность применять правила сортировки (collations) к константным выражениям. Также в таблицу
system.collationsдобавлено имя языка. #8051 (alesapin) - Исправлена ошибка, из-за которой внешние словари с нулевым минимальным временем жизни (
LIFETIME(MIN 0 MAX N),LIFETIME(N)) не обновлялись в фоновом режиме. #7983 (alesapin) - Исправлен сбой при использовании внешнего словаря с источником ClickHouse, если в запросе есть подзапрос. #8351 (Nikolai Kochetov)
- Исправлен некорректный разбор расширения файла в таблице с движком
URL. Это устраняет проблему #8157. #8419 (Andrey Bodrov) - Исправлен запрос
CHECK TABLEдля таблиц*MergeTreeбез ключа. Устранена проблема #7543. #7979 (alesapin) - Исправлено преобразование
Float64в тип MySQL. #8079 (Yuriy Baranov) - Теперь, если таблица не была полностью удалена из‑за сбоя сервера, сервер попытается её восстановить и загрузить. #8176 (tavplubix)
- Исправлена ошибка, из-за которой табличная функция
fileзавершалась сбоем при вставке в несуществующий файл. Теперь в этом случае файл будет создан, после чего вставка будет выполнена. #8177 (Olga Khvostikova) - Исправлена редкая взаимоблокировка, которая могла возникать при включённом
trace_log. #7838 (filimonov) - Добавлена поддержка типов данных, отличных от
Date, во внешнем словареRangeHashed, созданном из DDL-запроса. Исправлена проблема 7899. #8275 (alesapin) - Исправлен сбой при вызове функции
now64()с результатом другой функции. #8270 (Vasily Nemkov) - Исправлена ошибка при определении IP-адреса клиента для подключений через протокол обмена MySQL. #7743 (Dmitry Muzyka)
- Исправлена обработка пустых массивов в функции
arraySplit. Это исправляет #7708. #7747 (hcz) - Исправлена проблема, при которой
pid-файлдругого запущенногоclickhouse-serverмог быть удалён. #8487 (Weiqing Xu) - Исправлена перезагрузка словаря, если он использует
invalidate_query, которая останавливала обновления и приводила к исключениям при предыдущих попытках обновления. #8029 (alesapin) - Исправлена ошибка в функции
arrayReduce, которая могла приводить к «double free», и ошибка в комбинаторе агрегатных функцийResample, которая могла приводить к утечке памяти. Добавлена агрегатная функцияaggThrow, которую можно использовать для тестирования. #8446 (alexey-milovidov)
Улучшение
- Улучшено логирование при работе с движком таблицы
S3. #8251 (Grigory Pervakov) - Теперь при вызове
clickhouse-localбез аргументов выводится справочное сообщение. Это исправляет #5335. #8230 (Andrey Nagorny) - Добавлена настройка
mutations_sync, которая позволяет в синхронном режиме дожидаться завершения запросовALTER UPDATE/DELETE. #8237 (alesapin) - Добавлена возможность задавать относительный
user_files_pathвconfig.xml(по аналогии сformat_schema_path). #7632 (hcz) - Добавлено исключение для недопустимых типов аргументов в функциях преобразования с постфиксом
-OrZero. #7880 (Andrey Konyaev) - Упростить формат заголовка при отправке данных на шард в распределённом запросе. #8044 (Vitaly Baranov)
- Рефакторинг табличного движка
Live View. #8519 (vzakaznikov) - Добавлены дополнительные проверки для внешних словарей, создаваемых на основе DDL-запросов. #8127 (alesapin)
- Исправлена ошибка
Column ... already existsпри совместном использовании директивFINALиSAMPLE, напримерselect count() from table final sample 1/2. Соответствует исправлению #5186. #7907 (Nikolai Kochetov) - Теперь в качестве первого аргумента функции
joinGetможно использовать идентификатор таблицы. #7707 (Amos Bird) - Разрешено использовать
MaterializedViewс подзапросами для таблицKafka. #8197 (filimonov) - Теперь фоновые операции перемещения данных между дисками выполняются в отдельном пуле потоков. #7670 (Vladimir Chebotarev)
SYSTEM RELOAD DICTIONARYтеперь выполняется синхронно. #8240 (Vitaly Baranov)- Стек-трейсы теперь отображают физические адреса (смещения в объектном файле) вместо виртуальных адресов памяти (по которым был загружен объектный файл). Это позволяет использовать
addr2line, когда бинарный файл является позиционно-независимым и включён ASLR. Это исправляет #8360. #8387 (alexey-milovidov) - Добавлена поддержка нового синтаксиса фильтров безопасности на уровне строк:
<table name='table_name'>...</table>. Исправлена проблема #5779. #8381 (Ivan) - Теперь функция
cityHashможет работать с типамиDecimalиUUID. Исправлена ошибка #5184. #7693 (Mikhail Korotov) - Удалена фиксированная гранулярность индекса (ранее 1024) из системных логов, так как она устарела после внедрения адаптивной гранулярности. #7698 (alexey-milovidov)
- Включён сервер совместимости с MySQL при сборке ClickHouse без поддержки SSL. #7852 (Yuriy Baranov)
- Теперь сервер вычисляет контрольные суммы распределённых пакетов, что позволяет получать более информативные сообщения об ошибках в случае повреждения данных в пакете. #7914 (Azat Khuzhin)
- Добавлена поддержка
DROP DATABASE,DETACH TABLE,DROP TABLEиATTACH TABLEдля движка базы данныхMySQL. #8202 (Winter Zhang) - Добавлена поддержка аутентификации в табличную функцию
S3и движок таблиц. #7623 (Vladimir Chebotarev) - Добавлена проверка на наличие лишних частей
MergeTreeна разных дисках, чтобы исключить потерю частей данных на дисках, не описанных в конфигурации. #8118 (Vladimir Chebotarev) - Включена поддержка SSL для клиента и сервера на macOS. #8297 (Ivan)
- Теперь ClickHouse может работать в качестве федеративного сервера MySQL (см. https://dev.mysql.com/doc/refman/5.7/en/federated-create-server.html). #7717 (Maxim Fedotov)
clickhouse-clientтеперь включаетbracketed-pasteтолько если включён multiquery и выключен multiline. Это исправляет #7757. #7761 (Amos Bird)- Добавлена поддержка
Array(Decimal)в функцииif. #7721 (Artem Zuikov) - Добавлена поддержка типов Decimal в функциях
arrayDifference,arrayCumSumиarrayCumSumNegative. #7724 (Artem Zuikov) - В таблицу
system.dictionariesдобавлен столбецlifetime. #6820 #7727 (kekekekule) - Улучшена проверка наличия существующих частей на разных дисках для табличных движков
*MergeTree. Устраняет проблему #7660. #8440 (Vladimir Chebotarev) - Интеграция с
AWS SDKдля взаимодействия сS3, что позволяет использовать все возможности S3 «из коробки». #8011 (Pavel Kovalenko) - Добавлена поддержка подзапросов в таблицах типа
Live View. #7792 (vzakaznikov) - Проверка на использование столбца
DateилиDateTimeв выраженияхTTLбыла удалена. #7920 (Vladimir Chebotarev) - Информация о диске добавлена в таблицу
system.detached_parts. #7833 (Vladimir Chebotarev) - Теперь настройки
max_(table|partition)_size_to_dropможно изменять без перезапуска. #7779 (Grigory Pervakov) - Немного улучшено удобство работы с сообщениями об ошибках. Теперь пользователей просят не удалять строки ниже
Stack trace:. #7897 (alexey-milovidov) - Улучшено чтение сообщений из движка
Kafkaв различных форматах после #7935. #8035 (Ivan) - Улучшена совместимость с клиентами MySQL, не поддерживающими плагин аутентификации
sha2_password. #8036 (Yuriy Baranov) - В сервере совместимости с MySQL добавлена поддержка большего числа типов столбцов. #7975 (Yuriy Baranov)
- Реализована оптимизация
ORDER BYдля хранилищMerge,BufferиMaterilized Viewс базовыми таблицамиMergeTree. #8130 (Anton Popov) - Теперь мы всегда используем POSIX-реализацию функции
getrandomдля лучшей совместимости со старыми ядрами (< 3.17). #7940 (Amos Bird) - Улучшена проверка корректности места назначения в правиле TTL на перемещение. #8410 (Vladimir Chebotarev)
- Улучшены проверки на повреждённые пакеты данных при вставке для движка таблиц
Distributed. #7933 (Azat Khuzhin) - Добавлен столбец с массивом имён частей, которые мутации должны обработать в будущем, в таблицу
system.mutations. #8179 (alesapin) - Оптимизация параллельной сортировки слиянием на уровне процессора. #8552 (Nikolai Kochetov)
- Настройка
mark_cache_min_lifetimeустарела и больше ни на что не влияет. В предыдущих версиях кэш меток мог разрастаться в памяти сверхmark_cache_size, чтобы удерживать данные в течениеmark_cache_min_lifetimeсекунд. Это приводило к путанице и более высокому, чем ожидалось, потреблению памяти, что особенно нежелательно на системах с ограниченным объемом памяти. Если после установки этого релиза вы заметите деградацию производительности, следует увеличить значениеmark_cache_size. #8484 (alexey-milovidov) - Подготовка к повсеместному использованию
tid. Это необходимо для #7477. #8276 (alexey-milovidov)
Повышение производительности
- Оптимизация производительности конвейера процессоров. #7988 (Nikolai Kochetov)
- Неблокирующее обновление просроченных ключей в кэш-словарях (с возможностью чтения старых значений). #8303 (Nikita Mikhaylov)
- Соберите ClickHouse без глобального флага
-fno-omit-frame-pointer, чтобы освободить ещё один регистр. #8097 (Amos Bird) - Ускорена функция
greatCircleDistanceи добавлены тесты на производительность для неё. #7307 (Olga Khvostikova) - Улучшена производительность функции
roundDown. #8465 (alexey-milovidov) - Улучшена производительность функций
max,min,argMin,argMaxдля типа данныхDateTime64. #8199 (Vasily Nemkov) - Улучшена производительность сортировки без LIMIT, с большим LIMIT, а также при внешней сортировке. #8545 (alexey-milovidov)
- Форматирование чисел с плавающей запятой ускорено до 6 раз. #8542 (alexey-milovidov)
- Улучшена производительность функции
modulo. #7750 (Amos Bird) - Оптимизированы операции
ORDER BYи слияния для одноколоночного ключа. #8335 (alexey-milovidov) - Улучшена реализация комбинаторов
arrayReduce,-Arrayи-State. #7710 (Amos Bird) - Теперь
PREWHEREдолжен быть оптимизирован так, чтобы быть как минимум столь же эффективным, какWHERE. #7769 (Amos Bird) - Улучшена обработка отрицательных чисел функциями
roundиroundBankers. #8229 (hcz) - Улучшена производительность декодирования кодеков
DoubleDeltaиGorillaпримерно на 30–40 %. Исправлена проблема #7082. #8019 (Vasily Nemkov) - Улучшена производительность функций, работающих с
base64. #8444 (alexey-milovidov) - Добавлена функция
geoDistance. Она похожа наgreatCircleDistance, но использует аппроксимацию эллипсоидной модели WGS-84. Производительность этих двух функций сопоставима. #8086 (alexey-milovidov) - Более быстрые агрегирующие функции
minиmaxдля типа данныхDecimal. #8144 (Artem Zuikov) - Векторизована обработка в функции
arrayReduce. #7608 (Amos Bird) - Цепочки
ifтеперь оптимизируются какmultiIf. #8355 (kamalov-ruslan) - Исправлена регрессия производительности движка таблицы
Kafka, появившаяся в 19.15. Тем самым исправлена #7261. #7935 (filimonov) - Удалена генерация кода с опцией «pie», которую
gccиз пакетов Debian иногда включает по умолчанию. #8483 (alexey-milovidov) - Параллельный разбор форматов данных #6553 (Nikita Mikhaylov)
- По умолчанию включён оптимизированный парсер
Valuesс поддержкой выражений (input_format_values_deduce_templates_of_expressions=1). #8231 (tavplubix)
Улучшения сборки/тестирования/упаковки
- Исправлена сборка под
ARMи в минимальной конфигурации. #8304 (proller) - Добавлен сброс файла покрытия для
clickhouse-serverна случай, когда не вызывается std::atexit. Также немного улучшено логирование в stateless-тестах с покрытием. #8267 (alesapin) - Обновлена библиотека LLVM в каталоге contrib. Рекомендуется не использовать LLVM из пакетов операционной системы. #8258 (alexey-milovidov)
- Сделать сборку встроенного
curlполностью без вывода. #8232 #8203 (Pavel Kovalenko) - Исправлены некоторые предупреждения
MemorySanitizer. #8235 (Alexander Kuzmenkov) - Используйте макросы
add_warningиno_warningвCMakeLists.txt. #8604 (Ivan) - Добавлена поддержка объектного хранилища MinIO (S3-совместимого) (https://min.io/) для улучшения интеграционных тестов. #7863 #7875 (Pavel Kovalenko)
- Заголовочные файлы
libcимпортированы в contrib. Это позволяет сделать сборки более согласованными на различных системах (только дляx86_64-linux-gnu). #5773 (alexey-milovidov) - Удалён флаг
-fPICдля некоторых библиотек. #8464 (alexey-milovidov) - Очистить
CMakeLists.txtдля curl. См. https://github.com/ClickHouse/ClickHouse/pull/8011#issuecomment-569478910 #8459 (alexey-milovidov) - Тихие предупреждения в библиотеке
CapNProto. #8220 (alexey-milovidov) - Добавлены тесты производительности для хэш-таблиц, оптимизированных под короткие строки. #7679 (Amos Bird)
- Теперь ClickHouse будет собираться на архитектуре
AArch64, даже еслиMADV_FREEнедоступен. Это исправляет #8027. #8243 (Amos Bird) - Обновить
zlib-ng, чтобы исправить проблемы, выявленные санитайзером памяти. #7182 #8206 (Alexander Kuzменkov) - Включена внутренняя библиотека MySQL для систем, отличных от Linux, поскольку использование пакетов ОС очень ненадёжно и обычно вообще не работает. Это исправляет #5765. #8426 (alexey-milovidov)
- Исправлена сборка на некоторых системах после включения
libc++. Эта правка заменяет #8374. #8380 (alexey-milovidov) - Методы
Fieldстали более типобезопасными, что позволяет находить больше ошибок. #7386 #8209 (Alexander Kuzmenkov) - Добавлены недостающие файлы в подмодуль
libc-headers. #8507 (alexey-milovidov) - Исправлены некорректные кавычки
JSONв выводе тестов производительности. #8497 (Nikolai Kochetov) - Теперь стек вызовов отображается для
std::exceptionиPoco::Exception. В предыдущих версиях он был доступен только дляDB::Exception. Это улучшает диагностируемость. #8501 (alexey-milovidov) - Портирование
clock_gettimeиclock_nanosleepдля новых версий glibc. #8054 (Amos Bird) - Включить
part_logв пример конфигурации для разработчиков. #8609 (alexey-milovidov) - Исправлена асинхронность перезагрузки в
01036_no_superfluous_dict_reload_on_create_database*. #8111 (Azat Khuzhin) - Исправлены тесты производительности кодека. #8615 (Vasily Nemkov)
- Добавлены скрипты установки для сборки в формате
.tgzи документация по ним. #8612 #8591 (alesapin) - Удалён старый тест
ZSTD(он был создан в 2016 году для воспроизведения бага, который был в ZSTD до версии 1.0). Это исправляет #8618. #8619 (alexey-milovidov) - Исправлена сборка под Mac OS Catalina. #8600 (meo)
- Увеличено количество строк в тестах производительности кодеков, чтобы сделать результаты более заметными. #8574 (Vasily Nemkov)
- В отладочных сборках рассматривайте исключения
LOGICAL_ERRORкак ошибки утверждений (assertion failures), чтобы их было проще заметить. #8475 (Alexander Kuzmenkov) - Тест производительности, связанный с форматами, сделан более детерминированным. #8477 (alexey-milovidov)
- Обновлён
lz4, чтобы исправить сбой в MemorySanitizer. #8181 (Alexander Kuzmenkov) - Подавить известное ложноположительное срабатывание MemorySanitizer при обработке исключений. #8182 (Alexander Kuzmenkov)
- Обновить
gccиg++до версии 9 вbuild/docker/build.sh#7766 (TLightSky) - Добавлен тестовый сценарий производительности, показывающий, что
PREWHEREработает хуже, чемWHERE. #7768 (Amos Bird) - Прогресс в исправлении одного нестабильного теста. #8621 (alexey-milovidov)
- Предотвращено срабатывание MemorySanitizer на данных из
libunwind. #8539 (alexey-milovidov) - Обновлён
libc++до последней версии. #8324 (alexey-milovidov) - Собрать библиотеку ICU из исходного кода. Это исправляет #6460. #8219 (alexey-milovidov)
- Переключились с
libresslнаopenssl. После этого изменения ClickHouse должен начать поддерживать TLS 1.3 и SNI. Это исправляет #8171. #8218 (alexey-milovidov) - Исправлен отчёт UBSan при использовании
chacha20_poly1305в SSL (это происходило при подключении к https://yandex.ru/). #8214 (alexey-milovidov) - Исправлены права доступа файла пароля по умолчанию для дистрибутивов Linux в формате
.deb. #8075 (proller) - Улучшено выражение для получения PID процесса
clickhouse-serverвclickhouse-test. #8063 (Alexander Kazakov) - Обновлён contrib/googletest до v1.10.0. #8587 (Alexander Burmak)
- Исправлено срабатывание ThreadSanitizer в библиотеке
base64. Также библиотека обновлена до последней версии, что, впрочем, несущественно. Это исправляет #8397. #8403 (alexey-milovidov) - Исправлен
00600_replace_running_queryдля процессоров. #8272 (Nikolai Kochetov) - Удалена поддержка
tcmalloc, чтобы упроститьCMakeLists.txt. #8310 (alexey-milovidov) - Релизные сборки gcc теперь используют
libc++вместоlibstdc++. Раньшеlibc++использовалась только с clang. Это улучшит согласованность конфигураций сборок и переносимость. #8311 (alexey-milovidov) - Включена поддержка библиотеки ICU при сборке с MemorySanitizer. #8222 (alexey-milovidov)
- Подавлены предупреждения библиотеки
CapNProto. #8224 (alexey-milovidov) - Удалены специальные участки кода для
tcmalloc, так как он больше не поддерживается. #8225 (alexey-milovidov) - Теперь в задаче расчёта покрытия в CI сервер корректно завершается, что позволяет ему сохранить отчёт о покрытии. Это исправляет неполные отчёты о покрытии, которые мы наблюдали в последнее время. #8142 (alesapin)
- Тесты производительности всех кодеков на значениях
Float64иUInt64. #8349 (Vasily Nemkov) termcapсильно устарел и приводит к различным проблемам (например, отсутствует capability «up» и выводится^Jвместо многострочной последовательности). Предпочтительнее использоватьterminfoили поставляемый в комплектеncurses. #7737 (Amos Bird)- Исправлен интеграционный тест
test_storage_s3. #7734 (Nikolai Kochetov) - Добавлена поддержка
StorageFile(<format>, null)для вставки блока в файл заданного формата без записи данных на диск. Это требуется для тестов производительности. #8455 (Amos Bird) - Добавлен аргумент
--print-timeдля функциональных тестов, который выводит время выполнения каждого теста. #8001 (Nikolai Kochetov) - Добавлены проверки
assertвKeyConditionпри вычислении ОПЗ. Это исправит предупреждение от gcc-9. #8279 (alexey-milovidov) - Вывод параметров cmake в сборках CI. #8273 (Alexander Kuzmenkov)
- Не генерировать отладочную информацию для некоторых крупных библиотек. #8271 (alexey-milovidov)
- Сделать так, чтобы
log_to_console.xmlвсегда записывал логи в stderr, независимо от интерактивности среды. #8395 (Alexander Kuzmenkov) - Из утилиты
clickhouse-performance-testудалены некоторые неиспользуемые функции. #8555 (alexey-milovidov) - Теперь мы также будем искать
lld-Xс соответствующей версиейclang-X. #8092 (alesapin) - Улучшена сборка Parquet. #8421 (maxulan)
- Дополнительные предупреждения GCC #8221 (kreuzerkrieg)
- Пакет для Arch Linux теперь позволяет запускать сервер ClickHouse, а не только клиент. #8534 (Vladimir Chebotarev)
- Исправлен тест с процессорами. Незначительные оптимизации производительности. #7672 (Nikolai Kochetov)
- Обновление contrib/protobuf. #8256 (Matwey V. Kornilov)
- В преддверии перехода на c++20 в качестве новогоднего подарка. "Да пребудет сила C++ с ClickHouse." #8447 (Amos Bird)
Экспериментальная функция
- Добавлена экспериментальная настройка
min_bytes_to_use_mmap_io. Она позволяет читать большие файлы без копирования данных из ядра в пользовательское пространство. По умолчанию настройка отключена. Рекомендуемый порог — около 64 МБ, так какmmap/munmapработают медленно. #8520 (alexey-milovidov) - Переработаны квоты как часть системы контроля доступа. Добавлена новая таблица
system.quotas, новые функцииcurrentQuota,currentQuotaKey, новый SQL-синтаксисCREATE QUOTA,ALTER QUOTA,DROP QUOTA,SHOW QUOTA. #7257 (Vitaly Baranov) - Добавлена возможность пропускать неизвестные настройки с выводом предупреждений вместо выбрасывания исключений. #7653 (Vitaly Baranov)
- Переработаны политики строк как часть системы контроля доступа. Добавлена новая таблица
system.row_policies, новая функцияcurrentRowPolicies(), новый SQL-синтаксисCREATE POLICY,ALTER POLICY,DROP POLICY,SHOW CREATE POLICY,SHOW POLICIES. #7808 (Vitaly Baranov)
Исправление в области безопасности
- Исправлена возможность чтения структуры каталогов в таблицах с движком
File. Это исправляет #8536. #8537 (alexey-milovidov)