Релиз 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). - Ограничены слияния из wide в компактные части. В случае Вертикального слияния это приводило к повреждению результирующей части. #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). - Исправлена проблема, из-за которой некоторые таблицы не синхронизировались из MySQL в ClickHouse, поскольку преобразование префиксного индекса 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). - При создании таблицы с движком
Fileв секцииSETTINGSтеперь принимаются пользовательские настройки, связанные с форматами файлов (например,format_csv_delimiter), и эти настройки используются во всех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). - Добавлена возможность форматировать именованные Tuple как объекты JSON при использовании форматов ввода/вывода JSON; это поведение управляется настройкой
output_format_json_named_tuples_as_objects, которая по умолчанию отключена. #17175 (Alexander Kuzmenkov). - Добавлена возможность по умолчанию передавать значение enum как его идентификатор в форматах TSV и CSV. #16834 (Kruglov Pavel).
- Добавлена поддержка COLLATE для Nullable, LowCardinality, Array и Tuple, если вложенный тип — String. Также переработан код, связанный с collation, в 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: теперь поддерживается строковый формат литерала Date. #16040 (Maksim Kita).
- Появилась возможность изменять путь к файлу history в
clickhouse-clientс помощью параметра--history_file. #15960 (Maksim Kita).
Исправление ошибок
- Исправлена проблема, из-за которой в очень редких случаях сервер мог переставать принимать соединения. #17542 (Amos Bird).
- Исправлена ошибка
Function not implemented, возникавшая при выполнении запросаRENAMEв базе данныхAtomic, когда ClickHouse работает в Windows Subsystem for Linux. Исправлено #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).
- Исправлен возможный segfault при нехватке места во время вставки в таблицу
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 занижал размер mark cache. Это могло происходить при большом количестве маленьких файлов marks. #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). - Исправлена инвалидация индекса Set при наличии константных столбцов в подзапросе. Это исправляет #17246. #17249 (Amos Bird).
- Исправлен возможный некорректный анализ индекса, когда типы в сравнении для индекса различаются. Это исправляет #17122. #17145 (Amos Bird).
- Исправлено сравнение ColumnConst, приводящее к сбою. Это исправление устраняет проблему #17088 . #17135 (Amos Bird).
- В MaterializeMySQL (экспериментальная возможность) исправлено несколько проблем. Исправлены #16923 и #15883. Исправлен сбой SYNC в 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).
- Для
SOURCE(CLICKHOUSE(...))параметрыhostиportпо умолчанию устанавливаются в значения текущего экземпляра, а значение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). - Улучшено сообщение об исключении в случае отсутствия конфигурации для distributed DDL. Это исправляет #5075. #16769 (Nikita Mikhaylov).
- Улучшение удобства использования: улучшены подсказки в сообщении о синтаксической ошибке, если выражение
CODECуказано не на своём месте в запросеCREATE TABLE. Это исправляет #12493. #16768 (alexey-milovidov). - Удалены пустые каталоги для async INSERT при запуске движка Distributed. #16729 (Azat Khuzhin).
- Обходное решение для использования S3 с сервером nginx в качестве proxy. В настоящее время nginx не принимает URL-адреса с пустым path, такие как
http://domain.com?delete, однако стандартный aws-sdk-cpp формирует именно такие URL-адреса. В этом коммите используется пропатченная версия aws-sdk-cpp, которая в таких случаях формирует URL-адреса с ”/” в качестве path, например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). - Исправлено возможное переполнение стека при создании цикла из materialized views. Это закрывает #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). - В
EXPLAINдобавлено описание подзапросаVIEW. ДляVIEWограничена оптимизация push down. В план запроса добавлены локальные реплики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).
- Обновлены встроенные данные timezone до версии 2020d (также cctz обновлён до последней версии из master). #17204 (filimonov).
- Исправлено сообщение UBSan в Poco. Это закрывает #12719. #16765 (alexey-milovidov).
- Не использовать UBSan для инструментации сторонних библиотек. #16764 (alexey-milovidov).
- Исправлено сообщение UBSan в словарях типа cache. Это закрывает #12641. #16763 (alexey-milovidov).
- Исправлено сообщение UBSan при попытке преобразовать бесконечное число с плавающей запятой в целое. Это закрывает #14190. #16677 (alexey-milovidov).
Релиз ClickHouse 20.11
Релиз ClickHouse v20.11.7.16-stable, 2021-03-02
Улучшение
- В образах clickhouse-server для пользователя и группы clickhouse явно заданы фиксированные значения 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). - Некоторые функции с большими целыми числами могут вызывать ошибку сегментации. Большие целые числа — экспериментальная возможность. Это закрывает #19667. #19672 (alexey-milovidov).
- Исправлен некорректный результат функции
neighborдля аргументаLowCardinality. Исправление #10333. #19617 (Nikolai Kochetov). - Исправлено обращение к уже освобождённому 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).
- Исправлен столбец _state в system.parts (ошибка 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 партиции мутация должна сбрасываться. #18804. #18935 (fastio).
- Исправлено возможное зависание при завершении работы clickhouse-local. Исправляет #18891. #18893 (alexey-milovidov).
- Исправлен комбинатор *If для унарной функции и типов Nullable. #18806 (Azat Khuzhin).
- Асинхронные распределённые вставки могут отклоняться сервером, если для настройки
network_compression_methodглобально задано значение, отличное от значения по умолчанию. Это исправляет #18741. #18776 (alexey-milovidov). - Исправлена ошибка
Attempt to read after eof, возникавшая при попытке выполнитьCASTNULLизNullable(String)вNullable(Decimal(P, S)). Теперь функцияCASTвозвращаетNULL, если не может разобрать десятичное число из Nullable-строки. Исправление #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илиFULLJOIN. #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 в компактные части. В случае вертикального слияния это приводило к повреждению результирующей части. #18381 (Anton Popov).
- Исправлено заполнение таблицы
system.settings_profile_elements. Исправление #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для каждой из таблиц, участвующих в JOIN. Этот PR исправляет проблему #17654. #18232 (Vitaly Baranov).- Исправлен возможный неполный результат запроса при чтении из
MergeTree*в случае задержки при чтении (сообщение<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, поскольку MaterializeMySQL не поддерживал преобразование префиксных индексов MySQL. Это исправляет #15187 и #17912 #17944 (Winter Zhang).
- Исправлена проблема, из-за которой оптимизация запросов приводила к неправильному результату, если запрос содержал
ARRAY JOIN. #17887 (sundyli). - Исправлен возможный segfault в агрегатной функции
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). - Исправлена инвалидация индекса Set при наличии константных столбцов в подзапросе. Это исправляет #17246 . #17249 (Amos Bird).
- Исправлена возможная некорректная работа анализа индекса, когда типы при сравнении по индексу различаются. Это исправляет #17122. #17145 (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). - Информация об авторстве в
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). - Исправлено поведение: при запросах
INSERTчерез протокол MySQL ClickHouse всегда возвращал 0 вместо числа затронутых строк. Это исправляет #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
Обратно несовместимое изменение
- Если в разделе конфигурации
distributed_ddlбыл указанprofile, этот профиль мог перезаписывать настройки профиляdefaultпри запуске сервера. Это исправлено: теперь настройки запросов distributed 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. Она позволяет генерировать произвольные строки с текущим Query id, сгенерированным клиентом. Кроме того, теперь Query id по умолчанию выводится в 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).
Исправление ошибок
- В
system.distribution_queueпароль в data_path теперь маскируется. #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 -> движка MaterializeMySQL в ClickHouse.
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). - Добавлена поддержка разбора значений enum по их числовым идентификаторам для входных форматов CSV, TSV и JSON. #15685 (vivarum).
- Улучшено планирование задач чтения для архитектуры JBOD и хранилища
MergeTree. Новая настройкаread_backoff_min_concurrency, задающая нижний предел числа потоков чтения. #16423 (Amos Bird). - Добавлена поддержка
LowCardinality, ранее отсутствовавшая в форматеAvro. #16521 (Mike). - Обходное решение для использования
S3с сервером nginx в качестве proxy. Сейчас nginx не принимает URL-адреса с пустым path, напримерhttp://domain.com?delete, однако стандартный aws-sdk-cpp создаёт именно такие URL-адреса. В этом коммите используется пропатченная версия aws-sdk-cpp, которая в таких случаях формирует URL-адреса с ”/” в качестве path, например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). - В
system.query_thread_logдобавлен current_database. #16558 (Azat Khuzhin). - Разрешено загружать в каталог detached части, которые уже зафиксированы или устарели в текущем экземпляре. Это полезно при миграции таблиц из другого кластера, когда несколько сегментов отображаются в один. Это также согласуется с текущей реализацией 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).
- Теперь в семействе движков таблиц MergeTree можно указывать
PRIMARY KEYбезORDER BY. Закрывает #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) used. Исправлен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). - Уровень некоторых сообщений лога изменён с information на debug, чтобы сообщения уровня information не появлялись для каждого запроса. Это закрывает #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).
Улучшения сборки/тестирования/упаковки
- Добавлена проверка на flaky-тесты для тестов без сохранения состояния. Она позволит заранее выявлять потенциально нестабильные функциональные тесты, до их слияния. #16238 (alesapin).
- Используется правильная версия
croaringвместо amalgamation. #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. Обратите внимание, что в нашем CI примеры на Mac OS не собираются (собирается только бинарный файл ClickHouse), поэтому нет никаких гарантий, что это снова не сломается. Это исправляет #15804. #15808 (alexey-milovidov).
- Упрощён init-скрипт Sys/V. #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). - Исправлена проблема, из-за которой некоторые таблицы не синхронизировались из MySQL в ClickHouse, поскольку MaterializeMySQL не поддерживал преобразование префиксного индекса MySQL. Это исправляет #15187 и #17912 #17944 (Winter Zhang).
- Исправлен возможный segfault в агрегатной функции
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, если соответствующая mutation была остановлена на другой реплике. Исправлена проблема #16953. #17499 (alesapin). - Исправлена ошибка, из-за которой ClickHouse занижал размер mark cache. Это могло происходить при наличии большого количества крошечных файлов marks. #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). - Исправлена ошибка, из-за которой запросы
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по изменяемому столбцу, а изменение ещё не завершено. #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).
Релиз 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 и включенном
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 в качестве proxy. Сейчас Nginx не принимает URL-адреса с пустым path, такие как http://domain.com?delete, однако стандартный aws-sdk-cpp формирует именно такие URL-адреса. В этом коммите используется пропатченная версия aws-sdk-cpp, которая в таких случаях добавляет ”/” в path, например: 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 в фоновом пуле и очереди репликации. Это изменение нарушает совместимость со старыми версиями только в том случае, если вы используете delete TTL. В противном случае репликация останется совместимой. Проблем с несовместимостью можно избежать, если обновить все реплики сегмента одновременно или выполнитьSYSTEM STOP TTL MERGESдо завершения обновления всех реплик. Если в очереди репликации появится несовместимая запись, сначала выполнитеSYSTEM STOP TTL MERGES, затемALTER TABLE ... DETACH PARTITION ...для партиции, которой было назначено несовместимое TTL-слияние. После этого присоедините её обратно на одной реплике. #14490 (alesapin). - При обновлении с версий ниже 20.5, если выполняется rolling update и в кластере одновременно присутствуют версии 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).
- Добавлена возможность удалять свойства столбцов и table 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).
- Добавлена table function
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. Обратите внимание: эта настройка влияет только на выходной формат, а для входного форматаTSVподдерживается только представлениеNULLв виде\N. #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). - В таблицы
system.text_log,system.trace_log,system.query_logиsystem.query_thread_logдобавлено полеevent_time_microseconds. #14760 (Bharat Nallan). - В таблицы
system.asynchronous_metric_log&system.metric_logдобавленevent_time_microseconds. #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). - Исправлена работа модификаторов totals/rollup/cube в GROUP BY и функций min/max для ключей GROUP BY. Исправление #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(экспериментальная возможность): исправлен парсер имён кодировок и правил сортировки, а также добавлена поддержкаlength = 0для строкового типа. #16008 (Winter Zhang).- Добавлена возможность использовать структуру
directдля словарей с составными ключами. #16007 (Anton Popov). - Предотвращено зависание реплики на 5–10 минут при возникновении ошибки репликации после периода бездействия. #15987 (filimonov).
- Исправлены редкие сегфолты при вставке в MaterializedView или чтении из него при одновременном удалении целевой таблицы (для движка базы данных Atomic). #15984 (tavplubix).
- Устранена неоднозначность при разборе профилей настроек:
CREATE USER ... SETTINGS profile readonlyтеперь интерпретируется как использование профиля с именемreadonly, а не настройки с именемprofileс ограничениемreadonly. Это исправляет #15628. #15982 (Vitaly Baranov). MaterializeMySQL(экспериментальная возможность): Исправлен сбой при ошибке CREATE DATABASE. #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). - Исправлено удаление materialized view с внутренней таблицей в базе данных Atomic (из-за зависания потока воркера зависали все последующие операции DROP TABLE — из-за рекурсивного DROP TABLE для внутренней таблицы materialized view). #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 для базы данных с движком 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, из-за которой после запросаALTERбыло невозможно выполнять вставку данных с новой структурой вBuffer. Исправляет #15117. #15192 (alesapin). - Изменен размер поля Decimal в пакете описания столбца MySQL. #15152 (maqroll).
- Исправлена ошибка
Data compressed with different methodsприjoin_algorithm='auto'. Тип LowCardinality сохранён для ключа JOIN в левой таблице при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 та же логика применяется к сравнению field, что исправляет использование FixedString в качестве primary key. Это исправляет #14908. #15033 (Amos Bird).
- Если функция
barвызывалась со специально подобранными аргументами, было возможно переполнение буфера. Это исправление закрывает #13926. #15028 (alexey-milovidov). - Исправлена ошибка
Cannot rename ... errno: 22, strerror: Invalid argument, возникавшая при выполнении DDL-запроса в базе данных Atomic при запуске clickhouse-server в Docker на Mac OS. #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).
- Исправлен segfault в словаре
cache#14837. #14879 (Nikita Mikhaylov). MaterializeMySQL(экспериментальная возможность): исправлена ошибка при разборе событий binlog MySQL, приводившая к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). - Исправлено некорректное определение монотонности для сужающего CAST
Int -> Intу знаковых типов. Это могло приводить к некорректному результату запроса. Эта ошибка выявлена в #14513. #14783 (Amos Bird). - Трансформер столбца
Replaceдолжен заменять идентификаторы клонированными AST-деревьями. Это исправляет #14695 . #14734 (Amos Bird). - Исправлено отсутствие имени базы данных по умолчанию в метаданных materialized view при выполнении
ALTER ... MODIFY QUERY. #14664 (tavplubix). - Исправлена ошибка, из-за которой мутация
ALTER UPDATEсо столбцомNullableв выражении присваивания и константным значением (например,UPDATE x = 42) приводила к некорректному значению в столбце или к сбою с нарушением сегментации. Исправлены #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). - В запрос
EXPLAIN PLANдобавлен параметрoptimize. Если он включен, применяются оптимизации на уровне плана запроса. Включен по умолчанию. #15201 (Nikolai Kochetov). - Корректное сообщение об исключении при неверном количестве аргументов у CAST. Это закрывает #13992. #15029 (alexey-milovidov).
- Добавлена возможность отключать TTL move при вставке части данных. #15000 (Pavel Kovalenko).
- Игнорировать ограничения по ключам при выполнении мутаций. Без этого pull request невозможно выполнять мутации, когда
force_index_by_date = 1илиforce_primary_key = 1. #14973 (Amos Bird). - Разрешено удалять таблицу Replicated, если предыдущая попытка удаления не удалась из-за истечения сеанса ZooKeeper. Это исправляет #11891. #14926 (alexey-milovidov).
- Исправлено избыточное срабатывание ограничения настроек при выполнении
SELECTсSETTINGSпо distributed таблице. #14876 (Amos Bird). - Добавлена настройка запроса
load_balancing_first_offset, чтобы явно указать, какая реплика считается первой. Она используется вместе со стратегией балансировки нагрузкиFIRST_OR_RANDOM, что позволяет управлять рабочей нагрузкой реплик. #14867 (Amos Bird). - Показывать в результате
EXPLAINподзапросы дляSETиJOIN. #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). - В таблицу
system.mergesдобавленmerge_algorithmдля упрощения анализа слияний. #14705 (Amos Bird). - Исправлена потенциальная утечка памяти, вызванная наблюдением exists в ZooKeeper. #14693 (hustnn).
- Добавлена возможность параллельного выполнения distributed DDL. #14684 (Azat Khuzhin).
- Добавлен счётчик событий
QueryMemoryLimitExceeded. Закрывает #14589. #14647 (fastio). - Исправлены лишние пробелы в конце строк при форматировании запросов. #14595 (Azat Khuzhin).
- ClickHouse по-разному обрабатывает выражение партиционирования и выражение ключа. Выражение партиционирования используется для построения minmax-индекса по связанным столбцам, тогда как выражение первичного ключа сохраняется как выражение. Иногда пользователь может разбивать таблицу на более крупные партиции, например
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).
- Используется один запрос DeleteObjects к S3 вместо нескольких 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 GiB. #14929 (alexey-milovidov). - Бинарный файл ClickHouse стал меньше благодаря оптимизации на этапе компоновки.
Улучшение сборки/тестирования/упаковки
- Теперь для production-сборки ClickHouse мы используем clang-11. #15239 (alesapin).
- Теперь для сборки ClickHouse в CI мы используем clang-11. #14846 (alesapin).
- Бинарные сборки (Linux, Darwin, AArch64, FreeDSD) переведены на clang-11. #15622 (Ilya Yatsishin).
- Теперь во всех тестовых образах используется
llvm-symbolizer-11. #15069 (alesapin). - Разрешена сборка с использованием llvm-11. #15366 (alexey-milovidov).
- Переход на
clang-tidy-11вместоclang-tidy-10. #14922 (alexey-milovidov). - По умолчанию используется экспериментальный менеджер проходов LLVM. #15608 (Danila Kutenin).
- Не допускать, чтобы сборка любой единицы трансляции C++ длилась более 10 минут или использовала более 10 ГБ памяти. Это исправляет #14925. #15060 (alexey-milovidov).
- Повышена стабильность и репрезентативность тестов производительности за счёт разделения тестовых и профилирующих прогонов. #15027 (alexey-milovidov).
- Попытка сделать тесты производительности более надёжными. Это достигается за счёт динамического перемаппинга исполняемой памяти процесса с помощью
madvise, чтобы задействовать transparent huge pages — это может снизить число промахов 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).
- В
cmakeпо умолчанию включаетсяccache, если он найден в ОС. #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). - Исправлен segfault, возникавший при нехватке места во время вставки в таблицу
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 недооценивал размер mark cache. Это могло происходить при наличии большого количества мелких файлов с marks. #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-индекса при наличии const-столбцов в подзапросе. Это исправляет #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). - Незначительное улучшение. #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по изменяемому столбцу, а изменение ещё не завершено. #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, в которой (предположительно) для некоторых функций некорректно работают асинхронные unwind-таблицы. Это исправляет #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 (race condition с 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.9.4.76-stable (2020-10-29)
Исправление ошибки
- Исправлено двойное освобождение памяти при возникновении исключения в функции
dictGet. Это могло произойти, если словарь был загружен с ошибкой. #16429 (Nikolai Kochetov). - Исправлена работа GROUP BY с модификаторами totals/rollup/cube и функций min/max для ключей GROUP BY. Исправляет #16393. #16397 (Anton Popov).
- Исправлена асинхронная вставка в 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 и charset, а также добавлена поддержка
length = 0для строкового типа. #16008 (Winter Zhang). - Добавлена возможность использовать прямую структуру для словарей со сложными ключами. #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). - Исправлена неточность
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). - Исправлена ошибка с глоб-шаблонами в табличной функции 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). - Исправлено состояние гонки в 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 на Mac OS. #15024 (tavplubix). - Исправлено проталкивание предиката для случая, когда подзапрос содержит функцию finalizeAggregation. Исправляет #14847. #14937 (filimonov).
- Исправлена проблема, из-за которой сервер мог зависать при запуске при обращении к ZooKeeper, если файлы конфигурации нужно было получать из ZK (с помощью опции include
from_zk). Это исправляет #14814. #14843 (Alexander Kuzmenkov).
Улучшение
- Теперь с помощью запроса
ALTERможно изменять тип столбца версии вVersionedCollapsingMergeTree. #15442 (alesapin).
Релиз ClickHouse v20.9.2.20, 2020-09-22
Обратно несовместимое изменение
- При обновлении с версий старше 20.5, если выполняется поэтапное обновление и в кластере одновременно присутствуют версии 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, вызванный неправильным масштабом результирующего столбца. #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). - Исправлен пропуск имени базы данных по умолчанию в метаданных materialized view при выполнении команды
ALTER ... MODIFY QUERY. #14664 (tavplubix). - Исправлен возможный некорректный результат функции
hasпри использовании типов LowCardinality и Nullable. #14591 (Mike). - Очистка каталога данных после исключений ZooKeeper во время выполнения запроса CREATE для таблиц с движком ReplicatedMergeTree. #14563 (Bharat Nallan).
- Исправлены редкие ошибки segfault в функциях с комбинатором
-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).
- Исправлен захват в lambda для arrayJoin() (генерировалось исключение с сообщением о логической ошибке). #13792 (Azat Khuzhin).
Экспериментальные возможности
- Добавлен инструмент
db-generatorдля генерации случайных баз данных по заданным SELECT-запросам. Он может упростить воспроизведение проблем, когда от пользователя поступает лишь неполный отчёт об ошибке. #14442 (Nikita Mikhaylov) #10973 (ZeDRoman).
Улучшение
- Разрешено использовать конфигурацию многотомного хранилища в Distributed storage. #14839 (Pavel Kovalenko).
- Запрещён пустой аргумент
time_zoneв функциях типаtoStartOf*. #14509 (Bharat Nallan). - Обработчик MySQL возвращает
OKдля запросов видаSET @@var = value. Такой оператор игнорируется. Это необходимо, потому что некоторые драйверы MySQL после handshake отправляют запрос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). - В
MaterializeMySQLпервичный ключ неявно преобразуется вNOT NULL(как и в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: добавлена обработка сбоев соединения и каналов, корректные commits, обработка сбоев вставки, улучшена работа exchange, добавлены долговечность очереди, возможность её возобновления и новые настройки очереди. Исправлены тесты. #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).
Улучшения сборки/тестирования/упаковки
- Уменьшен размер бинарного файла в отладочной сборке за счёт удаления отладочной информации из
Functions. Это требуется только для одного внутреннего проекта в Yandex, который использует очень старый компоновщик. #14549 (alexey-milovidov). - Подготовка к сборке с clang 11. #14455 (alexey-milovidov).
- Исправлена логика в скрипте бэкпорта. В предыдущих версиях он срабатывал для любых меток с полностью красным цветом. Это было странно. #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).
- Ограничены слияния из wide в компактные части. В случае вертикального слияния это приводило к повреждению результирующей части. #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
Исправление ошибки
- Исправлено двойное освобождение памяти при исключении в функции
dictGet. Это могло произойти, если словарь был загружен с ошибкой. #16429 (Nikolai Kochetov). - Исправлена работа
group byс модификаторами totals/rollup/cube и функциями min/max для ключейgroup by. Исправление #16393. #16397 (Anton Popov). - Исправлена асинхронная вставка в 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). - Исправлен парсер имён правил сортировки & кодировок, а также добавлена поддержка
length = 0для строкового типа. #16008 (Winter Zhang). - Разрешено использование прямой структуры для словарей со сложными ключами. #16007 (Anton Popov).
- Предотвращено зависание реплики на 5–10 минут при возникновении ошибки репликации после периода бездействия. #15987 (filimonov).
- Исправлены редкие сегфолты при вставке в 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 block. Исправляет #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). - Исправлена ошибка с глоб-шаблонами в табличной функции S3: регион из URL не применялся в конфигурации клиента S3. #15646 (Vladimir Chebotarev).
- Уменьшена метрика
ReadonlyReplicaпри отсоединении таблиц в режиме только для чтения. Это исправляет #15598. #15592 (sundyli). - Сгенерировать исключение, если в ReplicatedMergeTree передаётся один параметр, а не игнорировать его. #15516 (nvartolomei).
Улучшение
- Теперь запросы
ALTER ... ON CLUSTERможно выполнять независимо от настройки<internal_replication>в конфигурации кластера. #16075 (alesapin). - При создании таблицы разворачиваются макросы
{database},{table}и{uuid}в аргументахReplicatedMergeTree. #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). - Предотвращено появление сообщения об error
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).
- Мы уже используем сравнение с дополнением между 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 на Mac OS. #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 (с помощью опции include
from_zk). Это исправляет #14814. #14843 (Alexander Kuzmenkov). - Исправлено некорректное определение монотонности для сужающего приведения
Int -> Intу знаковых типов. Это могло приводить к неверному результату запроса. Эта ошибка описана в #14513. #14783 (Amos Bird). - Исправлен некорректный порядок сортировки столбца типа
Nullable. Это исправляет #14344. #14495 (Nikita Mikhaylov).
Улучшение
- Теперь с помощью запроса
ALTERможно изменить тип столбца версии вVersionedCollapsingMergeTree. #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). - Исправлено отсутствие имени базы данных по умолчанию в метаданных materialized view при выполнении
ALTER ... MODIFY QUERY. #14664 (tavplubix). - Исправлена ошибка, при которой mutation
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 в функциях с combinator -Resample, которые могли возникать в результате overflow при очень больших параметрах. #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, чтобы вычислить TTL для них; после этогоOPTIMIZE FINALбудет корректно обрабатывать TTL. Для реплицируемых таблиц это поведение никогда не работало. #14220 (alesapin). - Расширена настройка
parallel_distributed_insert_select: добавлена возможность выполнятьINSERTв локальную таблицу. Тип настройки изменён сBoolнаUInt64, поэтому значенияfalseиtrueбольше не поддерживаются. Если эти значения указаны в конфигурации сервера, сервер не запустится. Замените их на0и1соответственно. #14060 (Azat Khuzhin). - Удалена поддержка входного/выходного формата
ODBCDriver. Это устаревший формат, который ранее использовался для взаимодействия с ODBC-драйвером ClickHouse, но уже давно заменён форматомODBCDriver2. Исправляет #13629. #13847 (hexiaoting). - При обновлении с версий старше 20.5, если выполняется rolling update и в кластер одновременно присутствуют версии 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), которая подсчитывает количество десятичных цифр в целочисленном столбце или столбце Decimal. Добавлена функция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).
- Исправлен segfault в
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 как табличную функцию с движком. #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 с INDEX типа 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 и
set 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-словарь иногда возвращал значение по умолчанию вместо имеющегося значения из источника. #13624 (Nikita Mikhaylov).
- Устранено повреждение вторичных индексов в компактных частях. Компактные части — экспериментальная возможность. #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). - Исправлен разбор политик построчного доступа из 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 до 1M. #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).
- Добавлен инструмент для создания дампа MergeTree Write-Ahead-Log (WAL). WAL — экспериментальная возможность. #13640 (BohuTANG).
- В предыдущих версиях функция
lcmпри вызове со специально подобранными аргументами могла вызывать сбой assert в отладочной сборке. Исправлено #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).
- В system.events добавлены
QueryTimeMicroseconds,SelectQueryTimeMicrosecondsиInsertQueryTimeMicroseconds. #13336 (ianton-ru). - Исправлено отладочное утверждение, срабатывающее при слишком большой по модулю отрицательной экспоненте у Decimal. Исправлено #13188. #13228 (alexey-milovidov).
- Добавлен слой кеширования для DiskS3 (кеширование файлов mark и index на локальном диске).
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и связанные с ними функции. Для Decimal добавлен тип Decimal256 (точность до 76 цифр). Новые типы доступны при включении настройкиallow_experimental_bigint_types. Это работает крайне медленно и нестабильно. Реализация не завершена. Пожалуйста, не используйте эту возможность. #13097 (Artem Zuikov).
Улучшение сборки, тестирования и упаковки
- Добавлен скрипт
clickhouse install, полезный в случае, если у вас есть только один бинарный файл. #13528 (alexey-milovidov). - Разрешён запуск
clickhouseбинарного файла без конфигурации. #13515 (alexey-milovidov). - В коде включена проверка опечаток с помощью
codespell. #13513 #13511 (alexey-milovidov). - В CI включён ShellCheck в качестве линтера для тестов
.sh. Это закрывает #13168. #13530 #13529 (alexey-milovidov). - Добавлена опция CMake, при которой конфигурация завершается ошибкой вместо автоматической реконфигурации; по умолчанию включена. #13687 (Konstantin).
- Версия встроенной 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). - Модуль LDAP в Testflows: добавлены недостающие сертификаты и 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).
- Обновлён набор тестов authentication для пользователей LDAP, чтобы проверить его работу с RBAC. #13656 (vzakaznikov).
- Удалён
-DENABLE_CURL_CLIENTдляcontrib/aws. #13628 (Vladimir Chebotarev). - Увеличены тайм-ауты проверок работоспособности для узлов ClickHouse и добавлена поддержка сохранения журналов docker-compose при обнаружении неисправных контейнеров. #13612 (vzakaznikov).
- Проверить, что #10977 недействителен. #13539 (Amos Bird).
- Пропускать PR’ы от robot-clickhouse. #13489 (Nikita Mikhaylov).
- Dockerfiles перенесены из интеграционных тестов в каталог
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 не будет работать либо максимальный размер merge окажется слишком ограниченным. Будет сгенерировано исключение с объяснением дальнейших действий. Это закрывает #10897. #12728 (alexey-milovidov). - При обновлении с версий старше 20.5, если выполняется rolling update и кластер одновременно содержит версии 20.5 или новее и версии старше 20.5, то перезапуск узлов ClickHouse со старыми версиями, когда в кластере уже есть более новые версии, может привести к ошибкам
Part ... intersects previous part. Чтобы предотвратить эту ошибку, сначала установите более новые пакеты clickhouse-server на всех узлах кластера, а затем выполните перезапуск (чтобы при перезапуске clickhouse-server запускался уже с новой версией).
Новая возможность
- Тип словаря Polygon, обеспечивающий эффективный lookup для «обратного геокодирования» — поиска региона по координатам в словаре из множества полигонов (карта мира). Используется тщательно оптимизированный алгоритм с рекурсивными сетками, позволяющий поддерживать низкое использование 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).
- Исправлено состояние гонки во внешних словарях со структурой cache, которое могло приводить к аварийному завершению сервера. #12566 (alesapin).
- Исправлено перекрытие отображаемых данных индикатором прогресса в клиенте в интерактивном режиме. Это исправляет #12562, #13369, #13584 и #12964. #13691 (alexey-milovidov).
- Исправлен неверный порядок сортировки для столбцов
LowCardinalityпри использовании ORDER BY по нескольким столбцам. Это исправляет #13958. #14223 (Nikita Mikhaylov). - Удалён жёстко заданный тайм-аут, который ошибочно переопределял настройку
query_wait_timeout_millisecondsдля словаря типа cache. #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 с INDEX типа SET завершалось сбоем при сравнении с NULL. Исправлено в #13686. #13793 (Amos Bird).
- Исправлено переполнение параметра step в функции
range(). #13790 (Azat Khuzhin). - Исправлена ошибка
Directory not empty, возникавшая при параллельном выполненииDROP DATABASEиCREATE TABLE. #13756 (alexey-milovidov). - Добавлена проверка допустимого диапазона для функции
h3KRing. Это исправляет #13633. #13752 (alexey-milovidov). - Исправлено состояние гонки между DETACH и фоновыми слияниями. После DETACH части могут восстановиться. Это продолжение #8602: тот PR не устранил проблему, но добавил тест, который в очень редких случаях начал падать, демонстрируя её. #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 иногда возвращал значение по умолчанию вместо имеющегося в источнике значения. #13624 (Nikita Mikhaylov).
- Исправлено повреждение вторичных индексов в компактных частях (compact parts — экспериментальная возможность). #13538 (Anton Popov).
- Исправлен некорректный код в функции
netloc. Исправляет #13335. #13446 (alexey-milovidov). - Устранена ошибка в функции
parseDateTimeBestEffort, возникавшая при передаче Unix-временной метки в качестве аргумента. Это исправляет #13362. #13441 (alexey-milovidov). - Исправлен некорректный возвращаемый тип при сравнении кортежей с элементами
NULL. Исправляет #12461. #13420 (Nikolai Kochetov). - Исправлена некорректная оптимизация, из-за которой возникала ошибка
aggregate function any(x) is found inside another aggregate function in queryприSET optimize_move_functions_out_of_any = 1и использовании псевдонимов внутриany(). #13419 (Artem Zuikov). - Устранена возможная гонка в
StorageMemory. #13416 (Nikolai Kochetov). - Исправлен пустой вывод для форматов
ArrowиParquetв случае, когда запрос не возвращает ни одной строки. Это было сделано, потому что для этих форматов пустой вывод недопустим. #13399 (hcz). - Исправлены запросы SELECT со столбцами-константами и префиксом первичного ключа в секции
ORDER BY. #13396 (Anton Popov). - Исправлен
PrettyCompactMonoBlockв clickhouse-local. Исправлены extremes/totals в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). - Исправлен segfault при десериализации пустого состояния функцией
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и похожих агрегатных функций, вызываемых для типов Float со значениямиNaN. Это также приводило к assert в отладочной сборке. Это исправляет #12491. #13254 (alexey-milovidov). - Исправлен assertion в KeyCondition в случае, когда первичный ключ содержит выражение с монотонной функцией, а запрос — сравнение с константой другого типа. Это исправляет #12465. #13251 (alexey-milovidov).
- В функции roundUpToPowerOfTwoOrZero() для чисел с установленным MSB теперь возвращается переданное число. Это предотвращает возможные ошибки в случае переполнения размеров массивов. #13234 (Azat Khuzhin).
- Исправлена функция if для случая, когда cond — 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, которая работала некорректно, когда истечение срока хранения затрагивало более одной партиции в пределах одного временного интервала. (Автор: @excitoon). #12982 (Alexander Kazakov). - Исправлено дублирование столбцов в словаре с range hashed, созданном из DDL-запроса. Это исправляет #10605. #12857 (alesapin).
- Устранено излишнее ограничение числа потоков для запросов к локальной реплике. #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). - Улучшена производительность при работе с большими Tuple, которые в секции
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: исправлена работа индекса bloom filter с константным выражением. #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 со словарём при выполнении 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).
- В
system.events, а также в system.metrics, processes, query_log и т. д. добавленыQueryTimeMicroseconds,SelectQueryTimeMicrosecondsиInsertQueryTimeMicroseconds. #13028 (ianton-ru). - В
system.events, а также в system.metrics, processes, query_log и т. д., добавленыSelectedRowsиSelectedBytes. #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).
- Теперь при обработке компактных частей также сообщается об обнаружении поврежденных частей. Компактные части — экспериментальная возможность. #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). - Более информативное сообщение об исключении в хранилище disk access storage. #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).
Улучшение производительности
- Снижение использования памяти для некоторых операций до 2 раз. #12424 (alexey-milovidov).
- Оптимизирован поиск по PK для запросов, точно соответствующих диапазону PK. #12277 (Ivan Babrou).
- Небольшая оптимизация очень коротких запросов с
LowCardinality. #14129 (Anton Popov). - Немного улучшена производительность агрегации по ключам UInt8/UInt16. #13091 and #13055 (alexey-milovidov).
- Проталкивание шага
LIMITв план запроса (внутри подзапросов). #13016 (Nikolai Kochetov). - Параллельный поиск по primary key и этапы skipping index для частей, как описано в #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, которая переписывает
ORDER BY x, f(x)вORDER BY x, еслиset optimize_redundant_functions_in_order_by = 1. #12404 (Artem Zuikov). - Разрешён pushdown predicate, когда подзапрос содержит clause
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).
- Небольшие исправления в TestFlows для RBAC. #13152 (vzakaznikov).
- Исправлен тест
00960_live_view_watch_events_live.py. #13108 (vzakaznikov). - Улучшена очистка кэша в скрипте развёртывания документации. #13107 (alesapin).
- Некоторые изолированные тесты переписаны на gtest. Из тестов удалены лишние
include. #13073 (Nikita Mikhaylov). - Добавлены тесты для проверки работы привилегии
SELECTв рамках функциональности RBAC в 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. Это ускорит тесты с интенсивным использованием таблиц Replicated. #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'. Допускается только strictness 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 в отладочной сборке. Это исправляет #12491. #13254 (alexey-milovidov). - Исправлена функция if для случая, когда nullable constexpr используется в качестве cond и не является литеральным 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). - Исправлен индекс bloom filter для константного выражения. Это устраняет #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).- Более информативное сообщение об исключении в хранилище disk access. #12625 (alesapin).
- Функция
groupArrayMoving*не работала для distributed queries. Её результат вычислялся с некорректным типом данных (без приведения к наибольшему типу). ФункцияgroupArrayMovingAvgвозвращала целое число, что расходилось с поведением функцииavg. Это исправляет #12568. #12622 (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). - Исправлен разбор SETTINGS после FORMAT. #12480 (Azat Khuzhin).
- Устранена взаимная блокировка при включенном
text_log. #12452 (alexey-milovidov). - Исправлено переполнение при указании очень большого
LIMITилиOFFSET. Это исправляет #10470. Это исправляет #11372. #12427 (alexey-milovidov). - Исправлен возможный segfault в случае с
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с типами нефиксированной ширины возвращалось исключение с кодомLOGICAL_ERRORвместо исключения с кодомBAD_ARGUMENTS(мы гарантируем, что исключения с кодом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).
- Исправлена ошибка, приводившая к некорректным метаданным таблиц в ZooKeepeer для таблиц ReplicatedVersionedCollapsingMergeTree. Исправлена проблема #12093. #12121 (alesapin).
- Устранено исключение “There is no query” для materialized view с JOIN или подзапросами, привязанных к системным журналам (system.query_log, metric_log и т. д.) либо к базовой таблице с engine=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). - Исправлен segfault при использовании комбинаторов
-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). - Исправлена проверка constraints, если constraint является константным expression. Это исправляет #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, чтобы отменять долгие запросы, issue #12038. #12152 (BohuTANG). - Добавлена поддержка substitutions
%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 сделаны относительными, что упрощает работу с blob-объектами 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).
- Реализованы одночастные загрузки для 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).
Улучшение сборки, тестирования и упаковки
- Реализован режим фаззинга запросов на основе AST для clickhouse-client. Список проблем, недавно найденных с помощью фаззинга, смотрите по этой метке. Большинство из них было найдено этим инструментом, а несколько — с помощью SQLancer и
00746_sql_fuzzy.pl. #12111 (Alexander Kuzmenkov). - Добавлен новый тип тестов на основе фреймворка Testflows. #12090 (vzakaznikov).
- Добавлен интеграционный тест для S3 по HTTPS. #12412 (Pavel Kovalenko).
- Сообщения ловушек sanitizer теперь пишутся в Log из отдельного потока. Это предотвратит возможную взаимную блокировку при использовании 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). - Исправлена производительность при работе с большими Tuple, которые в секции
INинтерпретируются как функции. Речь о случае, когда пользователь по какой-то непонятной причине пишетWHERE x IN tuple(1, 2, ...)вместоWHERE x IN (1, 2, ...). #12700 (Anton Popov). - Исправлен учёт памяти для input_format_parallel_parsing (за счёт привязки потока к группе). #12672 (Azat Khuzhin).
- Исправлена проблема с индексом bloom filter при константном выражении. Это исправляет #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 с литералами; регрессия производительности появилась примерно в версии 19.3. Исправляет #10574. #12062 (nvartolomei).
Улучшение сборки, тестирования и упаковки
- Установка
ca-certificatesперед первымapt-get updateв Dockerfile. #12095 (Ivan Blinkov).
Релиз ClickHouse v20.5.2.7-stable 2020-07-02
Обратно несовместимое изменение
- Теперь
COUNT(DISTINCT)и семейство агрегатных функцийuniqвозвращают результат не типаNullable. Если все переданные значения равны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.с пояснением. Эти сообщения нормальны, и беспокоиться не стоит. Это изменение обратно совместимо, но мы приводим его здесь в changelog на случай, если вас заинтересуют эти сообщения. #10663 (alexey-milovidov).- Добавлена проверка на бессмысленные кодеки и настройка
allow_suspicious_codecsдля управления этой проверкой. Это закрывает #4966. #10645 (alexey-milovidov). - Для нескольких настроек Kafka изменены значения по умолчанию. См. #11388.
- При обновлении с версий старше 20.5, если выполняется rolling update и cluster содержит как версии 20.5 и новее, так и версии старше 20.5, то при перезапуске узлов ClickHouse со старыми версиями, если старая версия запускается в присутствии более новых версий, это может привести к ошибкам
Part ... intersects previous part. Чтобы предотвратить эту ошибку, сначала установите новые пакеты clickhouse-server на все узлы cluster, а затем выполняйте перезапуски (чтобы при перезапуске clickhouse-server он запускался уже с новой версией).
Новая возможность
TTL DELETE WHEREиTTL GROUP BYдля автоматического укрупнения и rollup данных в таблицах. #10537 (expl0si0nn).- Реализация wire-протокола PostgreSQL. #10242 (Movses).
- Добавлены системные таблицы для пользователей, ролей, привилегий, профилей настроек, квот и политик доступа на уровне строк; добавлены команды SHOW USER, SHOW [CURRENT|ENABLED] ROLES, SHOW SETTINGS PROFILES. #10387 (Vitaly Baranov).
- Поддержка записи в табличную функцию ODBC #10554 (ageraab). #10901 (tavplubix).
- Добавлены метрики производительности запросов на основе Linux
perf_events(эти метрики рассчитываются с использованием аппаратных счётчиков CPU и счётчиков ОС). Это необязательная возможность, и для неё требуется, чтобы для бинарного файла clickhouse был установленCAP_SYS_ADMIN. #9545 Andrey Skobtsov. #11226 (Alexander Kuzmenkov). - В запросе
CREATEтеперь поддерживаются модификаторыNULLиNOT NULLдля типов данных. #11057 (Павел Потемкин). - Добавлены входной и выходной форматы
ArrowStream. #11088 (hcz). - Добавлена поддержка Cassandra в качестве внешнего источника словаря. #4978 (favstovol).
- Добавлена новая структура
direct, при которой для каждого запроса все данные загружаются напрямую из источника, без хранения и кэширования. #10622 (Artem Streltsov). - В словарях добавлена новая структура
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для извлечения сетевого адреса, аналогичнаяnetlocизurlparse(url)в Python. #11356 (Guillaume Tassery). - Добавлены ещё 2 виртуальных столбца для 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). - В таблицу
system.columnsдобавлен столбецposition, а в таблицуsystem.parts_columns—column_position. Он содержит порядковый номер столбца в таблице, начиная с 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). - Возможность настроить прокси-резолвер для DiskS3. #10744 (Pavel Kovalenko).
- Функция
pointInPolygonтеперь работает с неконстантным полигоном. ТеперьpointInPolygonможет принимать Array(Array(Tuple(…, …))) в качестве второго аргумента — массив полигонов и отверстий. #10623 (Alexey Ilyukhov) #11421 (Alexey Ilyukhov). - В
system.partsдобавленоmove_ttl_infoдля диагностики функциональности move TTL. #10591 (Vladimir Chebotarev). - Возможность работы с S3 через прокси. #10576 (Pavel Kovalenko).
- Добавлены синонимы типов данных
NCHARиNVARCHAR. #11025 (alexey-milovidov). - Устранена проблема #7224: в таблицу
system.eventsдобавлены метрикиFailedQuery,FailedSelectQueryиFailedInsertQuery. #11151 (Nikita Orlov). - В
system.asynchronous_metricsдобавлено больше статистикиjemalloc, а также обеспечено отображение её актуальных значений. #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 MiB. Добавлен сэмплирующий профилировщик памяти для регистрации случайных выделений/освобождений памяти. #10598 (alexey-milovidov).
SimpleAggregateFunctionтеперь поддерживает иsumMap. #10000 (Ildus Kurbangaliev).- Добавлена поддержка
ALTER RENAME COLUMNдля движка Distributed. Продолжение #10727. Исправление #10747. #10887 (alesapin).
Исправления ошибок
- Исправлено срабатывание UBSan при разборе Decimal. Это устраняет #7540. #10512 (alexey-milovidov).
- Исправлено возможное исключение при работе с плавающей точкой при parsing 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). - Теперь во время изменения метаданных загрузка репликами будет отменяться. #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. Недавно тайм-ауты не соблюдались при проверке доступности 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, если настроена безопасность на уровне строк. В предыдущих версиях пользователь получал общее количество записей в таблице вместо количества после фильтрации. Это исправляет #11352. #11644 (alexey-milovidov).
- Исправлены bloom-фильтры для String (индексы пропуска данных). #11638 (Azat Khuzhin).
- Без параметра
-qбаза данных не создаётся при запуске. #11604 (giordyb). - Исправлена ошибка
Block structure mismatchв запросах с сэмплированием, читающих данные из таблицыBuffer. #11602 (Nikolai Kochetov). - Исправлен неверный код завершения в
clickhouse-client, когдаexception.code() % 256 == 0. #11601 (filimonov). - Исправлены race condition при 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). - Исправлена асинхронная вставка в 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 Zuikov). - Исправлен возврат значения сжатого размера для кодеков. #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). - Исправлен сбой при прямых запросах SELECT к таблице с движком
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 таблицы с движком 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).
- Исправлена обработка метаданных (относительный путь при rename) и данных (относительный путь для symlink) в базе данных 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). - Исправлено возможное чтение неинициализированной памяти в словаре cache. #10834 (alexey-milovidov).
- Исправлен порядок столбцов после Block::sortColumns() (также добавлен тест, показывающий, что это влияет на реальный случай использования — движок Buffer). #10826 (Azat Khuzhin).
- Исправлена проблема с мостом ODBC, возникавшая, когда не требовалось брать идентификаторы в кавычки. Это исправляет #7984. #10821 (alexey-milovidov).
- Исправлены ошибки в DateLUT, выявленные UBSan и MSan. #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).
- Исправлен segfault в 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 для столбца ALIAS, если тип выражения по умолчанию отличается от типа столбца. #10563 (Azat Khuzhin).
- Реализовано сравнение значений DateTime64 и String (как и для DateTime). #10560 (Vasily Nemkov).
- Исправлено повреждение индекса, которое в некоторых случаях могло возникать после слияния компактных частей в другую компактную часть. #10531 (Anton Popov).
- Оптимизация GROUP BY по sharding_key по умолчанию отключена (
optimize_distributed_group_by_sharding_keyбыл добавлен, но по умолчанию отключён из-за сложностей анализа ключа сегментирования; простой пример —ifв ключе сегментирования), также исправлена её работа для WITH ROLLUP/CUBE/TOTALS. #10516 (Azat Khuzhin). - Исправлено: #10263 (после этого PR отправка в dist через INSERT откладывалась при каждом INSERT) Исправлено: #8756 (этот PR нарушает отправку в Distributed при одновременном выполнении всех следующих условий (полагаю, такая конфигурация пока маловероятна):
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). - Немного улучшена диагностика при чтении Decimal из строки. Это закрывает #10202. #11829 (alexey-milovidov).
- Исправлен вызов sleep в обработчике сигналов. Выполнение приостанавливалось на меньшее время, чем ожидалось. #11825 (alexey-milovidov).
- (Только Linux) Метрики производительности, связанные с ОС (для CPU и I/O), будут работать даже без capability
CAP_NET_ADMIN. #10544 (Alexander Kazakov). - Добавлен
hostnameкак псевдоним функцииhostName. Эту возможность предложил Виктор Тарнавский из 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 Добавлена поддержка конфигурации HTTPHandlers по умолчанию. #11628 (Winter Zhang).
- Добавлена поддержка большего числа форматов ввода для работы с движком Kafka. Исправлена проблема с преждевременным сбросом буфера. Исправлена проблема с производительностью, когда
kafka_num_consumersбольше числа партиций в топике. #11599 (filimonov). - Улучшена логика
multiple_joins_rewriter_version=2. Исправлена ошибка с неизвестными столбцами для псевдонимов в лямбда-выражениях. #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. Также изменён используемый ClickHouse по умолчанию
client.idпри взаимодействии с 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).
- Поддержка пробельных символов Unicode в запросах. Это помогает, когда запросы копируют из 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. Они помогают управлять укрупнением блоков при отправке в 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. Исправлена проблема, из-за которой CONSTRAINTs не работали для полей DEFAULT. Это исправляет #11273. Исправлена проблема, из-за которой CONSTRAINTS игнорировались для временных таблиц. Это исправляет #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). - Добавлено определение CPU во время выполнения для выбора и вызова оптимальной реализации функции. Добавлена поддержка генерации кода для нескольких целевых платформ. Это закрывает #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, который можно использовать для сортировки целочисленных типов данных в одном столбце. Требуется сборка с флагом
-DENABLE_OPENCL=1. Чтобы использовать алгоритм bitonic sort вместо других, нужно задать значение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 для функциональных тестов, а тест “stress” — это другой тип тестов. #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).
- Оставить в deb-сборке только unit_tests_dbms. #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).
- Выводить предупреждение, если сервер собран в режиме отладки или с санитайзерами. #11304 (alexey-milovidov).
- Теперь
clickhouse-testпроверяет доступность сервера перед запуском тестов. #11285 (alesapin). - Исправлен потенциально нестабильный тест
00731_long_merge_tree_select_opened_files.sh. Он падает нечасто, но при экспериментах с ThreadFuzzer мы обнаружили в этом тесте потенциальную race condition: #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).
- В make-файле для 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-пакетов. Это предложил Denis (логин в TG: @ldviolet), а реализовал Arkady Shejn. #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для компоновки blob-ресурсов. #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).
- В сборках clang включена ThinLTO, продолжение #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-временной метки в качестве аргумента. Это исправляет #13362. #13441 (alexey-milovidov). - Исправлены потенциально низкая производительность и слегка некорректные результаты для
uniqExact,topK,sumDistinctи похожих агрегатных функций при вызове для типов Float со значениями NaN. Также это приводило к срабатыванию assert в отладочной сборке. Это исправляет #12491. #13254 (alexey-milovidov). - Исправлена функция if для случая, когда cond — Nullable constexpr, не являющийся литеральным NULL. Исправляет #12463. #13226 (alexey-milovidov).
- Исправлен assert в функции
arrayElementв случае, когда элементы массива имеют тип Nullable, а индекс массива также имеет тип Nullable. Это исправляет #12172. #13224 (alexey-milovidov). - Исправлен некорректный анализ индексов при использовании функций. Это могло приводить к отсечению неверных частей при чтении из таблиц
MergeTree. Исправляет #13060. Исправляет #12406. #13081 (Anton Popov). - Исправлено излишнее ограничение числа потоков для 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: исправлена работа индекса bloom filter с константным выражением. #12659 (Winter Zhang).
- Исправлен
SIGSEGVвStorageKafka, возникавший, когда брокер недоступен (и не только). #12658 (Azat Khuzhin). - Добавлена поддержка функции
ifс аргументами типаArray(UUID). Это исправляет ошибку #11066. #12648 (alexey-milovidov). - Исправлено состояние гонки во внешних словарях со структурой cache, которое могло приводить к аварийному завершению сервера. #12566 (alesapin).
- При DROP TABLE удаляются данные для таблиц Distributed (блоки из асинхронных INSERT). #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. Для этого случая оптимизация JOIN со словарём отключена. #12458 (Artem Zuikov). - Исправлена возможная ошибка сегментации в StorageMerge. Закрывает #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). - Исправлен сегфолт в комбинаторах
-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). - Теперь операции загрузки в реплицируемых таблицах будут отменяться при изменении метаданных. #11744 (alesapin).
- Исправлен LOGICAL_ERROR, вызванный неверным выводом типов для составных литералов во входном формате Values. #11732 (tavplubix).
- Исправлена обработка
ORDER BY ... WITH FILLдля константных столбцов. #11697 (Anton Popov). - Передавайте корректные тайм-ауты при взаимодействии с XDBC bridge. В последнее время тайм-ауты не соблюдались при проверке доступности bridge и получении метаинформации. #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, если включена безопасность на уровне строк. В предыдущих версиях пользователь получал общее количество записей в таблице вместо отфильтрованного. Это исправляет #11352. #11644 (alexey-milovidov). - Исправлены bloom-фильтры для типа 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. Это закрывает #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). - Исправлен потенциальный segfault при использовании базы данных
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-словарь мог возвращать значение по умолчанию вместо обычного значения (если имелись только истёкшие ключи). Это затрагивает только строковые поля. #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). - Исправлен globbing в S3, который мог приводить к сбою при наличии более 1000 ключей и в некоторых backend-компонентах. #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
Релиз 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). - Исправлена обработка метаданных (относительный путь при rename) и данных (относительный путь при symlink) для базы данных 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). - Исправлена проблема с обратной совместимостью Tuple в таблицах Distributed. #10889 (Anton Popov).
- Исправлен
SIGSEGVвStringHashTable, возникавший, если такого ключа не существовало. #10870 (Azat Khuzhin). - Исправлено зависание
WATCHпосле удаления таблицыLiveViewиз базы данных с движкомAtomic. #10859 (tavplubix). - Исправлена ошибка в
ReplicatedMergeTree, из-за которой некоторые запросыALTERилиOPTIMIZEмогли зависать в ожидании реплики после того, как она становилась неактивной. #10849 (tavplubix). - Теперь ограничения обновляются и в том случае, если был переименован столбец, участвующий в выражении
CONSTRAINT. Исправляет #10844. #10847 (alesapin). - Исправлено потенциальное чтение неинициализированной памяти в словаре типа cache. #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по ключу сегментирования (optimize_distributed_group_by_sharding_keyбыла добавлена, но по умолчанию отключена из-за сложностей анализаsharding_key; простой пример —ifв ключе сегментирования), а также исправлена её работа сWITH ROLLUP/CUBE/TOTALS. #10516 (Azat Khuzhin). - Исправлено #10263. #10486 (Azat Khuzhin).
- Добавлены тесты, связанные с настройкой
max_rows_to_sort. #10268 (alexey-milovidov). - Добавлена обратная совместимость при создании индекса bloom filter. #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) - Добавлена поддержка пользовательского раздела Settings в Dictionaries. Также устранена проблема #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 сам контролирует тайм-ауты источников словарей. В конфигурацию cache-словаря добавлены две новые настройки:
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) - В windowFunnel() добавлена опция ‘strict_order’ #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) - Исправлена ошибка сегментации в 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)
- В Docker-образ clickhouse-server добавлены CA‑сертификаты #10476 (filimonov)
- Исправлен редкий бесконечный цикл, который мог возникнуть при использовании функции
addressToLineили столбцов AggregateFunctionState. #10466 (Alexander Kuzmenkov) - Обработка ошибки zookeeper “no node error” при выполнении распределённого запроса #10050 (Daniel Chen)
- Исправлена ошибка, из-за которой сервер не мог выполнить ATTACH TABLE после изменения значения по умолчанию столбца. #10441 (alesapin)
- Неявное приведение типа выражения по умолчанию к типу столбца для столбцов ALIAS #10563 (Azat Khuzhin)
- Не удаляйте каталог метаданных, если
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 в конвейере processors. #10131 (Nikolai Kochetov)
- Исправлен возможный segfault при включенной настройке
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’ в запросах, где смешиваются JOIN через запятую и именованные JOIN. Исправления #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*. Проверка недетерминированных функций теперь корректно обрабатывает лямбда-выражения. #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)
- Исправлена оптимизация move-to-prewhere при использовании функций arrayJoin (в некоторых случаях). Это исправляет #10092 #10195 (alexey-milovidov)
- Исправлена проблема с появлением разделителя в SCRAMBLE в native 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 #10077 (Winter Zhang)
- Исправлена некорректная проверка
index_granularity_bytesпри создании новой реплики. Исправление #10098. #10121 (alesapin) - Исправлена ошибка в запросе
CHECK TABLEпри наличии в таблице индексов пропуска. #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) - Исправлена взаимная блокировка при запуске, из-за которой не удавалось подключить базу данных с materialized view #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)
- Исправлена ошибка ‘Столбец не найден в блоке’ при использовании
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 Khuzhin) - Исправлены некоторые случаи, когда часовой пояс аргумента функции учитывался некорректно. #9574 (Vasily Nemkov)
- Исправлена ошибка ‘Разные выражения с одним и тем же псевдонимом’, возникавшая, когда запрос содержит PREWHERE и WHERE в distributed таблице и
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 (в конвейере processors). Исправляет #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)
- Теперь для разделения в
clickhouse-copierможно использовать запросSAMPLE OFFSETвместоcityHash64(PRIMARY KEY) % N == n. Чтобы воспользоваться этой возможностью, передайте--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 для Distributed при 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) - Поддержка URI S3 в формате virtual-hosted-style #9998 (Pavel Kovalenko)
- Теперь тип структуры для словарей без аргументов можно указывать в DDL-запросах словарей без круглых скобок. Исправлено #10057. #10064 (alesapin)
- Добавлена возможность использовать диапазоны чисел с ведущими нулями в пути к файлу #9989 (Olga Khvostikova)
- Снижено использование памяти в CROSS JOIN. #10029 (Artem Zuikov)
- Пытаться подключаться ко всем сегментам кластера при получении структуры удалённой таблицы, если установлен параметр skip_unavailable_shards. #7278 (nvartolomei)
- В таблицу
system.tablesдобавленыtotal_rows/total_bytes. #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)
- Добавлена полная поддержка DiskS3 для MergeTree #9646 (Pavel Kovalenko)
- Функция
splitByStringтеперь поддерживает пустые строки в качестве разделителей. #9742 (hcz) - Добавлен столбец
timestamp_nsвsystem.trace_log. Он содержит высокоточную временную метку события трассировки и позволяет строить временные диаграммы профилей потоков (“диаграммы пламени”). #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) - Включена параллельная вставка в materialized view, если это поддерживается её целевой таблицей. #10052 (vxider)
- Улучшена производительность анализа индексов с монотонными функциями. #9607#10026 (Anton Popov)
- Для ускорения токенизации в bloom-фильтрах используются SIMD-интринсики SSE2 или SSE4.2. #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 transform. Это помогает избежать объединения потоков конвейера в запросах с
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) - Разделили конфигурации фаззера и санитайзера, чтобы конфигурация сборки была совместима с Oss-fuzz. #10494 (kyprizel)
- Исправления для clang-tidy в clang-10. #10420 (alexey-milovidov)
- Выводить абсолютные пути в сообщениях об ошибках. Иначе KDevelop не сможет перейти к нужному файлу и вместо этого откроет новый. #10434 (alexey-milovidov)
- Добавлена переменная окружения
ASAN_OPTIONSдля диагностики ошибок в стресс-тестах в CI с использованием AddressSanitizer. #10440 (Nikita Mikhaylov) - В сборках clang включён ThinLTO (экспериментально). #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)
- Добавлен тест производительности для параллельной вставки в materialized view. #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 поверх Distributed #10179 (vzakaznikov)
- Исправлено ложное срабатывание MSan в MergeTreeIndexFullText. Проблема впервые появилась в #9968. #10801 (alexey-milovidov)
- clickhouse-docker-util #10151 (filimonov)
- Обновлён pdqsort до актуальной версии #10171 (Ivan)
- Обновлена libdivide до версии v3.0 #10169 (Ivan)
- Добавлена проверка для включенных полиморфных частей. #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 (vzakaznikov) - Исправлен тест интеграции
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) - В скрипте журнала изменений, если коммит слияния был перенесён в релизную ветку через cherry-pick, брать название PR из описания коммита. #9708 (Nikolai Kochetov)
- Добавлена поддержка тега
vX.X-conflictsв скрипте бэкпорта. #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).
- Исправлена работа проталкивания предиката, когда подзапрос содержит функцию 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) приводила к некорректному значению в столбце или к segfault. Исправляет #13634, #14045. #14646 (alesapin). - Исправлен неверный результат умножения Decimal, вызванный неправильным scale у результирующего столбца. #14603 (Artem Zuikov).
Улучшение
- Поддержка пользовательских кодеков в компактных частях. #12183 (Anton Popov).
Релиз ClickHouse v20.3.18.10-lts, 2020-09-08
Исправления ошибок
- Теперь выполнение запроса останавливается, если исключение возникает в самом
PipelineExecutor. Это предотвращает редкое зависание запроса. Продолжение #14334. #14402 (Nikolai Kochetov). - Исправлено поведение, при котором кэш-словарь иногда возвращал значение по умолчанию вместо существующего значения из источника. #13624 (Nikita Mikhaylov).
- Исправлен разбор политик доступа на уровне строк из users.xml, если имена баз данных или таблиц содержат точки. Исправлены #5779, #12527. #13199 (Vitaly Baranov).
- Исправлен CAST(Nullable(String), Enum()). #12745 (Azat Khuzhin).
- Исправлена гонка данных в
text_log. Это не приводило к реальным ошибкам. #9726 (alexey-milovidov).
Улучшение
- Исправлена некорректная ошибка для длинных запросов. Для корректного запроса можно было получить синтаксическую ошибку вместо
Max query size exceeded. #13928 (Nikolai Kochetov). - Функции parseDateTimeBestEffortOrNull/Zero теперь возвращают NULL/0, если значение разобрано не полностью. Это исправляет #7876. #11653 (alexey-milovidov).
Улучшение производительности
- Слегка оптимизировано выполнение очень коротких запросов с LowCardinality. #14129 (Anton Popov).
Улучшение сборки/тестирования/упаковки
- Исправлено срабатывание 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). - Для чисел с установленным старшим битом в 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 в случае, когда в качестве cond используется Nullable constexpr, не являющееся литеральным NULL. Исправление #12463. #13226 (alexey-milovidov).
- Исправлен assert в функции
arrayElementв случае, если элементы массива имеют тип Nullable и индекс массива тоже имеет тип Nullable. Это исправляет #12172. #13224 (alexey-milovidov). - Исправлено излишнее ограничение числа потоков для SELECT-запросов к локальной реплике. #12840 (Nikolai Kochetov).
- Исправлено возможное появление лишней overflow-строки в данных для запросов
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: работа индекса bloom filter для константного выражения. #12659 (Winter Zhang).
- Исправлен SIGSEGV в StorageKafka при недоступности брокера (и не только). #12658 (Azat Khuzhin).
- Исправлено состояние гонки во внешних словарях со структурой cache, из-за которого сервер мог аварийно завершиться. #12566 (alesapin).
- Исправлена ошибка, из-за которой старые части повреждались после запроса
ALTER DELETEприenable_mixed_granularity_parts=1. Исправляет #12536. #12543 (alesapin). - Улучшено сообщение об исключении для функции
inпри недопустимом количестве аргументов. #12529 (Anton Popov). - Устранена проблема с производительностью при чтении из компактных частей. #12492 (Anton Popov).
- Исправлена взаимная блокировка при включенном
text_log. #12452 (alexey-milovidov). - Устранён возможный segfault в StorageMerge. Закрывает #12054. #12401 (tavplubix).
- Исправлены
TOTALS/ROLLUP/CUBEдля агрегатных функций с аргументами-StateиNullable. Исправлена проблема #12163. #12376 (alexey-milovidov). - Исправлен порядок столбцов в модификаторе
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).
- Исправлена проверка аргументов
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для materialized view с JOIN или подзапросами, привязанных к системным журналам (system.query_log, metric_log и т. д.) или к базовой таблице engine=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). - Исправлено возможное чтение неинициализированной памяти в словаре типа cache. #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). - Теперь загрузка в реплицируемых таблицах будет отменяться при изменении метаданных. #11744 (alesapin).
- Исправлен LOGICAL_ERROR, вызванный неправильным определением типов сложных литералов во входном формате Values. #11732 (tavplubix).
- Исправлена работа
ORDER BY ... WITH FILLс константными столбцами. #11697 (Anton Popov). - Передавайте правильные тайм-ауты при взаимодействии с XDBC bridge. В последнее время тайм-ауты не соблюдались при проверке доступности bridge и получении метаинформации. #11690 (alexey-milovidov).
- Исправлена ошибка, из-за которой
system.mutationsмог находиться в некорректном состоянии. Может отображаться, что вся мутация уже завершена, хотя на сервере в очереди репликации всё ещё остаются задачиMUTATE_PART, и он пытается их выполнить. Это исправляет #11611. #11681 (alesapin). - Добавлена поддержка регистронезависимых флагов в регулярных выражениях. Исправлены #11101 и #11506. #11649 (alexey-milovidov).
- Удалена тривиальная оптимизация запроса
count, если включена безопасность на уровне строк. В предыдущих версиях пользователь получал общее количество записей в таблице вместо количества после фильтрации. Это исправляет #11352. #11644 (alexey-milovidov). - Исправлены bloom-фильтры для 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 был уменьшен”, при запуске сервера. Это закрывает #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 сам управляет тайм-аутами источников словарей. В конфигурацию словаря cache добавлены две новые настройки:
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в запросах с внешней сортировкой и ограничением. Исправлено в #11359. #11366 (Nikolai Kochetov). - Убрана избыточная блокировка при отправке частей в ReplicatedMergeTree. #11354 (alesapin).
- Исправлена поддержка
\G(вертикального вывода) в clickhouse-client при работе в многострочном режиме. Это закрывает #9933. #11350 (alexey-milovidov). - Исправлено падение при прямых выборках из StorageJoin (без 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).
- Исправлена возможная работа с неинициализированной памятью при преобразовании. Пример:
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 мог возвращать значение по умолчанию вместо обычного значения (если имелись только истекшие ключи). Это затрагивает только строковые поля. #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). - Исправлен globbing в S3, который мог не срабатывать при наличии более 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). - Добавлена логика повторных попыток commit, чтобы снизить вероятность появления дубликатов из Kafka в редких случаях, когда не удавалось выполнить commit смещения. #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). - Исправлена проблема с обратной совместимостью для Tuple в таблицах
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 таблицы после изменения значения по умолчанию для столбца. #10441 (alesapin)
- Не удаляйте каталог метаданных, если операция ATTACH для базы данных завершается с ошибкой до загрузки таблиц. #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). - Исправлена оптимизация move-to-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*. Проверка недетерминированных функций теперь корректно обрабатывает лямбда-выражения. #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).
- Исправлен возможный некорректный результат при вычислении экстремумов в конвейере процессоров. #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 на localhost-сервере ClickHouse. Эта ошибка может привести к повреждению памяти, если типы в словаре и источнике несовместимы. #10071 (alesapin).
- Исправлена ошибка в запросе
CHECK TABLE, возникавшая, если таблица содержит skip-индексы. #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).
- Исправлена ошибка ‘Столбец не найден в блоке’, возникавшая при использовании
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 для distributed таблицы и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 (в конвейере processors). Это исправляет #9730. #9757 (Nikolai Kochetov)
Релиз ClickHouse 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 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)
- В
ALTER TABLEдобавлена командаMOVE PARTITION#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, превышающий размер исходных данных. Данные будут повторяться с другим начальным значением генератора случайных чисел. #9155 (alexey-milovidov) - Добавлена функция
groupArraySample(аналогичнаяgroupArray) с алгоритмом резервуарной выборки. #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) - В таблицу
system.dictionariesдобавлен столбецlast_successful_update_time#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, при котором все столбцы хранятся в одном файле. Это помогает повысить производительность при небольших и частых вставках. Старый формат (один файл на столбец) теперь называется wide. Формат хранения данных задаётся настройкамиmin_bytes_for_wide_partиmin_rows_for_wide_part. #8290 (Anton Popov) - Добавлена поддержка хранилища S3 для таблиц
Log,TinyLogиStripeLog. #8862 (Pavel Kovalenko)
Исправление ошибки
- Исправлено непоследовательное использование пробелов в сообщениях лога. #9322 (alexey-milovidov)
- Исправлена ошибка, из-за которой массивы неименованных Tuple при создании таблицы разворачивались в структуры Nested. #8866 (achulkov2)
- Исправлена проблема, из-за которой могла возникать ошибка “Too many open files”, если шаблону glob в таблице
Fileили табличной функцииfileсоответствовало слишком много файлов. Теперь файлы открываются по мере необходимости. Это исправляет #8857 #8861 (alexey-milovidov) - Оператор DROP TEMPORARY TABLE теперь удаляет только временную таблицу. #8907 (Vitaly Baranov)
- Устаревшая партиция теперь удаляется при остановке сервера или выполнении DETACH/ATTACH для таблицы. #8602 (Guillaume Tassery)
- Изменён способ, которым диск по умолчанию вычисляет свободное место для подкаталога
data. Исправлена проблема, из-за которой объём свободного места вычислялся некорректно, если каталогdataсмонтирован на отдельное устройство (редкий случай). Это исправляет #7441 #9257 (Mikhail Korotov) - Разрешён JOIN через запятую (перекрёстный) с оператором IN() внутри. #9251 (Artem Zuikov)
- Разрешено преобразовывать CROSS в INNER JOIN, если в секции WHERE используется оператор [NOT] LIKE. #9229 (Artem Zuikov)
- Исправлен возможный некорректный результат после
GROUP BYпри включенной настройкеdistributed_aggregation_memory_efficient. Исправление #9134. #9289 (Nikolai Kochetov) - Найденные ключи в метриках словарей типа cache учитывались как промахи. #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, которая могла приводить к segfault или исключению
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. Теперь приpartial_merge_join=1можно выполнять JOINANY|ALL|SEMI LEFTиALL INNER. #8932 (Artem Zuikov) - Сегмент теперь ограничивает настройки, полученные от узла-инициатора, в соответствии с ограничениями сегмента, вместо того чтобы генерировать исключение. Это исправление позволяет отправлять запросы в сегмент с другими ограничениями. #9447 (Vitaly Baranov)
- Исправлена проблема с управлением памятью в
MergeTreeReadPool. #8791 (Vladimir Chebotarev) - Исправлено семейство функций
toDecimal*OrNull()при вызове со строковым значениемe. Исправляет #8312 #8764 (Artem Zuikov) - Убедитесь, что
FORMAT Nullне отправляет клиенту данные. #8767 (Alexander Kuzmenkov) - Исправлена ошибка, из-за которой не обновлялось значение
timestampв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) - Исправлен pushdown предикатов для 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-индекса типов Array. #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 в словаре cache #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) - Исправлена проблема, из-за которой символы заполнения в конце значения в кодировке 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вLLVMExecutableFunctionможет возникатьunexpected column#8910 (Guillaume Tassery) - Несколько исправлений для движка
Kafka: 1) исправлены дубликаты, появлявшиеся во время перебалансировки consumer group. 2) Исправлены редкие ‘дыры’, возникавшие, когда данные опрашивались из нескольких партиций за один вызов poll и коммитились частично (теперь мы всегда обрабатываем / коммитим весь опрошенный блок сообщений). 3) Исправлен сброс по размеру блока (до этого корректно работал только сброс по тайм-ауту). 4) Улучшена процедура подписки (с обратной связью по назначению партиций). 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для константы -1 #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*. ТеперьALTERSблокируются только на этапе обновления метаданных и после этого больше не блокируются. #8701 (alesapin) - Добавлена возможность преобразовывать CROSS в INNER JOIN в запросах с секцией
WHERE, содержащей неквалифицированные имена. #9512 (Artem Zuikov) - Запросы
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) - Поддержка строковых ключей в картах 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) - Инициализирован профилировщик запросов для всех потоков в группе; например, это позволяет полностью профилировать запросы на вставку. Исправляет #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)
- Если сервер запущен из терминала, выделять цветом номер потока, Query id и приоритет лога. Это повышает читаемость связанных сообщений лога для разработчиков. #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)
- Добавлена поддержка построчной безопасности для Distributed-таблиц. #8926 (Ivan)
- Теперь в значениях настроек распознаются суффиксы (например, KB, KiB…). #8072 (Mikhail Korotov)
- Предотвращено исчерпание памяти при формировании результата большого JOIN. #8637 (Artem Zuikov)
- В
clickhouse-clientв подсказки интерактивного режима добавлены названия кластеров. #8709 (alexey-milovidov) - Добавлена инициализация профилировщика запросов для всех потоков в группе, например, это позволяет полностью профилировать запросы на вставку #8820 (Ivan)
- Добавлен столбец
exception_codeв таблицуsystem.query_log. #8770 (Mikhail Korotov) - В файле конфигурации сервера по умолчанию включен сервер совместимости с MySQL на порту
9004. Исправлена команда генерации пароля в примере конфигурации. #8771 (Yuriy Baranov) - Предотвращено аварийное завершение при остановке, если файловая система доступна только для чтения. Исправляет #9094 #9100 (alexey-milovidov)
- Улучшено сообщение об исключении в случаях, когда для HTTP POST-запроса требуется указание длины. #9453 (alexey-milovidov)
- В движки
HDFSиFile, а также в табличные функцииhdfsиfileдобавлены виртуальные столбцы_pathи_file#8489 (Olga Khvostikova) - Исправлена ошибка
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% для затронутых запросов) за счёт ещё более строгого алиасинга с использованием возможностей C++20. #9304 (Amos Bird)
- Более строгий алиасинг для внутренних циклов функций сравнения. #9327 (alexey-milovidov)
- Более строгий алиасинг для внутренних циклов арифметических функций. #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) - Теперь мы линкуем ClickHouse в CI с помощью
lldдаже дляgcc. #9049 (alesapin) - Добавлена возможность рандомизировать планирование потоков и вносить сбои, когда заданы переменные окружения
THREAD_FUZZER_*. Это помогает при тестировании. #9459 (alexey-milovidov) - В тестах без сохранения состояния включена поддержка защищённых сокетов #9288 (tavplubix)
- Повысить надежность SPLIT_SHARED_LIBRARIES=OFF #9156 (Azat Khuzhin)
- Повышена надёжность теста “performance_introspection_and_logging” при случайных зависаниях сервера. Это может происходить в среде CI. См. также #9515 #9528 (alexey-milovidov)
- Проверка корректности XML в style check. #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 (Удалённый пользователь)
- Нормализовано время выполнения некоторых запросов в тестах производительности. Это сделано при подготовке к запуску всех тестов производительности в режиме сравнения. #9565 (alexey-milovidov)
- Исправлены некоторые тесты запросов для поддержки pytest #9062 (Ivan)
- В сборке с MSan включена поддержка SSL, чтобы сервер не завершался с ошибкой при запуске тестов без сохранения состояния #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)
- Изменён тип математических тестов производительности с
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 с 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. В Mac OS X включены встроенные библиотеки
rdkafkaиgsasl. #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 bridge. В последнее время тайм-ауты не учитывались при проверке доступности bridge и получении метаинформации. #11690 (alexey-milovidov).
- Добавлена поддержка регулярных выражений с регистронезависимыми флагами. Это исправляет #11101 и #11506. #11649 (alexey-milovidov).
- Исправлены bloom-фильтры для 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).
- Исправлена работа primary key, обёрнутого в функцию, с модификатором ‘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). - Исправлено крайне редкое состояние гонки в 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, возникавшая, когда не требовалось заключать идентификаторы в кавычки. Это исправляет #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).
- Исправлено исчезновение totals. Totals могли отфильтровываться, если запрос содержал 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 для столбца ALIAS, если тип выражения по умолчанию отличается от типа столбца. #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как по фиксированным, так и по нефиксированным ключам, а также когда активирован двухуровневый метод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*. Проверка недетерминированных функций теперь корректно обрабатывает лямбда-выражения. #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 на localhost. Эта ошибка могла приводить к повреждению памяти, если типы в словаре и источнике были несовместимы. #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', возникавшая при использованииJOINсTOTALS. Исправляет #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).
Улучшение сборки, тестирования и пакетирования
- Исправлен unit-тест
collapsing_sorted_stream. #9367 (Deleted user).
Релиз ClickHouse v20.1.9.54, 2020-03-28
Исправление ошибки
- Исправлена ошибка
'Different expressions with the same alias', возникавшая, когда запрос содержалPREWHEREиWHEREдля distributed таблицы, а также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) - Исправлена проблема, из-за которой символы заполнения в конце значения, закодированного в 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 у типов Array. #9407 (achimbab) - Исправлено поведение функций
matchиextract, когда haystack содержит 0 байт. Поведение было некорректным, если haystack был константой. Это исправляет #9160 #9163 (alexey-milovidov) #9345 (alexey-milovidov)
Улучшение сборки, тестирования и пакетирования
- Обработка исключений теперь корректно работает в Windows Subsystem for Linux. См. 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)
- Исправлен возможный сбой сегментации в
MergeTreeRangeReaderпри выполненииPREWHERE. Исправление для #9064. #9106 (CurtizJ) - Исправлена функция
reinterpretAsFixedString: теперь она возвращаетFixedStringвместоString. #9052 (oandrew) - Исправлен
joinGetдля Nullable-типов возвращаемых значений. Исправление #8919 #9014 (amosbird) - Исправлены фазз-тест и некорректное поведение функций 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)
- Разрешён JOIN через запятую, содержащий
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 обновлён до актуальной версии master. #8956 (alexey-milovidov) - При выполнении запроса
CREATEконстантные выражения в аргументах движка хранения сворачиваются. Пустое имя базы данных заменяется именем текущей базы данных. Исправления #6508, #3492. Также исправлена проверка локального адреса в ClickHouseDictionarySource. #9262 (tabplubix) - Исправлен segfault в
StorageMerge, который может возникать при чтении из StorageFile. #9387 (tabplubix) - Предотвращена потеря данных в
Kafkaв редких случаях, когда исключение возникает после чтения суффикса, но до коммита. Устраняет #9378. Связано с #7175 #9507 (filimonov) - Исправлена ошибка, из-за которой сервер завершал работу при попытке использовать / удалить таблицу
Kafka, созданную с неверными параметрами. Исправление #9494. Включает #9507. #9513 (filimonov)
Новая возможность
- Добавлена опция
deduplicate_blocks_in_dependent_materialized_viewsдля управления поведением идемпотентных вставок в таблицы с materialized view. Эта возможность была добавлена в релиз с исправлениями ошибок по специальной просьбе 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, позволяющая выполнять запросы ко всем узлам cluster. #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 в качестве конечной точки 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) - Добавлена функция
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 (Konstantin Malanchev) - Добавлена поддержка сжатия brotli (
br) в файловых хранилищах и табличных функциях. Это устраняет #8156. #8526 (alexey-milovidov) - Добавлены функции
groupBit*для типаSimpleAggregationFunction. #8485 (Guillaume Tassery)
Исправление ошибки
- Исправлено переименование таблиц с движком
Distributed. Устраняет проблему #7868. #8306 (tavplubix) - Теперь словари поддерживают
EXPRESSIONдля атрибутов в виде произвольной строки в диалекте SQL, отличном от ClickHouse SQL. #8098 (alesapin) - Исправлен неработающий запрос
INSERT SELECT FROM mysql(...). Это исправляет #8070 и #7960. #8234 (tavplubix) - Исправлена ошибка “Несоответствие размеров столбцов” при вставке значения
Tupleпо умолчанию изJSONEachRow. Исправляет #5653. #8606 (tavplubix) - Теперь при использовании
WITH TIESвместе сLIMIT BYбудет сгенерировано исключение. Также добавлена возможность использоватьTOPсLIMIT BY. Это исправляет #7472. #7637 (Nikita Mikhaylov) - Устранена непреднамеренная зависимость бинарного файла
clickhouse-odbc-bridgeот новой версии glibc. #8046 (Amos Bird) - Исправлена ошибка в функции check у семейства движков
*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)
- Исправлено исключение при использовании агрегатной функции в запросе к distributed таблице с более чем двумя локальными сегментами. #8164 (小路)
- Теперь bloom filter может обрабатывать пустые массивы и не выполняет лишних вычислений. #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) - Исправлена ошибка при создании Set из подзапроса в правой части выражения
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 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выполнялся сразу после завершения merge для указанной superpart. Исправляет #8103. #8104 (Vladimir Chebotarev) - Исправлено возможное аварийное завершение работы сервера при использовании
UNIONс различным количеством столбцов. Исправление #7279. #7929 (Nikolai Kochetov) - Исправлен размер возвращаемой подстроки для функции
substrпри отрицательном размере. #8589 (Nikolai Kochetov) - Теперь сервер не выполняет мутацию части в
MergeTree, если в фоновом пуле не хватает свободных потоков. #8588 (tavplubix) - Исправлена небольшая опечатка в форматировании AST
UNION ALL. #7999 (litao91) - Исправлены некорректные результаты bloom filter для отрицательных чисел. Исправление #8317. #8566 (Winter Zhang)
- Исправлено потенциальное переполнение буфера в decompress. Злоумышленник мог передать поддельные сжатые данные, что приводило к чтению за пределами буфера. Эту проблему обнаружил Eldar Zaitov из команды информационной безопасности Яндекса. #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, что исправляет ошибку в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) - Исправлено падение при операции merge, когда таблица содержит столбец
SimpleAggregateFunction(LowCardinality). Это устраняет #8515. #8522 (Azat Khuzhin) - Восстановлена поддержка всех локалей ICU и добавлена возможность применять collation к константным выражениям. Также в таблицу
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-fileдругого работающего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 для клиента и сервера на Mac. #8297 (Ivan)
- Теперь ClickHouse может работать как federated server 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) - Теперь для
getrandomмы всегда используем POSIX-реализацию, чтобы обеспечить лучшую совместимость со старыми ядрами (< 3.17). #7940 (Amos Bird) - Улучшена проверка корректности пункта назначения в правиле move 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)
Улучшение производительности
- Оптимизации производительности в конвейере processors. #7988 (Nikolai Kochetov)
- Неблокирующее обновление истёкших ключей в cache-словарях (с возможностью читать старые значения). #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) - Повышена производительность сортировки без ограничения, с большим ограничением и при внешней сортировке. #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 не вызывается. Также немного улучшено логирование в тестах без сохранения состояния при сборе покрытия. #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) - Добавлена поддержка S3-совместимого объектного хранилища Minio (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 Kuzmenkov) - На системах, отличных от Linux, включена внутренняя библиотека MySQL, поскольку использование пакетов ОС очень ненадёжно и обычно вообще не работает. Это исправляет #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как сбои проверок assert, чтобы их было проще заметить. #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) - Исправлен режим доступа к файлу пароля по умолчанию для
.deb-дистрибутивов Linux. #8075 (proller) - Улучшено выражение для получения PID процесса
clickhouse-serverвclickhouse-test. #8063 (Alexander Kazakov) - Обновлён пакет contrib/googletest до v1.10.0. #8587 (Alexander Burmak)
- Исправлена ошибка, выявленная ThreadSaninitizer, в библиотеке
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уже давно устарел и приводил к различным проблемам (например, отсутствию возможности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при вычислении RPN. Это исправит предупреждение 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 в честь Нового года. “Да пребудет с ClickHouse сила C++.” #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)