Перейти к основному содержанию
Перейти к основному содержанию

Журнал изменений за 2020 год

Релиз ClickHouse 20.12

Релиз ClickHouse v20.12.5.14-stable, 2020-12-28

Исправление ошибок

  • Отключена запись с AIO во время слияний, так как это может приводить к крайне редкой порче данных столбцов первичного ключа во время слияния. #18481 (alesapin).
  • Исправлена ошибка value is too short при выполнении функций toType(...) (toDate, toUInt32 и т.п.) с аргументом типа Nullable(String). Теперь такие функции возвращают NULL при ошибках разбора вместо генерации исключения. Исправляет #7673. #18445 (tavplubix).
  • Ограничены слияния из широких частей в компактные. В случае вертикального слияния это приводило к повреждённому результирующему куску. #18381 (Anton Popov).
  • Исправлено заполнение таблицы system.settings_profile_elements. Этот PR исправляет #18231. #18379 (Vitaly Baranov).
  • Исправлены возможные аварийные завершения работы в агрегатных функциях с комбинатором Distinct при использовании двухуровневой агрегации. Исправляет #17682. #18365 (Anton Popov).
  • Исправлена ошибка, при которой запрос MODIFY COLUMN ... REMOVE TTL фактически не удалял TTL столбца. #18130 (alesapin).

Улучшения сборки/тестирования/упаковки

  • Обновлена информация о часовых поясах до версии 2020e. #18531 (alesapin).

Релиз ClickHouse v20.12.4.5-stable, 2020-12-24

Исправление ошибок

  • Исправлена проблема, при которой процесс clickhouse-odbc-bridge был недоступен для сервера на машинах с двойным стеком IPv4/IPv6. Также исправлена проблема, при которой обновления ODBC-словарей выполнялись с использованием некорректных запросов и/или приводили к сбоям. Возможно, закрывает #14489. #18278 (Denis Glazachev).
  • Исправлено сравнение ключей между типами Enum и Int. Это исправляет #17989. #18214 (Amos Bird).
  • Исправлен сбой при преобразовании уникального ключа в движке базы данных MaterializeMySQL. Это исправляет #18186 и #16372. #18211 (Winter Zhang).
  • Исправлена ошибка std::out_of_range: basic_string при разборе URL S3. #18059 (Vladimir Chebotarev).
  • Исправлена проблема, из-за которой некоторые таблицы не синхронизировались в ClickHouse из MySQL из-за того, что преобразование префиксного индекса MySQL не поддерживалось для MaterializeMySQL. Это исправляет #15187 и #17912. #17944 (Winter Zhang).
  • Исправлена проблема, при которой оптимизация запроса давала неверный результат, если запрос содержит ARRAY JOIN. #17887 (sundyli).
  • Исправлена возможная ошибка сегментации в агрегатной функции topK. Это закрывает #17404. #17845 (Maksim Kita).
  • Исправлена проблема, из-за которой таблица system.stack_trace была пустой, когда сервер запущен в режиме демона. #17630 (Amos Bird).

Релиз ClickHouse v20.12.3.3-stable, 2020-12-13

Изменения, нарушающие обратную совместимость

  • Настройка use_compact_format_in_distributed_parts_names по умолчанию включена (см. документацию для получения подробной информации). #16728 (Azat Khuzhin).
  • Разрешено указывать пользовательские настройки, связанные с файловыми форматами (например, format_csv_delimiter), в секции SETTINGS при создании таблицы, использующей движок File, и применять эти настройки во всех операциях INSERT и SELECT. Настройки формата файлов, изменённые в текущей пользовательской сессии или в секции SETTINGS самого DML-запроса, больше не влияют на запрос. #16591 (Alexander Kuzmenkov).

Новая функциональность

  • Добавлена поддержка сжатия/распаковки *.xz. Это позволяет использовать *.xz в функции file(). Закрывает #8828. #16578 (Abi Palagashvili).
  • Введён запрос ALTER TABLE ... DROP|DETACH PART 'part_name'. #15511 (nvartolomei).
  • Добавлен новый синтаксис ALTER UPDATE/DELETE IN PARTITION. #13403 (Vladimir Chebotarev).
  • Разрешено форматировать именованные кортежи как JSON-объекты при использовании форматов ввода/вывода JSON. Поведение управляется настройкой output_format_json_named_tuples_as_objects, по умолчанию отключено. #17175 (Alexander Kuzmenkov).
  • Добавлена возможность по умолчанию задавать значение enum как его идентификатор в форматах TSV и CSV. #16834 (Kruglov Pavel).
  • Добавлена поддержка COLLATE для Nullable, LowCardinality, Array и Tuple, где вложенным типом является String. Также выполнен рефакторинг кода, связанного с коллациями, в ColumnString.cpp. #16273 (Kruglov Pavel).
  • Новая функция tcpPort возвращает TCP-порт, на котором этот сервер принимает соединения. #17134 (Ivan).
  • Добавлены новые математические функции: acosh, asinh, atan2, atanh, cosh, hypot, log1p, sinh. #16636 (Konstantin Malanchev).
  • Добавлена возможность распределять слияния между разными репликами. Введена настройка MergeTree execute_merges_on_single_replica_time_threshold. #16424 (filimonov).
  • Добавлена настройка aggregate_functions_null_for_empty для совместимости со стандартом SQL. Эта опция переписывает все агрегатные функции в запросе, добавляя к ним суффикс -OrNull. Реализует 10273. #16123 (flynn).
  • Обновлён разбор значений типов DateTime и DateTime64 для поддержки строкового литерала даты. #16040 (Maksim Kita).
  • Добавлена возможность изменить путь к файлу истории в clickhouse-client с помощью параметра --history_file. #15960 (Maksim Kita).

Исправление ошибок

  • Исправлена проблема, из-за которой сервер в крайне редких случаях мог перестать принимать соединения. #17542 (Amos Bird).
  • Исправлена ошибка Function not implemented при выполнении запроса RENAME в базе данных Atomic при работе ClickHouse в подсистеме Windows для Linux (WSL). Устраняет #17661. #17664 (tavplubix).
  • Не восстанавливать части из WAL, если параметр in_memory_parts_enable_wal отключён. #17802 (detailyang).
  • Исправлена некорректная инициализация параметра max_compress_block_size в MergeTreeWriterSettings значением min_compress_block_size. #17833 (flynn).
  • Сообщение об исключении, связанном с максимальным размером удаляемой таблицы, отображалось некорректно. #17764 (alexey-milovidov).
  • Исправлена возможная ошибка сегментации при недостатке места во время вставки в таблицу Distributed. #17737 (tavplubix).
  • Исправлена проблема, при которой ClickHouse не удавалось восстановить соединение с серверами MySQL. #17681 (Alexander Kazakov).
  • Могло некорректно определяться, является ли кластер кольцевым (кросс-)реплицируемым при выполнении запроса ON CLUSTER из-за условия гонки при pool_size > 1. Исправлено. #17640 (tavplubix).
  • Исключение fmt::v7::format_error может логироваться в фоновом режиме для таблиц MergeTree. Это исправляет #17613. #17615 (alexey-milovidov).
  • При использовании clickhouse-client в интерактивном режиме с многострочными запросами однострочный комментарий ошибочно распространялся до конца запроса. Это исправляет #13654. #17565 (alexey-milovidov).
  • Исправлено зависание запроса ALTER, когда соответствующая мутация была принудительно остановлена на другой реплике. Исправляет #16953. #17499 (alesapin).
  • Исправлена ошибка, из-за которой ClickHouse занижал размер кэша меток. Она могла возникать при большом количестве маленьких файлов с метками. #17496 (alesapin).
  • Исправлено поведение ORDER BY при включённой настройке optimize_redundant_functions_in_order_by. #17471 (Anton Popov).
  • Исправлены дубликаты после DISTINCT, которые могли возникать из-за некорректной оптимизации. Исправлено в #17294. #17296 (li chengxiang). #17439 (Nikolai Kochetov).
  • Исправлено падение при чтении из таблицы JOIN с типами LowCardinality. Исправляет #17228. #17397 (Nikolai Kochetov).
  • исправлено переполнение стека в toInt256(inf). Int256 — экспериментальная возможность. Закрыто #17235. #17257 (flynn).
  • Исправлена возможная ошибка Unexpected packet Data received from client, которая могла появляться в журнале при выполнении распределённых запросов с LIMIT. #17254 (Azat Khuzhin).
  • Исправлена проблема с инвалидацией индекса множества при наличии константных столбцов в подзапросе. Исправляет #17246. #17249 (Amos Bird).
  • Исправлен возможный некорректный анализ индекса, когда типы операндов сравнения по индексу различаются. Это исправляет #17122. #17145 (Amos Bird).
  • Исправлено сравнение ColumnConst, из-за которого происходил сбой. Это исправило #17088. #17135 (Amos Bird).
  • Несколько исправлений для MaterializeMySQL (экспериментальная функция). Исправлены #16923, #15883. Исправлен сбой синхронизации MaterializeMySQL при изменении MySQL binlog_checksum. #17091 (Winter Zhang).
  • Исправлена ошибка, из-за которой запросы с ON CLUSTER могли бесконечно зависать на нелидирующих репликах таблиц ReplicatedMergeTree. #17089 (alesapin).
  • Исправлена ошибка, приводившая к падению при выполнении запроса CREATE TABLE ... AS some_table, когда some_table была создана с помощью AS table_function(). Исправляет #16944. #17072 (tavplubix).
  • Ошибка: незавершённая реализация функции fuzzBits, связанная задача: #16980. #17051 (hexiaoting).
  • Исправлена работа библиотеки libunwind из LLVM в случае, когда регистром CFA является RAX. Это ошибка в библиотеке libunwind из LLVM. У нас уже есть обходные решения для этой ошибки. #17046 (alexey-milovidov).
  • Избегайте лишних сетевых ошибок при выполнении удалённых запросов, которые могут быть отменены в процессе, например запросов с LIMIT. #17006 (Azat Khuzhin).
  • Исправлена настройка optimize_distributed_group_by_sharding_key (которая по умолчанию отключена) для запроса, содержащего только OFFSET. #16996 (Azat Khuzhin).
  • Исправление проблемы с таблицами Merge поверх таблиц Distributed при использовании JOIN. #16993 (Azat Khuzhin).
  • Исправлен неверный результат для больших целых чисел (128, 256 бит) при приведении из double. Поддержка больших целых чисел является экспериментальной. #16986 (Mike).
  • Исправлен возможный сбой сервера после ALTER TABLE ... MODIFY COLUMN ... NewType, когда в SELECT используется выражение WHERE, ссылающееся на изменяемый столбец, а операция ALTER ещё не завершилась. #16968 (Amos Bird).
  • Данные blame вычислялись некорректно в clickhouse-git-import. #16959 (alexey-milovidov).
  • Исправлена оптимизация ORDER BY для монотонных функций. Устранена проблема #16107. #16956 (Anton Popov).
  • Исправлена оптимизация GROUP BY при включённой настройке optimize_aggregators_of_group_by_keys и использовании соединений (JOIN). Исправляет #12604. #16951 (Anton Popov).
  • Исправлена возможная ошибка Illegal type of argument для запросов с ORDER BY. Устраняет #16580. #16928 (Nikolai Kochetov).
  • Исправлен странный код в InterpreterShowAccessQuery. #16866 (tavplubix).
  • Предотвращены сбои сервера ClickHouse при использовании функции timeSeriesGroupSum. Эта функция удалена в более новых релизах ClickHouse. #16865 (filimonov).
  • Исправлены редкие «тихие» аварийные завершения при включённом профилировщике запросов, когда ClickHouse установлен на ОС с версией glibc, в которой (по-видимому) повреждены таблицы асинхронной размотки стека для некоторых функций. Это исправляет #15301. Это исправляет #13098. #16846 (alexey-milovidov).
  • Исправлена ошибка, вызывающая сбой при использовании any без аргументов. Относится к #16803. cc @azat. #16826 (Amos Bird).
  • Если при записи метаданных таблицы на диск не удаётся выделить память, в результате может быть записан повреждённый файл метаданных. #16772 (alexey-milovidov).
  • Исправлена тривиальная оптимизация запроса с предикатом партиции. #16767 (Azat Khuzhin).
  • Исправлена работа оператора IN для нескольких столбцов и кортежей при включённой настройке transform_null_in. Устранена проблема #15310. #16722 (Anton Popov).
  • Возвращать количество затронутых строк для запросов INSERT через протокол MySQL. Раньше ClickHouse всегда возвращал 0; теперь это поведение исправлено. Исправлена проблема #16605. #16715 (Winter Zhang).
  • Исправлена ошибка удалённого запроса при использовании агрегатной функции с суффиксом 'if'. Исправляет #16574 #16231 #16610 (Winter Zhang).
  • Исправлено несогласованное поведение, вызванное параметром select_sequential_consistency при работе с оптимизированным тривиальным запросом COUNT и таблицей system.tables. #16309 (Hao Chen).

Улучшение

  • Удалять пустые парты после их обрезки по TTL, мутации или алгоритму схлопывающего слияния. #16895 (Anton Popov).
  • Включен компактный формат директорий для асинхронной отправки в таблицах типа Distributed: use_compact_format_in_distributed_parts_names по умолчанию имеет значение 1. #16788 (Azat Khuzhin).
  • Прерывать multipart‑загрузку, если в S3 не были записаны данные. #16840 (Pavel Kovalenko).
  • Повторно определять IP-адрес format_avro_schema_registry_url при возникновении ошибок. #16985 (filimonov).
  • Скрывать пароль в data_path в таблице system.distribution_queue. #16727 (Azat Khuzhin).
  • Выдавать ошибку, если преобразователь столбцов пытается заменить несуществующий столбец. #16183 (hexiaoting).
  • Отключайте параллельный разбор, когда недостаточно памяти для одновременной работы всех потоков. Также возможны исключения вроде «Memory limit exceeded», если кто-то попытается вставить слишком большие строки (> min_chunk_bytes_for_parallel_parsing), потому что каждый фрагмент для разбора должен быть независимым набором строк (одной или нескольких). #16721 (Nikita Mikhaylov).
  • Скрипт установки должен всегда создавать подкаталоги в каталогах конфигурации. Это относится только к Docker-сборке с пользовательской конфигурацией. #16936 (filimonov).
  • Исправлена грамматика в сообщениях об ошибках в форматах ввода JSONEachRow, JSONCompactEachRow и RegexpRow. #17205 (nico piderman).
  • Заданы значения по умолчанию параметров host и port для SOURCE(CLICKHOUSE(...)), соответствующие текущему экземпляру, а также значение по умолчанию параметра user'default'. #16997 (vdimir).
  • Выводить информативное сообщение об ошибке при выполнении ATTACH/DETACH TABLE <DICTIONARY>. До этого PR команда detach table <dict> выполнялась, но приводила к некорректному состоянию метаданных в памяти. #16885 (Amos Bird).
  • Добавлена функция cutToFirstSignificantSubdomainWithWWW(). #16845 (Azat Khuzhin).
  • Сервер не запускался и выдавал сообщение об исключении при некорректной конфигурации (при отсутствии metric_log.collect_interval_milliseconds). #16815 (Ivan).
  • Улучшено сообщение об ошибке при отсутствии конфигурации для распределённого DDL. Это исправляет #5075. #16769 (Nikita Mikhaylov).
  • Улучшение удобства использования: улучшены подсказки в сообщении об ошибке синтаксиса, если выражение CODEC указано в неправильном месте в запросе CREATE TABLE. Исправляет проблему #12493. #16768 (alexey-milovidov).
  • Удалены пустые каталоги для асинхронного INSERT при запуске движка Distributed. #16729 (Azat Khuzhin).
  • Обходное решение для использования S3 с сервером nginx в роли прокси. В текущей версии nginx не принимает URL-адреса с пустым путём, например http://domain.com?delete, тогда как стандартная (vanilla) версия aws-sdk-cpp генерирует именно такие URL-адреса. Этот коммит использует пропатченную версию aws-sdk-cpp, которая в таких случаях формирует URL-адреса с путём "/", например http://domain.com/?delete. #16709 (ianton-ru).
  • Разрешить функциям reinterpretAs* работать с целыми числами и числами с плавающей запятой одинакового размера. Реализует 16640. #16657 (flynn).
  • Теперь конфигурацию <auxiliary_zookeepers> можно изменять в config.xml и применять без перезапуска сервера. #16627 (Amos Bird).
  • Добавлена поддержка SNI в https‑подключениях к удалённым ресурсам. Это позволит подключаться к серверам Cloudflare, требующим SNI. Исправлено #10055. #16252 (alexey-milovidov).
  • Добавлена возможность подключаться к защищённой конечной точке clickhouse-server, которая требует SNI. Это возможно, когда clickhouse-server размещён за TLS‑прокси. #16938 (filimonov).
  • Исправлено возможное переполнение стека при создании цикла материализованных представлений. Закрывает #15732. #16048 (alexey-milovidov).
  • Упростить реализацию обработки фоновых задач для движков таблиц семейства MergeTree. Для пользователя не должно быть заметных изменений. #15983 (alesapin).
  • Улучшение для MaterializeMySQL (экспериментальная возможность). Выбрасывать исключение с указанием необходимых прав для синхронизации, когда у пользователя MySQL для синхронизации некорректные привилегии. #15977 (TCeason).
  • Функция indexOf() теперь использует BloomFilter. #14977 (achimbab).

Повышение производительности

  • Используется алгоритм Floyd–Rivest, который наилучшим образом подходит для сценария частичной сортировки в ClickHouse. Бенчмарки находятся в https://github.com/danlark1/miniselect и здесь. #16825 (Danila Kutenin).
  • Теперь семейство движков ReplicatedMergeTree использует отдельный пул потоков для реплицированных выборок данных. Размер пула ограничен настройкой background_fetches_pool_size, которую можно изменить при перезапуске сервера. Значение по умолчанию — 3, и это означает, что максимальное число параллельных выборок равно 3 (и этого достаточно для загрузки сети 10G). Исправляет #520. #16390 (alesapin).
  • Исправлен неконтролируемый рост состояния quantileTDigest. #16680 (hrissan).
  • Добавлено описание подзапроса VIEW в EXPLAIN. Ограничена оптимизация проталкивания LIMIT для VIEW. Добавлены локальные реплики Distributed в план запроса. #14936 (Nikolai Kochetov).
  • Исправлена работа optimize_read_in_order/optimize_aggregation_in_order с max_threads > 0 и выражением в ORDER BY. #16637 (Azat Khuzhin).
  • Улучшена производительность чтения из таблиц Merge поверх очень большого числа таблиц MergeTree. Исправляет #7748. #16988 (Anton Popov).
  • Теперь можно безопасно отсекать партиции при точном совпадении. Полезный пример: предположим, таблица разбита на партиции по intHash64(x) % 100, и в запросе есть условие на intHash64(x) % 100 дословно, а не на x. #16253 (Amos Bird).

Экспериментальная функция

  • Добавлен движок таблиц EmbeddedRocksDB (может использоваться для словарей). #15073 (sundyli).

Улучшения сборки/тестирования/упаковки

  • Улучшено тестовое покрытие при сборке образов. #17233 (alesapin).
  • Обновлены встроенные данные часовых поясов до версии 2020d (также обновлён cctz до последнего состояния ветки master). #17204 (filimonov).
  • Исправлен отчёт UBSan в Poco. Закрывает #12719. #16765 (alexey-milovidov).
  • Инструментирование сторонних библиотек с помощью UBSan отключено. #16764 (alexey-milovidov).
  • Исправлен отчёт UBSan в кэш-словарях. Закрывает #12641. #16763 (alexey-milovidov).
  • Исправлен отчёт UBSan при попытке преобразовать бесконечное значение с плавающей запятой в целое. Закрывает #14190. #16677 (alexey-milovidov).

Релиз ClickHouse 20.11

Релиз ClickHouse v20.11.7.16-stable, 2021-03-02

Улучшение

  • Для пользователя и группы clickhouse в образах clickhouse-server явно установлены фиксированные UID/GID (101). #19096 (filimonov).

Исправление ошибки

  • Исправлен сбой индекса BloomFilter. Исправляет #19757. #19884 (Maksim Kita).
  • Могла возникать взаимоблокировка при включённом system.text_log. Это исправляет #19874. #19875 (alexey-milovidov).
  • В предыдущих версиях нетипичные аргументы функции arrayEnumerateUniq могли приводить к сбою или бесконечному циклу. Этот коммит исправляет #19787. #19788 (alexey-milovidov).
  • Исправлено переполнение стека при использовании точного сравнения арифметического и строкового типов. #19773 (tavplubix).
  • Устранена ошибка сегментации в функции bitmapAndnot. Исправляет #19668. #19713 (Maksim Kita).
  • Некоторые функции с большыми целыми числами могут приводить к ошибке сегментации (segfault). Поддержка больших целых чисел является экспериментальной возможностью. Закрывает #19667. #19672 (alexey-milovidov).
  • Исправлен некорректный результат работы функции neighbor для аргумента LowCardinality, что устраняет проблему #10333. #19617 (Nikolai Kochetov).
  • Исправлена ошибка use-after-free у CompressedWriteBuffer в Connection после отключения. #19599 (Azat Khuzhin).
  • Запрос DROP/DETACH TABLE table ON CLUSTER cluster SYNC мог зависать; проблема исправлена. Устранена проблема #19568. #19572 (tavplubix).
  • Исправлено выражение id в запросе CREATE DICTIONARY. #19571 (Maksim Kita).
  • Исправлена ошибка сегментации (SIGSEGV) при значениях merge_tree_min_rows_for_concurrent_read и merge_tree_min_bytes_for_concurrent_read, равных 0 или UINT64_MAX. #19528 (Azat Khuzhin).
  • Могло произойти переполнение буфера (при чтении из памяти), если функция addMonth вызывалась со специально подобранными аргументами. Это исправляет #19441. Это исправляет #19413. #19472 (alexey-milovidov).
  • Помечать распределённый пакет как повреждённый, если в одном из файлов обнаружен пустой блок данных. #19449 (Azat Khuzhin).
  • Исправлено возможное переполнение буфера в библиотеке Uber H3. См. https://github.com/uber/h3/issues/392. Это закрывает #19219. #19383 (alexey-milovidov).
  • Исправлен столбец system.parts _state (при запросе этого столбца из-за некорректного порядка возникала LOGICAL_ERROR). #19346 (Azat Khuzhin).
  • Исправлена ошибка, приводившая к сообщению Cannot convert column now64() because it is constant but values of constants are different in source and result. Продолжение #7156. #19316 (Nikolai Kochetov).
  • Исправлена ошибка, из-за которой одновременные запросы ALTER и DROP могли зависать при работе с таблицей ReplicatedMergeTree. #19237 (alesapin).
  • Исправлено бесконечное чтение из файла в формате ORC (регрессия появилась в #10580). Исправляет #19095. #19134 (Nikolai Kochetov).
  • Исправлена ошибка запуска, из-за которой ClickHouse не удавалось прочитать кодек сжатия из LowCardinality(Nullable(...)) и выбрасывалось исключение Attempt to read after EOF. Исправляет #18340. #19101 (alesapin).
  • Исправлена ошибка There is no checkpoint при вставке данных через HTTP-интерфейс с использованием форматов Template или CustomSeparated. Исправляет #19021. #19072 (tavplubix).
  • Ограничить запросы MODIFY TTL для таблиц MergeTree, созданных в старом синтаксисе. Ранее такие запросы успешно выполнялись, но на самом деле не приводили ни к каким изменениям. #19064 (Anton Popov).
  • Убедитесь, что функция groupUniqArray возвращает корректный тип для аргумента типа Enum. Это закрывает #17875. #19019 (alexey-milovidov).
  • Исправлена возможная ошибка Expected single dictionary argument for function при использовании функции ignore с аргументом типа LowCardinality. Исправление для #14275. #19016 (Nikolai Kochetov).
  • Исправлена проблема вставки столбца LowCardinality в таблицу с движком TinyLog. Исправлено #18629. #19010 (Nikolai Kochetov).
  • Отключена оптимизация optimize_move_functions_out_of_any, поскольку она не всегда работает корректно. Это закрывает #18051. Это закрывает #18973. #18981 (alexey-milovidov).
  • Исправлена очень редкая взаимоблокировка при завершении работы. #18977 (tavplubix).
  • Исправлена ошибка, из-за которой мутация с экранированным текстом (например, ALTER ... UPDATE e = CAST('foo', 'Enum8(\'foo\' = 1')) сериализовывалась некорректно. Исправлено #18878. #18944 (alesapin).
  • Операция ATTACH PARTITION должна сбрасывать мутацию. #18804. #18935 (fastio).
  • Исправлено возможное зависание clickhouse-local при завершении работы. Это исправляет #18891. #18893 (alexey-milovidov).
  • Исправлена работа комбинатора *If с унарной функцией и типами Nullable. #18806 (Azat Khuzhin).
  • Асинхронные распределённые INSERT-запросы могут быть отклонены сервером, если глобальная настройка network_compression_method имеет значение, отличное от значения по умолчанию. Это исправляет #18741. #18776 (alexey-milovidov).
  • Исправлена ошибка Attempt to read after eof при попытке привести значение NULL из типа Nullable(String) к типу Nullable(Decimal(P, S)). Теперь функция CAST возвращает NULL, когда не может разобрать десятичное число из строки типа Nullable(String). Исправляет #7690. #18718 (Winter Zhang).
  • Исправлена проблема в Logger при несовпадении количества аргументов. #18717 (sundyli).
  • Добавлена поддержка типа данных FixedString. При репликации данных из MySQL в ClickHouse возникает исключение: "Code: 50, e.displayText() = DB::Exception: Unsupported type FixedString(1)". Этот патч исправляет ошибку #18450, а также #6556. #18553 (awesomeleo).
  • Исправлена возможная ошибка Pipeline stuck при использовании ORDER BY после подзапроса с соединением типа RIGHT или FULL. #18550 (Nikolai Kochetov).
  • Исправлена ошибка, из‑за которой запросы ALTER могли зависать после принудительного завершения соответствующей мутации. Обнаружена с помощью thread fuzzer. #18518 (alesapin).
  • Отключена запись с использованием AIO во время слияний, так как это может приводить к крайне редкой порче данных в столбцах первичного ключа. #18481 (alesapin).
  • Отключено свёртывание констант для подзапросов на этапе анализа, если результат не может быть вычислен. #18446 (Azat Khuzhin).
  • Исправлена ошибка value is too short при выполнении функций toType(...) (toDate, toUInt32 и т. д.) с аргументом типа Nullable(String). Теперь такие функции возвращают NULL при ошибках разбора вместо выбрасывания исключения. Исправляет #7673. #18445 (tavplubix).
  • Ограничено выполнение слияний из wide-частей в compact-части. В случае вертикального слияния это приводило к повреждению результирующей части. #18381 (Anton Popov).
  • Исправлено заполнение таблицы system.settings_profile_elements. Этот PR исправляет проблему #18231. #18379 (Vitaly Baranov).
  • Исправлена ошибка в анализе индексов для бинарных функций с константным аргументом, приводившая к ошибочным результатам запросов. Это исправляет #18364. #18373 (Amos Bird).
  • Исправлены возможные падения в агрегатных функциях с комбинатором Distinct при использовании двухуровневой агрегации. Исправляет #17682. #18365 (Anton Popov).
  • SELECT count() FROM table теперь может выполняться, если из table доступен для выборки хотя бы один столбец. Этот PR исправляет #10639. #18233 (Vitaly Baranov).
  • SELECT JOIN теперь требует наличия привилегии SELECT для каждой из присоединяемых таблиц. Этот PR исправляет #17654. #18232 (Vitaly Baranov).
  • Исправлена возможная неполнота результата запроса при чтении из MergeTree* в случае read backoff (сообщение <Debug> MergeTreeReadPool: Will lower number of threads в логах). Проблема появилась в результате изменений в #16423. Исправляет #18137. #18216 (Nikolai Kochetov).
  • Исправлена ошибка, из-за которой запрос MODIFY COLUMN ... REMOVE TTL не удалял TTL для столбца. #18130 (alesapin).
  • Исправлена работа оптимизатора предикатов с недетерминированными функциями. Это исправляет #17244. #17273 (Winter Zhang).
  • Мутация могла зависать в ожидании несуществующей части после операций MOVE или REPLACE PARTITION или, в редких случаях, после DETACH или DROP PARTITION. Ошибка исправлена. #15537 (tavplubix).

Улучшение сборки/тестирования/упаковки

  • Обновлена информация о часовых поясах до версии 2020e. #18531 (alesapin).

Релиз ClickHouse v20.11.6.6-stable, 2020-12-24

Исправления ошибок

  • Исправлена проблема, когда процесс clickhouse-odbc-bridge был недоступен для сервера на машинах с двухстековой конфигурацией IPv4/IPv6, а также проблема с обновлением ODBC-словарей, когда оно выполнялось с использованием некорректных запросов и/или приводило к сбоям. Возможно, это исправление закрывает #14489. #18278 (Denis Glazachev).
  • Исправлено сравнение ключей для типов Enum и Int. Это устраняет #17989. #18214 (Amos Bird).
  • Исправлена ошибка, приводившая к сбою при преобразовании уникального ключа в движке базы данных MaterializeMySQL. Это исправляет #18186 и #16372 #18211 (Winter Zhang).
  • Исправлена ошибка std::out_of_range: basic_string при разборе URL-адреса S3. #18059 (Vladimir Chebotarev).
  • Исправлена проблема, из-за которой некоторые таблицы не синхронизировались из MySQL в ClickHouse из‑за отсутствия поддержки преобразования префиксных индексов MySQL в движке MaterializeMySQL. Исправляет #15187, #17912 и #17944 (Winter Zhang).
  • Исправлена проблема, при которой оптимизация запроса приводила к ошибочному результату, если запрос содержал ARRAY JOIN. #17887 (sundyli).
  • Исправлена потенциальная ошибка сегментации в агрегатной функции topK. Это закрывает #17404. #17845 (Maksim Kita).
  • Не восстанавливать части из WAL, если in_memory_parts_enable_wal отключён. #17802 (detailyang).
  • Исправлена проблема, из-за которой ClickHouse не удавалось повторно установить соединение с серверами MySQL. #17681 (Alexander Kazakov).
  • Исправлено непоследовательное поведение optimize_trivial_count_query с предикатом партиции. #17644 (Azat Khuzhin).
  • Исправлена проблема, из-за которой таблица system.stack_trace была пустой при запуске сервера в режиме демона. #17630 (Amos Bird).
  • Исправлено поведение, из‑за которого исключение fmt::v7::format_error могло попадать в лог в фоновом режиме для таблиц MergeTree. Это исправляет #17613. #17615 (alexey-milovidov).
  • Исправлено поведение при использовании clickhouse-client в интерактивном режиме с многострочными запросами, когда однострочный комментарий ошибочно распространялся до конца запроса. Это исправляет #13654. #17565 (alexey-milovidov).
  • Исправлена проблема, из-за которой сервер в крайне редких случаях мог перестать принимать подключения. #17542 (alexey-milovidov).
  • Исправлено зависание запроса ALTER, когда соответствующая мутация была остановлена на другой реплике. Это исправляет #16953. #17499 (alesapin).
  • Исправлена ошибка, из-за которой в ClickHouse занижался размер кэша меток. Это могло происходить, когда было много очень маленьких файлов с метками. #17496 (alesapin).
  • Исправлено поведение ORDER BY при включённой настройке optimize_redundant_functions_in_order_by. #17471 (Anton Popov).
  • Устранены дубликаты после DISTINCT, которые могли появляться из-за некорректной оптимизации. Исправляет #17294. #17296 (li chengxiang). #17439 (Nikolai Kochetov).
  • Исправлена ошибка, приводившая к падению при чтении из таблицы JOIN с типами LowCardinality. Исправляет #17228. #17397 (Nikolai Kochetov).
  • Исправлена инвалидизация индекса фиксированного множества при наличии константных столбцов в подзапросе. Это исправляет #17246. #17249 (Amos Bird).
  • Исправлен возможный неправильный анализ индекса, если типы в выражении сравнения с индексом различались. Это исправляет #17122. #17145 (Amos Bird).
  • Исправлено сравнение ColumnConst, приводившее к аварийному завершению работы. Устраняет #17088. #17135 (Amos Bird).
  • Исправлена ошибка, из-за которой запросы с ON CLUSTER могли зависать навсегда на нелидирующих таблицах ReplicatedMergeTree. #17089 (alesapin).
  • Исправлена ошибка, обнаруженная фаззером, в функции fuzzBits. Это исправляет #16980. #17051 (hexiaoting).
  • Избегайте лишних сетевых ошибок при выполнении удалённых запросов, которые могут быть отменены, например запросов с LIMIT. #17006 (Azat Khuzhin).
  • Исправлен неверный результат для больших целочисленных типов (128- и 256-битных) при приведении из типа double. #16986 (Mike).
  • Повторно определять IP-адрес format_avro_schema_registry_url в случае ошибок. #16985 (filimonov).
  • Исправлен возможный сбой сервера после ALTER TABLE ... MODIFY COLUMN ... NewType, когда в SELECT используется выражение WHERE для изменяемого столбца, а операция изменения ещё не завершена. #16968 (Amos Bird).
  • Информация для blame была рассчитана некорректно в clickhouse-git-import. #16959 (alexey-milovidov).
  • Исправлена оптимизация ORDER BY с монотонными функциями, что исправляет #16107. #16956 (Anton Popov).
  • Исправлена оптимизация GROUP BY при включённой настройке optimize_aggregators_of_group_by_keys и использовании соединений (JOIN). Это исправляет #12604. #16951 (Anton Popov).
  • Скрипт установки всегда должен создавать подкаталоги в каталогах конфигурации. Это актуально только для сборки Docker с пользовательской конфигурацией. #16936 (filimonov).
  • Исправлена потенциальная ошибка Illegal type of argument в запросах с ORDER BY. Это устраняет #16580. #16928 (Nikolai Kochetov).
  • Прерывать multipart-загрузку, если в WriteBufferFromS3 не были записаны данные. #16840 (Pavel Kovalenko).
  • Исправлено падение при использовании any без аргументов. Это исправляет #16803. #16826 (Amos Bird).
  • Исправлено поведение, при котором ClickHouse всегда возвращал 0 вместо количества затронутых строк для запросов INSERT по протоколу MySQL. Это исправляет #16605. #16715 (Winter Zhang).
  • Исправлен неконтролируемый рост TDigest. #16680 (hrissan).
  • Исправлен сбой удалённого запроса при использовании суффикса if в агрегатной функции. Исправляет #16574, #16231, #16610 (Winter Zhang).
  • Исправлено некорректное поведение, вызванное select_sequential_consistency при оптимизированном тривиальном запросе count и в таблице system.tables. #16309 (Hao Chen).
  • Выбрасывать ошибку при использовании ColumnTransformer для замены несуществующего столбца. #16183 (hexiaoting).

Релиз ClickHouse v20.11.3.3-stable, 2020-11-13

Исправление ошибок

  • Исправлены редкие аварийные завершения без сообщений об ошибке, возникавшие, когда включён профилировщик запросов и ClickHouse установлен на ОС с версией glibc, в которой (предположительно) сломаны таблицы асинхронной раскрутки стека для некоторых функций. Это исправляет #15301. Это исправляет #13098. #16846 (alexey-milovidov).

Релиз ClickHouse v20.11.2.1, 2020-11-11

Несовместимые изменения

  • Если некоторый profile был указан в секции конфигурации distributed_ddl, то этот профиль мог перезаписывать настройки профиля default при запуске сервера. Это исправлено, теперь настройки распределённых DDL-запросов не должны влиять на глобальные настройки сервера. #16635 (tavplubix).
  • Ограничено использование несравнимых типов данных (таких как AggregateFunction) в ключах (ключ сортировки, первичный ключ, ключ партиционирования и т. д.). #16601 (alesapin).
  • Удалены запросы ANALYZE и AST, а настройка enable_debug_queries признана устаревшей, так как теперь эта функциональность является частью полнофункционального запроса EXPLAIN. #16536 (Ivan).
  • Агрегатные функции boundingRatio, rankCorr, retention, timeSeriesGroupSum, timeSeriesGroupRateSum, windowFunnel были по ошибке сделаны регистронезависимыми. Теперь их имена снова чувствительны к регистру, как и задумывалось. Только функции, определённые стандартом SQL, созданные для совместимости с другими СУБД или подобные им, должны быть регистронезависимыми. #16407 (alexey-milovidov).
  • Функция rankCorr теперь возвращает nan при недостатке данных #16124. #16135 (hexiaoting).
  • При обновлении с версий до 20.5, если выполняется поэтапное обновление и кластер содержит как версии 20.5 и выше, так и ниже 20.5, при перезапуске узлов ClickHouse со старыми версиями и запуске старой версии в присутствии более новых версий это может приводить к ошибкам Part ... intersects previous part. Чтобы предотвратить эту ошибку, сначала установите новые пакеты clickhouse-server на всех узлах кластера, а затем выполняйте перезапуски (то есть, когда clickhouse-server будет перезапущен, он запустится уже с новой версией).

Новая возможность

  • Добавлена поддержка LDAP как пользовательского каталога для пользователей, отсутствующих локально. #12736 (Denis Glazachev).
  • Добавлена таблица system.replicated_fetches, показывающая текущие фоновые операции выборки данных. #16428 (alesapin).
  • Добавлена настройка date_time_output_format. #15845 (Maksim Kita).
  • В ClickHouse добавлен минимальный веб-интерфейс. #16158 (alexey-milovidov).
  • Позволяет читать и записывать одно protobuf‑сообщение за раз (без ограничителей длины). #15199 (filimonov).
  • Добавлена начальная поддержка OpenTelemetry. ClickHouse теперь принимает заголовки OpenTelemetry traceparent через протоколы Native и HTTP и в некоторых случаях передаёт их далее по цепочке. Спаны трассировок для выполненных запросов сохраняются в таблицу system.opentelemetry_span_log. #14195 (Alexander Kuzmenkov).
  • Разрешить указывать первичный ключ в списке столбцов запроса CREATE TABLE. Это необходимо для совместимости с другими диалектами SQL. #15823 (Maksim Kita).
  • Реализована конструкция OFFSET offset_row_count {ROW | ROWS} FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} {ONLY | WITH TIES} в запросах SELECT с ORDER BY. Это стандартный для SQL способ задания LIMIT. #15855 (hexiaoting).
  • Функция errorCodeToName — возвращает имя ошибки (полезно для анализа query_log и аналогичных таблиц). Таблица system.errors — показывает, сколько раз возникали ошибки (учитывает настройку system_events_show_zero_values). #16438 (Azat Khuzhin).
  • Добавлена специальная функция untuple, позволяющая добавлять новые столбцы в список SELECT путем разворачивания именованного кортежа. #16242 (Nikolai Kochetov, Amos Bird).
  • Теперь мы можем передавать идентификаторы через параметры запроса. Эти параметры могут использоваться как объекты таблиц или столбцы. #16594 (Amos Bird).
  • Добавлена поддержка типов данных больших целых чисел (UInt256, Int128, Int256) и UUID для индекса BloomFilter движка MergeTree. Типы больших целых чисел являются экспериментальной возможностью. #16642 (Maksim Kita).
  • Добавлена функция farmFingerprint64 (некриптографическая хеш-функция для строк). #16570 (Jacob Hayes).
  • Добавлен параметр log_queries_min_query_duration_ms: только запросы, время выполнения которых превышает значение этой настройки, будут попадать в query_log/query_thread_log (аналог slow_query_log в MySQL). #16529 (Azat Khuzhin).
  • Добавлена возможность создавать Docker-образ на основе Alpine. Используется предварительно скомпилированный бинарный файл и компоненты glibc из Ubuntu 20.04. #16479 (filimonov).
  • Добавлены функции приведения типов toUUIDOrNull, toUUIDOrZero. #16337 (Maksim Kita).
  • Добавлена настройка max_concurrent_queries_for_all_users, примеры использования см. в #6636. #16154 (nvartolomei).
  • Добавлена новая опция print_query_id в clickhouse-client. Она позволяет генерировать произвольные строки с использованием текущего идентификатора запроса, который генерируется клиентом. Также идентификатор запроса по умолчанию выводится в clickhouse-client. #15809 (Amos Bird).
  • Добавлены функции tid и logTrace. Это закрывает #9434. #15803 (flynn).
  • Добавлена функция formatReadableTimeDelta, форматирующая интервал времени в человекочитаемую строку ... #15497 (Filipe Caixeta).
  • Добавлен параметр disable_merges для томов в многодисковой конфигурации. #13956 (Vladimir Chebotarev).

Экспериментальная функциональность

  • Новые функции encrypt, aes_encrypt_mysql, decrypt, aes_decrypt_mysql. Эти функции работают медленно, поэтому рассматриваются как экспериментальные. #11844 (Vasily Nemkov).

Исправление ошибки

  • Маскировать пароль в data_path в system.distribution_queue. #16727 (Azat Khuzhin).
  • Исправлена работа оператора IN для нескольких столбцов и кортежей при включённой настройке transform_null_in. Исправлено #15310. #16722 (Anton Popov).
  • Настройка max_parallel_replicas работала некорректно, если для запрашиваемой таблицы не было определено семплирование. Это исправляет #5733. #16675 (alexey-milovidov).
  • Исправлена работа optimize_read_in_order/optimize_aggregation_in_order с max_threads > 0 и выражением в ORDER BY. #16637 (Azat Khuzhin).
  • При вычислении выражений DEFAULT могли возникать коллизии имён (хотя это было крайне маловероятно). Это исправляет #9359. #16612 (alexey-milovidov).
  • Исправлена единица измерения query_thread_log.query_duration_ms. #16563 (Azat Khuzhin).
  • Исправлена ошибка при использовании схемы MySQL Master -> MySQL Slave -> движка ClickHouse MaterializeMySQL. MaterializeMySQL — экспериментальная функция. #16504 (TCeason).
  • Особым образом подобранный аргумент функции round типа Decimal приводил к целочисленному делению на ноль. Это исправляет #13338. #16451 (alexey-milovidov).
  • Исправлена работа DROP TABLE для Distributed (условия гонки с INSERT). #16409 (Azat Khuzhin).
  • Исправлена обработка очень больших записей в очереди репликации. Такие записи могут появляться в запросах ALTER, если структура таблицы очень велика (около 1 МБ). Это исправляет #16307. #16332 (alexey-milovidov).
  • Исправлено непоследовательное поведение, из‑за которого часть возвращаемых данных могла теряться, если набор для их фильтрации не был создан. #16308 (Nikita Mikhaylov).
  • Исправлена работа dictGet в sharding_key (и в аналогичных местах, где контекст функции сохраняется постоянно). #16205 (Azat Khuzhin).
  • Исправлено исключение, возникавшее в clickhouse-local при попытке выполнить команду OPTIMIZE. Исправлена #16076. #16192 (filimonov).
  • Исправляет регрессию из задачи #15780: например, теперь indexOf([1, 2, 3], toLowCardinality(1)) запрещён, хотя не должен быть запрещён. #16038 (Mike).
  • Исправлена ошибка при работе с базой данных MySQL. Когда сервер MySQL, используемый в качестве движка базы данных, недоступен, некоторые запросы приводят к возникновению исключений, потому что пытаются получить таблицы с отключённого сервера, хотя в этом нет необходимости. Например, запрос SELECT ... FROM system.parts должен работать только с таблицами MergeTree и вовсе не обращаться к базе данных MySQL. #16032 (Kruglov Pavel).
  • Теперь при выполнении ALTER MODIFY COLUMN ... DEFAULT ... будет выброшено исключение, если значение по умолчанию несовместимо с типом столбца. Исправляет #15854. #15858 (alesapin).
  • Исправлены функции IPv4CIDRToRange/IPv6CIDRToRange, чтобы они принимали константные значения столбца IP. #15856 (vladimir-golovchenko).

Улучшение

  • Считать INTERVAL '1 hour' эквивалентом INTERVAL 1 HOUR для совместимости с Postgres и подобными системами. Это исправляет #15637. #15978 (flynn).
  • Добавлена возможность разбора значений перечислений по их числовым идентификаторам для форматов ввода CSV, TSV и JSON. #15685 (vivarum).
  • Улучшено планирование задач чтения для архитектуры JBOD и хранилища MergeTree. Добавлена новая настройка read_backoff_min_concurrency, которая задаёт нижнюю границу числа потоков чтения. #16423 (Amos Bird).
  • Добавлена недостающая поддержка LowCardinality в формате Avro. #16521 (Mike).
  • Обходное решение для использования S3 с сервером nginx в качестве прокси. На текущий момент nginx не принимает URL с пустым путем, например http://domain.com?delete, тогда как стандартный aws-sdk-cpp генерирует URL именно такого вида. В этом коммите используется модифицированная версия aws-sdk-cpp, которая в таких случаях формирует URL с путем "/", например http://domain.com/?delete. #16814 (ianton-ru).
  • Улучшена диагностика ошибок разбора входных данных. Теперь для ошибок Cannot read all data указывается номер строки. #16644 (alexey-milovidov).
  • Сделано более ожидаемым поведение minMap и maxMap: нулевые значения больше не пропускаются в результате. Исправляет #16087. #16631 (Ildus Kurbangaliev).
  • Улучшено обновление конфигурации ZooKeeper во время выполнения. #16630 (sundyli).
  • Применять секцию SETTINGS как можно раньше. Это позволяет изменить больше настроек в запросе. Исправляет #3178. #16619 (alexey-milovidov).
  • Теперь поле event_time_microseconds хранится в формате Decimal64, а не UInt64. #16617 (Nikita Mikhaylov).
  • Теперь параметризованные функции можно использовать в столбцовом трансформере APPLY. #16589 (Amos Bird).
  • Улучшено планирование фоновой задачи, которая удаляет данные удалённых таблиц в базах данных Atomic. Базы данных Atomic не создают битую символьную ссылку на каталог данных таблицы, если у таблицы фактически отсутствует каталог данных. #16584 (tavplubix).
  • Подзапросы в секции WITH (CTE) могут по имени ссылаться на предыдущие подзапросы в этой секции WITH. #16575 (Amos Bird).
  • Добавлено поле current_database в таблицу system.query_thread_log. #16558 (Azat Khuzhin).
  • Разрешить загружать части, которые уже зафиксированы или устарели в текущем экземпляре, в каталог detached. Это полезно при миграции таблиц из другого кластера и наличии отображения шардов N→1. Это также согласуется с текущей реализацией fetchPartition. #16538 (Amos Bird).
  • Несколько улучшений для RabbitMQ: исправлена ошибка, связанная с #16263. Также сокращено время жизни цикла обработки событий. Добавлена более эффективная настройка очередей. #16426 (Kseniia Sumarokova).
  • Исправлено отладочное утверждение в функции quantileDeterministic. В предыдущей версии она могла передавать по сети до двух раз больше данных, хотя фактической ошибки в работе не было. Это исправляет #15683. #16410 (alexey-milovidov).
  • Добавлена метрика TablesToDropQueueSize. Она равна количеству удалённых таблиц, находящихся в очереди на фоновое удаление данных. #16364 (tavplubix).
  • Улучшена диагностика при разрыве соединения со стороны клиента. В предыдущих версиях в логах сервера фиксировались исключения Attempt to read after EOF и Broken pipe. В новой версии это заменено информационным сообщением Client has dropped the connection, cancel the query.. #16329 (alexey-milovidov).
  • Добавлена поддержка total_rows/total_bytes (из system.tables) для движков таблиц Set и Join. #16306 (Azat Khuzhin).
  • Теперь можно указывать PRIMARY KEY без ORDER BY для семейства табличных движков MergeTree. Закрывает #15591. #16284 (alesapin).
  • Если в системе отсутствует каталог /tmp (chroot, ошибка конфигурации и т. п.), clickhouse-local создаст временный подкаталог в текущем каталоге. #16280 (filimonov).
  • Добавлена поддержка вложенных типов данных (например, именованных кортежей) в качестве подтипов. Исправлена проблема #15587. #16262 (Ivan).
  • Поддержка опций database_atomic_wait_for_drop_and_detach_synchronously/NO DELAY/SYNC для DROP DATABASE. #16127 (Azat Khuzhin).
  • Добавлен параметр allow_nondeterministic_optimize_skip_unused_shards (чтобы разрешить использование недетерминированных функций, таких как rand() или dictGet(), в ключе шардирования). #16105 (Azat Khuzhin).
  • Исправлена работа memory_profiler_step/max_untracked_memory для запросов через HTTP (добавлен тест). Исправлена проблема, при которой глобальное изменение этого значения в XML-конфигурации также не помогало, так как эти настройки всё равно не применялись и использовалось только значение по умолчанию (4MB), как здесь. Исправлен query_id для корневого ThreadStatus HTTP-запроса (путём инициализации QueryScope после чтения query_id). #16101 (Azat Khuzhin).
  • Теперь разрешено выполнять запросы ALTER ... ON CLUSTER независимо от параметра <internal_replication> в конфигурации кластера. #16075 (alesapin).
  • Исправлена редкая проблема, из-за которой clickhouse-client мог аварийно завершаться при выходе при загрузке подсказок. Это исправляет #16035. #16047 (alexey-milovidov).
  • Добавлена поддержка макета cache для словарей Redis со сложными ключами. #15985 (Anton Popov).
  • Исправлено зависание запроса (бесконечный цикл) при неправильной конфигурации (connections_with_failover_max_tries равен 0). #15876 (Azat Khuzhin).
  • Изменён уровень части сообщений журнала с информационного на отладочный, чтобы информационные сообщения не выводились для каждого запроса. Это исправляет #5293. #15816 (alexey-milovidov).
  • Удалены метрики MemoryTrackingInBackground*, чтобы избежать потенциально вводящих в заблуждение результатов. Это исправляет #15684. #15813 (alexey-milovidov).
  • Добавлены переподключения в утилиту zookeeper-dump-tree. #15711 (alexey-milovidov).
  • Теперь можно явно указывать список столбцов в запросе CREATE TABLE table AS table_function(...). Исправляет #9249 и #14214. #14295 (tavplubix).

Улучшения производительности

  • Не выполнять слияние частей между партициями в SELECT FINAL. #15938 (Kruglov Pavel).
  • Улучшена производительность агрегатных функций -OrNull и -OrDefault. #16661 (alexey-milovidov).
  • Улучшена производительность quantileMerge. В предыдущих версиях она была непозволительно медленной. Это закрывает #1463. #16643 (alexey-milovidov).
  • Незначительно улучшена производительность логических функций. #16347 (alexey-milovidov).
  • Улучшена производительность назначения слияний в движках таблиц MergeTree. Не должно быть заметно для пользователя. #16191 (alesapin).
  • Ускорена загрузка словарей hashed/sparse_hashed за счёт предварительного выделения памяти под хеш-таблицу. #15454 (Azat Khuzhin).
  • Оптимизация для тривиального count стала немного менее тривиальной. Предикаты, содержащие точное выражение партиционирования, также могут быть оптимизированы. Это также исправляет #11092, из‑за которого возвращалось неверное значение count при max_parallel_replicas > 1. #15074 (Amos Bird).

Улучшения сборки/тестирования/упаковки

  • Добавлена проверка на нестабильность для stateless-тестов. Она будет заранее обнаруживать потенциально нестабильные функциональные тесты до их слияния. #16238 (alesapin).
  • Использована корректная версия croaring вместо амальгамированной. #16285 (sundyli).
  • Улучшена генерация файлов сборки для системы сборки ya.make (Arcadia). #16700 (alexey-milovidov).
  • Добавлен инструмент проверки файлов MySQL BinLog для движка базы данных MaterializeMySQL. MaterializeMySQL является экспериментальной функциональностью. #16223 (Winter Zhang).
  • Добавлена проверка бита исполнения для неисполняемых файлов. Пользователи часто по ошибке коммитят исполняемые файлы из Windows. #15843 (alexey-milovidov).
  • Добавлена проверка на наличие #pragma once в заголовках. #15818 (alexey-milovidov).
  • Исправлен некорректный стиль кода &vector[idx] в libhdfs3. Это исправляет отладочную сборку libcxx. См. также https://github.com/ClickHouse-Extras/libhdfs3/pull/8 . #15815 (Amos Bird).
  • Исправлена сборка одного вспомогательного примерного инструмента на Mac OS. Обратите внимание, что мы не собираем примеры на Mac OS в нашем CI (мы собираем только бинарник ClickHouse), поэтому нет ни малейших шансов, что это снова не сломается. Это исправляет #15804. #15808 (alexey-milovidov).
  • Упрощён init-скрипт SysV. #14135 (alexey-milovidov).
  • В db_generator добавлен boost::program_options для повышения удобства использования. Это закрывает #15940. #15973 (Nikita Mikhaylov).

Релиз ClickHouse 20.10

Релиз ClickHouse v20.10.7.4-stable, 2020-12-24

Исправление ошибки

  • Исправлена проблема, при которой процесс clickhouse-odbc-bridge был недоступен для сервера на машинах с двойным стеком IPv4/IPv6, а также проблема, из-за которой обновления ODBC-словарей выполнялись с использованием некорректных запросов и/или приводили к сбоям. Возможно, это закрывает #14489. #18278 (Denis Glazachev).
  • Исправлено сравнение ключей между типами Enum и Int. Устраняет #17989. #18214 (Amos Bird).
  • Исправлен краш при преобразовании уникального ключа в движке базы данных MaterializeMySQL. Это исправляет #18186, #16372 и #18211 (Winter Zhang).
  • Исправлена ошибка std::out_of_range: basic_string при разборе URL-адресов S3. #18059 (Vladimir Chebotarev).
  • Исправлена проблема, при которой некоторые таблицы не синхронизировались в ClickHouse из MySQL из-за того, что преобразование префиксного индекса MySQL не поддерживалось в MaterializeMySQL. Это исправляет #15187, а также #17912 и #17944 (Winter Zhang).
  • Исправлена возможная ошибка сегментации в агрегатной функции topK. Это исправление закрывает #17404. #17845 (Maksim Kita).
  • Не восстанавливать части из WAL, если параметр in_memory_parts_enable_wal отключён. #17802 (detailyang).
  • Исправлена проблема, из-за которой ClickHouse не удавалось восстановить соединение с серверами MySQL. #17681 (Alexander Kazakov).
  • Исправлена проблема с пустой таблицей system.stack_trace, когда сервер запущен в режиме демона. #17630 (Amos Bird).
  • Исправлено поведение при использовании clickhouse-client в интерактивном режиме с многострочными запросами, когда однострочный комментарий ошибочно распространялся до конца всего запроса. Исправлена задача #13654. #17565 (alexey-milovidov).
  • Исправлена проблема, из-за которой сервер в очень редких случаях мог перестать принимать подключения. #17542 (alexey-milovidov).
  • Исправлено зависание запроса ALTER, возникавшее, когда соответствующая мутация была прервана на другой реплике. Это исправление закрывает #16953. #17499 (alesapin).
  • Исправлена ошибка, из-за которой ClickHouse занижал размер кэша меток. Она могла проявляться при большом количестве мелких файлов с метками. #17496 (alesapin).
  • Исправлена работа ORDER BY при включённой настройке optimize_redundant_functions_in_order_by. #17471 (Anton Popov).
  • Исправлены дубликаты после DISTINCT, которые могли появляться из-за некорректной оптимизации. Исправление для #17294. #17296 (li chengxiang). #17439 (Nikolai Kochetov).
  • Исправлено падение при чтении из таблицы JOIN с типами LowCardinality. Этим исправлена проблема #17228. #17397 (Nikolai Kochetov).
  • Исправлена инвалидация индекса фиксированного множества при наличии константных столбцов в подзапросе. Тем самым исправлена ошибка #17246. #17249 (Amos Bird).
  • Исправлено сравнение ColumnConst, приводившее к сбою, что исправило #17088. #17135 (Amos Bird).
  • Исправлена ошибка, из-за которой запросы с ON CLUSTER могли зависать навсегда для таблиц ReplicatedMergeTreeTables на не-лидирующих репликах. #17089 (alesapin).
  • Исправлена обнаруженная фаззером ошибка в функции fuzzBits, тем самым исправлена #16980. #17051 (hexiaoting).
  • Избегайте ненужных сетевых ошибок при выполнении удалённых запросов, которые могут быть отменены, например запросов с LIMIT. #17006 (Azat Khuzhin).
  • Исправлен неверный результат при работе с большими целыми числами (128, 256 бит) при приведении из double. #16986 (Mike).
  • Повторно определять IP-адрес для format_avro_schema_registry_url при возникновении ошибок. #16985 (filimonov).
  • Исправлен возможный сбой сервера после ALTER TABLE ... MODIFY COLUMN ... NewType, когда запрос SELECT содержит условие WHERE по изменяемому столбцу, а операция ALTER ещё не завершена. #16968 (Amos Bird).
  • Данные blame были некорректно рассчитаны в clickhouse-git-import. #16959 (alexey-milovidov).
  • Исправлена оптимизация ORDER BY для монотонных функций. Это исправляет #16107. #16956 (Anton Popov).
  • Исправлена оптимизация GROUP BY при включённой настройке optimize_aggregators_of_group_by_keys и использовании JOIN. Это исправляет #12604. #16951 (Anton Popov).
  • Скрипт установки всегда должен создавать подкаталоги в каталогах конфигурации. Это относится только к Docker-сборке с пользовательской конфигурацией. #16936 (filimonov).
  • Исправлена потенциальная ошибка Illegal type of argument в запросах с ORDER BY. Это исправляет #16580. #16928 (Nikolai Kochetov).
  • Прерывать многокомпонентную загрузку, если в WriteBufferFromS3 не было записано никаких данных. #16840 (Pavel Kovalenko).
  • Исправлена ошибка, вызывавшая сбой при использовании any без аргументов. Тем самым исправлена проблема #16803. #16826 (Amos Bird).
  • Исправлено поведение, при котором ClickHouse всегда возвращал 0 вместо количества затронутых строк для запросов INSERT, выполняемых по протоколу MySQL. Это исправляет #16605. #16715 (Winter Zhang).
  • Исправлен неконтролируемый рост TDigest. #16680 (hrissan).
  • Исправлен сбой удалённого запроса при использовании суффикса if в агрегатной функции. Это исправление закрывает задачи #16574, #16231 и пул‑реквест #16610 (Winter Zhang).

Релиз ClickHouse v20.10.4.1-stable, 2020-11-13

Исправление ошибок

  • Исправлены редкие «тихие» падения при включённом профилировщике запросов, когда ClickHouse установлен на ОС с версией glibc, у которой (предположительно) сломаны таблицы асинхронной раскрутки стека для некоторых функций. Это исправляет #15301. Это исправляет #13098. #16846 (alexey-milovidov).
  • Исправлен оператор IN по нескольким столбцам и кортежам при включённой настройке transform_null_in. Исправляет #15310. #16722 (Anton Popov).
  • Исправлена работа optimize_read_in_order/optimize_aggregation_in_order при max_threads>0 и наличии выражения в ORDER BY. #16637 (Azat Khuzhin).
  • Теперь при разборе AVRO из входных данных тип LowCardinality удаляется. Исправляет #16188. #16521 (Mike).
  • Исправлен быстрый рост метаданных при использовании схемы MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL Engine и включённом slave_parallel_worker на MySQL Slave за счёт корректного уменьшения наборов GTID. Это исправляет #15951. #16504 (TCeason).
  • Исправлен DROP TABLE для Distributed (гонка с INSERT). #16409 (Azat Khuzhin).
  • Исправлена обработка очень больших элементов в очереди репликации. Очень большие элементы могут появляться в запросах ALTER, если структура таблицы чрезвычайно большая (около 1 МБ). Это исправляет #16307. #16332 (alexey-milovidov).
  • Исправлена ошибка с базой данных MySQL. Когда MySQL-сервер, используемый в качестве движка базы данных, недоступен, некоторые запросы выбрасывали исключение, потому что пытались получить таблицы с отключённого сервера, хотя в этом нет необходимости. Например, запрос SELECT ... FROM system.parts должен работать только с таблицами MergeTree и совсем не обращаться к базе данных MySQL. #16032 (Kruglov Pavel).

Улучшение

  • Обходное решение для использования S3 с сервером nginx в роли прокси. В настоящее время nginx не принимает URL с пустым путём, например http://domain.com?delete, тогда как стандартный aws-sdk-cpp генерирует URL такого вида. В этом коммите используется пропатченная версия aws-sdk-cpp, которая в таких случаях формирует URL с путём "/", например http://domain.com/?delete. #16813 (ianton-ru).

Релиз ClickHouse v20.10.3.30, 2020-10-28

Обратное несовместимое изменение

  • Признать multiple_joins_rewriter_version устаревшей и удалить первую версию переписывателя JOIN'ов. #15472 (Artem Zuikov).
  • Изменить значение по умолчанию настройки format_regexp_escaping_rule (она относится к формату Regexp) на Raw (это означает — читать весь подшаблон как одно значение), чтобы поведение больше соответствовало ожиданиям пользователей. #15426 (alexey-milovidov).
  • Добавить поддержку вложенных многострочных комментариев /* comment /* comment */ */ в SQL. Это соответствует стандарту SQL. #14655 (alexey-milovidov).
  • Добавлены настройки MergeTree (max_replicated_merges_with_ttl_in_queue и max_number_of_merges_with_ttl_in_pool) для управления количеством слияний с TTL в фоновом пуле и очереди репликации. Это изменение нарушает совместимость со старыми версиями только в том случае, если вы используете TTL для удаления. В противном случае репликация останется совместимой. Вы можете избежать проблем с несовместимостью, если обновите все реплики шарда одновременно или выполните SYSTEM STOP TTL MERGES до завершения обновления всех реплик. Если вы получите несовместимую запись в очереди репликации, в первую очередь выполните SYSTEM STOP TTL MERGES, а затем выполните ALTER TABLE ... DETACH PARTITION ... для партиции, к которой было привязано несовместимое слияние с TTL. Подключите её обратно на одной реплике. #14490 (alesapin).
  • При обновлении с версий ниже 20.5, если выполняется поэтапное (rolling) обновление и кластер одновременно содержит версии 20.5 или новее и версии ниже 20.5, при перезапуске узлов ClickHouse со старыми версиями и запуске старой версии в присутствии более новых версий это может привести к ошибкам Part ... intersects previous part. Чтобы предотвратить эту ошибку, сначала установите более новые пакеты clickhouse-server на все узлы кластера, а затем выполняйте перезапуски (так что при перезапуске clickhouse-server будет запускаться с новой версией).

Новая функциональность

  • Фоновая рекомпрессия данных. Добавлена поддержка указания TTL ... RECOMPRESS codec_name для семейства движков таблиц MergeTree. #14494 (alesapin).
  • Добавить параллельные вставки с кворумом. Это закрывает #15601. #15601 (Latysheva Alexandra).
  • Настройки для дополнительного усиления гарантий сохранности данных. Полезно для нереплицированных конфигураций. #11948 (Anton Popov).
  • Если дубликат блока записывается на реплику, где он ещё не существует локально (ещё не был получен с других реплик), не игнорировать его, а записывать локально, чтобы добиться того же эффекта, как если бы он был успешно реплицирован. #11684 (alexey-milovidov).
  • Теперь добавлена поддержка конструкции WITH <identifier> AS (subquery) ... для объявления именованных подзапросов в контексте запроса. Тем самым закрыты задачи #2416 и #4967. #14771 (Amos Bird).
  • Введена настройка enable_global_with_statement, которая распространяет выражения WITH из первого оператора SELECT на другие операторы SELECT на том же уровне и делает псевдонимы в выражениях WITH видимыми для подзапросов. #15451 (Amos Bird).
  • Безопасное выполнение межкластерных запросов (с initial_user в роли текущего пользователя запроса). #13156 (Azat Khuzhin). #15551 (Azat Khuzhin).
  • Добавлена возможность удалять свойства столбцов и TTL для таблиц. Добавлены запросы ALTER TABLE MODIFY COLUMN col_name REMOVE what_to_remove и ALTER TABLE REMOVE TTL. Обе операции легковесны и выполняются на уровне метаданных. #14742 (alesapin).
  • Добавлен формат RawBLOB. Он предназначен для ввода или вывода одного значения без какого-либо экранирования и разделителей. Тем самым закрывается задача #15349. #15364 (alexey-milovidov).
  • Добавлена функция reinterpretAsUUID, которая позволяет преобразовывать строку байтов в порядке big-endian в UUID. #15480 (Alexander Kuzmenkov).
  • Реализована настройка параметра force_data_skipping_indices. #15642 (Azat Khuzhin).
  • Добавлена настройка output_format_pretty_row_numbers, которая включает нумерацию строк результата в форматах Pretty. Это закрывает #15350. #15443 (flynn).
  • Добавлен инструмент для обфускации запросов. Он позволяет делиться большим количеством запросов для более качественного тестирования. Закрывает #15268. #15321 (alexey-milovidov).
  • Добавлена табличная функция null('structure'). #14797 (vxider).
  • Добавлена функция formatReadableQuantity. Она упрощает чтение больших чисел человеком. #14725 (Artem Hnilov).
  • Добавлен формат LineAsString, который принимает последовательность строк, разделённых символами перевода строки, причём каждая строка разбирается целиком как одно поле типа String. #14703 (Nikita Mikhaylov), #13846 (hexiaoting).
  • Добавлен формат JSONStrings, который выводит данные как массивы строк. #14333 (hcz).
  • Добавлена поддержка формата столбца "Raw" для формата Regexp. Это позволяет извлекать подвыражения целиком без необходимости каких-либо правил экранирования. #15363 (alexey-milovidov).
  • Добавлена возможность настраивать представление NULL для формата вывода TSV. Оно управляется настройкой output_format_tsv_null_representation, которая по умолчанию имеет значение \N. Тем самым закрывается #9375. Обратите внимание, что настройка управляет только форматом вывода, и \N является единственным поддерживаемым представлением NULL для формата ввода TSV. #14586 (Kruglov Pavel).
  • Добавлена поддержка типа данных Decimal для MaterializeMySQL. MaterializeMySQL — экспериментальная возможность. #14535 (Winter Zhang).
  • Добавлена новая возможность: SHOW DATABASES LIKE 'xxx'. #14521 (hexiaoting).
  • Добавлен скрипт для импорта произвольного git-репозитория в ClickHouse в качестве демонстрационного набора данных. #14471 (alexey-milovidov).
  • Теперь операторы INSERT могут использовать звёздочку (и её варианты) совместно с преобразователями столбцов в списке столбцов. #14453 (Amos Bird).
  • Новые настройки ограничения сложности запросов max_rows_to_read_leaf, max_bytes_to_read_leaf для распределённых запросов, ограничивающие максимальное число строк/байт, читаемых на листовых узлах. Ограничение применяется только к локальному чтению, исключая финальную стадию слияния на корневом узле. #14221 (Roman Khavronenko).
  • Добавлена возможность задавать настройки для хранилищ ReplicatedMergeTree* в разделе <replicated_merge_tree> файла конфигурации. Работает аналогично разделу <merge_tree>. Для хранилищ ReplicatedMergeTree* настройки из <merge_tree> и <replicated_merge_tree> применяются совместно, но настройки из <replicated_merge_tree> имеют более высокий приоритет. Добавлена таблица system.replicated_merge_tree_settings. #13573 (Amos Bird).
  • Добавлена функция mapPopulateSeries. #13166 (Ildus Kurbangaliev).
  • Поддерживаются типы MySQL: decimal (как ClickHouse Decimal) и datetime с точностью до долей секунды (как DateTime64). #11512 (Vasily Nemkov).
  • Добавлено поле event_time_microseconds в таблицы system.text_log, system.trace_log, system.query_log и system.query_thread_log. #14760 (Bharat Nallan).
  • Добавлено поле event_time_microseconds в таблицы system.asynchronous_metric_log и system.metric_log. #14514 (Bharat Nallan).
  • Добавлено поле query_start_time_microseconds в таблицы system.query_log и system.query_thread_log. #14252 (Bharat Nallan).

Исправление ошибки

  • Исправлен случай, когда память могла быть выделена сверх установленного лимита. Это закрывает #14560. #16206 (alexey-milovidov).
  • Исправлено зависание источника словаря executable. В предыдущих версиях при использовании некоторых форматов (например, JSONEachRow) данные не передавались дочернему процессу, пока тот не выводил хотя бы что‑нибудь. Это исправление закрывает #1697. Это исправление закрывает #2455. #14525 (alexey-milovidov).
  • Исправлено двойное освобождение памяти в случае исключения в функции dictGet. Это могло произойти, если словарь был загружен с ошибкой. #16429 (Nikolai Kochetov).
  • Исправлена проблема в GROUP BY с модификаторами totals/rollup/cube и функциями min/max по ключам группировки. Исправлена ошибка #16393. #16397 (Anton Popov).
  • Исправлена асинхронная вставка в Distributed при prefer_localhost_replica=0 и internal_replication. #16358 (Azat Khuzhin).
  • Исправлен серьёзный дефект в реализации TwoLevelStringHashTable, который мог приводить к утечке памяти. #16264 (Amos Bird).
  • Исправлен segfault в некоторых случаях некорректной агрегации в лямбда-выражениях. #16082 (Anton Popov).
  • Исправлено зависание выполнения запроса ALTER MODIFY ... ORDER BY для ReplicatedVersionedCollapsingMergeTree. Это исправление закрывает #15980. #16011 (alesapin).
  • MaterializeMySQL (экспериментальная функция): Исправлен разбор имени сортировки (collate) и имени набора символов (charset), а также добавлена поддержка length = 0 для строкового типа. #16008 (Winter Zhang).
  • Добавлена возможность использовать компоновку direct для словарей со сложными ключами. #16007 (Anton Popov).
  • Предотвращать зависание реплики на 5–10 минут при возникновении ошибки репликации после периода простоя. #15987 (filimonov).
  • Исправлены редкие ошибки сегментации (segfault) при вставке в MaterializedView или выборке из него при одновременном удалении целевой таблицы (для движка базы данных Atomic). #15984 (tavplubix).
  • Устранена неоднозначность при разборе профилей настроек: CREATE USER ... SETTINGS profile readonly теперь интерпретируется как использование профиля с именем readonly, а не настройки с именем profile с ограничением readonly. Это исправляет #15628. #15982 (Vitaly Baranov).
  • MaterializeMySQL (экспериментальная возможность): Исправлено аварийное завершение работы при неудачной попытке создания базы данных. #15954 (Winter Zhang).
  • Исправлен сбой DROP TABLE IF EXISTS с ошибкой Table ... does not exist при одновременном переименовании таблицы (для движка базы данных Atomic). Исправлена редкая взаимоблокировка при одновременном выполнении некоторых DDL-запросов с участием нескольких таблиц (таких как DROP DATABASE и RENAME TABLE). Также исправлен сбой DROP/DETACH DATABASE с ошибкой Table ... does not exist при одновременном выполнении DROP/DETACH TABLE. #15934 (tavplubix).
  • Исправлен некорректный пустой результат запроса к таблице Distributed, если запрос содержит WHERE, PREWHERE и GLOBAL IN. Устраняет #15792. #15933 (Nikolai Kochetov).
  • Исправлена ошибка #12513: выражения разности с одинаковым псевдонимом при повторном анализе запроса. #15886 (Winter Zhang).
  • Устранены возможные, хотя и крайне редкие, взаимоблокировки в реализации RBAC. #15875 (Vitaly Baranov).
  • Исправлено возникновение исключения Block structure mismatch в запросах SELECT ... ORDER BY DESC, выполнявшихся после запроса ALTER MODIFY COLUMN. Исправление для #15800. #15852 (alesapin).
  • MaterializeMySQL (экспериментальная функция): Исправлена неточность результата select count(). #15767 (tavplubix).
  • Исправлены некоторые случаи, когда в запросах выбирались только виртуальные столбцы. Ранее при этом могла возникать ошибка Not found column _nothing in block. Исправлено #12298. #15756 (Anton Popov).
  • Исправлена ошибка удаления материализованного представления с внутренней таблицей в базе данных Atomic (все последующие DROP TABLE зависали из-за зависания рабочего потока, вызванного рекурсивным DROP TABLE для внутренней таблицы MV). #15743 (Azat Khuzhin).
  • Возможность перенести часть на другой диск/том, если первая попытка не удалась. #15723 (Pavel Kovalenko).
  • Исправлена ошибка Cannot find column, которая могла возникать при вставке в MATERIALIZED VIEW, если запрос для MV содержал ARRAY JOIN. #15717 (Nikolai Kochetov).
  • Исправлено слишком заниженное значение по умолчанию параметра max_replicated_logs_to_keep, из‑за которого реплики могли слишком часто помечаться как потерянные. Улучшен процесс восстановления потерянной реплики за счёт выбора наиболее актуальной реплики в качестве источника клонирования. Также старые части потерянной реплики больше не удаляются, а отсоединяются. #15701 (tavplubix).
  • Исправлено редкое состояние гонки в словарях и таблицах, использующих MySQL в качестве источника данных. #15686 (alesapin).
  • Исправлено (неопасное) состояние гонки в AMQP-CPP. #15667 (alesapin).
  • Исправлена ошибка Cannot add simple transform to empty Pipe, возникавшая при чтении из таблицы Buffer, структура которой отличалась от структуры целевой таблицы. Это происходило, если целевая таблица возвращала пустой результат запроса. Исправляет #15529. #15662 (Nikolai Kochetov).
  • Корректная обработка ошибок при вставке данных в MergeTree при работе с S3. Использование MergeTree поверх S3 — экспериментальная возможность. #15657 (Pavel Kovalenko).
  • Исправлена ошибка с табличной функцией S3: регион из URL-адреса не применялся к конфигурации клиента S3. #15646 (Vladimir Chebotarev).
  • Исправлен порядок уничтожения ресурсов в шаге ReadFromStorage плана запроса. В редких случаях это могло приводить к сбоям. Возможно, связано с #15610. #15645 (Nikolai Kochetov).
  • Вычитать значение метрики ReadonlyReplica при отсоединении таблиц только для чтения. #15592 (sundyli).
  • Исправлена ошибка Element ... is not a constant expression при использовании результата функции JSON* в конструкциях VALUES, LIMIT или в правой части оператора IN. #15589 (tavplubix).
  • Запрос быстрее завершается при возникновении исключения. В этом случае выполнение на удалённых репликах отменяется. #15578 (Azat Khuzhin).
  • Предотвращено появление сообщения об ошибке Could not calculate available disk space (statvfs), errno: 4, strerror: Interrupted system call. Это исправляет #15541. #15557 (alexey-milovidov).
  • Исправлена ошибка вида Database <db> does not exist. в запросах с IN и распределённой таблицей (Distributed), когда на инициаторе нет базы данных. #15538 (Artem Zuikov).
  • Мутация могла зависать, ожидая несуществующей части после выполнения MOVE или REPLACE PARTITION или, в редких случаях, после DETACH или DROP PARTITION. Проблема исправлена. #15537 (tavplubix).
  • Исправлена ошибка, из-за которой оператор ILIKE становился чувствительным к регистру, если ранее выполнялся LIKE с тем же шаблоном. #15536 (alesapin).
  • Исправлена ошибка Missing columns, возникающая при выборе столбцов, отсутствующих в данных, но зависящих от других столбцов, которые также отсутствуют в данных. Исправляет проблему #15530. #15532 (alesapin).
  • Выдавать ошибку при передаче единственного параметра в ReplicatedMergeTree вместо его игнорирования. #15516 (nvartolomei).
  • Исправлена ошибка с подпиской на события в DDLWorker, которая в редких случаях могла приводить к зависанию запросов в ON CLUSTER. Ошибка появилась в #13450. #15477 (alesapin).
  • Выводить корректное сообщение об ошибке, если второй аргумент агрегатной функции boundingRatio имеет неверный тип. #15407 (detailyang).
  • Исправляет #15365: ATTACH DATABASE с движком MySQL выбрасывает исключение из-за отсутствия контекста запроса. #15384 (Winter Zhang).
  • Исправлен случай с несколькими использованиями трансформеров столбцов в запросе SELECT. #15378 (Amos Bird).
  • Исправлено сжатие в хранилище S3. #15376 (Vladimir Chebotarev).
  • Исправлена ошибка, из-за которой запросы вида SELECT toStartOfDay(today()) завершались с ошибкой о пустом аргументе time_zone. #15319 (Bharat Nallan).
  • Устранено состояние гонки при переименовании таблицы MergeTree и её фоновом очищении. #15304 (alesapin).
  • Исправлена редкая гонка при запуске сервера при включённых системных логах. #15300 (alesapin).
  • Исправлено зависание запросов с большим количеством подзапросов к одной и той же таблице с движком MySQL. Ранее, если запрос содержал более 16 подзапросов к одной и той же таблице MySQL, он зависал и никогда не завершался. #15299 (Anton Popov).
  • Исправлен отчет MSan в QueryLog. Неинициализированная память могла использоваться в поле memory_usage. #15258 (alexey-milovidov).
  • Исправлена ошибка 'Unknown identifier' в GROUP BY при выполнении запроса с JOIN по таблице Merge. #15242 (Artem Zuikov).
  • Исправлено падение сервера при использовании joinGet с типами LowCardinality. Это исправление закрывает #15214. #15220 (Amos Bird).
  • Исправлена ошибка в табличном движке Buffer, не позволявшая вставлять данные новой структуры в Buffer после выполнения запроса ALTER. Исправлено #15117. #15192 (alesapin).
  • Изменён размер поля Decimal в пакете определения столбца для MySQL. #15152 (maqroll).
  • Исправлена ошибка Data compressed with different methods при join_algorithm='auto'. Сохранён тип LowCardinality для ключа соединения левой таблицы при join_algorithm='partial_merge'. #15088 (Artem Zuikov).
  • Обновлён jemalloc для исправления работы percpu_arena с маской аффинности. #15035 (Azat Khuzhin). #14957 (Azat Khuzhin).
  • Мы уже используем сравнение с дополнением до фиксированной длины между String и FixedString (https://github.com/ClickHouse/ClickHouse/blob/master/src/Functions/FunctionsComparison.h#L333). Этот PR применяет ту же логику к сравнению полей, что исправляет использование FixedString в качестве первичных ключей. Это исправляет #14908. #15033 (Amos Bird).
  • Если функция bar вызывалась со специально подобранными аргументами, могло произойти переполнение буфера. Это закрывает #13926. #15028 (alexey-milovidov).
  • Исправлена ошибка Cannot rename ... errno: 22, strerror: Invalid argument при выполнении DDL-запроса в базе данных Atomic при запуске clickhouse-server в Docker на macOS. #15024 (tavplubix).
  • Исправлен сбой при RIGHT или FULL JOIN с join_algorith='auto', возникавший при превышении лимита памяти и необходимости заменить HashJoin на MergeJoin. #15002 (Artem Zuikov).
  • Теперь значения параметров number_of_free_entries_in_pool_to_execute_mutation и number_of_free_entries_in_pool_to_lower_max_size_of_merge могут быть равны background_pool_size. #14975 (alesapin).
  • Исправление для корректной работы проталкивания предикатов, когда подзапрос содержит функцию finalizeAggregation. Исправляет #14847. #14937 (filimonov).
  • Публикуются частоты CPU для каждого логического ядра в system.asynchronous_metrics. Это исправляет #14923. #14924 (Alexander Kuzmenkov).
  • MaterializeMySQL (экспериментальная функция): исправлена ошибка «.metadata.tmp File exists». #14898 (Winter Zhang).
  • Исправлена проблема, из-за которой некоторые вызовы функции extractAllGroups могли приводить к ошибке «Memory limit exceeded». Это исправляет #13383. #14889 (alexey-milovidov).
  • Исправлен SIGSEGV при попытке выполнить операцию INSERT в StorageFile с файловым дескриптором. #14887 (Azat Khuzhin).
  • Устранена ошибка сегментации в словаре cache #14837. #14879 (Nikita Mikhaylov).
  • MaterializeMySQL (экспериментальная функциональность): Исправлена ошибка при разборе событий двоичного журнала MySQL (binlog), которая вызывала Attempt to read after eof и Packet payload is not fully read в движке базы данных MaterializeMySQL. #14852 (Winter Zhang).
  • Исправлена редкая ошибка в запросах SELECT, когда запрашиваемый столбец имеет выражение DEFAULT, зависящее от другого столбца, который также имеет DEFAULT, но отсутствует в запросе SELECT и не существует на диске. Частично исправлена #14531. #14845 (alesapin).
  • Исправлена проблема, из-за которой сервер мог зависать при запуске при обращении к ZooKeeper, если файлы конфигурации нужно было загружать из ZK (с использованием директивы include from_zk). Это исправляет #14814. #14843 (Alexander Kuzmenkov).
  • Исправлено неверное определение монотонности при сужающем приведении типов Int -> Int для знаковых целых типов. Это могло приводить к некорректному результату запроса. Ошибка обнаружена в #14513. #14783 (Amos Bird).
  • Трансформер столбцов Replace должен заменять идентификаторы клонированными деревьями AST. Это исправляет #14695. #14734 (Amos Bird).
  • Исправлено отсутствие имени базы данных по умолчанию в метаданных материализованного представления при выполнении команды ALTER ... MODIFY QUERY. #14664 (tavplubix).
  • Исправлена ошибка, при которой мутация ALTER UPDATE со столбцом типа Nullable в выражении присваивания с константным значением (например, UPDATE x = 42) приводила к некорректному значению в столбце или ошибке сегментации (segfault). Исправляет #13634, #14045. #14646 (alesapin).
  • Исправлена некорректная работа умножения Decimal, вызванная неправильным масштабом результата в столбце. #14603 (Artem Zuikov).
  • Исправлена работа функции has с LowCardinality для Nullable. #14591 (Mike).
  • Очистка каталога с данными после исключений в ZooKeeper во время выполнения операции CreateQuery для движка StorageReplicatedMergeTree. #14563 (Bharat Nallan).
  • Исправлены редкие сегфолты в функциях с комбинатором -Resample, которые могли возникать в результате переполнения при очень больших значениях параметров. #14562 (Anton Popov).
  • Исправлена ошибка при преобразовании Nullable(String) в Enum. Ошибка появилась в результате изменения в #12745. Тем самым исправлена проблема #14435. #14530 (Amos Bird).
  • Исправлен некорректный порядок сортировки столбца типа Nullable. Исправляет #14344. #14495 (Nikita Mikhaylov).
  • Исправлена ошибка, из-за которой функцию currentDatabase() нельзя было использовать в DDL-запросе ON CLUSTER. #14211 (Winter Zhang).
  • MaterializeMySQL (экспериментальная возможность): Исправлена ошибка Packet payload is not fully read в движке базы данных MaterializeMySQL. #14696 (BohuTANG).

Улучшения

  • Включить по умолчанию движок базы данных Atomic для новых баз данных. #15003 (tavplubix).
  • Добавлена возможность указывать специализированные кодеки, такие как Delta, T64 и др., для столбцов с подтипами. Реализована #12551, исправлены #11397 и #4609. #15089 (alesapin).
  • Динамическая перезагрузка конфигурации ZooKeeper. #14678 (sundyli).
  • Теперь можно выполнять запросы ALTER ... ON CLUSTER вне зависимости от параметра <internal_replication> в конфигурации кластера. #16075 (alesapin).
  • Теперь joinGet поддерживает поиск по нескольким ключам. Продолжение #12418. #13015 (Amos Bird).
  • Дождитесь полного завершения операции DROP/DETACH TABLE, если для базы данных Atomic указаны NO DELAY или SYNC. #15448 (tavplubix).
  • Теперь можно изменить тип столбца версии для VersionedCollapsingMergeTree с помощью запроса ALTER. #15442 (alesapin).
  • Раскрывать макросы {database}, {table} и {uuid} в zookeeper_path при создании реплицируемой таблицы. Запрещать RENAME TABLE, если он может привести к некорректному значению zookeeper_path после перезапуска сервера. Исправляет #6917. #15348 (tavplubix).
  • Функция now теперь принимает аргумент с часовым поясом. Это исправляет проблему 15264. #15285 (flynn).
  • Не разрешать подключения к серверу ClickHouse до тех пор, пока все скрипты в /docker-entrypoint-initdb.d/ не будут выполнены. #15244 (Aleksei Kozharin).
  • Добавлена настройка optimize для запроса EXPLAIN PLAN. При её включении применяются оптимизации на уровне плана запроса. По умолчанию она включена. #15201 (Nikolai Kochetov).
  • Корректное сообщение об исключении для неверного числа аргументов функции CAST. Это закрывает #13992. #15029 (alexey-milovidov).
  • Добавлена опция отключения перемещения по TTL при вставке части данных. #15000 (Pavel Kovalenko).
  • Игнорировать ограничения по ключам при выполнении мутаций. Без этого pull request'а невозможно выполнять мутации, когда force_index_by_date = 1 или force_primary_key = 1. #14973 (Amos Bird).
  • Теперь можно удалить реплицируемую таблицу, если предыдущая попытка удаления завершилась неудачей из‑за истечения срока действия сессии ZooKeeper. Это исправляет #11891. #14926 (alexey-milovidov).
  • Исправлено избыточное срабатывание нарушения ограничения настроек при выполнении SELECT с SETTINGS из распределённой таблицы. #14876 (Amos Bird).
  • Добавлена настройка запроса load_balancing_first_offset, позволяющая явно указать первую реплику. Она используется вместе со стратегией балансировки нагрузки FIRST_OR_RANDOM, которая позволяет контролировать нагрузку на реплики. #14867 (Amos Bird).
  • Показывать подзапросы для SET и JOIN в выводе EXPLAIN. #14856 (Nikolai Kochetov).
  • Разрешено использование конфигурации хранилища с несколькими томами для хранилища Distributed. #14839 (Pavel Kovalenko).
  • Сформировать query_start_time и query_start_time_microseconds из одной и той же структуры timespec. #14831 (Bharat Nallan).
  • Поддержка отключения персистентности для StorageJoin и StorageSet; данная возможность настраивается параметром disable_set_and_join_persistency. Этот PR устраняет проблему #6318. #14776 (vxider).
  • Теперь COLUMNS можно использовать, чтобы обернуть список столбцов и затем применить к ним преобразования столбцов. #14775 (Amos Bird).
  • Добавлен столбец merge_algorithm в таблицу system.merges для улучшения анализа слияний. #14705 (Amos Bird).
  • Исправлена потенциальная утечка памяти, вызванная ZooKeeper exists watch. #14693 (hustnn).
  • Разрешить параллельное выполнение распределённых DDL-запросов. #14684 (Azat Khuzhin).
  • Добавлен счётчик события QueryMemoryLimitExceeded, что закрывает #14589. #14647 (fastio).
  • Исправлены некоторые пробелы в конце строк в форматировании запросов. #14595 (Azat Khuzhin).
  • ClickHouse по-разному обрабатывает partition expr и key expr. Partition expr используется для построения minmax-индекса, содержащего связанные столбцы, тогда как primary key expr хранится как выражение. Иногда пользователь может разбить таблицу по более крупным диапазонам, например partition by i / 1000. Однако бинарные операторы не являются монотонными, и этот PR пытается это исправить. Это также может быть полезно и для других сценариев использования. #14513 (Amos Bird).
  • Добавлена возможность пропускать проверки доступа для DiskS3. Диск s3 — экспериментальная функция. #14497 (Pavel Kovalenko).
  • Ускорен процесс завершения работы сервера при наличии выполняющихся запросов к S3. #14496 (Pavel Kovalenko).
  • SYSTEM RELOAD CONFIG теперь выбрасывает исключение при неудачной попытке перезагрузки и продолжает использовать предыдущий users.xml. Фоновая периодическая перезагрузка также продолжает использовать предыдущий users.xml в случае ошибки перезагрузки. #14492 (Vitaly Baranov).
  • Для INSERT-запросов со встроенными данными в формате VALUES в скриптовом режиме clickhouse-client добавлена поддержка точки с запятой в качестве символа окончания данных, помимо перевода строки. Закрывает #12288. #13192 (Alexander Kuzmenkov).
  • Поддержка пользовательских кодеков в компактных партах. #12183 (Anton Popov).

Улучшения производительности

  • По умолчанию включено создание компактных частей для маленьких партиций. Это позволяет обрабатывать частые вставки заметно эффективнее (в 4–100 раз). #11913 (alexey-milovidov).
  • Улучшена производительность quantileTDigest. Это исправляет #2668. #15542 (Kruglov Pavel).
  • Существенно снижено потребление памяти в AggregatingInOrderTransform/optimize_aggregation_in_order. #15543 (Azat Khuzhin).
  • Ускорено 256-битное умножение. #15418 (Artem Zuikov).
  • Улучшена производительность 256-битных типов за счёт использования (u)int64_t в качестве базового типа для широких целых. Изначально широкие целые использовали 8-битные типы как базовые. #14859 (Artem Zuikov).
  • Теперь временный диск явно используется для хранения временных данных вертикального слияния. #15639 (Grigory Pervakov).
  • Используется один запрос S3 DeleteObjects вместо нескольких DeleteObject в цикле. Функциональность не изменилась, поэтому это покрывается существующими тестами, такими как integration/test_log_family_s3. #15238 (ianton-ru).
  • Исправлено, что DateTime <op> DateTime ошибочно выбирал медленную универсальную реализацию. Это исправляет #15153. #15178 (Amos Bird).
  • Улучшена производительность ключа GROUP BY типа FixedString. #15034 (Amos Bird).
  • При запуске clickhouse-server выполняется mlock только для сегмента кода. В предыдущих версиях все отображённые области памяти блокировались, включая отладочную информацию. Отладочная информация обычно вынесена в отдельный файл, но если нет, это приводило к дополнительному потреблению памяти на 2–3 ГиБ. #14929 (alexey-milovidov).
  • Бинарный файл ClickHouse стал меньше за счёт оптимизации на этапе линковки.

Улучшения сборки/тестирования/упаковки

  • Теперь для боевой сборки ClickHouse мы используем clang-11. #15239 (alesapin).
  • Теперь мы используем clang-11 для сборки ClickHouse в CI. #14846 (alesapin).
  • Переключены бинарные сборки (Linux, Darwin, AArch64, FreeDSD) на clang-11. #15622 (Ilya Yatsishin).
  • Теперь все тестовые образы используют llvm-symbolizer-11. #15069 (alesapin).
  • Добавлена поддержка сборки с llvm-11. #15366 (alexey-milovidov).
  • Переход с clang-tidy-10 на clang-tidy-11. #14922 (alexey-milovidov).
  • Использовать экспериментальный менеджер проходов LLVM по умолчанию. #15608 (Danila Kutenin).
  • Не допускайте, чтобы какой-либо отдельный модуль трансляции C++ компилировался более 10 минут или потреблял более 10 ГБ памяти. Это исправляет #14925. #15060 (alexey-milovidov).
  • Сделать нагрузочное тестирование более стабильным и показательным, выделив отдельные прогоны для тестирования и профилирования. #15027 (alexey-milovidov).
  • Попытка сделать результаты нагрузочного тестирования более надёжными. Это делается путём динамического переназначения исполняемой памяти процесса с помощью madvise для использования прозрачных больших страниц — это может снизить количество промахов iTLB, которые являются основным источником нестабильности производительности в нагрузочных тестах. #14685 (alexey-milovidov).
  • Переход на Python 3. Закрывает #14886. #15007 (Azat Khuzhin).
  • Ранее завершать выполнение функциональных тестов, если сервер не отвечает. Это закрывает #15262. #15267 (alexey-milovidov).
  • Добавлена возможность запускать AArch64-версию clickhouse-server без конфигурационных файлов. Это облегчает решение задачи #15174. #15266 (alexey-milovidov).
  • Улучшения в Docker-образах CI: отказ от использования ZooKeeper и единый скрипт для установки тестовых конфигураций. #15215 (alesapin).
  • Исправлена передача опций CMake в скрипте быстрых тестов. Исправлена ошибка из #14711. #15155 (alesapin).
  • Добавлен скрипт для выполнения аппаратного бенчмарка одной командой. #15115 (alexey-milovidov).
  • Большой тест test_dictionaries_all_layouts_and_sources был разбит на несколько меньших тестов. #15110 (Nikita Mikhaylov).
  • Возможно, исправлено сообщение MSan в base64 (на серверах с AVX-512). Это исправляет #14006. #15030 (alexey-milovidov).
  • Отформатировать и привести в порядок код во всех файлах *.py интеграционных тестов. #14864 (Bharat Nallan).
  • Исправлен нестабильный тест пустой транзакции в MaterializeMySQL, найденный в CI. #14854 (Winter Zhang).
  • Попытка немного ускорить сборку. #14808 (alexey-milovidov).
  • Сборка немного ускорена за счет удаления неиспользуемых заголовков. #14714 (alexey-milovidov).
  • Исправлена проблема со сборкой на OSX. #14761 (Winter Zhang).
  • Включать ccache по умолчанию в cmake, если он доступен в системе. #14575 (alesapin).
  • Контроль конфигурации CI-сборок из репозитория ClickHouse. #14547 (alesapin).
  • В файлах CMake: - Часть описаний опций перенесена в комментарии над ними. - Значения по умолчанию для option заменены: 0 -> OFF, 1 -> ON. - К опциям добавлены дополнительные описания и ссылки на документацию. - Опция FUZZER заменена (есть другая опция ENABLE_FUZZING, которая включает ту же функциональность). - Опция ENABLE_GTEST_LIBRARY удалена, так как уже есть ENABLE_TESTS. Полное описание см. в PR: #14711 (Mike).
  • Немного уменьшен размер бинарного файла (~50 МБ для отладочной версии). #14555 (Artem Zuikov).
  • Использовать std::filesystem::path в ConfigProcessor для объединения файловых путей. #14558 (Bharat Nallan).
  • Исправлено отладочное утверждение в bitShiftLeft() при вызове с отрицательным большим целым числом. #14697 (Artem Zuikov).

Релиз ClickHouse 20.9

Релиз ClickHouse v20.9.7.11-stable, 2020-12-07

Повышение производительности

  • Исправлена деградация производительности при чтении из таблиц Merge, работающих поверх очень большого числа таблиц MergeTree. Устраняет проблему #7748. #16988 (Anton Popov).

Исправление ошибки

  • Не восстанавливать части из WAL, если in_memory_parts_enable_wal отключён. #17802 (detailyang).
  • Исправлено падение с ошибкой сегментации при недостатке места во время вставки в таблицу Distributed. #17737 (tavplubix).
  • Исправлена проблема, из-за которой ClickHouse не удавалось восстановить соединение с серверами MySQL. #17681 (Alexander Kazakov).
  • Исправлена ошибка Function not implemented при выполнении запроса RENAME в базе данных Atomic при работе ClickHouse под Windows Subsystem for Linux. Исправлено #17661. #17664 (tavplubix).
  • Когда clickhouse-client использовался в интерактивном режиме с многострочными запросами, однострочный комментарий ошибочно считался продолжающимся до конца запроса. Это исправляет #13654. #17565 (alexey-milovidov).
  • Исправлена проблема, из-за которой сервер в крайне редких случаях мог перестать принимать подключения. #17542 (alexey-milovidov).
  • Исправлено зависание запроса ALTER, когда соответствующая мутация была прервана на другой реплике. Исправляет проблему #16953. #17499 (alesapin).
  • Исправлена ошибка, из-за которой размер кэша меток недооценивался ClickHouse. Это могло происходить при большом количестве мелких файлов с метками. #17496 (alesapin).
  • Исправлена работа ORDER BY при включённой настройке optimize_redundant_functions_in_order_by. #17471 (Anton Popov).
  • Исправлены дубликаты после DISTINCT, которые могли возникать из-за некорректной оптимизации. Исправлено #17294. #17296 (li chengxiang). #17439 (Nikolai Kochetov).
  • Устранен сбой при чтении из таблицы JOIN с типами LowCardinality. Устранена проблема #17228. #17397 (Nikolai Kochetov).
  • Исправлена инвалидация set-индекса при наличии константных столбцов в подзапросе. Устраняет #17246. #17249 (Amos Bird).
  • Исправлено сравнение ColumnConst, из-за которого происходил сбой. Это исправило #17088. #17135 (Amos Bird).
  • Исправлена ошибка, приводившая к сбою при выполнении запроса CREATE TABLE ... AS some_table, когда таблица some_table была создана с помощью AS table_function(). Исправляет #16944. #17072 (tavplubix).
  • Исправление ошибки в функции fuzzBits; связанная задача: #16980. #17051 (hexiaoting).
  • Избегайте лишних сетевых ошибок при выполнении удалённых запросов, которые могут быть отменены, например запросов с LIMIT. #17006 (Azat Khuzhin).
  • TODO. #16866 (tavplubix).
  • Возвращать количество затронутых строк для запросов INSERT, выполняемых по протоколу MySQL. Ранее ClickHouse всегда возвращал 0; это исправлено. Исправляет #16605. #16715 (Winter Zhang).

Улучшения сборки/тестирования/упаковки

  • Обновлены встроенные данные часовых поясов до версии 2020d (также обновлён cctz до последнего состояния ветки master). #17204 (filimonov).

Релиз ClickHouse v20.9.6.14-stable, 2020-11-20

Улучшения

  • Реализована возможность подключаться к защищённой конечной точке clickhouse-server, которая требует SNI. Это возможно, когда clickhouse-server размещён за TLS‑прокси. #16938 (filimonov).
  • Условные агрегатные функции (например, avgIf, sumIf, maxIf) должны возвращать NULL, когда нет строк и используются nullable‑аргументы. #13964 (Winter Zhang).

Исправления ошибок

  • Исправлена ошибка, из-за которой запросы ON CLUSTER могли зависать навсегда для нелидирующих таблиц ReplicatedMergeTree. #17089 (alesapin).
  • Повторно выполняется резолвинг IP‑адреса для format_avro_schema_registry_url в случае ошибок. #16985 (filimonov).
  • Исправлен возможный сбой сервера после ALTER TABLE ... MODIFY COLUMN ... NewType, когда в запросе SELECT присутствует выражение WHERE по изменяемому столбцу, а операция ALTER ещё не завершена. #16968 (Amos Bird).
  • Скрипт установки всегда должен создавать подкаталоги в конфигурационных директориях. Актуально только для Docker‑сборки с пользовательской конфигурацией. #16936 (filimonov).
  • Исправлена возможная ошибка Illegal type of argument для запросов с ORDER BY. Исправляет #16580. #16928 (Nikolai Kochetov).
  • Прерывается multipart‑загрузка, если в WriteBufferFromS3 не были записаны данные. #16840 (Pavel Kovalenko).
  • Исправлен сбой при использовании any без каких-либо аргументов. Относится к #16803. cc @azat. #16826 (Amos Bird).
  • Исправлена работа оператора IN по нескольким столбцам и кортежам при включённой настройке transform_null_in. Исправляет #15310. #16722 (Anton Popov).
  • Исправлена работа optimize_read_in_order/optimize_aggregation_in_order при max_threads>0 и выражении в ORDER BY. #16637 (Azat Khuzhin).
  • Исправляет #16574, исправляет #16231: исправлен сбой удалённого запроса при использовании агрегатной функции с суффиксом if. #16610 (Winter Zhang).
  • Запрос завершается быстрее в случае возникновения исключения: выполнение на удалённых репликах отменяется, если произошло исключение. #15578 (Azat Khuzhin).

Релиз ClickHouse v20.9.5.5-stable, 2020-11-13

Исправление ошибок

  • Исправлены редкие «тихие» сбои при включённом профилировщике запросов, когда ClickHouse установлен в ОС с версией glibc, у которой (предположительно) повреждённые таблицы асинхронного развёртывания стека для некоторых функций. Это исправляет #15301. Это исправляет #13098. #16846 (alexey-milovidov).
  • Теперь при разборе AVRO из входных данных тип LowCardinality удаляется. Исправляет #16188. #16521 (Mike).
  • Исправлен быстрый рост метаданных при использовании цепочки MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL Engine и включённом slave_parallel_worker на MySQL Slave за счёт корректного уменьшения наборов GTID. Это исправляет #15951. #16504 (TCeason).
  • Исправлен DROP TABLE для Distributed (гонка с INSERT). #16409 (Azat Khuzhin).
  • Исправлена обработка очень крупных записей в очереди репликации. Очень крупные записи могут появляться в запросах ALTER, если структура таблицы чрезвычайно велика (порядка 1 МБ). Это исправляет #16307. #16332 (alexey-milovidov).
  • Исправлено неконсистентное поведение, при котором часть возвращаемых данных могла быть отброшена, потому что множество для их фильтрации не было создано. #16308 (Nikita Mikhaylov).
  • Исправлена ошибка с базой данных MySQL. Когда сервер MySQL, используемый как движок базы данных, недоступен, некоторые запросы выбрасывали Exception, так как они пытались получить таблицы с отключённого сервера, хотя в этом не было необходимости. Например, запрос SELECT ... FROM system.parts должен работать только с таблицами MergeTree и вообще не обращаться к базе данных MySQL. #16032 (Kruglov Pavel).

Релиз ClickHouse v20.9.4.76-stable (2020-10-29)

Исправление ошибок

  • Исправлено двойное освобождение памяти в случае исключения в функции dictGet. Это могло произойти, если словарь был загружен с ошибкой. #16429 (Nikolai Kochetov).
  • Исправлено поведение GROUP BY с модификаторами WITH TOTALS/ROLLUP/CUBE и функциями min/max по ключам группировки. Исправлена #16393. #16397 (Anton Popov).
  • Исправлен асинхронный INSERT в таблицы Distributed с prefer_localhost_replica=0 и internal_replication. #16358 (Azat Khuzhin).
  • Исправлен сильно ошибочный участок кода в реализации TwoLevelStringHashTable, который мог приводить к утечке памяти. Я удивлён, как этот баг мог так долго оставаться незамеченным... #16264 (Amos Bird).
  • Исправлен случай, когда память могла выделяться сверх установленного лимита. Это исправление закрывает #14560. #16206 (alexey-milovidov).
  • Исправлена проблема зависания запроса ALTER MODIFY ... ORDER BY для ReplicatedVersionedCollapsingMergeTree. Исправление для #15980. #16011 (alesapin).
  • Исправлен парсер имён collate и набора символов, а также добавлена поддержка значения length = 0 для строкового типа. #16008 (Winter Zhang).
  • Добавлена возможность использовать прямой layout для словарей со сложными ключами. #16007 (Anton Popov).
  • Предотвращено зависание реплики на 5–10 минут при возникновении ошибки репликации после периода простоя. #15987 (filimonov).
  • Исправлены редкие ошибки сегментации при вставке в материализованное представление или выборке из него при одновременном удалении целевой таблицы (для движка базы данных Atomic). #15984 (tavplubix).
  • Исправлена неоднозначность при разборе профилей настроек: CREATE USER ... SETTINGS profile readonly теперь трактуется как использование профиля с именем readonly, а не настройки profile с ограничением readonly. Это исправляет #15628. #15982 (Vitaly Baranov).
  • Исправлена ошибка, приводившая к падению при неудачном создании базы данных. #15954 (Winter Zhang).
  • Исправлен сбой DROP TABLE IF EXISTS с ошибкой Table ... does not exist, возникавший при одновременном переименовании таблицы (для движка базы данных Atomic). Исправлена редкая взаимоблокировка при одновременном выполнении некоторых DDL‑запросов над несколькими таблицами (таких как DROP DATABASE и RENAME TABLE). Исправлен сбой DROP/DETACH DATABASE с ошибкой Table ... does not exist при одновременном выполнении команд DROP/DETACH TABLE. #15934 (tavplubix).
  • Исправлена ошибка, из-за которой запрос к таблице Distributed с условиями WHERE, PREWHERE и GLOBAL IN возвращал пустой результат. Исправляет #15792. #15933 (Nikolai Kochetov).
  • Устранены возможные взаимоблокировки в RBAC. #15875 (Vitaly Baranov).
  • Исправлена ошибка, приводившая к возникновению исключения Block structure mismatch в запросах SELECT ... ORDER BY DESC, которые выполнялись после запроса ALTER MODIFY COLUMN. Исправляет #15800. #15852 (alesapin).
  • Исправлена неточность select count() для MaterializeMySQL. #15767 (tavplubix).
  • Исправлены некоторые случаи запросов, в которых выбирались только виртуальные столбцы. Ранее могло выбрасываться исключение Not found column _nothing in block. Исправлена #12298. #15756 (Anton Popov).
  • Исправлено слишком низкое значение по умолчанию параметра max_replicated_logs_to_keep, из-за которого реплики могли слишком часто помечаться как потерянные. Улучшен процесс восстановления потерянных реплик за счёт выбора наиболее актуальной реплики для клонирования. Также старые части потерянной реплики больше не удаляются, а отсоединяются. #15701 (tavplubix).
  • Исправлена ошибка Cannot add simple transform to empty Pipe, которая возникала при чтении из таблицы Buffer, структура которой отличается от структуры целевой таблицы. Она могла проявляться, если запрос к целевой таблице возвращал пустой результат. Исправляет #15529. #15662 (Nikolai Kochetov).
  • Исправлена ошибка обработки glob-масок в табличной функции S3: регион из URL не применялся в конфигурации клиента S3. #15646 (Vladimir Chebotarev).
  • Уменьшить значение метрики ReadonlyReplica при отсоединении таблиц только для чтения. Это исправляет #15598. #15592 (sundyli).
  • Вызывать ошибку при передаче в ReplicatedMergeTree одного параметра вместо того, чтобы игнорировать его. #15516 (nvartolomei).

Улучшение

  • Теперь разрешено выполнять запросы ALTER ... ON CLUSTER независимо от настройки <internal_replication> в конфигурации кластера. #16075 (alesapin).
  • Теперь макросы {database}, {table} и {uuid} в аргументах ReplicatedMergeTree разворачиваются при создании таблицы. #16160 (tavplubix).

Релиз ClickHouse v20.9.3.45-stable (2020-10-09)

Исправление ошибки

  • Исправлена ошибка Cannot find column, которая могла возникать при вставке в MATERIALIZED VIEW, если запрос для MV содержит оператор ARRAY JOIN. #15717 (Nikolai Kochetov).
  • Исправлена гонка (race condition) в AMQP-CPP. #15667 (alesapin).
  • Исправлен порядок уничтожения ресурсов на шаге плана запроса ReadFromStorage. В редких случаях это могло приводить к аварийному завершению работы. Возможно, связано с #15610. #15645 (Nikolai Kochetov).
  • Исправлена ошибка Element ... is not a constant expression при использовании результата функции JSON* в VALUES, LIMIT или правой части оператора IN. #15589 (tavplubix).
  • Предотвращено появление сообщения об ошибке Could not calculate available disk space (statvfs), errno: 4, strerror: Interrupted system call. Исправляет #15541. #15557 (alexey-milovidov).
  • Существенно снижено потребление памяти в AggregatingInOrderTransform и optimize_aggregation_in_order. #15543 (Azat Khuzhin).
  • Мутация могла зависать в ожидании несуществующей части после операций MOVE или REPLACE PARTITION, а в редких случаях — после DETACH или DROP PARTITION. Исправлено. #15537 (tavplubix).
  • Исправлена ошибка, при которой оператор ILIKE переставал быть регистронезависимым, если ранее выполнялся LIKE с тем же шаблоном. #15536 (alesapin).
  • Исправлена ошибка Missing columns при выборе столбцов, отсутствующих в данных, но зависящих от других столбцов, которые также отсутствуют в данных. Исправлено #15530. #15532 (alesapin).
  • Исправлена ошибка подписки на события в DDLWorker, которая в редких случаях могла приводить к зависанию запросов в ON CLUSTER. Впервые появилась в #13450. #15477 (alesapin).
  • Выдавать корректное сообщение об ошибке, когда второй аргумент агрегатной функции boundingRatio имеет неверный тип. #15407 (detailyang).
  • Исправлена ошибка, из-за которой запросы вида SELECT toStartOfDay(today()) завершались с ошибкой о пустом аргументе time_zone. #15319 (Bharat Nallan).
  • Исправлена гонка при переименовании таблицы MergeTree и её фоновой очистке. #15304 (alesapin).
  • Исправлена редкая гонка при запуске сервера, возникающая при включённых system.logs. #15300 (alesapin).
  • Исправлено предупреждение MSan в QueryLog. Неинициализированная память могла использоваться для поля memory_usage. #15258 (alexey-milovidov).
  • Исправлен крэш сервера при использовании функции joinGet с типами LowCardinality. Это исправляет #15214. #15220 (Amos Bird).
  • Исправлена ошибка в табличном движке Buffer, из-за которой после запроса ALTER было невозможно вставлять данные с новой структурой в Buffer. Исправляет #15117. #15192 (alesapin).
  • Изменить размер поля decimals в пакете описания столбца MySQL. #15152 (maqroll).
  • Исправлена ошибка Cannot rename ... errno: 22, strerror: Invalid argument при выполнении DDL-запроса в базе данных Atomic при запуске clickhouse-server в Docker на macOS. #15024 (tavplubix).
  • Исправлена работа проталкивания предикатов, когда подзапрос содержит функцию finalizeAggregation. Исправляет #14847. #14937 (filimonov).
  • Исправлена проблема, при которой сервер мог зависать при запуске во время взаимодействия с ZooKeeper, если файлы конфигурации необходимо было загружать из ZK (с использованием опции include from_zk). Это исправляет #14814. #14843 (Alexander Kuzmenkov).

Улучшение

  • Теперь можно изменять тип столбца версии для VersionedCollapsingMergeTree с помощью запроса ALTER. #15442 (alesapin).

Релиз ClickHouse v20.9.2.20, 2020-09-22

Несовместимое изменение (нарушение обратной совместимости)

  • При обновлении с версий ниже 20.5, если выполняется поэтапное (rolling) обновление и в кластере одновременно есть версии 20.5 и новее и версии ниже 20.5, то при перезапуске узлов ClickHouse со старыми версиями и запуске старой версии в присутствии новых версий это может привести к ошибкам Part ... intersects previous part. Чтобы предотвратить эту ошибку, сначала установите новые пакеты clickhouse-server на все узлы кластера, а затем выполняйте перезапуски (то есть при перезапуске clickhouse-server будет запускаться уже новая версия).

Новая функция

  • Добавлены трансформеры столбцов EXCEPT, REPLACE, APPLY, которые могут быть применены к списку выбранных столбцов (после * или COLUMNS(...)). Например, можно написать SELECT * EXCEPT(URL) REPLACE(number + 1 AS number). Другой пример: select * apply(length) apply(max) from wide_string_table, чтобы узнать максимальную длину всех строковых столбцов. #14233 (Amos Bird).
  • Добавлена агрегатная функция rankCorr, которая вычисляет коэффициент ранговой корреляции. #11769 (antikvist) #14411 (Nikita Mikhaylov).
  • Добавлена табличная функция view, которая превращает подзапрос в табличный объект. Это упрощает передачу запросов. Например, её можно использовать в табличных функциях remote/cluster. #12567 (Amos Bird).

Исправление ошибки

  • Исправлена ошибка, из-за которой мутация ALTER UPDATE со столбцом типа Nullable в выражении присваивания и константным значением (например, UPDATE x = 42) приводила к некорректному значению в столбце или ошибке сегментации (segfault). Исправляет #13634, #14045. #14646 (alesapin).
  • Исправлен неверный результат умножения Decimal, вызванный неправильным масштабом результата Decimal в результирующем столбце. #14603 (Artem Zuikov).
  • Исправлен некорректный порядок сортировки столбца типа Nullable. Это устраняет #14344. #14495 (Nikita Mikhaylov).
  • Исправлено некорректное сравнение с первичным ключом типа FixedString при анализе индекса, если он сравнивается со строкой меньшей длины. Это исправляет #14908. #15033 (Amos Bird).
  • Исправлена ошибка, приводившая к неверному назначению слияний, если таблица содержит разделы, состоящие из одной части. #14444 (alesapin).
  • Если функция bar вызывалась со специально подобранными аргументами, могло произойти переполнение буфера. Это закрывает #13926. #15028 (alexey-milovidov).
  • Публикация частоты CPU для каждого логического ядра в system.asynchronous_metrics. Это исправляет #14923. #14924 (Alexander Kuzmenkov).
  • Исправлена ошибка «.metadata.tmp File exists» при использовании движка базы данных MaterializeMySQL. #14898 (Winter Zhang).
  • Исправлена проблема, при которой некоторые вызовы функции extractAllGroups могли приводить к ошибке «Memory limit exceeded». Это исправляет проблему #13383. #14889 (alexey-milovidov).
  • Исправлена ошибка SIGSEGV при попытке выполнить INSERT в StorageFile(fd). #14887 (Azat Khuzhin).
  • Исправлена редкая ошибка в запросах SELECT, возникающая, когда запрашиваемый столбец имеет выражение DEFAULT, зависящее от другого столбца, который также имеет DEFAULT, не указан в запросе SELECT и при этом отсутствует на диске. Частично исправлена #14531. #14845 (alesapin).
  • Исправлено некорректное определение монотонности при сужающем приведении Int -> Int для знаковых типов. Это могло приводить к неверному результату запроса. Ошибка была выявлена в #14513. #14783 (Amos Bird).
  • Исправлено отсутствие имени базы данных по умолчанию в метаданных материализованного представления при выполнении команды ALTER ... MODIFY QUERY. #14664 (tavplubix).
  • Исправлен потенциально некорректный результат работы функции has при использовании типов LowCardinality и Nullable. #14591 (Mike).
  • Очистка каталога данных после исключений в ZooKeeper во время выполнения запроса CREATE для таблиц с движком ReplicatedMergeTree. #14563 (Bharat Nallan).
  • Исправлены редкие сбои сегментации в функциях с комбинатором -Resample, которые могли возникать в результате переполнения при очень больших значениях параметров. #14562 (Anton Popov).
  • Проверка размера массива на переполнение в агрегатной функции topK. Без этой проверки пользователь может отправить запрос с тщательно подобранными параметрами, что приведёт к сбою сервера. Это закрывает #14452. #14467 (alexey-milovidov).
  • Переадресованы команды restart/start/stop/reload SysVinit в systemd (если он используется). #14460 (Azat Khuzhin).
  • Останавливается выполнение запроса при возникновении исключения в самом PipelineExecutor. Это позволяет предотвратить редкие случаи зависания запроса. #14334 #14402 (Nikolai Kochetov).
  • Исправлено падение сервера при выполнении запроса ALTER для таблицы, созданной с помощью AS table_function. Исправляет #14212. #14326 (alesapin).
  • Исправлена ошибка, приводившая к исключению при выполнении запроса ALTER LIVE VIEW с командой REFRESH. LIVE VIEW — экспериментальная функция. #14320 (Bharat Nallan).
  • Исправлено время жизни QueryPlan (для EXPLAIN PIPELINE graph=1) для запросов с вложенным интерпретатором. #14315 (Azat Khuzhin).
  • Улучшена проверка размера кортежа во внешних словарях с составным ключом, использующих SSD-кэш. Исправляет #13981. #14313 (alexey-milovidov).
  • Запрещает использование CODEC для столбцов типа ALIAS. Исправляет #13911. #14263 (Bharat Nallan).
  • Исправлено поведение оператора GRANT ALL при выполнении не на глобальном уровне. #13987 (Vitaly Baranov).
  • Исправлен захват arrayJoin() в lambda (выбрасывалось исключение с сообщением о логической ошибке). #13792 (Azat Khuzhin).

Экспериментальная возможность

  • Добавлен инструмент db-generator для случайной генерации базы данных по заданным запросам SELECT. Он может упростить воспроизведение проблем, когда от пользователя есть только неполный отчёт об ошибке. #14442 (Nikita Mikhaylov) #10973 (ZeDRoman).

Улучшение

  • Разрешено использовать конфигурацию хранилища с несколькими томами в движке Distributed. #14839 (Pavel Kovalenko).
  • Запрещён пустой аргумент time_zone в функциях семейства toStartOf*. #14509 (Bharat Nallan).
  • Обработчик MySQL возвращает OK для запросов вида SET @@var = value. Такой оператор игнорируется. Это необходимо, потому что некоторые драйверы MySQL после рукопожатия отправляют запрос SET @@ для настройки: https://github.com/ClickHouse/ClickHouse/issues/9336#issuecomment-686222422. #14469 (BohuTANG).
  • Теперь TTL применяются во время слияния, если они ранее не были материализованы. #14438 (alesapin).
  • Теперь clickhouse-obfuscator поддерживает тип UUID, как предложено в #13163. #14409 (dimarub2000).
  • Добавлена новая настройка system_events_show_zero_values, как предложено в #11384. #14404 (dimarub2000).
  • Неявное приведение первичного ключа к NOT NULL в MaterializeMySQL (так же, как в MySQL). Исправляет #14114. #14397 (Winter Zhang).
  • Заменены широкие целые числа (256 бит) из boost multiprecision на реализацию из https://github.com/cerevra/int. 256-битные целые числа являются экспериментальными. #14229 (Artem Zuikov).
  • Добавлен кодек сжатия по умолчанию для кусков в system.part_log с именем default_compression_codec. #14116 (alesapin).
  • Добавлен аргумент точности для типа DateTime. Это позволяет использовать имя DateTime вместо DateTime64. #13761 (Winter Zhang).
  • Добавлена авторизация с requirepass для внешнего словаря Redis. #13688 (Ivan Torgashov).
  • Улучшения в движке RabbitMQ: добавлена обработка сбоев соединений и каналов, корректные коммиты, обработка ошибок вставки, улучшена работа с обменниками, повышена надёжность очередей и возможность их восстановления, добавлены новые настройки очередей. Исправлены тесты. #12761 (Kseniia Sumarokova).
  • Добавлена поддержка пользовательских кодеков в компактных кусках. #12183 (Anton Popov).

Улучшение производительности

  • Оптимизировать запросы с LIMIT/LIMIT BY/ORDER BY для Distributed с GROUP BY sharding_key (при включённых optimize_skip_unused_shards и optimize_distributed_group_by_sharding_key). #10373 (Azat Khuzhin).
  • Параллельное создание наборов для нескольких JOIN и IN. Это может немного повысить производительность запросов с несколькими различными выражениями вида IN subquery. #14412 (Nikolai Kochetov).
  • Повысить производительность движка Kafka за счёт выделения независимого потока для каждого потребителя. Выделен отдельный пул потоков для потоковых движков (таких как Kafka). #13939 (fastio).

Улучшения сборки/тестирования/упаковки

  • Уменьшить размер бинарного файла в debug-сборке за счёт удаления отладочной информации из Functions. Она нужна только для одного внутреннего проекта в Yandex, который использует очень старый линкер. #14549 (alexey-milovidov).
  • Подготовка к сборке с clang 11. #14455 (alexey-milovidov).
  • Исправлена логика в скрипте backport. В предыдущих версиях он срабатывал для любых меток со 100% красным цветом. Это было странно. #14433 (alexey-milovidov).
  • Интеграционные тесты используют базовую конфигурацию по умолчанию. Все изменения конфигурации выполняются явно, например, с помощью параметров main_configs, user_configs и dictionaries. #13647 (Ilya Yatsishin).

Релиз ClickHouse 20.8

Релиз ClickHouse v20.8.12.2-lts, 2021-01-16

Исправление ошибок

  • Исправлен *If-комбинатор с унарной функцией и типами Nullable. #18806 (Azat Khuzhin).
  • Ограничены слияния из широких частей в компактные. В случае вертикального слияния это приводило к повреждению результирующей части. #18381 (Anton Popov).

Релиз ClickHouse v20.8.11.17-lts, 2020-12-25

Исправление ошибок

  • Отключена запись с использованием AIO во время слияний, поскольку это может в крайне редких случаях приводить к повреждению данных в столбцах первичного ключа при слиянии. #18481 (alesapin).
  • Исправлена ошибка value is too short при выполнении функций toType(...) (toDate, toUInt32 и т.д.) с аргументом типа Nullable(String). Теперь такие функции возвращают NULL при ошибках разбора вместо генерации исключения. Исправляет #7673. #18445 (tavplubix).
  • Исправлены возможные падения в агрегатных функциях с комбинатором Distinct при использовании двухуровневой агрегации. Исправляет #17682. #18365 (Anton Popov).

Релиз ClickHouse v20.8.10.13-lts, 2020-12-24

Исправление ошибок

  • Когда ротация серверных логов была настроена с помощью параметра logger.size с числовым значением больше 2^32, логи не ротировались корректно. #17905 (Alexander Kuzmenkov).
  • Исправлена некорректная инициализация параметра max_compress_block_size в MergeTreeWriterSettings значением min_compress_block_size. #17833 (flynn).
  • Исправлена проблема, из-за которой ClickHouse не мог возобновить подключение к серверам MySQL. #17681 (Alexander Kazakov).
  • Исправлено зависание запроса ALTER, когда соответствующая мутация была убита на другой реплике. Это исправляет #16953. #17499 (alesapin).
  • Исправлена ошибка, из-за которой ClickHouse занижал размер кэша меток. Это могло происходить, если было много мелких файлов с метками. #17496 (alesapin).
  • Исправлена ошибка в ORDER BY при включённой настройке optimize_redundant_functions_in_order_by. #17471 (Anton Popov).
  • Исправлено сравнение ColumnConst, приводившее к аварийному завершению. Это исправило #17088. #17135 (Amos Bird).
  • Исправлена ошибка, из-за которой запросы с ON CLUSTER для не-лидирующих реплик таблиц ReplicatedMergeTree могли зависать бесконечно. #17089 (alesapin).
  • Исключены ненужные сетевые ошибки при удалённых запросах, которые могут быть отменены в процессе выполнения, например при запросах с LIMIT. #17006 (Azat Khuzhin).
  • Повторно определять IP-адрес для format_avro_schema_registry_url в случае ошибок. #16985 (filimonov).
  • Исправлено возможное аварийное завершение работы сервера после ALTER TABLE ... MODIFY COLUMN ... NewType, когда в SELECT используется условие WHERE по изменяемому столбцу, а операция изменения еще не завершена. #16968 (Amos Bird).
  • Скрипт установки всегда должен создавать подкаталоги в конфигурационных каталогах. Это относится только к сборке Docker с пользовательской конфигурацией. #16936 (filimonov).
  • Исправлена потенциальная ошибка Illegal type of argument в запросах с ORDER BY. Устраняет #16580. #16928 (Nikolai Kochetov).
  • Прерывать multipart-загрузку, если в WriteBufferFromS3 не были записаны данные. #16840 (Pavel Kovalenko).
  • Исправлен краш при использовании any без аргументов. Это устраняет #16803. #16826 (Amos Bird).
  • Исправлено поведение оператора IN для нескольких столбцов и кортежей при включённой настройке transform_null_in. Исправляет #15310. #16722 (Anton Popov).
  • Исправлено непоследовательное поведение optimize_read_in_order/optimize_aggregation_in_order при max_threads > 0 и наличии выражения в ORDER BY. #16637 (Azat Khuzhin).
  • Исправлена проблема, из-за которой оптимизация запроса выдавала некорректный результат, если запрос содержал конструкцию ARRAY JOIN. #17887 (sundyli).
  • Теперь запрос в случае исключения завершается быстрее: при его возникновении выполнение на удалённых репликах отменяется. #15578 (Azat Khuzhin).

Релиз ClickHouse v20.8.6.6-lts, 2020-11-13

Исправление ошибок

  • Исправлены редкие «тихие» аварийные завершения работы, возникавшие, когда профилировщик запросов включён и ClickHouse установлен на ОС с версией glibc, у которой (предположительно) повреждены асинхронные таблицы развёртки стека для некоторых функций. Исправляет #15301. Исправляет #13098. #16846 (alexey-milovidov).
  • Теперь при разборе AVRO из входных данных модификатор типа LowCardinality удаляется. Исправляет #16188. #16521 (Mike).
  • Исправлен быстрый рост метаданных при использовании цепочки MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL Engine и включённом slave_parallel_worker на MySQL Slave за счёт корректного сжатия множеств GTID. Исправляет #15951. #16504 (TCeason).
  • Исправлен DROP TABLE для Distributed (гонка с INSERT). #16409 (Azat Khuzhin).
  • Исправлена обработка очень больших записей в очереди репликации. Очень большие записи могут появляться в запросах ALTER, если структура таблицы чрезвычайно велика (порядка 1 МБ). Исправляет #16307. #16332 (alexey-milovidov).
  • Исправлено непоследовательное поведение, при котором часть возвращаемых данных могла быть отброшена, если множество для их фильтрации не было создано. #16308 (Nikita Mikhaylov).
  • Исправлена ошибка, связанная с базой данных MySQL. Когда сервер MySQL, используемый как движок базы данных, недоступен, некоторые запросы выбрасывали исключение, поскольку пытались получить таблицы с отключённого сервера, хотя в этом не было необходимости. Например, запрос SELECT ... FROM system.parts должен работать только с таблицами MergeTree и вовсе не обращаться к базе данных MySQL. #16032 (Kruglov Pavel).

Релиз ClickHouse v20.8.5.45-lts, 2020-10-29

Исправление ошибок

  • Исправлен двойной free в случае возникновения исключения в функции dictGet. Это могло произойти, если словарь был загружен с ошибкой. #16429 (Nikolai Kochetov).
  • Исправлена обработка GROUP BY с модификаторами WITH TOTALS/ROLLUP/CUBE и функциями min/max по ключам группировки. Устранена ошибка #16393. #16397 (Anton Popov).
  • Исправлен асинхронный запрос INSERT в Distributed при использовании prefer_localhost_replica=0 и internal_replication. #16358 (Azat Khuzhin).
  • Исправлена возможная утечка памяти при использовании GROUP BY со строковыми ключами, вызванная ошибкой в реализации TwoLevelStringHashTable. #16264 (Amos Bird).
  • Исправлен случай, когда память могла выделяться сверх лимита, независимо от заданного ограничения. Это закрывает #14560. #16206 (alexey-milovidov).
  • Исправлено зависание при выполнении запроса ALTER MODIFY ... ORDER BY для ReplicatedVersionedCollapsingMergeTree. Исправлена проблема #15980. #16011 (alesapin).
  • Исправлен парсер имён COLLATE и наборов символов и добавлена поддержка значения length = 0 для строкового типа. #16008 (Winter Zhang).
  • Разрешить использование прямого layout для словарей со сложными ключами. #16007 (Anton Popov).
  • Предотвращает зависание реплики на 5–10 минут при возникновении ошибки репликации после периода простоя. #15987 (filimonov).
  • Исправлены редкие ошибки сегментации (segfault) при вставке в MaterializedView или выборке из него при одновременном удалении целевой таблицы (для движка базы данных Atomic). #15984 (tavplubix).
  • Исправлена неоднозначность при разборе профилей настроек: CREATE USER ... SETTINGS profile readonly теперь трактуется как использование профиля с именем readonly, а не настройки с именем profile с ограничением readonly. Исправлено #15628. #15982 (Vitaly Baranov).
  • Исправлен сбой при ошибке создания базы данных. #15954 (Winter Zhang).
  • Исправлен сбой DROP TABLE IF EXISTS с ошибкой Table ... does not exist, возникавший при одновременном переименовании таблицы (для движка базы данных Atomic). Исправлен редкий дедлок при одновременном выполнении некоторых DDL-запросов с участием нескольких таблиц (например, DROP DATABASE и RENAME TABLE). Исправлен сбой DROP/DETACH DATABASE с ошибкой Table ... does not exist при одновременном выполнении DROP/DETACH TABLE. #15934 (tavplubix).
  • Исправлена ошибка, из-за которой запрос к таблице Distributed возвращал пустой результат, если в запросе использовались WHERE, PREWHERE и GLOBAL IN. Исправляет #15792. #15933 (Nikolai Kochetov).
  • Устранены возможные взаимоблокировки в RBAC. #15875 (Vitaly Baranov).
  • Исправлено исключение Block structure mismatch в запросах SELECT ... ORDER BY DESC, которые выполнялись после запроса ALTER MODIFY COLUMN. Исправляет проблему #15800. #15852 (alesapin).
  • Исправлены некоторые случаи запросов, в которых выбирались только виртуальные столбцы. Ранее мог выбрасываться Not found column _nothing in block exception. Устраняет #12298. #15756 (Anton Popov).
  • Исправлена ошибка Cannot find column, которая могла возникать при вставке данных в MATERIALIZED VIEW, если запрос для MV содержит ARRAY JOIN. #15717 (Nikolai Kochetov).
  • Исправлено слишком низкое значение по умолчанию настройки max_replicated_logs_to_keep, из‑за которого реплики могли слишком часто считаться потерянными. Улучшен процесс восстановления потерянных реплик за счёт выбора наиболее актуальной реплики для клонирования. Также старые части потерянной реплики больше не удаляются, а отсоединяются. #15701 (tavplubix).
  • Исправлена ошибка Cannot add simple transform to empty Pipe, возникавшая при чтении из таблицы Buffer с отличающейся структурой по сравнению с целевой таблицей. Это могло произойти, если целевая таблица возвращала пустой результат для запроса. Исправляет #15529. #15662 (Nikolai Kochetov).
  • Исправлена ошибка с glob‑шаблонами в табличной функции S3: регион из URL‑адреса не применялся к конфигурации клиента S3. #15646 (Vladimir Chebotarev).
  • Уменьшите значение метрики ReadonlyReplica при отсоединении таблиц только для чтения. Это исправляет #15598. #15592 (sundyli).
  • Вызывать ошибку, если ReplicatedMergeTree передан один параметр, вместо того чтобы игнорировать его. #15516 (nvartolomei).

Улучшение

  • Теперь можно выполнять запросы ALTER ... ON CLUSTER независимо от настройки <internal_replication> в конфигурации кластера. #16075 (alesapin).
  • Теперь при создании таблицы в аргументах ReplicatedMergeTree автоматически разворачиваются макросы {database}, {table} и {uuid}. #16159 (tavplubix).

Релиз ClickHouse v20.8.4.11-lts, 2020-10-09

Исправление ошибки

  • Исправлен порядок уничтожения ресурсов на этапе ReadFromStorage в плане запроса. В редких случаях это могло приводить к сбоям. Возможно, связано с #15610. #15645 (Nikolai Kochetov).
  • Исправлена ошибка Element ... is not a constant expression при использовании результата функции JSON* в VALUES, LIMIT или на правой стороне оператора IN. #15589 (tavplubix).
  • Исключена возможность появления сообщения об ошибке Could not calculate available disk space (statvfs), errno: 4, strerror: Interrupted system call. Это исправляет #15541. #15557 (alexey-milovidov).
  • Существенно снижено потребление памяти в AggregatingInOrderTransform/optimize_aggregation_in_order. #15543 (Azat Khuzhin).
  • Мутация могла зависать в ожидании несуществующей части после MOVE или REPLACE PARTITION или, в редких случаях, после DETACH или DROP PARTITION. Исправлено. #15537 (tavplubix).
  • Исправлена ошибка, из-за которой оператор ILIKE становился регистрозависимым, если до этого был выполнен LIKE с тем же шаблоном. #15536 (alesapin).
  • Исправлена ошибка Missing columns, возникающая при выборе столбцов, отсутствующих в данных и зависящих от других столбцов, также отсутствующих в данных. Исправляет #15530. #15532 (alesapin).
  • Исправлена ошибка в подписке на события в DDLWorker, которая в редких случаях могла приводить к зависанию запросов с ON CLUSTER. Появилась в #13450. #15477 (alesapin).
  • Сообщать корректное сообщение об ошибке, если второй аргумент агрегатной функции boundingRatio имеет неверный тип. #15407 (detailyang).
  • Исправлено состояние гонки при переименовании таблицы MergeTree и её фоновой очистке. #15304 (alesapin).
  • Исправлено редкое состояние гонки при запуске сервера при включённых system.logs. #15300 (alesapin).
  • Исправлен отчет MSan в QueryLog. Неинициализированная память могла использоваться для поля memory_usage. #15258 (alexey-milovidov).
  • Исправлена ошибка, приводившая к сбою сервера при использовании joinGet с типами LowCardinality. Тем самым исправлена проблема #15214. #15220 (Amos Bird).
  • Исправлена ошибка в табличном движке Buffer, из‑за которой после запроса ALTER было невозможно вставлять данные с новой структурой в Buffer. Исправляет #15117. #15192 (alesapin).
  • Изменен размер поля decimals в пакете определения столбца MySQL. #15152 (maqroll).
  • Мы уже используем сравнение с дополнением (padded comparison) между String и FixedString (https://github.com/ClickHouse/ClickHouse/blob/master/src/Functions/FunctionsComparison.h#L333). Этот PR применяет ту же логику к сравнению полей, что делает корректным использование FixedString в качестве первичных ключей. Это исправляет #14908. #15033 (Amos Bird).
  • Если функция bar вызывалась со специально подобранными аргументами, могло произойти переполнение буфера. Это закрывает #13926. #15028 (alexey-milovidov).
  • Исправлена ошибка Cannot rename ... errno: 22, strerror: Invalid argument при выполнении DDL-запроса в базе данных с движком Atomic при запуске clickhouse-server в Docker под macOS. #15024 (tavplubix).
  • Теперь настройки number_of_free_entries_in_pool_to_execute_mutation и number_of_free_entries_in_pool_to_lower_max_size_of_merge могут быть равны background_pool_size. #14975 (alesapin).
  • Исправлена проблема, из-за которой проталкивание предикатов не работало, когда подзапрос содержал функцию finalizeAggregation. Исправляет #14847. #14937 (filimonov).
  • Публикуются частоты CPU для каждого логического ядра в таблице system.asynchronous_metrics. Это исправляет #14923. #14924 (Alexander Kuzmenkov).
  • Исправлена ошибка .metadata.tmp File exists при использовании движка базы данных MaterializeMySQL. #14898 (Winter Zhang).
  • Исправлена проблема, при которой сервер мог зависать при запуске во время взаимодействия с ZooKeeper, если файлы конфигурации нужно было получать из ZK (с использованием опции from_zk директивы include). Это исправляет #14814. #14843 (Alexander Kuzmenkov).
  • Исправлено некорректное определение монотонности для сужающего преобразования Int -> Int для знаковых типов. Это могло приводить к неверному результату запроса. Ошибка выявлена в #14513. #14783 (Amos Bird).
  • Исправлен некорректный порядок сортировки столбца Nullable. Исправляет #14344. #14495 (Nikita Mikhaylov).

Улучшение

  • Теперь можно изменить тип столбца версии для VersionedCollapsingMergeTree с помощью запроса ALTER. #15442 (alesapin).

Релиз ClickHouse v20.8.3.18-stable, 2020-09-18

Исправление ошибки

  • Исправлена проблема, когда некоторые вызовы функции extractAllGroups могли приводить к ошибке «Memory limit exceeded». Исправляет #13383. #14889 (alexey-milovidov).
  • Исправлен SIGSEGV при попытке выполнить INSERT в StorageFile(fd). #14887 (Azat Khuzhin).
  • Исправлена редкая ошибка в запросах SELECT, когда запрашиваемый столбец имеет выражение DEFAULT, которое зависит от другого столбца, у которого также есть DEFAULT, но он не присутствует в запросе SELECT и отсутствует на диске. Частично исправляет #14531. #14845 (alesapin).
  • Исправлено отсутствие имени базы данных по умолчанию в метаданных материализованного представления при выполнении ALTER ... MODIFY QUERY. #14664 (tavplubix).
  • Исправлена ошибка, когда мутация ALTER UPDATE со столбцом типа Nullable в выражении присваивания и константным значением (например, UPDATE x = 42) приводила к некорректному значению в столбце или ошибке сегментации (segfault). Исправляет #13634, #14045. #14646 (alesapin).
  • Исправлен неверный результат умножения Decimal, вызванный некорректным масштабом (scale) результирующего столбца. #14603 (Artem Zuikov).
  • Добавлена проверка, поскольку ни вызов lc->isNullable(), ни вызов ls->getDictionaryPtr()->isNullable() не возвращали корректный результат. #14591 (myrrc).
  • Теперь каталог данных очищается после исключений ZooKeeper во время CreateQuery для движка StorageReplicatedMergeTree. #14563 (Bharat Nallan).
  • Исправлены редкие ошибки сегментации (segfault) в функциях с комбинатором -Resample, которые могли возникать в результате переполнения при очень больших параметрах. #14562 (Anton Popov).

Улучшение

  • Ускорено завершение работы сервера, если имеются активные запросы к S3. #14858 (Pavel Kovalenko).
  • Разрешено использование многотомной конфигурации хранилища в хранилище Distributed. #14839 (Pavel Kovalenko).
  • Ускорено завершение работы сервера, если имеются активные запросы к S3. #14496 (Pavel Kovalenko).
  • Добавлена поддержка пользовательских кодеков в компактных частях. #12183 (Anton Popov).

Релиз ClickHouse v20.8.2.3-stable, 2020-09-08

Обратное несовместимое изменение

  • Теперь запрос OPTIMIZE FINAL не пересчитывает TTL для частей, которые были добавлены до создания TTL. Используйте ALTER TABLE ... MATERIALIZE TTL один раз, чтобы вычислить их, после чего OPTIMIZE FINAL будет корректно учитывать TTL. Это поведение никогда не работало для реплицируемых таблиц. #14220 (alesapin).
  • Расширена настройка parallel_distributed_insert_select, добавлена опция для выполнения INSERT в локальную таблицу. Тип настройки изменяется с Bool на UInt64, поэтому значения false и true больше не поддерживаются. Если у вас указаны эти значения в конфигурации сервера, сервер не запустится. Замените их, соответственно, на 0 и 1. #14060 (Azat Khuzhin).
  • Удалена поддержка формата ввода/вывода ODBCDriver. Это был устаревший формат, ранее использовавшийся для взаимодействия с драйвером ClickHouse ODBC, который уже давно заменён форматом ODBCDriver2. Устраняет #13629. #13847 (hexiaoting).
  • При обновлении с версий ниже 20.5, если выполняется поэтапное обновление и кластер одновременно содержит версии 20.5 или новее и версии ниже 20.5, то в случае, когда узлы ClickHouse со старыми версиями перезапускаются и старая версия запускается в присутствии более новых версий, это может приводить к ошибкам Part ... intersects previous part. Чтобы предотвратить эту ошибку, сначала установите новые пакеты clickhouse-server на все узлы кластера, а затем выполняйте перезапуски (то есть при перезапуске clickhouse-server будет запускаться уже в новой версии).

Новая функциональность

  • Добавлена возможность указывать кодек сжатия Default для столбцов, которые соответствуют настройкам, указанным в config.xml. Реализует задачу: #9074. #14049 (alesapin).
  • Добавлена поддержка аутентификации Kerberos в Kafka с использованием библиотек krb5 и cyrus-sasl. #12771 (Ilya Golshtein).
  • Добавлена функция normalizeQuery, которая заменяет литералы, последовательности литералов и сложные алиасы плейсхолдерами. Добавлена функция normalizedQueryHash, которая возвращает одинаковые 64-битные хэши для похожих запросов. Это помогает анализировать журнал запросов. Закрывает #11271. #13816 (alexey-milovidov).
  • Добавлена таблица time_zones. #13880 (Bharat Nallan).
  • Добавлена функция defaultValueOfTypeName, которая возвращает значение по умолчанию для заданного типа. #13877 (hcz).
  • Добавлена функция countDigits(x), которая считает количество десятичных цифр в целочисленном или десятичном столбце. Добавлена функция isDecimalOverflow(d, [p]), которая проверяет, выходит ли значение в столбце Decimal за пределы его (или указанной) точности. #14151 (Artem Zuikov).
  • Добавлены реализации quantileExactLow и quantileExactHigh, а также соответствующие алиасы medianExactLow и medianExactHigh. #13818 (Bharat Nallan).
  • Добавлена функция date_trunc, которая усекает значение даты/времени до указанной части даты/времени. #13888 (Vladimir Golovchenko).
  • В основной конфигурационный файл добавлен новый необязательный раздел <user_directories>. #13425 (Vitaly Baranov).
  • Добавлен оператор ALTER SAMPLE BY, который позволяет изменять предложение выборки SAMPLE таблицы. #13280 (Amos Bird).
  • Функция position теперь поддерживает необязательный аргумент start_pos. #13237 (vdimir).

Исправление ошибок

  • Исправлено перекрытие отображаемых данных индикатором прогресса в клиенте в интерактивном режиме. Это исправляет #12562, #13369, #13584 и #12964. #13691 (alexey-milovidov).
  • Исправлен некорректный порядок сортировки для столбца типа LowCardinality при сортировке по нескольким столбцам. Это исправляет #13958. #14223 (Nikita Mikhaylov).
  • Добавлена проверка на переполнение размера массива в агрегатной функции topK. Без этой проверки пользователь может отправить запрос с тщательно подобранными параметрами, что приведёт к сбою сервера. Это закрывает #14452. #14467 (alexey-milovidov).
  • Исправлена ошибка, которая могла приводить к неверному назначению слияний, если таблица содержит партиции, состоящие из одной части. #14444 (alesapin).
  • Останавливать выполнение запроса, если в самом PipelineExecutor произошло исключение. Это может предотвратить редкие случаи зависания запроса. Продолжение #14334. #14402 #14334 (Nikolai Kochetov).
  • Исправлено падение сервера при выполнении запроса ALTER для таблицы, созданной через AS table_function. Исправляет #14212. #14326 (alesapin).
  • Исправлено исключение, возникавшее при выполнении запроса ALTER LIVE VIEW с командой REFRESH. LIVE VIEW — экспериментальная функция. #14320 (Bharat Nallan).
  • Исправлено управление временем жизни QueryPlan (для EXPLAIN PIPELINE graph=1) для запросов с вложенным интерпретатором. #14315 (Azat Khuzhin).
  • Исправлена ошибка сегментации в clickhouse-odbc-bridge при получении схемы из некоторых внешних источников. Этот PR исправляет #13861. #14267 (Vitaly Baranov).
  • Исправлено аварийное завершение работы при поиске включения по меткам, появившееся в #12277. #14225 (Amos Bird).
  • Исправлено создание таблиц с именованными кортежами. Ошибка #13027 устранена. #14143 (alexey-milovidov).
  • Исправлено форматирование минимальных отрицательных десятичных чисел. Устраняет #14111. #14119 (Alexander Kuzmenkov).
  • Исправлена метрика DistributedFilesToInsert (обнулялась, хотя не должна была). #14095 (Azat Khuzhin).
  • Исправлена работа pointInPolygon при использовании константного двумерного массива в качестве полигона. #14079 (Alexey Ilyukhov).
  • Исправлена неверная точка монтирования в дополнительной информации для ошибки Poco::Exception: no space left on device. #14050 (tavplubix).
  • Исправлено поведение оператора GRANT ALL при выполнении на неглобальном уровне. #13987 (Vitaly Baranov).
  • Исправлен парсер: теперь он отклоняет CREATE TABLE AS с табличной функцией и указанием движка. #13940 (hcz).
  • Исправлены некорректные результаты в запросах SELECT с ключевым словом DISTINCT и подзапросами с UNION ALL при включённой настройке optimize_duplicate_order_by_and_distinct. #13925 (Artem Zuikov).
  • Исправлена потенциальная взаимоблокировка при переименовании таблицы Distributed. #13922 (tavplubix).
  • Исправлена некорректная сортировка столбцов типа FixedString при сортировке по нескольким столбцам. Исправлена проблема #13182. #13887 (Nikolai Kochetov).
  • Исправлено потенциально неточное вычисление результата при слиянии topK/topKWeighted (с параметрами, отличными от значений по умолчанию). #13817 (Azat Khuzhin).
  • Исправлена ошибка чтения из таблицы MergeTree с индексом типа SET при сравнении с NULL. Это исправляет #13686. #13793 (Amos Bird).
  • Исправлен захват arrayJoin в лямбда-выражении (LOGICAL_ERROR). #13792 (Azat Khuzhin).
  • Добавлена проверка на переполнение шага в функции range. #13790 (Azat Khuzhin).
  • Исправлена ошибка Directory not empty при параллельном выполнении DROP DATABASE и CREATE TABLE. #13756 (alexey-milovidov).
  • Добавлена проверка границ значений для функции h3KRing, что исправляет проблему #13633. #13752 (alexey-milovidov).
  • Исправлено условие гонки между DETACH и фоновыми слияниями. Части могли «возрождаться» после DETACH. Это продолжение #8602, которое не устранило проблему, но добавило тест, который в очень редких случаях начинал падать, демонстрируя наличие проблемы. #13746 (alexey-milovidov).
  • Исправлена проблема с логированием Settings.Names/Values, когда log_queries_min_type > QUERY_START. #13737 (Azat Khuzhin).
  • Исправлен код статуса ответа эндпоинта /replicas_status при verbose=1. #13722 (javi santana).
  • Исправлено некорректное сообщение в clickhouse-server.init при проверке пользователя и группы. #13711 (ylchou).
  • Не выполнять оптимизацию any(arrayJoin()) -> arrayJoin() при включённой настройке optimize_move_functions_out_of_any. #13681 (Azat Khuzhin).
  • Исправлено падение при выполнении JOIN со StorageMerge при enable_optimize_predicate_expression=1. #13679 (Artem Zuikov).
  • Исправлена опечатка в тексте сообщения об ошибке The value of 'number_of_free_entries_in_pool_to_lower_max_size_of_merge' setting. #13678 (alexey-milovidov).
  • Одновременные запросы ALTER ... REPLACE/MOVE PARTITION ... могли приводить к взаимоблокировке. Эта проблема исправлена. #13626 (tavplubix).
  • Исправлено поведение, из-за которого cache-dictionary иногда возвращал значение по умолчанию вместо значения из источника. #13624 (Nikita Mikhaylov).
  • Исправлена порча вторичных индексов в compact-частях. Compact-части являются экспериментальной возможностью. #13538 (Anton Popov).
  • Исправлены преждевременные тайм-ауты директивы ON CLUSTER для запросов, которые должны выполняться на одной реплике. Закрыты задачи #6704, #7228, #13361, #11884. #13450 (alesapin).
  • Исправлен некорректный код в функции netloc. Это исправляет #13335. #13446 (alexey-milovidov).
  • Исправлено возможное состояние гонки в StorageMemory. #13416 (Nikolai Kochetov).
  • Исправлены отсутствующие или избыточные заголовки в форматах TSV/CSVWithNames в протоколе HTTP. Это устраняет проблему #12504. #13343 (Azat Khuzhin).
  • Исправлен разбор row policies из users.xml, когда имена баз данных или таблиц содержат точки. Это устраняет проблемы #5779, #12527. #13199 (Vitaly Baranov).
  • Исправлен доступ к словарю redis после однократного разрыва соединения. Это могло происходить для макетов словаря cache и direct. #13082 (Anton Popov).
  • Удалена ошибочная проверка прав доступа при использовании ClickHouseDictionarySource для выполнения запросов к удалённым таблицам. #12756 (sundyli).
  • Корректно различать подзапросы в некоторых случаях при устранении общих подвыражений. #8333. #8367 (Amos Bird).

Улучшение

  • Запрещает использование CODEC для столбцов типа ALIAS. Исправляет #13911. #14263 (Bharat Nallan).
  • При ожидании завершения обновления словаря используйте таймаут, заданный настройкой query_wait_timeout_milliseconds, вместо жёстко закодированного значения. #14105 (Nikita Mikhaylov).
  • Добавлена настройка min_index_granularity_bytes, которая защищает от случайного создания таблицы со слишком низким значением index_granularity_bytes. #14139 (Bharat Nallan).
  • Теперь можно получать партиции из кластеров, которые используют другой экземпляр ZooKeeper: ALTER TABLE table_name FETCH PARTITION partition_expr FROM 'zk-name:/path-in-zookeeper'. Это полезно для переноса данных на новые кластеры. #14155 (Amos Bird).
  • Немного улучшена производительность таблиц типа Memory, если они были построены из огромного числа очень маленьких блоков (что маловероятно). Автор идеи: Mark Papadakis. Закрывает #14043. #14056 (alexey-milovidov).
  • Условные агрегатные функции (например, avgIf, sumIf, maxIf) должны возвращать NULL при отсутствии строк, если используются аргументы типа Nullable. #13964 (Winter Zhang).
  • Увеличен лимит комбинатора -Resample до 1 млн. #13947 (Mikhail f. Shiryaev).
  • Исправлена ошибка в формате AvroConfluent, из-за которой движок таблицы Kafka прекращал обработку сообщений при получении аномально малого, некорректно сформированного сообщения. #13941 (Gervasio Varela).
  • Исправлена некорректная обработка ошибки для длинных запросов. Для корректного запроса могла возвращаться синтаксическая ошибка, отличная от Max query size exceeded. #13928 (Nikolai Kochetov).
  • Улучшено сообщение об ошибке для значения NULL в формате TabSeparated. #13906 (jiang tao).
  • Функция arrayCompact будет выполнять побитовое сравнение значений NaN, если тип элементов массива — Float32/Float64. В предыдущих версиях значения NaN всегда считались неравными, если тип элементов массива — Float32/Float64, и всегда равными, если тип более сложный, например Nullable(Float64). Это закрывает #13857. #13868 (alexey-milovidov).
  • Исправлена гонка данных в функции lgamma. Эта гонка выявлялась только в tsan, каких-либо реальных побочных эффектов не наблюдалось. #13842 (Nikolai Kochetov).
  • Предотвращать выполнение слишком медленных запросов при обработке полей-массивов. Вместо этого выбрасывать исключение. #13753 (alexey-milovidov).
  • Добавлена поддержка авторизации Redis с параметром requirepass (для источника словаря Redis). #13688 (Ivan Torgashov).
  • Добавлен инструмент для дампа журнала предварительной записи (Write-Ahead Log, WAL) для MergeTree. WAL — экспериментальная возможность. #13640 (BohuTANG).
  • В предыдущих версиях функция lcm могла приводить к срабатыванию assert в debug-сборке при вызове со специально сконструированными аргументами. Это исправляет #13368. #13510 (alexey-milovidov).
  • Обеспечена монотонность для функций toDate/toDateTime в большем числе случаев. Информация о монотонности используется при анализе индексов (индекс смогут использовать более сложные запросы). Теперь входные аргументы ограничиваются более естественным образом, что обеспечивает лучшую монотонность. #13497 (Amos Bird).
  • Поддержка составных идентификаторов для пользовательских настроек. Пользовательские настройки служат точкой интеграции кодовой базы ClickHouse с другими кодовыми базами (не дают преимуществ самому ClickHouse) #13496 (Vitaly Baranov).
  • Переносить части с DiskLocal на DiskS3 параллельно. DiskS3 — экспериментальная функция. #13459 (Pavel Kovalenko).
  • По умолчанию включены части со смешанной гранулярностью. #13449 (alesapin).
  • Корректная проверка удалённого хоста при перенаправлениях S3 (связано с безопасностью). #13404 (Vladimir Chebotarev).
  • Добавлены QueryTimeMicroseconds, SelectQueryTimeMicroseconds и InsertQueryTimeMicroseconds в таблицу system.events. #13336 (ianton-ru).
  • Исправлена отладочная проверка, срабатывающая, когда у Decimal слишком большая отрицательная степень. Исправляет #13188. #13228 (alexey-milovidov).
  • Добавлен слой кеша для DiskS3 (локальное кеширование файлов меток и индексов). DiskS3 — экспериментальная функция. #13076 (Pavel Kovalenko).
  • Исправлена работа readline: теперь история сбрасывается в файл. #13600 (Amos Bird).
  • Создать базу данных system с движком Atomic по умолчанию (подготовительный шаг к включению движка Atomic по умолчанию повсюду). #13680 (tavplubix).

Повышение производительности

  • Незначительно оптимизированы очень короткие запросы с LowCardinality. #14129 (Anton Popov).
  • Включены параллельные INSERT для движков таблиц Null, Memory, Distributed и Buffer, когда установлена настройка max_insert_threads. #14120 (alexey-milovidov).
  • Операция немедленно завершается с ошибкой, если лимит max_rows_to_read превышен при сканировании частей. Мотивация этого изменения — пропускать сканирование диапазонов для всех выбранных частей, если уже ясно, что лимит max_rows_to_read превышен. Изменение довольно заметно для запросов по большому количеству частей. #13677 (Roman Khavronenko).
  • Незначительно улучшена производительность агрегации по ключам типов UInt8/UInt16. #13099 (alexey-milovidov).
  • Оптимизированы функции has(), indexOf() и countEqual() для Array(LowCardinality(T)) и константных правых аргументов. #12550 (myrrc).
  • При выполнении тривиальных запросов INSERT SELECT автоматически устанавливаются max_threads в 1 или max_insert_threads, а также max_block_size в min_insert_block_size_rows. Связано с #5907. #12195 (flynn).

Экспериментальная возможность

  • ClickHouse может работать как реплика MySQL — это реализовано с помощью движка базы данных MaterializeMySQL. Реализует #4006. #10851 (Winter Zhang).
  • Добавлены типы Int128, Int256, UInt256 и связанные с ними функции. Десятичные типы расширены типом Decimal256 (точность до 76 знаков). Новые типы включаются настройкой allow_experimental_bigint_types. В настоящее время это работает крайне медленно и плохо. Реализация неполная. Пожалуйста, не используйте эту возможность. #13097 (Artem Zuikov).

Улучшения сборки/тестирования/упаковки

  • Добавлен скрипт clickhouse install, который полезен, если у вас есть только один бинарник. #13528 (alexey-milovidov).
  • Добавлена возможность запускать исполняемый файл clickhouse без конфигурационного файла. #13515 (alexey-milovidov).
  • Добавлена проверка кода на опечатки с помощью codespell. #13513 #13511 (alexey-milovidov).
  • Включить ShellCheck в CI как линтер для .sh-тестов. Это закрывает #13168. #13530 #13529 (alexey-milovidov).
  • Добавлена опция CMake, которая завершает конфигурацию с ошибкой вместо автоматической переконфигурации и включена по умолчанию. #13687 (Konstantин).
  • Сделать версию встроенного tzdata доступной через TZDATA_VERSION в system.build_options. #13648 (filimonov).
  • Улучшена генерация таблицы system.time_zones при сборке. Закрывает #14209. #14215 (filimonov).
  • Собирать ClickHouse с самой актуальной версией tzdata из репозитория пакетов. #13623 (alexey-milovidov).
  • Добавлена возможность использовать комментарии в стиле JavaScript в skip_list.json. #14159 (alesapin).
  • Убедиться, что в проекте нет скопированного кода под лицензией GPL. #13514 (alexey-milovidov).
  • Переключает тестовые образы Docker на использование родительского образа test-base. #14167 (Ilya Yatsishin).
  • Добавлена логика повторных попыток при запуске кластера Docker Compose; увеличено значение COMPOSE_HTTP_TIMEOUT. #14112 (vzakaznikov).
  • В стресс-тесте включён system.text_log для выявления большего числа ошибок. #13855 (Nikita Mikhaylov).
  • Модуль Testflows LDAP: добавление недостающих сертификатов и dhparam.pem для openldap4. #13780 (vzakaznikov).
  • ZooKeeper не может надёжно работать в модульных тестах в инфраструктуре CI. Использовать модульные тесты для взаимодействия с реальным экземпляром ZooKeeper — изначально плохая идея (модульные тесты не предназначены для проверки сложных распределённых систем). Для этой цели мы уже используем интеграционные тесты, и они подходят гораздо лучше. #13745 (alexey-milovidov).
  • Добавлен Docker-образ для проверки стиля. Добавлена проверка, что все файлы Docker и Docker Compose находятся в каталоге docker. #13724 (Ilya Yatsishin).
  • Исправлена сборка Cassandra под Mac OS. #13708 (Ilya Yatsishin).
  • Исправлена ошибка линковки в общей сборке. #13700 (Amos Bird).
  • Обновлён набор тестов аутентификации пользователей LDAP для проверки совместимости с RBAC. #13656 (vzakaznikov).
  • Убран -DENABLE_CURL_CLIENT из contrib/aws. #13628 (Vladimir Chebotarev).
  • Увеличены таймауты проверок состояния (health-check) для узлов ClickHouse и добавлена поддержка дампа логов docker-compose при обнаружении неработоспособных контейнеров. #13612 (vzakaznikov).
  • Убедиться, что #10977 признан недействительным. #13539 (Amos Bird).
  • Пропускать PR, создаваемые robot-clickhouse. #13489 (Nikita Mikhaylov).
  • Файлы Dockerfile перенесены из интеграционных тестов в директорию docker/test. Файлы docker_compose доступны в Docker-контейнере runner. Docker-образы собираются в CI, а не в интеграционных тестах. #13448 (Ilya Yatsishin).

Релиз ClickHouse 20.7

Релиз ClickHouse v20.7.2.30-stable, 2020-08-31

Изменения, нарушающие обратную совместимость

  • Функция modulo (оператор %) при наличии хотя бы одного аргумента с плавающей запятой теперь вычисляет остаток от деления непосредственно над числами с плавающей запятой без преобразования обоих аргументов к целым. Это делает поведение совместимым с большинством СУБД. Это также применимо к типам данных Date и DateTime. Добавлен псевдоним mod. Закрывает #7323. #12585 (alexey-milovidov).
  • Специальный вывод нулевых значений Date/DateTime в виде 0000-00-00 и 0000-00-00 00:00:00 объявлен устаревшим. #12442 (alexey-milovidov).
  • Функция groupArrayMoving* не работала для распределённых запросов. Её результат вычислялся в некорректном типе данных (без повышения до наибольшего типа). Функция groupArrayMovingAvg возвращала целое число, что было несовместимо с функцией avg. Исправляет #12568. #12622 (alexey-milovidov).
  • Добавлена проверка корректности настроек MergeTree. Если настройки заданы неверно, сервер откажется запускаться или создавать таблицу, выводя пользователю подробное объяснение. #13153 (alexey-milovidov).
  • Добавлена защита от случаев, когда пользователь может установить background_pool_size в значение меньше, чем number_of_free_entries_in_pool_to_execute_mutation или number_of_free_entries_in_pool_to_lower_max_size_of_merge. В этих случаях ALTER-запросы не будут работать или максимальный размер слияния окажется слишком ограничен. В этих ситуациях будет выброшено исключение с объяснением, что нужно сделать. Закрывает #10897. #12728 (alexey-milovidov).
  • При обновлении с версий ниже 20.5, если выполняется поочерёдное обновление и кластер одновременно содержит версии 20.5 или новее и версии ниже 20.5, то при перезапуске узлов ClickHouse со старыми версиями и запуске старой версии в присутствии более новых версий это может привести к ошибкам Part ... intersects previous part. Чтобы предотвратить эту ошибку, сначала установите новые пакеты clickhouse-server на все узлы кластера, а затем выполняйте перезапуски (чтобы при перезапуске clickhouse-server запускался уже с новой версией).

Новая функциональность

  • Тип словаря полигонов, обеспечивающий эффективный поиск с помощью «обратного геокодирования» — для нахождения региона по координатам в словаре из множества полигонов (карта мира). Использует тщательно оптимизированный алгоритм с рекурсивными сетками для снижения нагрузки на CPU и память. #9278 (achulkov2).
  • Добавлена поддержка LDAP-аутентификации для предварительно настроенных пользователей (метод «Simple Bind»). #11234 (Denis Glazachev).
  • Добавлена настройка alter_partition_verbose_result, которая выводит информацию о затронутых партах для некоторых типов запросов ALTER TABLE ... PARTITION ... (в настоящее время ATTACH и FREEZE). Закрывает #8076. #13017 (alesapin).
  • Добавлена функция bayesAB для байесовского A/B-тестирования. #12327 (achimbab).
  • Добавлена таблица system.crash_log, в которую собираются трассировки стека для фатальных ошибок. Эта таблица должна быть пустой. #12316 (alexey-milovidov).
  • Добавлены HTTP-заголовки X-ClickHouse-Database и X-ClickHouse-Format, которые могут использоваться для установки базы данных и формата вывода по умолчанию. #12981 (hcz).
  • Добавлена поддержка функций minMap и maxMap в SimpleAggregateFunction. #12662 (Ildus Kurbangaliev).
  • Добавлена настройка allow_non_metadata_alters, которая ограничивает выполнение запросов ALTER, модифицирующих данные на диске. По умолчанию отключена. Закрывает #11547. #12635 (alesapin).
  • Добавлена функция formatRow для преобразования произвольных выражений в строку по заданному формату. Полезна для обработки результатов SQL-запросов и достаточно универсальна в сочетании с функцией columns. #12574 (Amos Bird).
  • Добавлена функция FROM_UNIXTIME для совместимости с MySQL, связана с 12149. #12484 (flynn).
  • Разрешено использование типов Nullable в качестве ключей в таблицах MergeTree, если включена настройка таблицы allow_nullable_key. Закрывает #5319. #12433 (Amos Bird).
  • Интеграция с COS. #12386 (fastio).
  • Добавлены функции mapAdd и mapSubtract для сложения/вычитания значений, сопоставленных ключам. #11735 (Ildus Kurbangaliev).

Исправление ошибок

  • Исправлены преждевременные таймауты ON CLUSTER для запросов, которые должны выполняться на одной реплике. Исправляет #6704, #7228, #13361, #11884. #13450 (alesapin).
  • Исправлено падение при поиске включения меток, появившееся в #12277. #14225 (Amos Bird).
  • Исправлена гонка во внешних словарях с размещением в кэше, которая могла приводить к сбою сервера. #12566 (alesapin).
  • Исправлено заметное перекрытие выводимых данных индикатором прогресса в клиенте в интерактивном режиме. Это исправление закрывает #12562 и #13369 и #13584, а также #12964. #13691 (alexey-milovidov).
  • Исправлен неверный порядок сортировки для столбцов LowCardinality при использовании ORDER BY с несколькими столбцами. Исправляет #13958. #14223 (Nikita Mikhaylov).
  • Удалён жёстко заданный таймаут, который неправильно переопределял параметр query_wait_timeout_milliseconds для cache-dictionary. #14105 (Nikita Mikhaylov).
  • Исправлена неверная точка монтирования в дополнительной информации для исключения Poco::Exception: no space left on device. #14050 (tavplubix).
  • Исправлена ошибочная оптимизация SELECT-запросов с ключевым словом DISTINCT, когда подзапросы также содержат DISTINCT, при включённой настройке optimize_duplicate_order_by_and_distinct. #13925 (Artem Zuikov).
  • Исправлена возможная взаимоблокировка при переименовании таблицы Distributed. #13922 (tavplubix).
  • Исправлена некорректная сортировка столбцов типа FixedString при использовании ORDER BY с несколькими столбцами. Исправляет #13182. #13887 (Nikolai Kochetov).
  • Исправлена потенциально сниженная точность работы агрегирующих функций topK/topKWeighted при использовании нестандартных параметров. #13817 (Azat Khuzhin).
  • Исправлена ошибка чтения из таблицы MergeTree с индексом типа SET при сравнении со значением NULL. Это исправляет #13686. #13793 (Amos Bird).
  • Исправлено переполнение шага в функции range(). #13790 (Azat Khuzhin).
  • Исправлена ошибка Directory not empty, возникавшая при параллельном выполнении DROP DATABASE и CREATE TABLE. #13756 (alexey-milovidov).
  • Добавлена проверка диапазона для функции h3KRing, что исправляет #13633. #13752 (alexey-milovidov).
  • Исправлено состояние гонки между DETACH и фоновыми слияниями. Части могли «возрождаться» после DETACH. Это продолжение #8602, который не устранил проблему, но добавил тест, начинавший в очень редких случаях падать, тем самым демонстрируя проблему. #13746 (alexey-milovidov).
  • Исправлено логирование Settings.Names/Values при значении log_queries_min_type больше QUERY_START. #13737 (Azat Khuzhin).
  • Исправлено некорректное сообщение в clickhouse-server.init при проверке пользователя и группы. #13711 (ylchou).
  • Не оптимизировать any(arrayJoin()) до arrayJoin() при включённой настройке optimize_move_functions_out_of_any. #13681 (Azat Khuzhin).
  • Исправлена возможная взаимоблокировка в конкурентных запросах ALTER ... REPLACE/MOVE PARTITION .... #13626 (tavplubix).
  • Исправлено поведение, из-за которого cache-dictionary иногда возвращал значение по умолчанию вместо имеющегося в источнике значения. #13624 (Nikita Mikhaylov).
  • Исправлено повреждение вторичных индексов в compact‑частях (compact‑части — экспериментальная возможность). #13538 (Anton Popov).
  • Исправлен неверный код в функции netloc. Это устраняет проблему #13335. #13446 (alexey-milovidov).
  • Исправлена ошибка в функции parseDateTimeBestEffort, возникавшая при передаче Unix‑таймстемпа в качестве аргумента. Это исправляет #13362. #13441 (alexey-milovidov).
  • Исправлен некорректный тип возвращаемого значения при сравнении кортежей с элементами NULL. Устранена проблема #12461. #13420 (Nikolai Kochetov).
  • Исправлена некорректная оптимизация, из-за которой при использовании SET optimize_move_functions_out_of_any = 1 и алиасов внутри any() возникала ошибка aggregate function any(x) is found inside another aggregate function in query. #13419 (Artem Zuikov).
  • Исправлено возможное состояние гонки в StorageMemory. #13416 (Nikolai Kochetov).
  • Исправлен пустой вывод для форматов Arrow и Parquet в случае, когда запрос возвращает ноль строк. Это сделано, так как пустой вывод недопустим для этих форматов. #13399 (hcz).
  • Исправлена обработка запросов SELECT с константными столбцами и префиксом первичного ключа в предложении ORDER BY. #13396 (Anton Popov).
  • Исправлен PrettyCompactMonoBlock для clickhouse-local. Исправлены экстремумы и итоги в PrettyCompactMonoBlock. Исправление для #7746. #13394 (Azat Khuzhin).
  • Устранена взаимоблокировка в system.text&#95;log. #12452 (alexey-milovidov). Это часть #12339. Тем самым исправлена #12325. #13386 (Nikita Mikhaylov).
  • Исправлен File(TSVWithNames*) (заголовок записывался несколько раз), исправлен clickhouse-local --format CSVWithNames* (отсутствовал заголовок, формат был сломан после #12197), исправлен clickhouse-local --format CSVWithNames* при нулевом числе строк (отсутствовал заголовок). #13343 (Azat Khuzhin).
  • Исправлена ошибка сегментации, возникавшая при десериализации пустого состояния функцией groupArrayMovingSum. Исправляет #13339. #13341 (alesapin).
  • Генерировать ошибку при использовании функции arrayJoin() в секции JOIN ON. #13330 (Artem Zuikov).
  • Исправлено аварийное завершение работы в LEFT ASOF JOIN при join_use_nulls=1. #13291 (Artem Zuikov).
  • Исправлена возможная ошибка Totals having transform was already added to pipeline в случае запроса с отстающей реплики. #13290 (Nikolai Kochetov).
  • Сервер мог приводить к аварийному завершению работы, если пользователь передавал специально сформированные аргументы в функцию h3ToChildren. Это исправляет #13275. #13277 (alexey-milovidov).
  • Исправлены потенциально низкая производительность и незначительно некорректный результат для агрегатных функций uniqExact, topK, sumDistinct и подобных, вызываемых для числовых типов с плавающей запятой со значениями NaN. Это также приводило к срабатыванию assert в отладочной сборке. Исправляет #12491. #13254 (alexey-milovidov).
  • Исправлена ассерция в KeyCondition, когда первичный ключ содержит выражение с монотонной функцией, а запрос содержит сравнение с константой другого типа. Это исправляет #12465. #13251 (alexey-milovidov).
  • Функция roundUpToPowerOfTwoOrZero() теперь возвращает переданное число, если у него установлен старший бит. Это предотвращает потенциальные ошибки в случае переполнения размеров массивов. #13234 (Azat Khuzhin).
  • Исправлена работа функции if с nullable constexpr в качестве условия, которое не является литералом NULL. Устраняет #12463. #13226 (alexey-milovidov).
  • Исправлена проверка assert в функции arrayElement в случае, если элементы массива имеют тип Nullable и индекс массива также имеет тип Nullable. Это исправляет #12172. #13224 (alexey-milovidov).
  • Исправлены функции преобразования DateTime64 с константным аргументом. #13205 (Azat Khuzhin).
  • Исправлен разбор политик строк из users.xml, если имена баз данных или таблиц содержат точки. Тем самым устранены ошибки #5779, #12527. #13199 (Vitaly Baranov).
  • Исправлен доступ к словарю redis после однократного разрыва соединения. Это могло возникать для типов словарей cache и direct. #13082 (Anton Popov).
  • Устранена проблема неверного анализа индекса при использовании функций. Она могла приводить к пропуску некоторых частей данных при чтении из таблиц MergeTree. Исправляет #13060. Исправляет #12406. #13081 (Anton Popov).
  • Исправлена ошибка Cannot convert column because it is constant but values of constants are different in source and result при выполнении удалённых запросов, которые используют функции, детерминированные в пределах одного запроса, но недетерминированные между разными запросами, такие как now(), now64(), randConstant(). Исправляет #11327. #13075 (Nikolai Kochetov).
  • Исправлено возможное падение при выполнении запросов с кортежем в ORDER BY и небольшим значением LIMIT. Исправляет #12623. #13009 (Nikolai Kochetov).
  • Исправлена ошибка Block structure mismatch в запросах с UNION и JOIN. Исправляет #12602. #12989 (Nikolai Kochetov).
  • Исправлена логика merge_with_ttl_timeout, которая работала некорректно, когда истечение TTL затрагивало более одного раздела в пределах одного временного интервала. (Автор @excitoon). #12982 (Alexander Kazakov).
  • Исправлено дублирование столбцов в диапазонном хэш-словаре, создаваемом из DDL-запроса. Это исправляет #10605. #12857 (alesapin).
  • Исправлено избыточное ограничение на число потоков для запросов SELECT из локальной реплики. #12840 (Nikolai Kochetov).
  • Исправлена редкая ошибка, возникающая при одновременном выполнении запросов ALTER DELETE и ALTER MODIFY COLUMN в рамках одной мутации. Ошибка приводила к некорректному количеству строк в файле count.txt и, как следствие, к некорректным данным в части. Также исправлена небольшая ошибка при одновременном выполнении ALTER RENAME COLUMN и ALTER ADD COLUMN. #12760 (alesapin).
  • Использовались неверные учетные данные при использовании источника словаря clickhouse для запросов к удаленным таблицам. #12756 (sundyli).
  • Исправлено преобразование CAST(Nullable(String), Enum()). #12745 (Azat Khuzhin).
  • Исправлена проблема с производительностью при работе с большими кортежами, которые интерпретируются как функции в выражениях IN. Речь о случае, когда пользователь по какой-то непонятной причине пишет WHERE x IN tuple(1, 2, ...) вместо WHERE x IN (1, 2, ...). #12700 (Anton Popov).
  • Исправлено отслеживание использования памяти для input_format_parallel_parsing (за счёт присоединения потока к группе). #12672 (Azat Khuzhin).
  • Исправлена некорректная оптимизация optimize_move_functions_out_of_any=1 для выражения any(func(<lambda>)). #12664 (Artem Zuikov).
  • Исправлена ошибка #10572 в индексе фильтра Блума при использовании константного выражения. #12659 (Winter Zhang).
  • Исправлен SIGSEGV в StorageKafka при недоступности брокера (и не только). #12658 (Azat Khuzhin).
  • Добавлена поддержка функции if с аргументами типа Array(UUID), что исправляет #11066. #12648 (alexey-milovidov).
  • CREATE USER IF NOT EXISTS больше не выбрасывает исключение, если пользователь уже существует. Это исправляет #12507. #12646 (Vitaly Baranov).
  • Исключение There is no supertype... может возникать во время выполнения ALTER ... UPDATE в неожиданных случаях (например, при вычитании из столбца типа UInt64). Это исправление устраняет #7306. Это исправление устраняет #4165. #12633 (alexey-milovidov).
  • Исправлена потенциальная ошибка Pipeline stuck при выполнении запросов с внешней сортировкой. Исправление для #12617. #12618 (Nikolai Kochetov).
  • Исправлена ошибка Output of TreeExecutor is not sorted в OPTIMIZE DEDUPLICATE. Исправлено #11572. #12613 (Nikolai Kochetov).
  • Исправлена проблема, при которой алиас результата функции any мог теряться при оптимизации запроса. #12593 (Anton Popov).
  • Удалять данные для Distributed-таблиц (блоки из асинхронных INSERT) при выполнении DROP TABLE. #12556 (Azat Khuzhin).
  • Теперь ClickHouse будет пересчитывать контрольные суммы для частей, когда файл checksums.txt отсутствует. Поведение было нарушено начиная с #9827. #12545 (alesapin).
  • Исправлена ошибка, из-за которой повреждались старые части данных после выполнения запроса ALTER DELETE при enable_mixed_granularity_parts=1. Исправляет #12536. #12543 (alesapin).
  • Устранено состояние гонки в таблицах LIVE VIEW, которое могло приводить к дублированию данных. LIVE VIEW — экспериментальная функциональность. #12519 (vzakaznikov).
  • Исправлена проблема с обратной совместимостью в бинарном формате значений AggregateFunction(avg, ...). Это исправляет #12342. #12486 (alexey-milovidov).
  • Исправлено падение при выполнении JOIN со словарём, когда соединение выполняется по выражению от ключа словаря: t JOIN dict ON expr(dict.id) = t.id. Для этого случая отключена оптимизация JOIN со словарём. #12458 (Artem Zuikov).
  • Исправлено переполнение при указании очень большого значения LIMIT или OFFSET. Исправляет #10470. Исправляет #11372. #12427 (alexey-milovidov).
  • kafka: исправлен SIGSEGV, возникавший при наличии сообщения с ошибкой в середине пакета. #12302 (Azat Khuzhin).

Улучшение

  • Старайтесь хранить в ZooKeeper минимально необходимый объём логов. Избегайте чрезмерного роста узлов ZooKeeper при наличии офлайн-реплик и большом количестве серверов/таблиц/вставок. #13100 (alexey-milovidov).
  • Теперь исключения возвращаются клиенту, если произошла ошибка во время операции ALTER или мутации. Закрывает #11329. #12666 (alesapin).
  • Добавлены QueryTimeMicroseconds, SelectQueryTimeMicroseconds и InsertQueryTimeMicroseconds в таблицу system.events, а также в system.metrics, processes, query_log и т. д. #13028 (ianton-ru).
  • Добавлены SelectedRows и SelectedBytes в таблицу system.events, а также в таблицы system.metrics, processes, query_log и т. д. #12638 (ianton-ru).
  • В system.query_log добавлена информация о current_database. #12652 (Amos Bird).
  • Добавлена поддержка формата ввода TabSeparatedRaw. #12009 (hcz).
  • Теперь joinGet поддерживает поиск по нескольким ключам. #12418 (Amos Bird).
  • Агрегатным функциям *Map теперь разрешена работа с массивами, содержащими NULL. Исправляет #13157. #13225 (alexey-milovidov).
  • Избегайте переполнения при разборе значений DateTime, которое приводит к получению отрицательного значения UNIX‑времени в соответствующем часовом поясе (например, 1970-01-01 00:00:00 для Москвы). Вместо этого ограничивайте значение нулём. Исправляет #3470. Исправляет #4172. #12443 (alexey-milovidov).
  • AvroConfluent: пропускать tombstone-записи Kafka — добавлена поддержка пропуска повреждённых записей #13203 (Andrew Onyshchuk).
  • Исправлена некорректная обработка ошибок для длинных запросов. Для корректного запроса могла возвращаться синтаксическая ошибка, отличная от Max query size exceeded. #13928 (Nikolai Kochetov).
  • Исправлена гонка данных в функции lgamma. Эта гонка обнаруживалась только в tsan, реальных побочных эффектов не наблюдалось. #13842 (Nikolai Kochetov).
  • Исправлено форматирование интервала 'Week' в операторах ATTACH/ALTER/CREATE QUOTA. #13417 (vladimir-golovchenko).
  • Теперь при обработке compact-партов также фиксируются повреждённые парты. Compact-парты — экспериментальная функция. #13282 (Amos Bird).
  • Исправлен assert в geohashesInBox. Исправляет #12554. #13229 (alexey-milovidov).
  • Исправлен assert в parseDateTimeBestEffort. Это исправляет #12649. #13227 (alexey-milovidov).
  • Небольшая оптимизация в Processors/PipelineExecutor: выход из цикла, когда это имеет смысл. #13058 (Mark Papadakis).
  • Добавлена поддержка команды TRUNCATE без ключевого слова TABLE. #12653 (Winter Zhang).
  • Исправлена ошибка, из-за которой формат запроса EXPLAIN по умолчанию перезаписывался. Это исправляет #12541. #12541 (BohuTANG).
  • Добавлена возможность задавать вид и тип JOIN более стандартным образом: LEFT SEMI JOIN вместо SEMI LEFT JOIN. Пока оба варианта корректны. #12520 (Artem Zuikov).
  • Изменяет значение параметра multiple_joins_rewriter_version по умолчанию на 2. Это включает новый механизм переписывания запросов с несколькими JOIN, который учитывает имена столбцов. #12469 (Artem Zuikov).
  • Добавлены несколько метрик для запросов к хранилищам S3. #12464 (ianton-ru).
  • Использовать корректный защищённый порт по умолчанию для clickhouse-benchmark при использовании параметра --secure, что исправляет #11044. #12440 (alexey-milovidov).
  • Откат изменений при ошибках вставки в движках Log, TinyLog, StripeLog. В предыдущих версиях ошибка вставки могла приводить к неконсистентному состоянию таблицы (что соответствует документации и является нормальным поведением для этих движков таблиц). Это исправляет #12402. #12426 (alexey-milovidov).
  • Реализованы RENAME DATABASE и RENAME DICTIONARY для движка базы данных Atomic — добавлен неявный макрос {uuid}, который может использоваться в пути в ZooKeeper для ReplicatedMergeTree. Он применяется в запросах CREATE ... ON CLUSTER .... Установите show_table_uuid_in_table_create_query_if_not_nil в значение true, чтобы использовать его. — Аргументы движка ReplicatedMergeTree сделаны необязательными; по умолчанию используются /clickhouse/tables/{uuid}/{shard}/ и {replica}. Закрывает #12135. — Незначительные исправления. — Эти изменения нарушают обратную совместимость движка базы данных Atomic. Ранее созданные базы данных Atomic необходимо вручную преобразовать в новый формат. Движок базы данных Atomic является экспериментальной функциональностью. #12343 (tavplubix).
  • AWSAuthV4Signer выделен в отдельный логгер, удалено избыточное AWSClient: AWSClient из лог-сообщений. #12320 (Vladimir Chebotarev).
  • Улучшено сообщение об исключении при доступе к дисковому хранилищу. #12625 (alesapin).
  • Улучшено сообщение об исключении функции in при неверном количестве аргументов. #12529 (Anton Popov).
  • Исправлено сообщение об ошибке, связанной с адаптивной гранулярностью. #12624 (alesapin).
  • Исправлена обработка SETTINGS после FORMAT. #12480 (Azat Khuzhin).
  • Если таблица MergeTree не содержит ORDER BY или PARTITION BY, можно было выполнить запрос ALTER с CLEAR для всех столбцов, и ALTER зависал. Исправлено #7941. #12382 (alexey-milovidov).
  • Не перезагружать автодополнение из файла истории после каждого запроса (чтобы избежать перемешивания истории с другими клиентскими сессиями). #13086 (Azat Khuzhin).

Улучшение производительности

  • Снижено потребление памяти для некоторых операций до двух раз. #12424 (alexey-milovidov).
  • Оптимизирован поиск по первичному ключу для запросов, которые точно соответствуют диапазону первичного ключа. #12277 (Ivan Babrou).
  • Небольшая оптимизация очень коротких запросов с LowCardinality. #14129 (Anton Popov).
  • Незначительно улучшена производительность агрегации по ключам UInt8/UInt16. #13091 и #13055 (alexey-milovidov).
  • Проталкивание шага LIMIT в плане запроса (внутрь подзапросов). #13016 (Nikolai Kochetov).
  • Параллельный поиск по первичному ключу и пропуск стадий индекса на частях, как описано в #11564. #12589 (Ivan Babrou).
  • Преобразование аргументов типа String функций «if» и «transform» в enum при set optimize_if_transform_strings_to_enum = 1. #12515 (Artem Zuikov).
  • Замена монотонных функций их аргументом в ORDER BY, если set optimize_monotonous_functions_in_order_by=1. #12467 (Artem Zuikov).
  • Добавлена оптимизация сортировки, которая переписывает ORDER BY x, f(x) в ORDER BY x, если set optimize_redundant_functions_in_order_by = 1. #12404 (Artem Zuikov).
  • Разрешено проталкивание предиката, когда подзапрос содержит предложение WITH. Это исправляет #12293 #12663 (Winter Zhang).
  • Улучшена производительность чтения из компактных частей. Компактные части — экспериментальная функция. #12492 (Anton Popov).
  • Попытка реализовать потоковую оптимизацию в DiskS3. DiskS3 — экспериментальная функция. #12434 (Vladimir Chebotarev).

Улучшения сборки/тестирования/упаковки

  • Используйте shellcheck для линтинга sh-тестов. #13200 #13207 (alexey-milovidov).
  • Добавлен скрипт, который устанавливает метки для pull request'ов в GitHub-хуке. #13183 (alesapin).
  • Удалена часть рекурсивных подмодулей. См. #13378. #13379 (alexey-milovidov).
  • Убедитесь, что все подмодули ссылаются на корректные URL-адреса. Продолжение #13379. Это исправляет #13378. #13397 (alexey-milovidov).
  • Добавлена поддержка заданных пользователем настроек, к которым можно обращаться из запросов. Это необходимо, когда движок ClickHouse используется как компонент другой системы. #13013 (Vitaly Baranov).
  • Добавлено тестирование RBAC-функционала привилегии INSERT в TestFlows. Расширен список таблиц, для которых выполняется тестирование SELECT. Добавлены требования в соответствии с новыми тестами движка таблиц. #13340 (MyroTk).
  • Исправлена ошибка таймаута при перезапуске сервера в стресс-тесте. #13321 (alesapin).
  • Теперь быстрый тест будет ожидать сервер, выполняя повторные попытки подключения. #13284 (alesapin).
  • Функция materialize() (функция для тестирования в ClickHouse) будет корректно работать с NULL, преобразуя его в неконстантный столбец. #13212 (alexey-milovidov).
  • Исправлена сборка libunwind на AArch64. Исправляет #13204. #13208 (alexey-milovidov).
  • Ещё больше повторных попыток в zkutil gtest для уменьшения нестабильности тестов. #13165 (alexey-milovidov).
  • Небольшие исправления в RBAC TestFlows. #13152 (vzakaznikov).
  • Исправление теста 00960_live_view_watch_events_live.py. #13108 (vzakaznikov).
  • Улучшена очистка кэша в скрипте развёртывания документации. #13107 (alesapin).
  • Переписана часть «осиротевших» тестов на gtest. Удалены лишние include'ы из тестов. #13073 (Nikita Mikhaylov).
  • Добавлены тесты функциональности RBAC для привилегии SELECT в TestFlows. #13061 (Ritaank Tiwari).
  • Повторно запущены некоторые тесты в быстром тестовом прогоне. #12992 (alesapin).
  • Устранена ошибка MSan в библиотеке rdkafka. Тем самым закрывается #12990. rdkafka обновлена до версии 1.5 (master). #12991 (alexey-milovidov).
  • Исправлен отчёт UBSan в реализации base64, возникающий при запуске тестов на сервере с AVX-512. Исправляет #12318. Автор: @qoega. #12441 (alexey-milovidov).
  • Исправлен отчёт UBSan в библиотеке HDFS. Это закрывает #12330. #12453 (alexey-milovidov).
  • Проверена возможность восстановления резервной копии, созданной в старой версии, в новой. Это закрывает #8979. #12959 (alesapin).
  • Не выполнять сборку образа helper_container внутри интеграционных тестов. Собрать Docker-образ в CI и использовать уже собранный helper_container в интеграционных тестах. #12953 (Ilya Yatsishin).
  • Добавлен тест для запроса ALTER TABLE CLEAR COLUMN для столбцов первичного ключа. #12951 (alesapin).
  • Увеличены таймауты в тестах TestFlows. #12949 (vzakaznikov).
  • Исправлена сборка теста на Mac OS X. Закрывает #12767. #12772 (alexey-milovidov).
  • Connector-ODBC обновлён до mysql-connector-odbc-8.0.21. #12739 (Ilya Yatsishin).
  • Добавлены тесты синтаксиса RBAC в TestFlows. #12642 (vzakaznikov).
  • Повышена производительность TestKeeper. Это ускорит выполнение тестов с интенсивным использованием реплицированных таблиц. #12505 (alexey-milovidov).
  • Теперь проверяем, что сервер успешно запускается после выполнения стресс-тестов. Это исправляет #12473. #12496 (alesapin).
  • Обновлён fmtlib до версии master (7.0.1). #12446 (alexey-milovidov).
  • Добавлен Docker-образ для быстрых тестов. #12294 (alesapin).
  • Обновлены пути конфигурации для интеграционных тестов. #12285 (Ilya Yatsishin).
  • Добавлена опция компилятора, ограничивающая размер кадров стека, чтобы они не были слишком большими. Это позволит запускать код в файберах с небольшим размером стека. #11524 (alexey-milovidov).
  • Обновлены файлы .gitignore. #13447 (vladimir-golovchenko).

Релиз ClickHouse 20.6

Релиз ClickHouse v20.6.3.28-stable

Изменение, нарушающее обратную совместимость

  • При обновлении с версий старее 20.5, если выполняется поэтапное обновление (rolling update) и кластер одновременно содержит версии 20.5 или новее и версии ниже 20.5, то при перезапуске узлов ClickHouse со старыми версиями и запуске старой версии в присутствии более новых версий это может привести к ошибкам Part ... intersects previous part. Чтобы предотвратить эту ошибку, сначала установите новые пакеты clickhouse-server на все узлы кластера, а затем выполняйте перезапуски (таким образом, при перезапуске clickhouse-server будет запускаться уже с новой версией).

Новая функциональность

  • Добавлена начальная реализация запроса EXPLAIN. Синтаксис: EXPLAIN SELECT .... Исправляет #1118. #11873 (Nikolai Kochetov).
  • Добавлено хранилище RabbitMQ. #11069 (Kseniia Sumarokova).
  • Реализован оператор ILIKE в стиле PostgreSQL для #11710. #12125 (Mike).
  • Добавлена поддержка RIGHT и FULL JOIN с SET join_algorithm = 'partial_merge'. Разрешена только строгость ALL (ANY, SEMI, ANTI, ASOF — не поддерживаются). #12118 (Artem Zuikov).
  • Добавлена функция initializeAggregation для инициализации агрегации на основе одного значения. #12109 (Guillaume Tassery).
  • Добавлена поддержка ALTER TABLE ... [ADD|MODIFY] COLUMN ... FIRST #4006. #12073 (Winter Zhang).
  • Добавлена функция parseDateTimeBestEffortUS. #12028 (flynn).
  • Добавлена поддержка формата ORC для вывода (ранее поддерживался только для ввода). #11662 (Kruglov Pavel).

Исправление ошибки

  • Исправлена ошибка aggregate function any(x) is found inside another aggregate function in query с помощью SET optimize_move_functions_out_of_any = 1 и использования алиасов внутри any(). #13419 (Artem Zuikov).
  • Исправлен PrettyCompactMonoBlock для clickhouse-local. Исправлены extremes/totals в PrettyCompactMonoBlock. Это исправляет #7746. #13394 (Azat Khuzhin).
  • Исправлена потенциальная ошибка Totals having transform was already added to pipeline в случае запроса с отложенной реплики. #13290 (Nikolai Kochetov).
  • Сервер может аварийно завершаться, если пользователь передал специально подобранные аргументы в функцию h3ToChildren. Это исправляет #13275. #13277 (alexey-milovidov).
  • Исправлена потенциально низкая производительность и слегка некорректные результаты для агрегатных функций uniqExact, topK, sumDistinct и подобных, вызываемых для типов Float со значениями NaN. Это также приводило к срабатыванию assert в debug-сборке. Исправляет #12491. #13254 (alexey-milovidov).
  • Исправлена ошибка в функции if с nullable constexpr в качестве условия, которое не является литералом NULL. Устраняет #12463. #13226 (alexey-milovidov).
  • Исправлена ошибка assert'а в функции arrayElement в случае, когда элементы массива имеют тип Nullable и индекс массива также имеет тип Nullable. Это исправляет #12172. #13224 (alexey-milovidov).
  • Исправлены функции преобразования DateTime64 для константного аргумента. #13205 (Azat Khuzhin).
  • Исправлен неверный анализ индексов при использовании функций. Это могло приводить к отсечению неверных частей при чтении из таблиц MergeTree. Исправлена ошибка #13060. Исправлена ошибка #12406. #13081 (Anton Popov).
  • Исправлена ошибка Cannot convert column because it is constant but values of constants are different in source and result для удалённых запросов, которые используют функции, детерминированные в рамках одного запроса, но недетерминированные между разными запросами, такие как now(), now64(), randConstant(). Исправляет #11327. #13075 (Nikolai Kochetov).
  • Исправлено ненужное ограничение числа потоков для SELECT-запросов с локальной реплики. #12840 (Nikolai Kochetov).
  • Исправлена редкая ошибка, когда запросы ALTER DELETE и ALTER MODIFY COLUMN выполнялись одновременно в рамках одной мутации. Ошибка приводила к некорректному количеству строк в count.txt и, как следствие, к некорректным данным в части данных. Также исправлена небольшая ошибка при одновременном выполнении ALTER RENAME COLUMN и ALTER ADD COLUMN. #12760 (alesapin).
  • Исправлен CAST(Nullable(String), Enum()). #12745 (Azat Khuzhin).
  • Исправлена проблема с производительностью при работе с большими кортежами, которые в разделе IN интерпретируются как функции. Речь о случае, когда пользователь по какой-то неочевидной причине пишет WHERE x IN tuple(1, 2, ...) вместо WHERE x IN (1, 2, ...). #12700 (Anton Popov).
  • Исправлено отслеживание памяти для input_format_parallel_parsing (за счёт привязки потока к группе). #12672 (Azat Khuzhin).
  • Исправлена работа индекса Блума с const-выражением. Это исправляет #10572. #12659 (Winter Zhang).
  • Исправлено возникновение SIGSEGV в StorageKafka при недоступности брокера и в других случаях. #12658 (Azat Khuzhin).
  • Добавлена поддержка функции if с аргументами типа Array(UUID). Это устраняет проблему #11066. #12648 (alexey-milovidov).
  • CREATE USER IF NOT EXISTS теперь не выбрасывает исключение, если пользователь уже существует. Это исправляет #12507. #12646 (Vitaly Baranov).
  • Улучшено сообщение об ошибке при доступе к дисковому хранилищу. #12625 (alesapin).
  • Функция groupArrayMoving* не работала для распределённых запросов. Её результат вычислялся в некорректном типе данных (без повышения до наибольшего типа). Функция groupArrayMovingAvg возвращала целое число, что не соответствовало поведению функции avg. Это исправляет #12568. #12622 (alexey-milovidov).
  • Исправлено отсутствие псевдонимов для функции any. #12593 (Anton Popov).
  • Исправлено условие гонки во внешних словарях с компоновкой кэша, которое могло приводить к сбою сервера. #12566 (alesapin).
  • Удалять данные таблиц Distributed (блоки из асинхронных INSERT) при выполнении DROP TABLE. #12556 (Azat Khuzhin).
  • Исправлена ошибка, из‑за которой старые куски повреждались после выполнения запроса ALTER DELETE при enable_mixed_granularity_parts=1. Исправление для #12536. #12543 (alesapin).
  • Улучшено сообщение об исключении для функции in при неверном числе аргументов. #12529 (Anton Popov).
  • Исправлено состояние гонки в таблицах Live View, которое могло приводить к дублированию данных. #12519 (vzakaznikov).
  • Исправлена проблема с производительностью при чтении из компактных частей. #12492 (Anton Popov).
  • Исправлена проблема с обратной совместимостью в бинарном формате значений AggregateFunction(avg, ...). Это исправляет #12342. #12486 (alexey-milovidov).
  • Исправлен разбор SETTINGS после FORMAT. #12480 (Azat Khuzhin).
  • Устранена взаимная блокировка при включённом text_log. #12452 (alexey-milovidov).
  • Исправлено переполнение при указании очень большого значения параметров LIMIT или OFFSET. Это исправляет #10470. Это исправляет #11372. #12427 (alexey-milovidov).
  • Исправлена возможная ошибка сегментации в StorageMerge. Это исправляет #12054. #12401 (tavplubix).
  • Отменено изменение, внесённое в #11079, для решения #12098. #12397 (Mike).
  • Добавлена дополнительная проверка аргументов индекса Bloom Filter. Это исправляет #11408. #12388 (alexey-milovidov).
  • Исправлено возникновение исключения при использовании отрицательной или вещественной константы в условии WHERE для индексированных таблиц. Это исправляет #11905. #12384 (alexey-milovidov).
  • Теперь разрешено выполнять CLEAR столбца, даже если от него зависят выражения DEFAULT. Это исправляет #12333. #12378 (alexey-milovidov).
  • Исправлена работа TOTALS/ROLLUP/CUBE для агрегатных функций с аргументами -State и Nullable. Это исправляет #12163. #12376 (alexey-milovidov).
  • Исправлены сообщение об ошибке и коды выхода для запросов ALTER RENAME COLUMN, если операция RENAME не допускается. Исправлены #12301 и #12303. #12335 (alesapin).
  • Исправлено крайне редкое состояние гонки в ReplicatedMergeTreeQueue. #12315 (alexey-milovidov).
  • При использовании кодека Delta или DoubleDelta с типами нефиксированной длины вместо исключения с кодом BAD_ARGUMENTS возвращалось исключение с кодом LOGICAL_ERROR (мы гарантируем, что исключения с кодом LOGICAL_ERROR никогда не возникают). Это исправляет #12110. #12308 (alexey-milovidov).
  • Исправлена обработка порядка столбцов в модификаторе WITH FILL. Ранее порядок столбцов в операторе ORDER BY не учитывался. #12306 (Anton Popov).
  • Избегает возникновения исключения "bad cast" в случаях, когда выражение фильтрует данные по виртуальным столбцам (например, _table в таблицах Merge) или по столбцам "index" в системных таблицах, например, при фильтрации по имени базы данных при запросе к system.tables, и это выражение возвращает тип Nullable. Это исправляет #12166. #12305 (alexey-milovidov).
  • Исправлена работа TTL после переименования столбца, на котором основано TTL-выражение. #12304 (Anton Popov).
  • Исправлена ошибка SIGSEGV, возникавшая при наличии сообщения с ошибкой в середине батча в движке Kafka. #12302 (Azat Khuzhin).
  • Исправлена проблема, из‑за которой некоторые потоки могли произвольно зависать на несколько секунд во время обновления кэша DNS. #12296 (tavplubix).
  • Исправлена опечатка в названии настройки. #12292 (alexey-milovidov).
  • Показывать ошибку при сбое загрузки TrieDictionary. #12290 (Vitaly Baranov).
  • Функция arrayFill работала некорректно для пустых массивов, что могло приводить к аварийному завершению работы. Это исправляет #12263. #12279 (alexey-milovidov).
  • Реализованы преобразования к общему типу для типов данных LowCardinality. Это позволяет выполнять UNION ALL над таблицами со столбцами типа LowCardinality и другими столбцами. Исправляет #8212. Исправляет #4342. #12275 (alexey-milovidov).
  • Исправлено поведение при достижении предела числа перенаправлений в запросе к хранилищу S3. #12256 (ianton-ru).
  • Исправлено поведение, при котором при нескольких последовательных вставках в StorageFile заголовок для некоторых специальных типов мог записываться несколько раз. Это исправило #6155. #12197 (Nikita Mikhaylov).
  • Исправлены логические функции для значений типа UInt8 в случаях, когда они не равны 0 или 1. #12196 (Alexander Kazakov).
  • Ограничить значения max_memory_usage* объёмом резидентной памяти процесса. #12182 (Azat Khuzhin).
  • Исправлена проверка аргументов dictGet при устранении инъективных функций из GROUP BY. #12179 (Azat Khuzhin).
  • Исправлено поведение движка таблицы SummingMergeTree, при котором суммировались столбцы из ключа партиционирования. Добавлено исключение, если явно заданы суммируемые столбцы, которые пересекаются со столбцами ключа партиционирования. Это исправляет #7867. #12173 (Nikita Mikhaylov).
  • Не разделяйте имя таблицы источника словаря на схему и собственно имя таблицы, если ODBC‑подключение не поддерживает схемы. #12165 (Vitaly Baranov).
  • Исправлена некорректная логика в ALTER DELETE, приводившая к удалению записей, когда условие имело значение NULL. Это исправляет #9088. Это закрывает #12106. #12153 (alexey-milovidov).
  • Исправлено преобразование запроса для отправки во внешние СУБД (например, MySQL, ODBC) при наличии алиасов. Это исправляет #12032. #12151 (alexey-milovidov).
  • Исправлен некорректный код в оптимизации избыточного ORDER BY. Ошибка появилась в результате #10067. #12148 (alexey-milovidov).
  • Исправлено потенциальное переполнение при целочисленном делении. Тем самым исправлена #12119. #12140 (alexey-milovidov).
  • Исправлен потенциальный бесконечный цикл в greatCircleDistance, geoDistance, что устраняет проблему #12117. #12137 (alexey-milovidov).
  • Нормализована обработка файла «pid». В предыдущих версиях сервер мог не запускаться, если он был принудительно завершён без корректного завершения работы и существовал другой процесс с тем же pid, что и у ранее запущенного сервера. Также pid-файл мог быть удалён при неуспешном запуске сервера, даже если другой сервер уже работал. Это исправляет #3501. #12133 (alexey-milovidov).
  • Исправлена ошибка, из-за которой в ZooKeeper создавались некорректные метаданные таблиц ReplicatedVersionedCollapsingMergeTree. Исправляет #12093. #12121 (alesapin).
  • Устранено возникновение исключения «There is no query» для материализованных представлений с JOIN или с подзапросами, обращающимися к системным логам (system.query_log, metric_log и т.д.) или к базовой таблице с движком Buffer. #12120 (filimonov).
  • Исправлена обработка зависимости таблицы с движком ENGINE=Dictionary от словаря. Это исправляет #10994. Это исправляет #10397. #12116 (Vitaly Baranov).
  • Формат Parquet теперь корректно работает с типами LowCardinality и LowCardinality(Nullable). Исправлены #12086, #8406. #12108 (Nikolai Kochetov).
  • Исправлена проблема с производительностью запросов SELECT с UNION, вызванная неверным ограничением на общее количество потоков. Исправляет #12030. #12103 (Nikolai Kochetov).
  • Исправлен сегфолт при использовании комбинаторов -StateResample. #12092 (Anton Popov).
  • Исправлены случаи, когда метрики result_rows и result_bytes в system.quey_log для запросов SELECT оставались пустыми. Исправлено #11595. #12089 (Nikolai Kochetov).
  • Исправлена проблема с ненужным ограничением числа потоков при выполнении запросов SELECT из VIEW. Исправляет #11937. #12085 (Nikolai Kochetov).
  • Исправлено возникновение SIGSEGV в StorageKafka при выполнении DROP TABLE. #12075 (Azat Khuzhin).
  • Исправлено возможное аварийное завершение работы при использовании некорректного типа для PREWHERE. Исправлены #12053, #12060. #12060 (Nikolai Kochetov).
  • Исправлена ошибка Cannot capture column для функций высшего порядка с аргументом Tuple(LowCardinality). Исправляет #9766. #12055 (Nikolai Kochetov).
  • Исправлена проверка, определяющая, является ли ограничение константным выражением. Это исправляет #11360. #12042 (alexey-milovidov).
  • Исправлены некорректный результат и потенциальный сбой при вызове функции if с аргументами типа FixedString различного размера. Это исправляет #11362. #12021 (alexey-milovidov).

Улучшения

  • Теперь можно задавать вид и тип JOIN более стандартным способом: LEFT SEMI JOIN вместо SEMI LEFT JOIN. Пока оба варианта корректны. #12520 (Artem Zuikov).
  • Добавлены параметры lifetime_rows/lifetime_bytes для движка Buffer. #12421 (Azat Khuzhin).
  • Теперь клиенту возвращается подробное сообщение об исключении вместо 'MySQL server has gone away'. #12383 (BohuTANG).
  • Добавлена возможность изменять кодировку, которая используется для отображения границ таблиц. Доступные кодировки: UTF‑8, ASCII. Настройка output_format_pretty_grid_charset включает эту возможность. #12372 (Sabyanin Maxim).
  • Добавлена поддержка MySQL‑запроса SELECT DATABASE() #9336. Добавлен интеграционный тест для замещающего MySQL‑запроса. #12314 (BohuTANG).
  • Добавлена команда KILL QUERY [connection_id] для клиента/драйвера MySQL для отмены долгих запросов, задача #12038. #12152 (BohuTANG).
  • Добавлена поддержка подстановок %g (двузначный ISO‑год) и %G (четырёхзначный ISO‑год) в функции formatDateTime. #12136 (vivarum).
  • В system.disks добавлен столбец type. #12115 (ianton-ru).
  • Улучшена команда REVOKE: теперь она требует grant/admin‑опцию только для того доступа, который будет отозван. Например, для выполнения REVOKE ALL ON *.* FROM user1 теперь не требуется иметь полные права доступа, выданные с grant‑опцией. Добавлена команда REVOKE ALL FROM user1 — она отзывает все выданные роли у user1. #12083 (Vitaly Baranov).
  • Добавлен приоритет реплик для load_balancing (для ручной приоритизации балансировки нагрузки). #11995 (Azat Khuzhin).
  • Пути в метаданных S3 переключены на относительные, что позволяет проще обрабатывать S3‑объекты. #11892 (Vladimir Chebotarev).

Улучшения производительности

  • Улучшена производительность ORDER BY и GROUP BY по префиксу ключа сортировки (включается настройкой optimize_aggregation_in_order, по умолчанию выключена). #11696 (Anton Popov).
  • Удалены инъективные функции внутри uniq*() при set optimize_injective_functions_inside_uniq=1. #12337 (Ruslan Kamalov).
  • Индекс не использовался для оператора IN с литералами, что привело к регрессии производительности, появившейся примерно в v19.3. Это исправляет #10574. #12062 (nvartolomei).
  • Реализована загрузка одиночных частей (single part uploads) для DiskS3 (экспериментальная функциональность). #12026 (Vladimir Chebotarev).

Экспериментальная функциональность

  • Добавлен новый формат частей в памяти для таблиц семейства MergeTree, который хранит данные в оперативной памяти. Части записываются на диск при первом слиянии. Часть будет создана в формате хранения в памяти, если её размер в строках или байтах ниже порогов min_rows_for_compact_part и min_bytes_for_compact_part. Также доступна дополнительная поддержка журнала предварительной записи (Write-Ahead-Log), который включён по умолчанию и управляется настройкой in_memory_parts_enable_wal. #10697 (Anton Popov).

Улучшения сборки/тестирования/упаковки

  • Реализован режим фаззинга запросов в clickhouse-client на основе AST. См. эту метку для списка задач, которые мы недавно нашли с помощью фаззинга. Большинство из них были найдены этим инструментом, а несколько — SQLancer и 00746_sql_fuzzy.pl. #12111 (Alexander Kuzmenkov).
  • Добавлен новый тип тестов на основе фреймворка Testflows. #12090 (vzakaznikov).
  • Добавлен интеграционный тест S3 HTTPS. #12412 (Pavel Kovalenko).
  • Сообщения ловушки санитайзера теперь логируются из отдельного потока. Это предотвратит возможный дедлок при использовании thread sanitizer. #12313 (alexey-milovidov).
  • Теперь функциональные и стресс‑тесты могут выполняться со старой версией скрипта clickhouse-test. #12287 (alesapin).
  • Удалено странное создание файла во время сборки в orc. #12258 (Nikita Mikhaylov).
  • Общие файлы Docker Compose перенесены в интеграционный Docker‑контейнер. #12168 (Ilya Yatsishin).
  • Исправлены предупреждения из CodeQL. CodeQL — это ещё один статический анализатор, который мы будем использовать вместе с уже используемыми clang-tidy и PVS-Studio. #12138 (alexey-milovidov).
  • Небольшие исправления CMake для сборки UNBUNDLED. #12131 (Matwey V. Kornilov).
  • Добавлен пример минимального Docker‑образа без использования какой‑либо Linux‑дистрибуции. #12126 (alexey-milovidov).
  • Выполнено обновление системных пакетов в Docker‑образе clickhouse-server. #12124 (Ivan Blinkov).
  • Добавлен флаг UNBUNDLED в таблицу system.build_options. Списки пропуска для clickhouse-test перенесены в репозиторий ClickHouse. #12107 (alesapin).
  • Настроена регулярная проверка с помощью инструмента анализа безопасности Anchore Container Analysis, который ищет CVE в Docker‑образе clickhouse-server. Также подтверждает, что Dockerfile пригоден для сборки. Запускается ежедневно на master и на pull‑request'ах к Dockerfile. #12102 (Ivan Blinkov).
  • Настроена ежедневная проверка с помощью инструмента анализа безопасности GitHub CodeQL, который ищет CWE. #12101 (Ivan Blinkov).
  • Установка ca-certificates перед первым apt-get update в Dockerfile. #12095 (Ivan Blinkov).

Релиз ClickHouse 20.5

Релиз ClickHouse v20.5.4.40-stable 2020-08-10

Исправление ошибки

  • Исправлен неправильный анализ индексов при использовании функций. Это могло приводить к отсечению неверных частей данных при чтении из таблиц MergeTree. Исправлены #13060. Исправлены #12406. #13081 (Anton Popov).
  • Исправлено избыточное ограничение числа потоков для SELECT-запросов с локальной реплики. #12840 (Nikolai Kochetov).
  • Исправлена проблема с производительностью при работе с большими кортежами, которые интерпретируются как функции в условии IN. Ситуация, когда пользователь по какой-то непонятной причине пишет WHERE x IN tuple(1, 2, ...) вместо WHERE x IN (1, 2, ...). #12700 (Anton Popov).
  • Исправлен контроль использования памяти для input_format_parallel_parsing (путём присоединения потока к группе). #12672 (Azat Khuzhin).
  • Исправлен индекс блум-фильтра для константных выражений. Это исправляет #10572. #12659 (Winter Zhang).
  • Исправлен SIGSEGV в StorageKafka, возникавший при недоступности брокера и в других случаях. #12658 (Azat Khuzhin).
  • Добавлена поддержка функции if с аргументами типа Array(UUID). Исправлена проблема #11066. #12648 (alexey-milovidov).
  • Исправлено отсутствие псевдонимов в функции any. #12593 (Anton Popov).
  • Исправлено условие гонки во внешних словарях с типом размещения cache, которое могло приводить к сбою сервера. #12566 (alesapin).
  • Удалять данные таблиц типа Distributed (блоки из асинхронных операций INSERT) при выполнении DROP TABLE. #12556 (Azat Khuzhin).
  • Исправлена ошибка, которая приводила к повреждению старых частей данных после выполнения запроса ALTER DELETE при enable_mixed_granularity_parts=1. Исправлена #12536. #12543 (alesapin).
  • Улучшено сообщение об исключении для функции in при неверном количестве аргументов. #12529 (Anton Popov).
  • Исправлено состояние гонки в таблицах Live View, которое могло приводить к дублированию данных. #12519 (vzakaznikov).
  • Исправлена проблема с производительностью при чтении из компактных частей. #12492 (Anton Popov).
  • Исправлена проблема с обратной совместимостью в бинарном формате значений AggregateFunction(avg, ...). Это исправляет #12342. #12486 (alexey-milovidov).
  • Исправлена взаимоблокировка, возникавшая при включённом text_log. #12452 (alexey-milovidov).
  • Исправлено переполнение при указании очень большого значения LIMIT или OFFSET. Тем самым исправлена проблема #10470. Тем самым исправлена проблема #11372. #12427 (alexey-milovidov).
  • Исправлена возможная ошибка сегментации в StorageMerge. Закрывает #12054. #12401 (tavplubix).
  • Откатывает изменение, внесённое в #11079, чтобы устранить #12098. #12397 (Mike).
  • Исключение больше не возникает, когда в условии WHERE для индексированных таблиц используется отрицательная или вещественная константа. Это исправляет #11905. #12384 (alexey-milovidov).
  • Разрешено использовать CLEAR для столбца, даже если от него зависят выражения DEFAULT. Это исправляет #12333. #12378 (alexey-milovidov).
  • Исправлена работа TOTALS/ROLLUP/CUBE для агрегатных функций с аргументами типа -State и Nullable. Исправлена проблема #12163. #12376 (alexey-milovidov).
  • Исправлена ошибка SIGSEGV, возникавшая при наличии сообщения с ошибкой в середине пакета сообщений в движке Kafka. #12302 (Azat Khuzhin).
  • Исправлено поведение, когда движок SummingMergeTree суммирует столбцы, входящие в ключ партиционирования. Добавлено исключение на случай явного указания суммируемых столбцов, пересекающихся со столбцами ключа партиционирования. Это исправляет #7867. #12173 (Nikita Mikhaylov).
  • Исправлено преобразование запроса, отправляемого во внешние СУБД (например, MySQL, ODBC), при наличии псевдонимов. Это исправляет #12032. #12151 (alexey-milovidov).
  • Исправлена ошибка, приводившая к некорректным метаданным в ZooKeeper для таблиц ReplicatedVersionedCollapsingMergeTree. Исправляет #12093. #12121 (alesapin).
  • Исправлено избыточное ограничение числа потоков для запросов SELECT из VIEW. Исправляет #11937. #12085 (Nikolai Kochetov).
  • Исправлено падение JOIN с типом LowCardinality при join_algorithm=partial_merge. #12035 (Artem Zuikov).
  • Исправлен неверный результат функции if() при наличии значений NULL в условии. #11807 (Artem Zuikov).

Улучшение производительности

  • Индекс не использовался для оператора IN с литералами, регрессия производительности появилась примерно в v19.3. Это исправляет #10574. #12062 (nvartolomei).

Улучшение сборки/тестирования/упаковки

  • Устанавливать ca-certificates перед первым apt-get update в Dockerfile. #12095 (Ivan Blinkov).

Релиз ClickHouse v20.5.2.7-stable 2020-07-02

Обратное несовместимое изменение

  • Возвращать результат не типа Nullable из COUNT(DISTINCT) и семейства агрегатных функций uniq. Если все переданные значения равны NULL, возвращать ноль. Это улучшает совместимость с SQL. #11661 (alexey-milovidov).
  • Добавлена проверка для случая, когда настройка уровня пользователя указана в неверном месте. Настройки уровня пользователя должны указываться в users.xml внутри секции <profile> для конкретного пользовательского профиля (или в <default> для настроек по умолчанию). Сервер не запустится, а в журнал будет записано сообщение с исключением. Это исправляет #9051. Если вы хотите пропустить проверку, вы можете либо перенести настройки в нужное место, либо добавить <skip_check_for_incorrect_settings>1</skip_check_for_incorrect_settings> в config.xml. #11449 (alexey-milovidov).
  • Настройка input_format_with_names_use_header теперь включена по умолчанию. Это повлияет на разбор входных форматов -WithNames и -WithNamesAndTypes. #10937 (alexey-milovidov).
  • Удалена настройка experimental_use_processors. Она включена по умолчанию. #10924 (Nikolai Kochetov).
  • Обновлён zstd до версии 1.4.4. В ней есть небольшие улучшения производительности и коэффициента сжатия. Если вы запускаете реплики с разными версиями ClickHouse, вы можете увидеть понятные сообщения об ошибках Data after merge is not byte-identical to data on another replicas. с пояснением. Эти сообщения являются нормальными, и вам не следует беспокоиться. Это изменение обратно совместимо, но мы указываем его здесь в журнале изменений на случай, если вы будете удивляться появлению этих сообщений. #10663 (alexey-milovidov).
  • Добавлена проверка для бессмысленных кодеков и настройка allow_suspicious_codecs для управления этой проверкой. Это закрывает #4966. #10645 (alexey-milovidov).
  • Несколько настроек Kafka изменили значения по умолчанию. См. #11388.
  • При обновлении с версий старее 20.5, если выполняется поэтапное (rolling) обновление и кластер содержит одновременно версии 20.5 или новее и более старые, при перезапуске узлов ClickHouse со старыми версиями и запуске старой версии в присутствии новых это может приводить к ошибкам Part ... intersects previous part. Чтобы предотвратить эту ошибку, сначала установите новые пакеты clickhouse-server на все узлы кластера, а затем выполняйте перезапуски (так, при перезапуске clickhouse-server будет запускаться уже новая версия).

Новая функциональность

  • TTL DELETE WHERE и TTL GROUP BY для автоматического укрупнения данных и построения rollup-агрегатов в таблицах. #10537 (expl0si0nn).
  • Реализация протокола взаимодействия PostgreSQL (wire protocol). #10242 (Movses).
  • Добавлены системные таблицы для пользователей, ролей, прав доступа, профилей настроек, квот и политик строк; также добавлены команды SHOW USER, SHOW [CURRENT|ENABLED] ROLES, SHOW SETTINGS PROFILES. #10387 (Vitaly Baranov).
  • Добавлена поддержка записи в табличную функцию ODBC #10554 (ageraab). #10901 (tavplubix).
  • Добавлены метрики производительности запросов на основе Linux perf_events (эти метрики рассчитываются с использованием аппаратных счетчиков CPU и счетчиков ОС). Это необязательная опция и требует установки CAP_SYS_ADMIN для бинарного файла ClickHouse. #9545 Andrey Skobtsov. #11226 (Alexander Kuzmenkov).
  • Теперь поддерживаются модификаторы NULL и NOT NULL для типов данных в запросе CREATE. #11057 (Павел Потемкин).
  • Добавлены форматы ввода и вывода ArrowStream. #11088 (hcz).
  • Добавлена поддержка Cassandra в качестве внешнего источника данных для словарей. #4978 (favstovol).
  • Добавлен новый layout direct, который загружает все данные непосредственно из источника для каждого запроса, не сохраняя их и не кэшируя. #10622 (Artem Streltsov).
  • Добавлен новый тип layout complex_key_direct для словарей, который не хранит ничего локально во время выполнения запроса. #10850 (Artem Streltsov).
  • Добавлена поддержка синтаксиса глобальных переменных в стиле MySQL (заглушка). Это необходимо для совместимости с протоколом MySQL. #11832 (alexey-milovidov).
  • Добавлена подсветка синтаксиса для clickhouse-client с использованием replxx. #11422 (Tagir Kuskarov).
  • Добавлены функции minMap и maxMap. #11603 (Ildus Kurbangaliev).
  • Добавлена таблица system.asynchronous_metric_log, в которую записываются исторические метрики из system.asynchronous_metrics. #11588 (Alexander Kuzmenkov).
  • Добавлены функции extractAllGroupsHorizontal(haystack, re) и extractAllGroupsVertical(haystack, re). #11554 (Vasily Nemkov).
  • Добавлены запросы SHOW CLUSTER(S). #11467 (hexiaoting).
  • Добавлена функция netloc для извлечения сетевого адреса, аналогичная функции urlparse(url) и полю netloc в Python. #11356 (Guillaume Tassery).
  • Добавлены ещё два виртуальных столбца в engine=Kafka для доступа к заголовкам сообщений. #11283 (filimonov).
  • Добавлен виртуальный столбец _timestamp_ms в движке Kafka (тип — Nullable(DateTime64(3))). #11260 (filimonov).
  • Добавлена функция randomFixedString. #10866 (Andrei Nekrashevich).
  • Добавлена функция fuzzBits, которая случайным образом инвертирует биты в строке с заданной вероятностью. #11237 (Andrei Nekrashevich).
  • Разрешено сравнение чисел с константной строкой в операторах сравнения, а также в секциях IN и VALUES. #11647 (alexey-milovidov).
  • Добавлен режим балансировки нагрузки round_robin. #11645 (Azat Khuzhin).
  • Добавлена настройка cast_keep_nullable. Если она включена, CAST(something_nullable AS Type) возвращает Nullable(Type). #11733 (Artem Zuikov).
  • Добавлены столбец position в таблицу system.columns и столбец column_position в таблицу system.parts_columns. Эти столбцы содержат порядковый номер соответствующего столбца в таблице, начиная с 1. Это исправляет #7744. #11655 (alexey-milovidov).
  • Поддержка оператора ON CLUSTER для команд SYSTEM {FLUSH DISTRIBUTED,STOP/START DISTRIBUTED SEND}. #11415 (Azat Khuzhin).
  • Добавлена таблица system.distribution_queue. #11394 (Azat Khuzhin).
  • Поддержка всех параметров форматов в Kafka, возможность задавать часть параметров на уровне таблицы, корректировка значений по умолчанию для повышения производительности. #11388 (filimonov).
  • Добавлена функция port (для извлечения порта из URL-адреса). #11120 (Azat Khuzhin).
  • Теперь функции dictGet* могут принимать имена таблиц. #11050 (Vitaly Baranov).
  • Утилита clickhouse-format теперь может форматировать несколько запросов при использовании аргумента -n. #10852 (Darío).
  • Добавлена возможность настроить proxy-resolver для DiskS3. #10744 (Pavel Kovalenko).
  • Функция pointInPolygon теперь работает с неконстантным полигоном. pointInPolygon теперь может принимать в качестве второго аргумента Array(Array(Tuple(..., ...))) — массив, описывающий полигон и его отверстия. #10623 (Alexey Ilyukhov) #11421 (Alexey Ilyukhov).
  • Добавлено move_ttl_info в system.parts для анализа работы механизма перемещения по TTL. #10591 (Vladimir Chebotarev).
  • Возможность работы с S3 через прокси-серверы. #10576 (Pavel Kovalenko).
  • Добавлены синонимы для типов данных NCHAR и NVARCHAR. #11025 (alexey-milovidov).
  • Исправлена задача #7224: в таблицу system.events добавлены метрики FailedQuery, FailedSelectQuery и FailedInsertQuery. #11151 (Nikita Orlov).
  • Добавили дополнительную статистику jemalloc в system.asynchronous_metrics и обеспечили отображение для неё актуальных значений. #11748 (Alexander Kuzmenkov).
  • Добавлена возможность указывать учетные данные S3 по умолчанию, а также пользовательские заголовки аутентификации. #11134 (Grigory Pervakov).
  • Добавлены новые функции для импорта/экспорта DateTime64 как Int64 с различной степенью точности: to-/fromUnixTimestamp64Milli/-Micro/-Nano. #10923 (Vasily Nemkov).
  • Разрешено указывать URI вида mongodb:// для словарей MongoDB. #10915 (Alexander Kuzmenkov).
  • Ключевое слово OFFSET теперь можно использовать без сопутствующей клаузы LIMIT. #10802 (Guillaume Tassery).
  • Добавлена таблица system.licenses. Эта таблица содержит лицензии сторонних библиотек, которые находятся в каталоге contrib. Тем самым закрывается #2890. #10795 (alexey-milovidov).
  • Новая функция toStartOfSecond(DateTime64) -> DateTime64, которая обнуляет дробную (субсекундную) часть значения DateTime64. #10722 (Vasily Nemkov).
  • Добавлен новый формат ввода JSONAsString, который принимает последовательность JSON-объектов, разделённых символами новой строки, пробелами и/или запятыми. #10607 (Kruglov Pavel).
  • Разрешено профилировать память с более мелким шагом, чем 4 МиБ. Добавлен семплирующий профилировщик памяти для фиксации случайных выделений и освобождений памяти. #10598 (alexey-milovidov).
  • SimpleAggregateFunction теперь поддерживает и sumMap. #10000 (Ildus Kurbangaliev).
  • Добавлена поддержка ALTER RENAME COLUMN для движка Distributed. Продолжение #10727. Исправлено #10747. #10887 (alesapin).

Исправление ошибки

  • Исправлено срабатывание UBSan при разборе Decimal. Это исправляет #7540. #10512 (alexey-milovidov).
  • Исправлено возможное арифметическое исключение с плавающей запятой при разборе DateTime64. Это исправляет #11374. #11875 (alexey-milovidov).
  • Исправлен редкий сбой, возникавший при использовании столбца Nullable в условии PREWHERE. #11895 #11608 #11869 (Nikolai Kochetov).
  • Запретить использование arrayJoin внутри функций высшего порядка. Это приводило к нарушению синхронизации протокола. Исправляет #3933. #11846 (alexey-milovidov).
  • Исправлена ошибка при сравнении FixedString с константой типа String. Это исправление закрывает #11393. Ошибка появилась в версии 20.4. #11828 (alexey-milovidov).
  • Исправлен неверный результат для if при наличии значений NULL в условии. #11807 (Artem Zuikov).
  • Исправлено избыточное использование потоков при выполнении запросов. #11788 (Nikolai Kochetov).
  • Исправлено исключение Scalar does not exist при использовании WITH <скалярный подзапрос> ... в SELECT ... FROM merge_tree_table ... #11621. #11767 (Amos Bird).
  • Исправлено некорректное поведение запросов вида SELECT *, xyz.*, которые выполнялись успешно, хотя ожидалась ошибка. #11753 (hexiaoting).
  • Теперь операции реплицированного fetch будут отменяться при изменении метаданных. #11744 (alesapin).
  • Разбирать метаданные, хранящиеся в ZooKeeper, перед сравнением на равенство. #11739 (Azat Khuzhin).
  • Исправлена ошибка LOGICAL_ERROR, вызванная неверным выводом типа сложных литералов в формате ввода Values. #11732 (tavplubix).
  • Исправлена ошибка в работе ORDER BY ... WITH FILL для константных столбцов. #11697 (Anton Popov).
  • Исправлено крайне редкое состояние гонки в SYSTEM SYNC REPLICA. Если реплицируемая таблица создаётся и одновременно из отдельного соединения другой клиент выполняет команду SYSTEM SYNC REPLICA для этой таблицы (что маловероятно, потому что другой клиент должен знать, что таблица создаётся), возможно разыменование нулевого указателя (nullptr). #11691 (alexey-milovidov).
  • Передавайте корректные значения таймаутов при взаимодействии с XDBC bridge. Ранее таймауты не учитывались при проверке работоспособности XDBC bridge и получении метаинформации. #11690 (alexey-milovidov).
  • Исправлено использование LIMIT n WITH TIES вместе с оператором ORDER BY, содержащим псевдонимы. #11689 (Anton Popov).
  • Исправлена возможная проблема Pipeline stuck для запросов SELECT с параллельным FINAL. Исправляет #11636. #11682 (Nikolai Kochetov).
  • Исправлена ошибка, из-за которой system.mutations мог находиться в некорректном состоянии: могло отображаться, что вся мутация уже выполнена, хотя на сервере все еще оставались задачи MUTATE_PART в очереди репликации, и он продолжал пытаться их выполнить. Это исправляет #11611. #11681 (alesapin).
  • Исправлена подсветка синтаксиса в запросе CREATE USER. #11664 (alexey-milovidov).
  • Добавлена поддержка регулярных выражений с флагами, не зависящими от регистра. Это исправляет #11101 и #11506. #11649 (alexey-milovidov).
  • Удалена тривиальная оптимизация запросов COUNT, если включена безопасность на уровне строк (row-level security). В предыдущих версиях пользователь получал общее количество записей в таблице вместо отфильтрованного. Это исправляет #11352. #11644 (alexey-milovidov).
  • Исправлены блум-фильтры для String (индексы пропуска данных). #11638 (Azat Khuzhin).
  • Без опции -q база данных не создаётся при запуске. #11604 (giordyb).
  • Исправлена ошибка Block structure mismatch для запросов с семплированием, читающих из таблицы Buffer. #11602 (Nikolai Kochetov).
  • Исправлен неверный код завершения clickhouse-client, если exception.code() % 256 == 0. #11601 (filimonov).
  • Исправлены условия гонки при операциях CREATE/DROP для разных реплик ReplicatedMergeTree. Система продолжает работать, даже если таблица не была полностью удалена из ZooKeeper или не была успешно создана. Это исправляет #11432. #11592 (alexey-milovidov).
  • Исправлена незначительная ошибка в сообщении журнала о «Mark cache size was lowered» при запуске сервера. Это закрывает #11399. #11589 (alexey-milovidov).
  • Исправлена ошибка Size of offsets does not match size of column, возникавшая в запросах с PREWHERE column in (subquery) и ARRAY JOIN. #11580 (Nikolai Kochetov).
  • Исправлена редкая ошибка сегментации в SHOW CREATE TABLE, устраняющая #11490. #11579 (tavplubix).
  • Все запросы в HTTP-сессии имели один и тот же query_id. Исправлено. #11578 (tavplubix).
  • Теперь Docker-контейнер clickhouse-server будет предпочитать IPv6 при проверке доступности сервера. #11550 (Ivan Starkov).
  • Исправлена ошибка Data compressed with different methods, которая могла возникать при включённом min_bytes_to_use_direct_io, если используется PREWHERE вместе с SAMPLE или большим числом потоков. Это исправляет #11539. #11540 (alexey-milovidov).
  • Исправлены значения shard_num/replica_num для <node> (они нарушали работу use_compact_format_in_distributed_parts_names). #11528 (Azat Khuzhin).
  • Исправлен асинхронный INSERT в таблицу Distributed при prefer_localhost_replica=0 и отключённой internal_replication. #11527 (Azat Khuzhin).
  • Исправлена утечка памяти, возникавшая при возникновении исключения в процессе агрегации с функциями -State. Это исправляет #8995. #11496 (alexey-milovidov).
  • Исправлено исключение Pipeline stuck при выполнении INSERT SELECT FINAL, когда SELECT (max_threads>1) имеет несколько потоков, а INSERT — только один (max_insert_threads==0). #11455 (Azat Khuzhin).
  • Исправлена ошибка, приводившая к неверному результату в запросах вида select count() from t, u. #11454 (Artem Zuиков).
  • Исправлено возвращаемое значение сжатого размера для кодеков. #11448 (Nikolai Kochetov).
  • Исправлено падение сервера при использовании для столбца кодека сжатия с нелитеральными аргументами. Исправляет #11365. #11431 (alesapin).
  • Исправлено возможное чтение неинициализированной памяти при завершении работы MergeTree, если таблица не была успешно создана. #11420 (alexey-milovidov).
  • Исправлено падение при выполнении операции JOIN для типов LowCarinality(T) и Nullable(T). #11380. #11414 (Artem Zuikov).
  • Исправлен код ошибки для неправильного ключа USING. #11373. #11404 (Artem Zuikov).
  • Исправлена функция geohashesInBox с аргументами за пределами допустимого диапазона широты и долготы. #11403 (Vasily Nemkov).
  • Улучшены сообщения об ошибках в функциях joinGet(). #11389 (Artem Zuikov).
  • Исправлена возможная ошибка Pipeline stuck в запросах с внешней сортировкой и ограничением. Исправляет #11359. #11366 (Nikolai Kochetov).
  • Удалена избыточная блокировка при отправке партий в ReplicatedMergeTree. #11354 (alesapin).
  • Исправлена поддержка \G (вертикальный вывод) в clickhouse-client в многострочном режиме. Данное исправление закрывает #9933. #11350 (alexey-milovidov).
  • Исправлена потенциальная ошибка сегментации при использовании базы данных Lazy. #11348 (alexey-milovidov).
  • Исправлено падение при прямых выборках из движка таблицы Join (без JOIN) и некорректная обработка NULL-значений. #11340 (Artem Zuikov).
  • Исправлена ошибка, приводившая к сбою в quantilesExactWeightedArray. #11337 (Nikolai Kochetov).
  • Теперь слияния останавливаются перед изменением метаданных в запросах ALTER. #11335 (alesapin).
  • Снова сделана параллельной запись в MATERIALIZED VIEW при параметре parallel_view_processing = 1. Исправляет #10241. #11330 (Nikolai Kochetov).
  • Исправлена visitParamExtractRaw для случая, когда извлечённый JSON содержит строки с несбалансированными { или [. #11318 (Ewout).
  • Исправлено крайне редкое состояние гонки в ThreadPool. #11314 (alexey-milovidov).
  • Исправлена незначительная гонка данных в clickhouse-copier. Выявлена интеграционными тестами. #11313 (alexey-milovidov).
  • Исправлено потенциальное использование неинициализированной памяти при преобразовании. Пример: SELECT toIntervalSecond(now64()). #11311 (alexey-milovidov).
  • Исправлена проблема, из-за которой анализ индексов не работал, если в первичном ключе таблицы был столбец типа Array и запрос фильтровал по этому столбцу с помощью функций empty или notEmpty. Это исправляет #11286. #11303 (alexey-milovidov).
  • Исправлена ошибка, при которой оценка скорости выполнения запроса могла быть некорректной, а ограничение min_execution_speed могло не работать или работать неправильно, если скорость запроса ограничивалась настройками max_network_bandwidth, max_execution_speed или priority. Значение по умолчанию для timeout_before_checking_execution_speed изменено на ненулевое, потому что в противном случае настройки min_execution_speed и max_execution_speed не оказывают никакого эффекта. Исправляет #11297. Исправляет #5732. Исправляет #6228. Улучшение удобства использования: устранена конкатенация сообщения об исключении с индикатором прогресса в clickhouse-client. #11296 (alexey-milovidov).
  • Исправлена ошибка, из-за которой происходило падение при вызове SET DEFAULT ROLE с некорректными аргументами. Это исправляет #10586. #11278 (Vitaly Baranov).
  • Исправлен сбой при чтении некорректных данных в формате Protobuf, что устраняет #5957 и #11203. #11258 (Vitaly Baranov).
  • Исправлена ошибка, из-за которой словарь cache мог возвращать значение по умолчанию вместо корректного (когда все ключи просрочены). Это затрагивает только строковые поля. #11233 (Nikita Mikhaylov).
  • Исправлена ошибка Block structure mismatch in QueryPipeline при чтении из VIEW с константами во внутреннем запросе. Исправляет #11181. #11205 (Nikolai Kochetov).
  • Исправлено возможное исключение Invalid status for associated output. #11200 (Nikolai Kochetov).
  • Теперь primary.idx будет проверяться, если он задан в запросе CREATE. #11199 (alesapin).
  • Исправлена возможная ошибка Cannot capture column в функциях высшего порядка при захвате аргумента типа Array(Array(LowCardinality)). #11185 (Nikolai Kochetov).
  • Исправлена работа S3-глоббинга, который мог приводить к сбоям при наличии более чем 1000 ключей и на некоторых бэкендах. #11179 (Vladimir Chebotarev).
  • Если индекс пропуска данных зависит от столбцов, которые будут изменяться во время фонового слияния (для SummingMergeTree, AggregatingMergeTree, а также для TTL GROUP BY), он рассчитывался некорректно. Эта проблема исправлена переносом вычисления индекса на этап после слияния, чтобы индекс вычислялся по объединённым данным. #11162 (Azat Khuzhin).
  • Исправлено зависание, которое иногда происходило при выполнении DROP таблицы ENGINE=Kafka (или во время перезапуска сервера). #11145 (filimonov).
  • Исправлено чрезмерное резервирование потоков для простых запросов (оптимизация сокращения числа потоков, которая была частично нарушена после изменений в конвейере). #11114 (Azat Khuzhin).
  • Убрано логирование в задаче завершения мутации, если в итоге ничего не было завершено. #11109 (alesapin).
  • Исправлена взаимоблокировка при запуске сервера после обновления, изменившего структуру таблиц системных логов. #11106 (alesapin).
  • Исправлена утечка памяти в registerDiskS3. #11074 (Pavel Kovalenko).
  • Исправлена ошибка No such name in Block::erase() при использовании JOIN вместе с PREWHERE или когда настройка optimize_move_to_prewhere преобразует WHERE в PREWHERE. #11051 (Artem Zuikov).
  • Исправлена возможная утеря данных при остановке таблицы движка Kafka. #11048 (filimonov).
  • Исправлены ошибки при разрешении аргументов функции parseDateTime64BestEffort. #10925. #11038 (Vasily Nemkov).
  • Теперь можно выполнять ADD/DROP и RENAME одного и того же столбца в одном запросе ALTER. Сообщение об ошибке при одновременном выполнении MODIFY и RENAME стало более понятным. Частично исправляет #10669. #11037 (alesapin).
  • Исправлен разбор URL S3. #11036 (Vladimir Chebotarev).
  • Исправлено отслеживание использования памяти для двухуровневого GROUP BY при наличии LIMIT. #11022 (Azat Khuzhin).
  • Исправлена крайне редкая потенциальная ошибка типа use-after-free в MergeTree, возникавшая в случае неуспешного создания таблицы. #10986 (alexey-milovidov).
  • Исправлена обработка метаданных (относительный путь при переименовании) и данных (относительный путь для символьной ссылки) в базе данных Atomic. #10980 (Azat Khuzhin).
  • Исправлено падение сервера при одновременном выполнении запросов ALTER и DROP DATABASE с движком базы данных Atomic. #10968 (tavplubix).
  • Исправлен некорректный размер сырых данных в методе getRawData(). #10964 (Igr).
  • Исправлена несовместимость двухуровневой агрегации между версией 20.1 и более ранними версиями. Эта несовместимость возникает, когда на инициирующем узле и удалённых узлах используются разные версии ClickHouse, результат GROUP BY имеет большой размер, и агрегация выполняется по одному полю типа String. Это приводит к появлению в результате нескольких необъединённых строк для одного ключа. #10952 (alexey-milovidov).
  • Исключена отправка частично записанных файлов через DistributedBlockOutputStream. #10940 (Azat Khuzhin).
  • Исправлено аварийное завершение при выполнении SELECT count(notNullIn(NULL, [])). #10920 (Nikolai Kochetov).
  • Исправлено зависание, которое иногда происходило при выполнении DROP таблицы с движком Kafka (или во время перезапусков сервера). #10910 (filimonov).
  • Теперь можно выполнять несколько операций ALTER RENAME, например a TO b, c TO a. #10895 (alesapin).
  • Исправлена возможная гонка данных, которая могла возникать при получении результата из состояния агрегатной функции из нескольких потоков для одного и того же столбца. Единственный сценарий (который мне удалось найти), при котором это возможно, — использование функции finalizeAggregation при чтении из таблицы с движком Memory, в которой хранится состояние AggregateFunction для функции quanite*. #10890 (Nikolai Kochetov).
  • Исправлена проблема с обратной совместимостью кортежей в таблицах типа Distributed. #10889 (Anton Popov).
  • Исправлен SIGSEGV в StringHashTable при обращении к отсутствующему ключу. #10870 (Azat Khuzhin).
  • Исправлена проблема с зависанием WATCH после удаления таблицы LiveView из базы данных с движком Atomic. #10859 (tavplubix).
  • Исправлена ошибка в ReplicatedMergeTree, из-за которой некоторые операции ALTER с OPTIMIZE могли зависать, ожидая реплику, которая уже стала неактивной. #10849 (tavplubix).
  • Теперь ограничения обновляются при переименовании столбца, участвующего в выражении CONSTRAINT. Исправлена проблема #10844. #10847 (alesapin).
  • Исправлено возможное чтение неинициализированной памяти в словаре кэша. #10834 (alexey-milovidov).
  • Исправлен порядок столбцов после Block::sortColumns() (также добавлен тест, показывающий влияние на реальный сценарий использования — движок Buffer). #10826 (Azat Khuzhin).
  • Исправлена проблема с ODBC bridge, возникающая, когда не требуется кавычивание идентификаторов. Это исправляет #7984. #10821 (alexey-milovidov).
  • Исправлены отчёты UBSan и MSan в DateLUT. #10798 (alexey-milovidov).
  • Используйте src_type для корректного приведения типов в условиях по ключу. Устраняет проблему #6287. #10791 (Andrew Onyshchuk).
  • Удалить старые патчи для libunwind. https://github.com/ClickHouse-Extras/libunwind/commit/500aa227911bd185a94bfc071d68f4d3b03cb3b1#r39048012 Это позволяет отключить -fno-omit-frame-pointer в сборках clang, что в среднем дает как минимум 1 % прироста производительности. #10761 (Amos Bird).
  • Исправлен avgWeighted при использовании числа с плавающей запятой в качестве веса на нескольких шардах. #10758 (Baudouin Giard).
  • Исправлено поведение parallel_view_processing. Теперь при возникновении исключения все вставки в MATERIALIZED VIEW в любом случае должны быть доведены до конца. Исправляет #10241. #10757 (Nikolai Kochetov).
  • Исправлены комбинаторы -OrNull и -OrDefault при совместном использовании с -State. #10741 (hcz).
  • Исправлен сбой в generateRandom при работе с вложенными типами. Исправляет #10583. #10734 (Nikolai Kochetov).
  • Исправлена потенциальная порча данных в ключевом столбце LowCardinality(FixedString) в SummingMergeTree, которая могла происходить после слияния. Исправляет #10489. #10721 (Nikolai Kochetov).
  • Исправлена работа с первичным ключом, обёрнутым в функцию, при использовании модификатора 'FINAL' и оптимизации ORDER BY. #10715 (Anton Popov).
  • Исправлено потенциальное переполнение буфера в функции h3EdgeAngle. #10711 (alexey-milovidov).
  • Исправлена проблема исчезающих итогов. Итоги могли отфильтровываться, если запрос содержал JOIN или подзапрос с внешним условием WHERE. Исправляет #10674. #10698 (Nikolai Kochetov).
  • Исправлена атомарность вставки по HTTP. Исправляет #9666. #10687 (Andrew Onyshchuk).
  • Исправлено несколько случаев использования оператора IN с одинаковым набором значений в одном запросе. #10686 (Anton Popov).
  • Исправлена ошибка, из-за которой HTTP-запросы зависали при закрытии подключения клиента при readonly=2 и cancel_http_readonly_queries_on_client_close=1. Исправляет #7939, #7019, #7736, #7091. #10684 (tavplubix).
  • Исправлен порядок аргументов в конструкторе AggregateTransform. #10667 (palasonic1).
  • Исправлена проблема с отсутствием параллельного выполнения удалённых запросов при включённом distributed_aggregation_memory_efficient. Исправляет #10655. #10664 (Nikolai Kochetov).
  • Исправлено возможное некорректное количество строк в результатах запросов с LIMIT. Исправляет #10566, #10709. #10660 (Nikolai Kochetov).
  • Исправлена ошибка, из‑за которой блокировались конкурентные операции ALTER при большом количестве частей таблицы. #10659 (alesapin).
  • Исправлено разыменование указателя nullptr в StorageBuffer, если сервер был завершён до запуска таблицы. #10641 (alexey-milovidov).
  • Исправлена оптимизация предикатов для распределённых запросов (enable_optimize_predicate_expression=1) в запросах с секцией HAVING (то есть когда требуется фильтрация на сервере-инициаторе) за счёт сохранения порядка выражений (чего достаточно для устранения проблемы), а также принудительного использования агрегатором имён столбцов вместо индексов. Исправления: #10613, #11413. #10621 (Azat Khuzhin).
  • Исправлено поведение optimize_skip_unused_shards с LowCardinality. #10611 (Azat Khuzhin).
  • Исправлена ошибка сегментации в StorageBuffer при возникновении исключения во время запуска сервера. Исправляет проблему #10550. #10609 (tavplubix).
  • При выполнении запроса SYSTEM DROP DNS CACHE также сбрасываются кеши, которые используются для проверки, разрешено ли пользователю подключаться с определённых IP-адресов. #10608 (tavplubix).
  • Исправлены некорректные скалярные результаты во внутреннем запросе MATERIALIZED VIEW в случае, если этот запрос обращался к зависимой таблице. #10603 (Nikolai Kochetov).
  • Исправлена обработка условной переменной, используемой для синхронных мутаций. В некоторых случаях сигналы этой условной переменной могли теряться. #10588 (Vladimir Chebotarev).
  • Исправлен возможный сбой, возникающий при вызове createDictionary() до завершения loadStoredObject(). #10587 (Vitaly Baranov).
  • Исправлена ошибка с сообщением the BloomFilter false positive must be a double number between 0 and 1 #10551. #10569 (Winter Zhang).
  • Исправлен SELECT столбца-алиаса, у которого тип выражения по умолчанию отличался от типа столбца. #10563 (Azat Khuzhin).
  • Реализовано сравнение между значениями DateTime64 и String (как и для DateTime). #10560 (Vasily Nemkov).
  • Исправлена возможная порча индекса, возникавшая в некоторых случаях после слияния компактных частей в другую компактную часть. #10531 (Anton Popov).
  • Отключена по умолчанию оптимизация GROUP BY по sharding_key (optimize_distributed_group_by_sharding_key была добавлена, но сразу отключена из‑за сложности анализа sharding_key; простой пример — использование if в ключе шардинга) и исправлена её работа для WITH ROLLUP/CUBE/TOTALS. #10516 (Azat Khuzhin).
  • Исправлено: #10263 (после того PR распределённая отправка (dist) через INSERT откладывалась при каждом INSERT). Исправлено: #8756 (тот PR ломает распределённые отправки при одновременном выполнении всех следующих условий (сейчас это, полагаю, маловероятная конфигурация): internal_replication == false, несколько локальных шардов (активирует код работы с жёсткими ссылками) и distributed_storage_policy (делает так, что link(2) завершается с ошибкой EXDEV)). #10486 (Azat Khuzhin).
  • Исправлена ошибка, связанная с ограничением "max_rows_to_sort". #10268 (alexey-milovidov).
  • Получать словарь и проверять права доступа только один раз при каждом вызове любой функции чтения внешних словарей. #10928 (Vitaly Baranov).

Улучшение

  • Применяется TTL для старых данных после выполнения запроса ALTER MODIFY TTL. Это поведение контролируется настройкой materialize_ttl_after_modify, которая включена по умолчанию. #11042 (Anton Popov).
  • При разборе C‑подобных escape‑последовательностей с обратной косой чертой в строковых литералах, VALUES и различных текстовых форматах (это расширение стандарта SQL, характерное для ClickHouse и MySQL), сохранять обратную косую черту, если обнаружена неизвестная escape‑последовательность (например, \% или \w), что делает использование регулярных выражений LIKE и match более удобным (достаточно написать name LIKE 'used\_cars' вместо name LIKE 'used\\_cars'), а также повышает совместимость. Это исправляет #10922. #11208 (alexey-milovidov).
  • При чтении значений типа Decimal лишние цифры после десятичной точки отбрасываются. Такое поведение более совместимо с MySQL и PostgreSQL. Это исправляет #10202. #11831 (alexey-milovidov).
  • Разрешить выполнять DROP реплицируемой таблицы, если метаданные в ZooKeeper уже удалены и больше не присутствуют (в том числе при использовании TestKeeper для тестирования после перезапуска сервера). Разрешить выполнять RENAME реплицируемой таблицы даже при ошибке при обращении к ZooKeeper. Это исправляет #10720. #11652 (alexey-milovidov).
  • Немного улучшена диагностика при чтении десятичных чисел из строки. Это закрывает #10202. #11829 (alexey-milovidov).
  • Исправлен вызов sleep в обработчике сигналов. Он засыпал на более короткое время, чем ожидалось. #11825 (alexey-milovidov).
  • (Только для Linux) Метрики производительности ОС (для CPU и I/O) будут работать даже без capability CAP_NET_ADMIN. #10544 (Alexander Kazakov).
  • Добавлен псевдоним hostname для функции hostName. Эту возможность предложил Victor Tarnavskiy из Yandex.Metrica. #11821 (alexey-milovidov).
  • Добавлена поддержка распределённых DDL-операций (UPDATE/DELETE/DROP PARTITION) на кластерах с перекрёстной репликацией. #11703 (Nikita Mikhaylov).
  • Выводить предупреждение вместо ошибки в серверный лог при запуске, если не удаётся слушать один из адресов для прослушивания (например, IPv6 недоступен внутри Docker). Имейте в виду, что если серверу не удаётся слушать все указанные адреса, он, как и раньше, не запустится. Это исправляет #4406. #11687 (alexey-milovidov).
  • Создание пользователя и базы данных по умолчанию при запуске Docker-образа. #10637 (Paramtamtam).
  • При выводе многострочного запроса в серверный лог строки объединяются. Теперь это корректно работает в случае многострочных строковых литералов, идентификаторов и однострочных комментариев. Это исправляет #3853. #11686 (alexey-milovidov).
  • Теперь в следующих командах можно указывать несколько имен: CREATE USER, CREATE ROLE, ALTER USER, SHOW CREATE USER, SHOW GRANTS и так далее. #11670 (Vitaly Baranov).
  • Добавлена поддержка распределённого DDL (UPDATE/DELETE/DROP PARTITION) в кластерах с перекрёстной репликацией. #11508 (frank lee).
  • Очищать пароль, переданный в командной строке в clickhouse-client и clickhouse-benchmark, если пользователь указал его в явном виде. Это предотвращает утечку пароля через ps и аналогичные инструменты. #11665 (alexey-milovidov).
  • Не использовать отладочную информацию из файла ELF, если она не соответствует запущенному бинарному файлу. Это необходимо, чтобы избежать вывода некорректных имён функций и мест в исходном коде в стек‑трейсах. Это исправляет #7514. #11657 (alexey-milovidov).
  • Возвращать NULL/ноль, если значение разобрано не полностью в функциях parseDateTimeBestEffortOrNull/Zero. Это исправляет #7876. #11653 (alexey-milovidov).
  • Пропускать пустые параметры в URL запроса. Они могут появляться, если указать http://localhost:8123/?&a=b или http://localhost:8123/?a=b&&c=d. Это исправление закрывает #10749. #11651 (alexey-milovidov).
  • Разрешено использовать groupArrayArray и groupUniqArrayArray в качестве SimpleAggregateFunction. #11650 (Volodymyr Kuznetsov).
  • Разрешено сравнивать с константными строками посредством неявных преобразований при анализе условий индекса для других типов. Это может закрыть #11630. #11648 (alexey-milovidov).
  • https://github.com/ClickHouse/ClickHouse/pull/7572#issuecomment-642815377 Поддержка конфигурации HTTP-обработчиков по умолчанию. #11628 (Winter Zhang).
  • Добавлены дополнительные форматы ввода для работы с движком Kafka. Исправлена проблема с преждевременными сбросами данных. Исправлена проблема с производительностью, возникавшая, когда kafka_num_consumers больше числа партиций в топике. #11599 (filimonov).
  • Улучшена логика multiple_joins_rewriter_version=2. Исправлена ошибка «unknown column» для псевдонимов лямбда-выражений. #11587 (Artem Zuikov).
  • Улучшено сообщение об исключении при невозможности разобрать список описания столбцов. Это закрывает #10403. #11537 (alexey-milovidov).
  • Улучшена логика enable_optimize_predicate_expression=1 для представлений (VIEW). #11513 (Artem Zuikov).
  • Добавлена поддержка PREWHERE в таблицах Live View. #11495 (vzakaznikov).
  • Автоматически обновлять DNS-кэш, который используется для проверки, разрешено ли пользователю подключаться с данного адреса. #11487 (tavplubix).
  • OPTIMIZE FINAL принудительно выполнит слияние, даже если одновременно выполняются другие слияния. Тем самым закрываются задачи #11309 и #11322. #11346 (alexey-milovidov).
  • Подавлен вывод результатов отменённых запросов в clickhouse-client. В предыдущих версиях результат мог продолжать выводиться в терминал даже после нажатия Ctrl+C для отмены запроса. Это закрывает #9473. #11342 (alexey-milovidov).
  • Теперь файл истории обновляется после каждого запроса, и не возникает состояния гонки, если один и тот же файл истории используется несколькими клиентами. Это исправляет #9897. #11453 (Tagir Kuskarov).
  • Улучшены сообщения журнала при перезагрузке конфигурации. #11341 (alexey-milovidov).
  • В некоторых случаях из отформатированных запросов в clickhouse-client и clickhouse-format удаляются пробелы в конце строк. #11325 (alexey-milovidov).
  • Добавлена настройка "output_format_pretty_max_value_width". Если значение длиннее, оно будет усечено, чтобы избежать вывода слишком длинных значений в терминал. Закрывает #11140. #11324 (alexey-milovidov).
  • Улучшено сообщение об исключении при нехватке отображений памяти. Закрывает #11027. #11316 (alexey-milovidov).
  • Добавлена поддержка типов (U)Int8, (U)Int16 и Date в ASOF JOIN. #11301 (Artem Zuikov).
  • Добавлена поддержка параметра kafka_client_id для таблиц Kafka. Также изменено значение по умолчанию параметра client.id, который ClickHouse использует при взаимодействии с Kafka, — теперь оно более информативно и удобно в использовании. #11252 (filimonov).
  • Сохранять значение метрики DistributedFilesToInsert при исключениях. В предыдущих версиях значение устанавливалось при подготовке к отправке файлов, но становилось нулём, если происходило исключение и некоторые файлы всё ещё ожидали обработки. Теперь оно соответствует количеству ожидающих файлов в файловой системе. #11220 (alexey-milovidov).
  • Добавлена поддержка составных названий типов данных (таких как DOUBLE PRECISION и CHAR VARYING) для улучшения совместимости с SQL. #11214 (Павел Потемкин).
  • Добавлены синонимы для некоторых типов данных. #10856 (Павел Потемкин).
  • Журнал запросов теперь включён по умолчанию. #11184 (Ivan Blinkov).
  • Отображать тип аутентификации в таблице system.users и при выполнении запроса SHOW CREATE USER. #11080 (Vitaly Baranov).
  • Теперь данные удаляются при явном выполнении DROP DATABASE для движка базы данных Memory. Исправление #10557. #11021 (tavplubix).
  • Заданы имена для внутренних потоков библиотеки rdkafka. Логи rdkafka теперь выводятся в серверный журнал. #10983 (Azat Khuzhin).
  • Поддержка юникодных пробельных символов в запросах. Это помогает, когда запросы копируются из Word или с веб‑страницы. Это исправляет #10896. #10903 (alexey-milovidov).
  • Добавлена поддержка использования больших типов UInt в качестве индекса в функции tupleElement. #10874 (hcz).
  • Учитывать prefer_localhost_replica/load_balancing при выполнении операции INSERT в таблицу Distributed. #10867 (Azat Khuzhin).
  • Добавлены настройки min_insert_block_size_rows_for_materialized_views, min_insert_block_size_bytes_for_materialized_views. Эти настройки аналогичны min_insert_block_size_rows и min_insert_block_size_bytes, но применяются только к блокам, вставляемым в MATERIALIZED VIEW. Это помогает контролировать схлопывание блоков при вставке в материализованные представления и избегать чрезмерного использования памяти. #10858 (Azat Khuzhin).
  • Устранено возникновение исключения в реплицируемой очереди при остановке сервера. Исправляет #10819. #10841 (alesapin).
  • Обеспечить, чтобы varSamp, varPop не могли возвращать отрицательные результаты из‑за численных ошибок и чтобы stddevSamp, stddevPop не могли вычисляться из отрицательной дисперсии. Это исправляет #10532. #10829 (alexey-milovidov).
  • Улучшено сообщение об исключении DNS. Это исправляет #10813. #10828 (alexey-milovidov).
  • Изменён HTTP-код ответа на 400 Bad Request в случае некоторых ошибок парсинга. Тем самым исправлена проблема #10636. #10640 (alexey-milovidov).
  • Выводить сообщение, если версия clickhouse-client новее, чем clickhouse-server. #10627 (alexey-milovidov).
  • Добавлена поддержка запроса INSERT INTO [db.]table WATCH. #10498 (vzakaznikov).
  • Добавлена возможность передавать параметр quota_key в clickhouse-client. Тем самым закрывается #10227. #10270 (alexey-milovidov).

Повышение производительности

  • Добавлена возможность нескольким репликам одновременно назначать слияния, мутации, удаление, перемещение и замену разделов. Это закрывает #10367. #11639 (alexey-milovidov) #11795 (alexey-milovidov).
  • Оптимизация выполнения GROUP BY с учётом ключа сортировки таблицы, включаемая с помощью настройки optimize_aggregation_in_order. #9113 (dimarub2000).
  • Запросы SELECT с FINAL выполняются параллельно. Добавлена настройка max_final_threads для ограничения числа используемых потоков. #10463 (Nikolai Kochetov).
  • Улучшена производительность запросов INSERT с помощью INSERT SELECT или INSERT через clickhouse-client в случаях, когда создаются небольшие блоки (типичный случай при параллельном разборе). Исправлено в #11275. Исправлена проблема, из-за которой ограничения CONSTRAINT не работали для полей с DEFAULT. Исправлено в #11273. Исправлена проблема, при которой ограничения CONSTRAINT игнорировались для временных (TEMPORARY) таблиц. Исправлено в #11274. #11276 (alexey-milovidov).
  • Оптимизация, устраняющая агрегатные функции min/max/any по ключам GROUP BY в секции SELECT, управляется настройкой optimize_aggregators_of_group_by_keys. #11667 (xPoSx). #11806 (Azat Khuzhin).
  • Новая оптимизация, выносящая все операции за пределы функции any, включается опцией optimize_move_functions_out_of_any #11529 (Ruslan).
  • Улучшена производительность clickhouse-client в интерактивном режиме при использовании форматов Pretty. В предыдущих версиях существенная часть времени могла тратиться на вычисление видимой ширины строк в UTF-8. Это закрывает #11323. #11323 (alexey-milovidov).
  • Повышена производительность запросов с ORDER BY и небольшим LIMIT (меньше, чем max_block_size). #11171 (Albert Kidrachev).
  • Добавлено определение возможностей процессора во время выполнения для выбора и вызова наилучшей реализации функции. Добавлена поддержка генерации кода под несколько целевых платформ. Это закрывает #1017. #10058 (DimasKovas).
  • По умолчанию включено mlock для бинарного файла ClickHouse. Это предотвращает выгрузку исполняемого файла ClickHouse из памяти при высокой нагрузке на ввод-вывод. #11139 (alexey-milovidov).
  • Выполняйте запросы с агрегатной функцией sum и без ключей GROUP BY, чтобы они выполнялись в несколько раз быстрее. #10992 (alexey-milovidov).
  • Улучшена поразрядная сортировка (используемая в ORDER BY с простыми ключами) за счёт удаления некоторых избыточных перемещений данных. #10981 (Arslan Gumerov).
  • Сортировать более крупные фрагменты левой таблицы в MergeJoin. Буферизовать блоки левой таблицы в памяти. Добавлена настройка partial_merge_join_left_table_buffer_bytes для управления размерами буферов блоков левой таблицы. #10601 (Artem Zuikov).
  • Удалены повторяющиеся операторы ORDER BY и DISTINCT в подзапросах; эта оптимизация включается параметром optimize_duplicate_order_by_and_distinct #10067 (Mikhail Malafeev).
  • Эта оптимизация устраняет вычисление функций для остальных ключей в секции GROUP BY, включается параметром optimize_group_by_function_keys #10051 (xPoSx).
  • Новая оптимизация, выносящая арифметические операции за пределы агрегатных функций, включается с помощью настройки optimize_arithmetic_operations_in_aggregate_functions #10047 (Ruslan).
  • Использовать HTTP‑клиент для S3 на базе Poco вместо curl. Это улучшит производительность и снизит потребление памяти хранилищем S3 и табличными функциями. #11230 (Pavel Kovalenko).
  • Исправлена проблема с производительностью Kafka, вызванная перепланированием на основе лимитов, которые всегда применялись. #11149 (filimonov).
  • Включена настройка percpu_arena:percpu для jemalloc (это уменьшит фрагментацию памяти из‑за пула потоков). #11084 (Azat Khuzhin).
  • Оптимизировано использование памяти при чтении ответа HTTP‑клиента S3. #11561 (Pavel Kovalenko).
  • Настроены параметры Kafka по умолчанию для повышения производительности. #11388 (filimonov).

Экспериментальная функциональность

  • Добавлены типы данных Point (Tuple(Float64, Float64)) и Polygon (Array(Array(Tuple(Float64, Float64))). #10678 (Alexey Ilyukhov).
  • Добавлена функция hasSubstr, которая позволяет искать подпоследовательности в массивах. Примечание: эта функция, вероятно, будет переименована без дополнительного уведомления. #11071 (Ryad Zenine).
  • Добавлена поддержка OpenCL и алгоритм битонической сортировки (bitonic sort), который может использоваться для сортировки целочисленных типов данных в одном столбце. ClickHouse необходимо собирать с флагом -DENABLE_OPENCL=1. Чтобы использовать алгоритм битонической сортировки вместо других, необходимо установить значение bitonic_sort для параметра настройки special_sort и убедиться, что OpenCL доступен. Эта возможность не улучшает производительность или что-либо ещё, она предоставлена только как пример и для демонстрационных целей. Вероятно, она будет удалена в ближайшем будущем, если не будет дальнейшей разработки в этом направлении. #10232 (Ri).

Улучшения сборки/тестирования/упаковки

  • Включить clang-tidy для программ и утилит. #10991 (alexey-milovidov).
  • Удалена зависимость от tzdata: теперь ошибка не возникает, даже если каталог /usr/share/zoneinfo отсутствует. Обратите внимание, что все часовые пояса в ClickHouse работают даже без установленного в системе tzdata. #11827 (alexey-milovidov).
  • Добавлены стресс‑тесты с MSan и UBSan. Обратите внимание, что у нас уже есть MSan и UBSan для функциональных тестов, при этом "стресс‑тест" — это другой тип тестов. #10871 (alexey-milovidov).
  • Выводить идентификатор сборки компилятора в сообщениях о сбоях. Это позволит с большей уверенностью определить, какой бинарный файл аварийно завершил работу. Добавлена новая функция buildId. #11824 (alexey-milovidov).
  • Добавлен тест, который гарантирует, что мутации продолжают работать после выполнения запроса FREEZE. #11820 (alexey-milovidov).
  • Не допускать тесты с подстрокой "fail" в их именах, так как это затрудняет просмотр результатов тестов в браузере при использовании Ctrl+F для поиска "fail". #11817 (alexey-milovidov).
  • Удалены неиспользуемые импорты из HTTPHandlerFactory. #11660 (Bharat Nallan).
  • Добавлена случайная выборка экземпляров, на которых выполняется copier. Это необходимо, чтобы избежать ошибки Too many simultaneous queries. Также увеличен таймаут и уменьшена вероятность сбоя. #11573 (Nikita Mikhaylov).
  • Исправлено пропущенное include. #11525 (Matwey V. Kornilov).
  • Ускорена сборка за счёт удаления старых примерных программ. Также найден осиротевший функциональный тест. #11486 (alexey-milovidov).
  • Увеличен размер ccache для сборок в CI. #11450 (alesapin).
  • Оставить только unit_tests_dbms в deb-пакете. #11429 (Ilya Yatsishin).
  • Обновлена библиотека librdkafka до версии 1.4.2. #11256 (filimonov).
  • Рефакторинг файлов сборки CMake. #11390 (Ivan).
  • Исправлены несколько нестабильных интеграционных тестов. #11355 (alesapin).
  • Добавлена поддержка запуска модульных тестов под UBSan. #11345 (alexey-milovidov).
  • Удалён лишний таймаут из интеграционного теста test_insertion_sync_fails_with_timeout. #11343 (alesapin).
  • Улучшена проверка на зависшие запросы в clickhouse-test. #11321 (alexey-milovidov).
  • Выводить предупреждение, если сервер был собран в debug-режиме или с включёнными санитайзерами. #11304 (alexey-milovidov).
  • Теперь clickhouse-test проверяет, доступен ли сервер, перед запуском тестов. #11285 (alesapin).
  • Исправлен потенциально нестабильный тест 00731_long_merge_tree_select_opened_files.sh. Он падает нечасто, но во время экспериментов с ThreadFuzzer мы обнаружили в нём потенциальное состояние гонки (#9814). Пример см. по ссылке. #11270 (alexey-milovidov).
  • Повторять тест в CI, если выполнение curl завершилось по тайм‑ауту. Такие ситуации возможны из‑за системных зависаний на 10+ секунд, которые типичны для нашей CI-инфраструктуры. Это исправление для #11267. #11268 (alexey-milovidov).
  • Добавлен тест для движка таблицы Join от @donmikel. Это закрывает #9158. #11265 (alexey-milovidov).
  • Исправлены несколько незначительных ошибок в модульных тестах. #11262 (alesapin).
  • Теперь части команды компоновки для библиотеки cctz не будут перемешиваться с другими библиотеками. #11213 (alesapin).
  • Компонент /programs/server разделён на программу и библиотеку. #11186 (Ivan).
  • Улучшены скрипты сборки protobuf и gRPC. #11172 (Vitaly Baranov).
  • Включён ранее не работавший тест производительности. #11158 (alexey-milovidov).
  • Создайте корневой бакет S3 для тестов перед запуском любого экземпляра CH. #11142 (Pavel Kovalenko).
  • Добавлен тест производительности для неконстантных многоугольников. #11141 (alexey-milovidov).
  • Исправление теста 00979_live_view_watch_continuous_aggregates. #11024 (vzakaznikov).
  • Добавлена возможность запускать ZooKeeper в интеграционных тестах поверх tmpfs. #11002 (alesapin).
  • Ожидание odbc-bridge с экспоненциальной задержкой. Предыдущее время ожидания в 200 мс оказалось недостаточным в нашей среде CI. #10990 (alexey-milovidov).
  • Исправлен недетерминированный тест. #10989 (alexey-milovidov).
  • Добавлен тест на пустые внешние данные. #10926 (alexey-milovidov).
  • База данных пересоздаётся для каждого теста. Это улучшает изоляцию тестов. #10902 (alexey-milovidov).
  • Добавлено больше assert-ов в код столбцов. #10833 (alexey-milovidov).
  • Улучшена интеграция с санитайзерами. Теперь в сообщении о сбое санитайзера выводится информация о query_id. #10832 (alexey-milovidov).
  • Исправлено очевидное состояние гонки в проверке «Split build smoke test». #10820 (alexey-milovidov).
  • Исправлено ложное срабатывание MSan в MergeTreeIndexFullText. Проблема впервые проявилась в #9968. #10801 (alexey-milovidov).
  • Добавлено подавление MSan для клиентской библиотеки MariaDB. #10800 (alexey-milovidov).
  • Сборка gRPC не могла найти файлы protobuf, make-файл изменён с добавлением корректной ссылки. #10794 (mnkonkova).
  • Включить дополнительные предупреждения (-Weverything) для модулей base, utils и programs. Обратите внимание, что для большей части кода они уже включены. #10779 (alexey-milovidov).
  • Механизм подавления предупреждений из библиотек по ошибке был сделан публичным в #10396. #10776 (alexey-milovidov).
  • Восстановлен патч, случайно удалённый в #10396. #10774 (alexey-milovidov).
  • Исправление ошибок в тестах производительности, часть 2. #10773 (alexey-milovidov).
  • Исправлены ошибки в тестах производительности. #10766 (alexey-milovidov).
  • Обновлены кросс-сборки для использования компилятора clang-10. #10724 (Ivan).
  • Обновлена инструкция по установке RPM-пакетов. Изменение предложено Денисом (логин в Telegram: @ldviolet) и реализовано Аркадием Шейном. #10707 (alexey-milovidov).
  • Исправление теста tests/queries/0_stateless/01246_insert_into_watch_live_view.py. #10670 (vzakaznikov).
  • Исправлен и повторно включён тест 00979_live_view_watch_continuous_aggregates.py. #10658 (vzakaznikov).
  • Исправлена проблема OOM в стресс-тесте ASan. #10646 (alexey-milovidov).
  • Исправлено сообщение UBSan (прибавление нуля к nullptr) в HashTable, которое появилось после миграции на clang-10. #10638 (alexey-milovidov).
  • Удалён внешний вызов компоновщика ld (bfd) при обработке tzdata во время компиляции. #10634 (alesapin).
  • Добавлена возможность использовать lld для компоновки блобов (ресурсов). #10632 (alexey-milovidov).
  • Исправлено предупреждение UBSan в библиотеке LZ4. #10631 (alexey-milovidov). См. также https://github.com/lz4/lz4/issues/857
  • Обновлён LZ4 до последней ветки разработки (dev). #10630 (alexey-milovidov).
  • Добавлен автоматически сгенерированный машиночитаемый файл со списком стабильных версий. #10628 (alexey-milovidov).
  • Исправлена проверка версии capnproto для capnp::UnalignedFlatArrayMessageReader. #10618 (Matwey V. Kornilov).
  • Снижено потребление памяти в тестах. #10617 (alexey-milovidov).
  • Исправление жестко прописанных тайм-аутов в новых тестах Live View. #10604 (vzakaznikov).
  • Увеличен таймаут при открытии клиента в tests/queries/0_stateless/helpers/client.py. #10599 (vzakaznikov).
  • Включён ThinLTO для сборок Clang; продолжение #10435. #10585 (Amos Bird).
  • Добавлены фаззеры и выполнена подготовка к интеграции с oss-fuzz. #10546 (kyprizel).
  • Исправлена сборка для FreeBSD. #10150 (Ivan).
  • Добавлена новая сборка для тестирования запросов с использованием фреймворка pytest. #10039 (Ivan).

Релиз ClickHouse v20.4

Релиз ClickHouse v20.4.8.99-stable 2020-08-10

Исправление ошибки

  • Исправлена ошибка в функции parseDateTimeBestEffort, которая возникала при передаче значения Unix timestamp в качестве аргумента. Это устраняет #13362. #13441 (alexey-milovidov).
  • Исправлены потенциальные проблемы с низкой производительностью и слегка некорректные результаты агрегатных функций uniqExact, topK, sumDistinct и подобных, вызываемых для типов Float со значениями NaN. Это также приводило к срабатыванию assert в отладочной сборке. Это исправляет #12491. #13254 (alexey-milovidov).
  • Исправлена работа функции if с nullable constexpr в качестве условия, которое не является литералом NULL. Исправляет #12463. #13226 (alexey-milovidov).
  • Исправлено срабатывание assert в функции arrayElement в случае, когда элементы массива имеют тип Nullable и индекс массива также имеет тип Nullable. Это исправляет #12172. #13224 (alexey-milovidov).
  • Исправлен некорректный анализ индекса при использовании функций. Это могло приводить к ошибочному отсечению частей данных при чтении из таблиц MergeTree. Исправляет #13060. Исправляет #12406. #13081 (Anton Popov).
  • Исправлено избыточное ограничение числа потоков для выборок из локальной реплики. #12840 (Nikolai Kochetov).
  • Исправлена возможная лишняя строка с переполнением, которая могла появляться в результатах запросов WITH TOTALS. #12747 (Nikolai Kochetov).
  • Исправлена проблема с производительностью при работе с большими кортежами, которые в конструкции IN интерпретируются как функции. На случай, когда по какой-то непонятной причине пользователь пишет WHERE x IN tuple(1, 2, ...) вместо WHERE x IN (1, 2, ...). #12700 (Anton Popov).
  • Исправлено отслеживание памяти для input_format_parallel_parsing (за счёт присоединения потока к группе). #12672 (Azat Khuzhin).
  • Исправлено: теперь допускается проталкивание предиката, когда подзапрос содержит предложение WITH. #12293 #12663 (Winter Zhang).
  • Исправлена #10572 ошибка в индексе фильтра Блума при использовании константного выражения. #12659 (Winter Zhang).
  • Исправлено падение (SIGSEGV) в StorageKafka, возникающее при недоступности брокера и в других случаях. #12658 (Azat Khuzhin).
  • Добавлена поддержка функции if с аргументами типа Array(UUID), что исправляет проблему #11066. #12648 (alexey-milovidov).
  • Исправлена гонка состояний во внешних словарях с layout'ом cache, которая могла приводить к сбою сервера. #12566 (alesapin).
  • Удалены данные для таблиц типа Distributed (блоки, поступившие из асинхронных операторов INSERT) при выполнении DROP TABLE. #12556 (Azat Khuzhin).
  • Исправлена ошибка, из-за которой старые части данных повреждались после запроса ALTER DELETE при enable_mixed_granularity_parts=1. Исправлена #12536. #12543 (alesapin).
  • Улучшено сообщение об ошибке для функции in при неверном числе аргументов. #12529 (Anton Popov).
  • Исправлена проблема производительности при чтении из компактных частей. #12492 (Anton Popov).
  • Исправлен сбой в JOIN со словарём, когда соединение выполняется по выражению над ключом словаря: t JOIN dict ON expr(dict.id) = t.id. Для этого случая отключена оптимизация соединения со словарём. #12458 (Artem Zuikov).
  • Исправлена возможная ошибка сегментации (segfault) при использовании StorageMerge. Closes #12054. #12401 (tavplubix).
  • Исправлен порядок столбцов в модификаторе WITH FILL. Ранее порядок столбцов в операторе ORDER BY не учитывался. #12306 (Anton Popov).
  • Избегает возникновения исключения «bad cast» при наличии выражения, которое фильтрует данные по виртуальным столбцам (таким как _table в таблицах Merge) или по столбцам индексов в системных таблицах, например при фильтрации по имени базы данных при запросе к system.tables, если это выражение возвращает тип Nullable. Исправляет #12166. #12305 (alexey-milovidov).
  • Показывать ошибку при неудачной загрузке TrieDictionary. #12290 (Vitaly Baranov).
  • Функция arrayFill некорректно работала для пустых массивов, что могло приводить к сбоям. Это исправляет #12263. #12279 (alexey-milovidov).
  • Реализованы преобразования к общему типу для типов LowCardinality. Это позволяет выполнять операцию UNION ALL над таблицами со столбцами типа LowCardinality и столбцами других типов. Исправляет #8212. Исправляет #4342. #12275 (alexey-milovidov).
  • Исправлено поведение, при котором при нескольких последовательных вставках в StorageFile заголовок для некоторых специальных типов записывался несколько раз. Это исправило #6155. #12197 (Nikita Mikhaylov).
  • Исправлены логические функции для значений типа UInt8 в случаях, когда они не равны 0 или 1. #12196 (Alexander Kazakov).
  • Лимит max_memory_usage* ограничен объёмом резидентной памяти процесса. #12182 (Azat Khuzhin).
  • Исправлена проверка аргументов dictGet при устранении инъективных функций из GROUP BY. #12179 (Azat Khuzhin).
  • Не разделяйте имя таблицы источника словаря на схему и собственно имя таблицы, если ODBC‑подключение не поддерживает схемы. #12165 (Vitaly Baranov).
  • Исправлена некорректная логика в ALTER DELETE, которая приводила к удалению записей, когда условие оценивалось как NULL. Это исправляет #9088. Это закрывает #12106. #12153 (alexey-milovidov).
  • Исправлено преобразование запроса, отправляемого во внешние СУБД (например, MySQL, ODBC) при наличии псевдонимов. Это исправляет #12032. #12151 (alexey-milovidov).
  • Исправлено потенциальное переполнение при целочисленном делении. Это исправляет #12119. #12140 (alexey-milovidov).
  • Исправлена потенциальная возможность бесконечного цикла в greatCircleDistance и geoDistance. Это устраняет #12117. #12137 (alexey-milovidov).
  • Нормализована обработка pid-файла. В предыдущих версиях сервер мог отказаться запускаться, если он был принудительно завершён без корректного выключения и при этом существовал другой процесс с тем же pid, что и у ранее запущенного экземпляра сервера. Кроме того, pid-файл мог быть удалён при неудачном запуске сервера, даже если другой сервер продолжал работать. Это исправляет #3501. #12133 (alexey-milovidov).
  • Исправлена обработка зависимости таблицы с движком ENGINE=Dictionary от словаря. Тем самым исправлены #10994 и #10397. #12116 (Vitaly Baranov).
  • Исправлена проблема с производительностью запросов SELECT с UNION, вызванная неверным ограничением на общее число потоков. Исправлено #12030. #12103 (Nikolai Kochetov).
  • Исправлен segfault при работе с комбинаторами -StateResample. #12092 (Anton Popov).
  • Исправлены случаи, когда метрики result_rows и result_bytes в system.quey_log для запросов SELECT были пустыми. Исправляет #11595. #12089 (Nikolai Kochetov).
  • Устранено ненужное ограничение на число потоков для запросов SELECT к VIEW. Исправлена #11937. #12085 (Nikolai Kochetov).
  • Исправлена возможная аварийная остановка при использовании некорректного типа для PREWHERE. Исправлены #12053, #12060. #12060 (Nikolai Kochetov).
  • Исправлена ошибка Expected single dictionary argument for function при использовании функции defaultValueOfArgumentType с типом LowCardinality. Исправляет #11808. #12056 (Nikolai Kochetov).
  • Исправлена ошибка Cannot capture column для функций высшего порядка с аргументом Tuple(LowCardinality), тем самым исправлена #9766. #12055 (Nikolai Kochetov).
  • Теперь разбор метаданных таблиц при загрузке базы данных выполняется параллельно. Это устраняет проблему медленного запуска сервера при большом количестве таблиц. #12045 (tavplubix).
  • Агрегатная функция topK теперь возвращает Enum для типов Enum. Это исправляет #3740. #12043 (alexey-milovidov).
  • Исправлена проверка ограничений: теперь она убеждается, что ограничение является константным выражением. Это исправляет #11360. #12042 (alexey-milovidov).
  • Исправлено некорректное сравнение кортежей со столбцами типа Nullable. Исправлена ошибка #11985. #12039 (Nikolai Kochetov).
  • Исправлен расчёт прав доступа, когда allow_introspection_functions=0. #12031 (Vitaly Baranov).
  • Исправлены некорректный результат и потенциальное аварийное завершение работы при вызове функции if с аргументами типа FixedString различных размеров. Это исправляет #11362. #12021 (alexey-milovidov).
  • Запрос, в котором функция neighbor является единственным возвращаемым выражением, может вернуть пустой результат при вызове функции со смещением -9223372036854775808. Это исправляет #11367. #12019 (alexey-milovidov).
  • Исправлен расчёт прав доступа при allow_ddl=0. #12015 (Vitaly Baranov).
  • Исправлено потенциальное переполнение размера массива в функции generateRandom, которое могло приводить к падению. Это исправляет #11371. #12013 (alexey-milovidov).
  • Исправлено потенциальное исключение с плавающей запятой. Это закрывает #11378. #12005 (alexey-milovidov).
  • Исправлено неверное имя настройки в сообщении журнала при запуске сервера. #11997 (alexey-milovidov).
  • Исправлена ошибка Query parameter was not set в формате Values. Исправлена проблема #11918. #11936 (tavplubix).
  • Сохранять алиасы при подстановках в запрос (параметризованные запросы). Исправляет #11914. #11916 (alexey-milovidov).
  • Исправлена ошибка, из-за которой не выполнялись перемещения при изменении политики хранения с политики по умолчанию на другую. #11893 (Vladimir Chebotarev).
  • Исправлено потенциальное исключение с плавающей точкой при разборе DateTime64. Это исправляет #11374. #11875 (alexey-milovidov).
  • Исправлен учёт памяти в HTTP-интерфейсе (может быть значимым при wait_end_of_query=1). #11840 (Azat Khuzhin).
  • Разбирать метаданные, хранящиеся в ZooKeeper, прежде чем выполнять проверку на равенство. #11739 (Azat Khuzhin).

Улучшение производительности

  • Индекс не использовался для оператора IN с литералами, регрессия производительности возникла примерно в v19.3. Это исправляет #10574. #12062 (nvartolomei).

Улучшения сборки/тестирования/упаковки

  • Установить ca-certificates перед первым apt-get update в Dockerfile. #12095 (Ivan Blinkov).

Релиз ClickHouse v20.4.6.53-stable 2020-06-25

Исправление ошибки

  • Исправлен редкий сбой, возникавший при использовании столбца типа Nullable в условии PREWHERE. Продолжение #11608. #11869 (Nikolai Kochetov).
  • Запрещено использование arrayJoin внутри функций высшего порядка. Оно приводило к нарушению синхронизации протокола. Это исправляет #3933. #11846 (alexey-milovidov).
  • Исправлена ошибка при сравнении FixedString с константой типа String. Исправление закрывает #11393. Ошибка появилась в версии 20.4. #11828 (alexey-milovidov).
  • Исправлен неверный результат функции if() при наличии значений NULL в условии. #11807 (Artem Zuikov).
  • Исправлена проблема чрезмерного использования потоков при выполнении запросов. #11788 (Nikolai Kochetov).
  • Исправлено неожиданное поведение запросов вида SELECT *, xyz.*, которые выполнялись успешно, хотя должна была возникать ошибка. #11753 (hexiaoting).
  • Теперь операции fetch реплик будут отменяться во время изменения метаданных. #11744 (alesapin).
  • Исправлена ошибка LOGICAL_ERROR, вызванная некорректным выводом типов сложных литералов во входном формате Values. #11732 (tavplubix).
  • Исправлено поведение ORDER BY ... WITH FILL над константными столбцами. #11697 (Anton Popov).
  • Передавать корректные значения таймаутов при взаимодействии с мостом XDBC. Ранее таймауты не учитывались при проверке его работоспособности и получении метаинформации. #11690 (alexey-milovidov).
  • Исправлено использование LIMIT n WITH TIES совместно с оператором ORDER BY, содержащим псевдонимы. #11689 (Anton Popov).
  • Исправлена ошибка, приводившая к некорректному состоянию system.mutations. Она могла показывать, что вся мутация уже завершена, хотя на сервере все еще оставались задачи MUTATE_PART в очереди репликации, и он продолжал пытаться их выполнить. Это исправляет #11611. #11681 (alesapin).
  • Добавлена поддержка регулярных выражений с флагами без учета регистра. Что исправляет #11101 и #11506. #11649 (alexey-milovidov).
  • Удалена оптимизация для тривиального запроса count, если включена построчная безопасность (row-level security). В предыдущих версиях пользователь получал общее количество записей в таблице вместо отфильтрованного количества. Это исправляет #11352. #11644 (alexey-milovidov).
  • Исправлены блум-фильтры для типа String (индексы пропуска данных). #11638 (Azat Khuzhin).
  • Исправлен редкий сбой, вызванный использованием столбца Nullable в условии PREWHERE. (Вероятно, это как‑то связано с #11572). #11608 (Nikolai Kochetov).
  • Исправлена ошибка Block structure mismatch для запросов с выборочным чтением из таблицы Buffer. #11602 (Nikolai Kochetov).
  • Исправлен неверный код выхода clickhouse-client при exception.code() % 256 = 0. #11601 (filimonov).
  • Исправлена тривиальная ошибка в сообщении журнала при запуске сервера («Mark cache size was lowered»). Это закрывает #11399. #11589 (alexey-milovidov).
  • Исправлена ошибка Size of offsets does not match size of column в запросах с PREWHERE column in (subquery) и ARRAY JOIN. #11580 (Nikolai Kochetov).
  • Исправлен редкий сегфолт в SHOW CREATE TABLE. Исправляет #11490. #11579 (tavplubix).
  • Все запросы в рамках одной HTTP-сессии имели одинаковый query_id. Исправлено. #11578 (tavplubix).
  • Теперь docker-контейнер с clickhouse-server будет отдавать предпочтение IPv6 при проверке доступности сервера. #11550 (Ivan Starkov).
  • Исправлены значения shard_num/replica_num для <node>, из-за чего некорректно работал use_compact_format_in_distributed_parts_names. #11528 (Azat Khuzhin).
  • Исправлена гонка, которая могла приводить к исключению при удалении таблицы. Решение немного нетривиальное, но абсолютно безопасное. Если хотите объяснение, просто напишите мне в Telegram. #11523 (alesapin).
  • Исправлена утечка памяти, возникающая при возникновении исключения в процессе агрегирования с функциями -State. Это исправление закрывает #8995. #11496 (alexey-milovidov).
  • Если индекс пропуска данных зависит от столбцов, которые будут изменяться во время фонового слияния (для SummingMergeTree, AggregatingMergeTree, а также для TTL GROUP BY), он вычислялся некорректно. Эта проблема исправлена переносом вычисления индекса на этап после слияния, чтобы индекс вычислялся по объединённым данным. #11162 (Azat Khuzhin).
  • Удалить старые патчи для libunwind. https://github.com/ClickHouse-Extras/libunwind/commit/500aa227911bd185a94bfc071d68f4d3b03cb3b1#r39048012 Это позволяет отключить -fno-omit-frame-pointer в сборках clang, что в среднем улучшает производительность как минимум на 1%. #10761 (Amos Bird).
  • Исправлена работа первичного ключа, обернутого в функцию, при использовании модификатора 'FINAL' и оптимизации 'ORDER BY'. #10715 (Anton Popov).

Улучшения сборки/тестирования/упаковки

  • Исправлено несколько незначительных ошибок в модульных тестах. #11262 (alesapin).
  • Исправлено ложное срабатывание MSan в MergeTreeIndexFullText. Проблема впервые появилась в #9968. #10801 (alexey-milovidov).

Релиз ClickHouse v20.4.5.36-stable от 2020-06-10

Исправление ошибок

  • Исправлена ошибка Data compressed with different methods, которая могла возникать при включённом min_bytes_to_use_direct_io, когда PREWHERE активен и используется SAMPLE или большое число потоков. Это исправляет #11539. #11540 (alexey-milovidov).
  • Исправлено возвращаемое кодеками значение сжатого размера. #11448 (Nikolai Kochetov).
  • Исправлена ошибка, приводившая к падению сервера, когда у столбца задан кодек сжатия с нелитеральными аргументами. Исправляет #11365. #11431 (alesapin).
  • Исправлена функция pointInPolygon при использовании NaN в качестве точки. Исправляет проблему #11375. #11421 (Alexey Ilyukhov).
  • Исправлена потенциальная попытка чтения неинициализированной памяти при завершении работы MergeTree, если таблица не была успешно создана. #11420 (alexey-milovidov).
  • Исправлена функция geohashesInBox для аргументов, выходящих за допустимый диапазон широты/долготы. #11403 (Vasily Nemkov).
  • Исправлена возможная ошибка Pipeline stuck для запросов с внешней сортировкой и LIMIT. Исправление для #11359. #11366 (Nikolai Kochetov).
  • Удалена лишняя блокировка при отправке частей в ReplicatedMergeTree. #11354 (alesapin).
  • Исправлена работа \G (вертикальный вывод) в многострочном режиме clickhouse-client. Это закрывает #9933. #11350 (alexey-milovidov).
  • Исправлена потенциальная ошибка сегментации при использовании базы данных Lazy. #11348 (alexey-milovidov).
  • Исправлен сбой в quantilesExactWeightedArray. #11337 (Nikolai Kochetov).
  • Теперь слияния останавливаются перед изменением метаданных в запросах ALTER. #11335 (alesapin).
  • Снова сделана параллельной запись в MATERIALIZED VIEW при настройке parallel_view_processing = 1. Исправляет #10241. #11330 (Nikolai Kochetov).
  • Исправлена обработка visitParamExtractRaw, когда извлечённый JSON содержит строки с несбалансированными символами { или [. #11318 (Ewout).
  • Исправлено очень редкое состояние гонки в ThreadPool. #11314 (alexey-milovidov).
  • Исправлена незначительная гонка данных в clickhouse-copier. Обнаружена интеграционными тестами. #11313 (alexey-milovidov).
  • Исправлена возможная работа с неинициализированной памятью при преобразовании. Пример: SELECT toIntervalSecond(now64()). #11311 (alexey-milovidov).
  • Исправлена проблема, при которой анализ индекса не работал, если первичный ключ таблицы содержит столбец типа Array и запрос фильтрует по этому столбцу с использованием функций empty или notEmpty. Это исправляет #11286. #11303 (alexey-milovidov).
  • Исправлена ошибка, при которой оценка скорости выполнения запроса могла быть некорректной, и ограничение min_execution_speed могло не работать или работать неправильно, если запрос ограничивается настройками max_network_bandwidth, max_execution_speed или priority. Изменено значение по умолчанию для timeout_before_checking_execution_speed на ненулевое, потому что иначе настройки min_execution_speed и max_execution_speed не оказывают никакого влияния. Это исправляет #11297. Это исправляет #5732. Это исправляет #6228. Улучшено удобство использования: устранено объединение сообщения об исключении с индикатором прогресса в clickhouse-client. #11296 (alexey-milovidov).
  • Исправлен сбой при вызове SET DEFAULT ROLE с некорректными аргументами. Это устраняет #10586. #11278 (Vitaly Baranov).
  • Исправлена ошибка, приводившая к сбою при чтении некорректных данных в формате Protobuf. Тем самым исправлены #5957 и #11203. #11258 (Vitaly Baranov).
  • Исправлена ошибка, из-за которой cache-dictionary мог возвращать значение по умолчанию вместо корректного (когда все ключи просрочены). Это затрагивает только строковые поля. #11233 (Nikita Mikhaylov).
  • Исправлена ошибка Block structure mismatch in QueryPipeline при чтении из VIEW с константами во внутреннем запросе. Исправление для #11181. #11205 (Nikolai Kochetov).
  • Исправлено возможное исключение Invalid status for associated output. #11200 (Nikolai Kochetov).
  • Исправлена возможная ошибка Cannot capture column для функций высшего порядка, использующих захваченный аргумент типа Array(Array(LowCardinality)). #11185 (Nikolai Kochetov).
  • Исправлена обработка шаблонов S3 (globbing), которая могла приводить к сбоям при наличии более чем 1000 ключей, а также на некоторых бэкендах. #11179 (Vladimir Chebotarev).
  • Если индекс пропуска данных зависит от столбцов, которые будут изменены во время фонового слияния (для SummingMergeTree, AggregatingMergeTree, а также для TTL GROUP BY), он вычислялся некорректно. Эта проблема исправлена тем, что вычисление индекса перенесено на этап после слияния, чтобы индекс рассчитывался по уже объединённым данным. #11162 (Azat Khuzhin).
  • Исправлена проблема с производительностью Kafka, связанная с перепланировками на основе лимитов, которые всегда применялись. #11149 (filimonov).
  • Исправление зависания, которое иногда происходило при выполнении DROP таблицы с движком Kafka (или при перезапуске сервера). #11145 (filimonov).
  • Исправлено чрезмерное резервирование потоков для простых запросов (оптимизация по снижению количества потоков, частично нарушенная после изменений в конвейере). #11114 (Azat Khuzhin).
  • Исправлена оптимизация предикатов для распределённых запросов (enable_optimize_predicate_expression=1) в запросах с секцией HAVING (т.е. когда требуется фильтрация на сервере-инициаторе) за счёт сохранения порядка выражений, чего достаточно для устранения проблемы, а также за счёт принудительного использования агрегатором имён столбцов вместо индексов. Исправляет: #10613, #11413. #10621 (Azat Khuzhin).

Улучшения сборки/тестирования/упаковки

  • Исправлено несколько нестабильных интеграционных тестов. #11355 (alesapin).

Релиз ClickHouse v20.4.4.18-stable 2020-05-26

Изменений по сравнению с v20.4.3.16-stable нет.

Релиз ClickHouse v20.4.3.16-stable 2020-05-23

Исправление ошибок

  • Удалено логирование при финализации мутаций, если в результате ничего не было финализировано. #11109 (alesapin).
  • Исправлена утечка памяти в registerDiskS3. #11074 (Pavel Kovalenko).
  • Исправлена возможная потеря данных при остановке таблицы с движком Kafka. #11048 (filimonov).
  • Исправлены ошибки при обработке аргументов функции parseDateTime64BestEffort. #11038 (Vasily Nemkov).
  • Исправлена крайне редкая потенциальная ошибка типа use-after-free в MergeTree, возникавшая, если таблица не была успешно создана. #10986, #10970 (alexey-milovidov).
  • Исправлена обработка метаданных (относительный путь для переименования) и данных (относительный путь для символьной ссылки) для базы данных Atomic. #10980 (Azat Khuzhin).
  • Исправлен сбой сервера при одновременном выполнении запросов ALTER и DROP DATABASE с движком базы данных Atomic. #10968 (tavplubix).
  • Исправлен неверный размер сырых данных в методе getRawData(). #10964 (Igr).
  • Исправлена несовместимость двухуровневой агрегации между версиями 20.1 и более ранними. Эта несовместимость возникает, когда на инициирующем узле и удалённых узлах используются разные версии ClickHouse, размер результата GROUP BY большой, а агрегация выполняется по одному полю типа String. Это приводит к появлению нескольких необъединённых строк для одного и того же ключа в результате. #10952 (alexey-milovidov).
  • Исправлена передача частично записанных файлов через DistributedBlockOutputStream. #10940 (Azat Khuzhin).
  • Исправлено падение при выполнении SELECT count(notNullIn(NULL, [])). #10920 (Nikolai Kochetov).
  • Исправлено зависание, которое иногда происходило во время выполнения операции DROP табличного движка Kafka (или при перезапусках сервера). #10910 (filimonov).
  • Исправлена проблема, из-за которой было невозможно выполнять несколько ALTER RENAME, таких как a TO b, c TO a. #10895 (alesapin).
  • Исправлена возможная гонка, которая могла возникать при получении результата состояния агрегатной функции в нескольких потоках для одного и того же столбца. Единственный способ, при котором это может произойти, — использование функции finalizeAggregation при чтении из таблицы с движком Memory, хранящим состояние AggregateFunction для функций quantile*. #10890 (Nikolai Kochetov).
  • Исправлена обратная совместимость с кортежами в таблицах Distributed. #10889 (Anton Popov).
  • Исправлено возникновение SIGSEGV в StringHashTable, если запрашиваемого ключа не существует. #10870 (Azat Khuzhin).
  • Исправлены зависания WATCH после удаления таблицы LiveView из базы данных с движком Atomic. #10859 (tavplubix).
  • Исправлена ошибка в ReplicatedMergeTree, которая могла приводить к зависанию некоторых запросов ALTER с OPTIMIZE в ожидании реплики, уже ставшей неактивной. #10849 (tavplubix).
  • Теперь ограничения обновляются при переименовании столбца, участвующего в выражении CONSTRAINT. Исправлено #10844. #10847 (alesapin).
  • Исправлено потенциальное чтение неинициализированной памяти в кеш-словаре. #10834 (alexey-milovidov).
  • Исправлен порядок столбцов после Block::sortColumns(). #10826 (Azat Khuzhin).
  • Исправлена проблема с мостом ODBC, возникавшая, когда не требовалось заключать идентификаторы в кавычки. Исправляет #7984. #10821 (alexey-milovidov).
  • Исправлены отчёты UBSan и MSan для DateLUT. #10798 (alexey-milovidov).
  • Исправлено некорректное приведение типов в условиях по ключу. Исправляет #6287. #10791 (Andrew Onyshchuk).
  • Исправлено поведение parallel_view_processing. Теперь все без исключения вставки в MATERIALIZED VIEW должны завершаться, даже если произошло исключение. Исправляет #10241. #10757 (Nikolai Kochetov).
  • Исправлены комбинаторы -OrNull и -OrDefault при совместном использовании с -State. #10741 (hcz).
  • Исправлено потенциальное переполнение буфера в функции h3EdgeAngle. #10711 (alexey-milovidov).
  • Исправлена ошибка, из-за которой блокировались одновременные ALTER-запросы при большом количестве частей таблицы. #10659 (alesapin).
  • Исправлено разыменование nullptr в StorageBuffer, которое происходило, если сервер завершал работу до запуска таблицы. #10641 (alexey-milovidov).
  • Исправлена работа optimize_skip_unused_shards с LowCardinality. #10611 (Azat Khuzhin).
  • Исправлена обработка условной переменной для синхронных мутаций. В некоторых случаях сигналы этой условной переменной могли теряться. #10588 (Vladimir Chebotarev).
  • Исправлено возможное падение при вызове createDictionary() до завершения выполнения loadStoredObject(). #10587 (Vitaly Baranov).
  • Исправлен SELECT для столбца ALIAS, у которого тип выражения по умолчанию отличался от типа столбца. #10563 (Azat Khuzhin).
  • Реализовано сравнение значений типов DateTime64 и String. #10560 (Vasily Nemkov).
  • Отключить по умолчанию оптимизацию GROUP BY по sharding_key (optimize_distributed_group_by_sharding_key ранее была добавлена и сразу отключена по умолчанию из‑за сложности анализа ключа шардирования, простой пример — использование if в ключе шардирования) и исправить её для WITH ROLLUP/CUBE/TOTALS. #10516 (Azat Khuzhin).
  • Исправлена #10263. #10486 (Azat Khuzhin).
  • Добавлены тесты по настройке max_rows_to_sort. #10268 (alexey-milovidov).
  • Добавлена обратная совместимость для операции создания индекса Bloom-фильтра. #10551. #10569 (Winter Zhang).

Релиз ClickHouse v20.4.2.9, 2020-05-12

Изменение, нарушающее обратную совместимость

  • Системные таблицы (например, system.query_log, system.trace_log, system.metric_log) используют компактный формат частей данных для частей размером меньше 10 MiB. Компактный формат частей данных поддерживается начиная с версии 20.3. Если вы планируете перейти на версию ниже 20.3, вам следует вручную удалить данные таблиц системных логов в /var/lib/clickhouse/data/system/.
  • Когда сравнение строк включает FixedString и сравниваемые аргументы имеют разный размер, сравнение выполняется так, как если бы более короткая строка была дополнена пробелами до длины более длинной. Это сделано для совместимости с SQL, если представить, что тип данных FixedString соответствует SQL CHAR. Это решает проблему #9272. #10363 (alexey-milovidov)
  • Команда SHOW CREATE TABLE теперь выводит результат в несколько строк. Теперь он более читабелен и больше похож на MySQL. #10049 (Azat Khuzhin)
  • Добавлена настройка validate_polygons, которая используется в функции pointInPolygon и по умолчанию включена. #9857 (alexey-milovidov)

Новая функция

  • Добавлена поддержка защищённого соединения из ClickHouse к Zookeeper #10184 (Konstantin Lebedev)
  • Добавлена поддержка пользовательских HTTP-обработчиков. Описание см. в #5436. #7572 (Winter Zhang)
  • Добавлен формат MessagePack для ввода/вывода. #9889 (Kruglov Pavel)
  • Добавлен формат ввода Regexp. #9196 (Kruglov Pavel)
  • Добавлен формат вывода Markdown для встраивания таблиц в документы в формате Markdown. #10317 (Kruglov Pavel)
  • Добавлена поддержка пользовательского раздела настроек в словарях. Также исправлена ошибка #2829. #10137 (Artem Streltsov)
  • Добавлена поддержка пользовательских настроек в DDL-запросах CREATE DICTIONARY #10465 (Artem Streltsov)
  • Добавлен простой глобальный профилировщик памяти сервера, который собирает контексты выделения при превышении сервером очередного порога выделения памяти. #10444 (alexey-milovidov)
  • Добавлена настройка always_fetch_merged_part, которая ограничивает реплику: она не выполняет локальное слияние частей и всегда предпочитает загружать их с других реплик. #10379 (alesapin)
  • Добавлена функция JSONExtractKeysAndValuesRaw, которая извлекает сырые данные из JSON-объектов #10378 (hcz)
  • Добавлен учет использования памяти ОС в system.asynchronous_metrics. #10361 (alexey-milovidov)
  • Добавлены обобщённые версии функций least и greatest. Теперь они работают с произвольным числом аргументов произвольного типа. Это исправляет #4767 #10318 (alexey-milovidov)
  • Теперь ClickHouse со своей стороны управляет таймаутами источников словарей. В конфигурацию кэш-словаря добавлены две новые настройки: strict_max_lifetime_seconds, которая по умолчанию равна max_lifetime, и query_wait_timeout_milliseconds, которая по умолчанию равна одной минуте. Первая настройка также полезна вместе с allow_read_expired_keys (чтобы запретить чтение сильно устаревших ключей). #10337 (Nikita Mikhaylov)
  • Добавлен параметр log_queries_min_type для фильтрации записей, которые будут попадать в query_log #10053 (Azat Khuzhin)
  • Добавлена функция isConstant. Эта функция проверяет, является ли её аргумент константным выражением и возвращает 1 или 0. Она предназначена для использования при разработке, отладке и в демонстрационных целях. #10198 (alexey-milovidov)
  • Добавлена joinGetOrNull для возврата NULL при отсутствии ключа вместо возврата значения по умолчанию. #10094 (Amos Bird)
  • Считать NULL равным NULL в операторе IN, если включена опция transform_null_in. #10085 (achimbab)
  • Добавлен оператор ALTER TABLE ... RENAME COLUMN для семейства движков таблиц MergeTree. #9948 (alesapin)
  • Добавлена поддержка параллельного распределённого INSERT SELECT. #9759 (vxider)
  • Добавлена возможность выполнять запросы к Distributed поверх Distributed (без distributed_group_by_no_merge) ... #9923 (Azat Khuzhin)
  • Добавлена функция arrayReduceInRanges, которая агрегирует элементы массива в заданных диапазонах. #9598 (hcz)
  • Добавлен статус словаря в экспортёр Prometheus. #9622 (Guillaume Tassery)
  • Добавлена функция arrayAUC #8698 (taiyang-li)
  • Поддержка оператора DROP VIEW для повышения совместимости с TPC-H. #9831 (Amos Bird)
  • Добавлена опция 'strict_order' для windowFunnel() #9773 (achimbab)
  • Добавлена поддержка операторов SQL DATE и TIMESTAMP, например SELECT date '2001-01-01' #9691 (Artem Zuikov)

Экспериментальная функция

  • Добавлен экспериментальный движок базы данных Atomic. Он поддерживает неблокирующие запросы DROP и RENAME TABLE, а также атомарный запрос EXCHANGE TABLES t1 AND t2 #7512 (tavplubix)
  • Добавлена начальная поддержка ReplicatedMergeTree поверх S3 (пока работает неоптимально) #10126 (Pavel Kovalenko)

Исправление ошибки

  • Исправлены некорректные скалярные результаты во внутреннем запросе MATERIALIZED VIEW для случая, когда этот запрос содержал зависимую таблицу #10603 (Nikolai Kochetov)
  • Исправлена ошибка, из-за которой HTTP-запросы зависали при закрытии клиентом соединения, когда readonly=2 и cancel_http_readonly_queries_on_client_close=1. #10684 (tavplubix)
  • Исправлен segfault в StorageBuffer при генерации исключения во время запуска сервера. Исправляет #10550 #10609 (tavplubix)
  • Запрос SYSTEM DROP DNS CACHE теперь также очищает кэши, используемые для проверки, разрешено ли пользователю подключаться с определённых IP-адресов #10608 (tavplubix)
  • Исправлено использование нескольких операторов IN с одним и тем же набором значений в одном запросе. Исправлены #10539 #10686 (Anton Popov)
  • Исправлено падение функции generateRandom при работе с вложенными типами. Исправляет #10583. #10734 (Nikolai Kochetov)
  • Исправлена ошибка, приводившая к порче данных в ключевом столбце LowCardinality(FixedString) в SummingMergeTree, которая могла возникнуть после слияния. Исправляет #10489. #10721 (Nikolai Kochetov)
  • Исправлена логика настройки параметра aggregation_memory_efficient_merge_threads. #10667 (palasonic1)
  • Исправлена проблема исчезающих итогов. Итоговые строки могли отфильтровываться, если запрос содержал JOIN или подзапрос с внешним условием WHERE. Исправляет #10674 #10698 (Nikolai Kochetov)
  • Исправлена проблема отсутствия параллельного выполнения удалённых запросов при включённом distributed_aggregation_memory_efficient. Исправление для #10655 #10664 (Nikolai Kochetov)
  • Исправлено возможное некорректное количество строк в результатах запросов с LIMIT. Исправлены #10566, #10709, #10660 (Nikolai Kochetov)
  • Исправлено повреждение индекса, которое в некоторых случаях возникало после слияния компактных частей в другую компактную часть. #10531 (Anton Popov)
  • Исправлена проблема, когда мутация завершила все части, но зависла в состоянии is_done=0. #10526 (alesapin)
  • Исправлено переполнение в начале эпохи Unix для часовых поясов с дробным смещением от UTC. Устранена проблема #9335. #10513 (alexey-milovidov)
  • Улучшена диагностика для форматов ввода. Исправлены #10204 #10418 (tavplubix)
  • Исправить числовое переполнение в simpleLinearRegression() для больших целых чисел #10474 (hcz)
  • Исправлен use-after-free при остановке Distributed, больше не ожидается отправка всех пакетов #10491 (Azat Khuzhin)
  • Добавить сертификаты удостоверяющих центров (CA) в Docker-образ clickhouse-server #10476 (filimonov)
  • Исправлен редкий бесконечный цикл, который мог возникать при использовании функции addressToLine или столбцов типа AggregateFunctionState. #10466 (Alexander Kuzmenkov)
  • Обработка ошибки ZooKeeper "no node error" при выполнении распределённого запроса #10050 (Daniel Chen)
  • Исправлена ошибка, из-за которой сервер не мог подключить таблицу после изменения значения DEFAULT для столбца. #10441 (alesapin)
  • Неявно приводить тип выражения значения по умолчанию к типу столбца для столбцов ALIAS #10563 (Azat Khuzhin)
  • Не удалять каталог metadata, если ATTACH DATABASE завершается с ошибкой #10442 (Winter Zhang)
  • Устранена зависимость от системного tzdata. Исправлена загрузка часового пояса Africa/Casablanca на CentOS 8. Исправлены #10211 #10425 (alexey-milovidov)
  • Исправлены некоторые проблемы, возникавшие при вставке данных с кворумом и их последующем удалении (DROP PARTITION, TTL и т. д.). Это могло приводить к зависанию операций INSERT или ложным исключениям при выполнении SELECT. Исправлены #9946 #10188 (Nikita Mikhaylov)
  • Проверка количества и типов аргументов при создании индекса BloomFilter #9623 #10431 (Winter Zhang)
  • Используйте fallback_to_stale_replicas вместо skip_unavailable_shards, в противном случае, если заданы оба параметра и нет актуальных реплик, запрос завершится с ошибкой (патч от @alex-zaitsev) #10422 (Azat Khuzhin)
  • Исправлена ошибка, из-за которой запрос с ARRAY JOIN, ORDER BY и LIMIT мог возвращать неполный результат. Устраняет #10226. #10427 (Vadim Plakhtinskiy)
  • Добавлено имя базы данных к имени словаря после операций DETACH/ATTACH. Исправлены таблица system.dictionaries и запрос SYSTEM RELOAD #10415 (Azat Khuzhin)
  • Исправлен потенциально некорректный результат вычисления extremes в конвейере процессоров. #10131 (Nikolai Kochetov)
  • Исправлена возможная ошибка сегментации при включённой настройке distributed_group_by_no_merge (возникшая в версии 20.3.7.46 в #10131). #10399 (Nikolai Kochetov)
  • Исправлено некорректное разворачивание типов данных Array(Tuple(...)). Исправлены #10259 #10390 (alexey-milovidov)
  • Исправлены имена константных столбцов внутри JOIN, которые могли конфликтовать по именам с константными столбцами вне JOIN #9950 (Alexander Kuzmenkov)
  • Исправлен порядок столбцов после вызова Block::sortColumns() #10826 (Azat Khuzhin)
  • Исправлена возможная ошибка Pipeline stuck в ConcatProcessor, которая могла возникать во время удалённого запроса. #10381 (Nikolai Kochetov)
  • Не выполняется резервирование диска для агрегаций. Исправляет #9241 #10375 (Azat Khuzhin)
  • Исправлено некорректное поведение функций работы с датой и временем для часовых поясов, в которых смещение от UTC переходило между положительным и отрицательным значениями (например, Pacific/Kiritimati). Исправлены #7202 #10369 (alexey-milovidov)
  • Предотвращён бесконечный цикл в функции dictIsIn. Исправлена проблема #515 #10365 (alexey-milovidov)
  • По умолчанию отключена оптимизация GROUP BY по sharding_key и исправлена её работа для WITH ROLLUP/CUBE/TOTALS #10516 (Azat Khuzhin)
  • Проверять код ошибки при проверке частей и не помечать часть как повреждённую, если ошибка вроде «not enough memory». Исправляет #6269 #10364 (alexey-milovidov)
  • Показывать информацию о незагруженных словарях в системных таблицах. #10234 (Vitaly Baranov)
  • Исправлено разыменование nullptr в StorageBuffer, если сервер завершил работу до инициализации таблицы. #10641 (alexey-milovidov)
  • Исправлено условие гонки между DROP и OPTIMIZE в ReplicatedMergeTree. DROP мог оставлять мусор в пути реплики в ZooKeeper, если одновременно выполнялся запрос OPTIMIZE. #10312 (tavplubix)
  • Исправлена ошибка 'Logical error: CROSS JOIN has expressions' для запросов с одновременным использованием соединений через запятую и соединений по именам. Исправлены #9910 #10311 (Artem Zuikov)
  • Исправлена работа запросов с max_bytes_before_external_group_by. #10302 (Artem Zuikov)
  • Исправлена проблема с ограничением максимальной глубины рекурсии парсера в некоторых случаях. Это исправление устраняет #10283. Исправление может привести к небольшой несовместимости: длинные и глубоко вложенные запросы через clickhouse-client могут перестать выполняться, и при необходимости следует скорректировать настройки max_query_size и max_parser_depth. #10295 (alexey-milovidov)
  • Добавлена возможность использования count(*) с несколькими операциями JOIN. Исправляет #9853 #10291 (Artem Zuikov)
  • Исправлена ошибка Pipeline stuck, возникавшая при использовании max_rows_to_group_by и group_by_overflow_mode = 'break'. #10279 (Nikolai Kochetov)
  • Исправлена ошибка «Cannot add column» при создании словаря range_hashed с помощью DDL‑запроса. Исправляет #10093. #10235 (alesapin)
  • Устранено редко возникающее исключение Cannot drain connections: cancel first. #10239 (Nikolai Kochetov)
  • Исправлена ошибка, из-за которой ClickHouse выдавал сообщение об ошибке «Unknown function lambda.», когда пользователь пытался выполнить ALTER UPDATE/DELETE для таблиц с ENGINE = Replicated*. Проверка недетерминированных функций теперь корректно обрабатывает lambda-выражения. #10237 (Alexander Kazakov)
  • Исправлена достаточно редкая ошибка сегментации в StorageSystemTables, возникающая при выполнении запроса SELECT ... FROM system.tables в базе данных, использующей движок Lazy. #10209 (Alexander Kazakov)
  • Исправлено возможное бесконечное выполнение запроса в случае, когда он должен останавливаться по LIMIT при чтении из бесконечного источника, такого как system.numbers или system.zeros. #10206 (Nikolai Kochetov)
  • Исправлена функция "generateRandom" для типа Date. Это решает проблему #9973. Исправлен пограничный случай, когда даты с годом 2106 вставляются в таблицы MergeTree со старым стилем партиционирования, при этом партиции именуются годом 1970. #10218 (alexey-milovidov)
  • Типы теперь приводятся, если определение таблицы представления не соответствует запросу SELECT. Это исправляет #10180 и #10022 #10217 (alexey-milovidov)
  • Исправлена работа parseDateTimeBestEffort для строк в формате RFC-2822, когда день недели — вторник или четверг. Это исправляет #10082 #10214 (alexey-milovidov)
  • Исправлены имена константных столбцов внутри JOIN, которые могли приводить к конфликту с именами констант за пределами JOIN. #10207 (alexey-milovidov)
  • Исправлена ошибка в оптимизации переноса в PREWHERE при наличии функций arrayJoin (в определённых случаях). Это исправляет #10092 #10195 (alexey-milovidov)
  • Исправлена проблема с появлением разделителя в SCRAMBLE для нативного драйвера mysql-connector-java (JDBC) #10140 (BohuTANG)
  • Исправлено использование текущей базы данных при проверке доступа, когда база данных не указана. #10192 (Vitaly Baranov)
  • Исправлена операция ALTER для таблиц с компактными частями. #10130 (Anton Popov)
  • Добавлена возможность ослабить ограничение на использование недетерминированных функций в мутациях с помощью настройки allow_nondeterministic_mutations. #10186 (filimonov)
  • Исправлена ошибка, из-за которой выполнялся DROP TABLE для словаря #10165 (Azat Khuzhin)
  • Преобразовывать блоки, если их структура не совпадает при выполнении INSERT в таблицу типа Distributed #10135 (Azat Khuzhin)
  • Количество строк некорректно фиксировалось в логе (как сумма по всем частям), когда вставляемый блок разбивался на части по ключу партиционирования. #10138 (alexey-milovidov)
  • Добавлена проверка некоторых аргументов и поддержка идентификаторов в качестве аргументов для MySQL Database Engine #10077 (Winter Zhang)
  • Исправлена некорректная проверка index_granularity_bytes при создании новой реплики. Исправляет проблему #10098. #10121 (alesapin)
  • Исправлена ошибка в запросе CHECK TABLE, возникавшая, если таблица содержит skip-индексы. #10068 (alesapin)
  • Исправлена работа схемы Distributed-over-Distributed с единственным шардом во вложенной таблице #9997 (Azat Khuzhin)
  • Исправлена возможная потеря строк для запросов с JOIN и UNION ALL. Исправляет #9826, #10113. ... #10099 (Nikolai Kochetov)
  • Исправлена ошибка в словаре при использовании локального сервера ClickHouse в качестве источника. Она могла приводить к повреждению памяти, если типы данных в словаре и источнике были несовместимы. #10071 (alesapin)
  • Исправлена проблема с запуском реплицируемых таблиц при обновлении со старой версии ClickHouse, где отсутствует узел /table/replicas/replica_name/metadata. Исправляет #10037. #10095 (alesapin)
  • Исправлена ошибка Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransform. Она возникала при включённой настройке distributed_aggregation_memory_efficient, когда распределённый запрос читал агрегированные данные с сочетанием одно- и двухуровневой агрегации с разных шардов. #10063 (Nikolai Kochetov)
  • Исправлена взаимоблокировка при ошибке присоединения базы данных с материализованным представлением при старте #10054 (Azat Khuzhin)
  • Исправлена ошибка сегментации, которая могла возникать при выполнении GROUP BY по строковым ключам с нулевыми байтами в конце (#8636, #8925). ... #10025 (Alexander Kuzmenkov)
  • Исправлена ошибка, приводившая к неверным результатам распределённых запросов, когда псевдоним мог переопределять квалифицированное имя столбца. Исправляет #9672 #9714 #9972 (Artem Zuikov)
  • Исправлена возможная взаимоблокировка в SYSTEM RESTART REPLICAS #9955 (tavplubix)
  • Исправлено количество потоков, используемых для удалённого выполнения запроса (регрессия производительности, начиная с 20.3). Это происходило, когда запрос к таблице Distributed выполнялся одновременно на локальных и удалённых шардах. Исправлены #9965 #9971 (Nikolai Kochetov)
  • Исправлена логика DeleteOnDestroy в ATTACH PART, которая могла приводить к автоматическому удалению присоединённой части, и добавлено несколько тестов #9410 (Vladimir Chebotarev)
  • Исправлена ошибка, из-за которой DDL-запросы с ON CLUSTER зависали при запуске сервера. #9927 (Gagan Arneja)
  • Исправлена ошибка, из-за которой на одном из этапов обработки запросов к некоторым базам данных не выбирались необходимые таблицы. Исправляет #9699. #9949 (achulkov2)
  • Исправлена ошибка «Not found column in block» при использовании JOIN вместе с TOTALS. Исправляет #9839 #9939 (Artem Zuikov)
  • Исправлен разбор нескольких хостов, задаваемых в операторе CREATE USER #9924 (Vitaly Baranov)
  • Исправлен TRUNCATE для движка таблицы Join (#9917). #9920 (Amos Bird)
  • Исправлено условие гонки между операциями DROP и OPTIMIZE в ReplicatedMergeTree. #9901 (alesapin)
  • Исправлена работа DISTINCT для распределённых таблиц (Distributed), при включённом параметре optimize_skip_unused_shards. #9808 (Azat Khuzhin)
  • Исправлена ошибка «scalar does not exist» в ALTER-запросах (#9878). ... #9904 (Amos Bird)
  • Исправлена ошибка с квалифицированными именами при distributed_product_mode=\'local\'. Устраняет #4756 и #9891 (Artem Zuikov)
  • Для запросов INSERT шарды теперь ограничивают настройки, полученные от инициатора, до своих допустимых значений вместо генерации исключения. Это исправление позволяет отправлять запросы INSERT на шард с иными ограничениями. Это изменение улучшает исправление #9447. #9852 (Vitaly Baranov)
  • Добавлены повторные попытки при коммите смещений брокеру Kafka, поскольку он может отклонить коммит, если в течение offsets.commit.timeout.ms было доступно недостаточно реплик для топика __consumer_offsets #9884 (filimonov)
  • Исправлено поведение движка Distributed при использовании виртуальных столбцов базовой таблицы в WHERE #9847 (Azat Khузhin)
  • Исправлены некоторые случаи, когда часовой пояс аргумента функции учитывался некорректно. #9574 (Vasily Nemkov)
  • Исправлена ошибка 'Different expressions with the same alias' в запросе с PREWHERE и WHERE на распределённой таблице при установленном SET distributed_product_mode = 'local'. #9871 (Artem Zuikov)
  • Исправлено чрезмерное потребление памяти при выполнении мутаций для таблиц со составным первичным ключом. Это исправляет #9850. #9860 (alesapin)
  • Исправлен расчет прав доступа для функций интроспекции на основе настройки allow_introspection_functions. #9840 (Vitaly Baranov)
  • Исправлен параметр max_distributed_connections (с и без Processors) #9673 (Azat Khuzhin)
  • Исправлено возможное исключение Got 0 in totals chunk, expected 1 на стороне клиента. Оно возникало для запросов с JOIN в случае, если таблица, присоединённая справа, не содержала ни одной строки. Пример: select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;. Исправляет #9777. ... #9823 (Nikolai Kochetov)
  • Исправлена ошибка 'COMMA to CROSS JOIN rewriter is not enabled or cannot rewrite query' в случае подзапросов с COMMA JOIN вне списков таблиц (например, в WHERE). Исправляет #9782 #9830 (Artem Zuikov)
  • Исправлено падение сервера при включённом параметре optimize_skip_unused_shards, когда выражение для ключа не может быть преобразовано к типу поля ключа #9804 (Azat Khuzhin)
  • Исправлена обработка пустой строки в splitByString. #9767 (hcz)
  • Исправлен некорректно работавший запрос ALTER TABLE DELETE COLUMN для компактных партиций. #9779 (alesapin)
  • Исправлено отсутствие rows_before_limit_at_least при выполнении запросов через HTTP (с конвейером процессоров). Исправляет #9730 #9757 (Nikolai Kochetov)
  • Устранено чрезмерное потребление памяти в запросах ALTER (мутациях). Это исправляет #9533 и #9670. #9754 (alesapin)
  • Исправлена возможная постоянная ошибка с сообщением «Cannot schedule a task». #9154 (Azat Khuzhin)
  • Исправлена ошибка в экранировании обратными кавычками в DDL внешних словарей. Ошибка #9619 устранена. #9734 (alesapin)
  • Исправлена гонка данных в text_log. Она не приводила ни к каким реальным ошибкам. #9726 (alexey-milovidov)
  • Исправлена ошибка в репликации, из-за которой репликация не работала, если пользователь выполнил мутации в предыдущей версии. Это исправляет #9645. #9652 (alesapin)
  • Исправлены ошибочные внутренние имена функций sumKahan и sumWithOverflow. Это приводило к исключению при использовании этих функций в удалённых запросах. #9636 (Azat Khuzhin)
  • Добавлена настройка use_compact_format_in_distributed_parts_names, которая позволяет записывать файлы для запросов INSERT в таблицу Distributed в более компактном формате. Это исправляет #9647. #9653 (alesapin)
  • Исправлены операции RIGHT и FULL JOIN при использовании LowCardinality в ключах JOIN. #9610 (Artem Zuikov)
  • Исправлены возможные исключения Size of filter does not match size of column и Invalid number of rows in Chunk в MergeTreeRangeReader. Они могли возникать при выполнении PREWHERE в отдельных случаях. #9612 (Anton Popov)
  • Добавлена поддержка выполнения команды ALTER ON CLUSTER для таблиц типа Distributed с внутренней репликацией. Исправляет #3268 #9617 (shinoi2)
  • Исправлена проблема, из-за которой часовой пояс не сохранялся при использовании простого арифметического выражения вроде time + 1 (в отличие от выражения time + INTERVAL 1 SECOND). Исправление связано с #5743 #9323 (alexey-milovidov)

Улучшение

  • При сравнении DateTime со строковым литералом теперь используется часовой пояс. Это исправляет #5206. #10515 (alexey-milovidov)
  • Выводить подробную диагностическую информацию, если значение Decimal не удаётся распарсить из текстового формата ввода. #10205 (alexey-milovidov)
  • Добавлены метрики задач и памяти для пулов планировщика distributed/buffer #10449 (Azat Khuzhin)
  • Отображать результат сразу, как только он готов, для запросов SELECT DISTINCT в clickhouse-local и HTTP-интерфейсе. Это исправляет #8951 #9559 (alexey-milovidov)
  • Теперь можно использовать запрос SAMPLE OFFSET вместо cityHash64(PRIMARY KEY) % N == n для разбиения в clickhouse-copier. Чтобы воспользоваться этой возможностью, передайте --experimental-use-sample-offset 1 в качестве аргумента командной строки. #10414 (Nikita Mikhaylov)
  • Разрешён разбор BOM в TSV, если в значении первого столбца BOM не может присутствовать. Это исправляет #10301 #10424 (alexey-milovidov)
  • Добавлена поддержка вставки вложенных полей формата Avro #10354 (Andrew Onyshchuk)
  • Разрешено изменять столбец в режиме без изменения данных, если указан тот же тип. #10382 (Vladimir Chebotarev)
  • Автоматический distributed_group_by_no_merge для GROUP BY по ключу шардирования (если установлен optimize_skip_unused_shards) #10341 (Azat Khuzhin)
  • Оптимизация запросов с LIMIT/LIMIT BY/ORDER BY для распределённых таблиц с GROUP BY sharding_key #10373 (Azat Khuzhin)
  • Добавлена настройка max_server_memory_usage для ограничения общего потребления памяти сервером. Метрика MemoryTracking теперь вычисляется без дрейфа. Настройка max_memory_usage_for_all_queries устарела и больше ни на что не влияет. Это закрывает #10293. #10362 (alexey-milovidov)
  • Добавлен параметр конфигурации system_tables_lazy_load. Если его значение — false, системные таблицы журналов загружаются при запуске сервера. Alexander Burmak, Svyatoslav Tkhon Il Pak, #9642 #10359 (alexey-milovidov)
  • Использовать пул фоновых потоков (background_schedule_pool_size) для распределённой отправки #10263 (Azat Khuzhin)
  • Использовать пул фоновых потоков для фоновых операций сброса буфера. #10315 (Azat Khuzhin)
  • Реализована поддержка одного частного случая удаления частично записанных частей. Это исправляет #9940. #10221 (alexey-milovidov)
  • Используйте isInjective() вместо вручную составленного списка таких функций для оптимизации GROUP BY. #10342 (Azat Khuzhin)
  • Не выводить сообщение об ошибке в лог, если клиент отправляет пакет RST сразу после установления соединения. Это типичное поведение балансировщика IPVS в связке с keepalived и VRRP. Исправляет #1851 #10274 (alexey-milovidov)
  • Разрешён разбор значения +inf для числовых типов с плавающей точкой. Это закрывает #1839 #10272 (alexey-milovidov)
  • Реализована табличная функция generateRandom для типов данных Nested. Это закрывает задачи #9903 #10219 (alexey-milovidov)
  • Добавлен параметр max_allowed_packed в интерфейс совместимости с MySQL, позволяющий некоторым клиентам взаимодействовать с ClickHouse по протоколу MySQL. #10199 (BohuTANG)
  • Разрешено использование литералов в GLOBAL IN (т.е. SELECT * FROM remote('localhost', system.one) WHERE dummy global in (0)) #10196 (Azat Khuzhin)
  • Исправлены различные мелкие ошибки в интерактивном режиме clickhouse-client #10194 (alexey-milovidov)
  • Устранена избыточная загрузка словарей (system.tables, DROP/SHOW CREATE TABLE) #10164 (Azat Khuzhin)
  • Обновление RWLock: добавлен параметр тайм-аута для getLock() и переработана реализация для обеспечения фазовой справедливости #10073 (Alexander Kazakov)
  • Улучшена совместимость с нативным драйвером mysql-connector-java (JDBC) #10021 (BohuTANG)
  • Функция toString считается монотонной и может использоваться для анализа индекса даже когда применяется в тавтологических выражениях с аргументом типа String или LowCardinality(String). #10110 (Amos Bird)
  • Добавлена поддержка клаузы ON CLUSTER для команд {CREATE|DROP} USER/ROLE/ROW POLICY/SETTINGS PROFILE/QUOTA, GRANT. #9811 (Vitaly Baranov)
  • Поддержка адресации в стиле virtual-hosted для URI S3 #9998 (Pavel Kovalenko)
  • Теперь тип layout для словарей без аргументов можно указывать без круглых скобок в DDL‑запросах к словарям. Исправлена ошибка #10057. #10064 (alesapin)
  • Добавлена возможность использовать диапазоны чисел с ведущими нулями в пути к файлу #9989 (Olga Khvostikova)
  • Более эффективное использование памяти при CROSS JOIN. #10029 (Artem Zuikov)
  • При получении структуры удалённой таблицы пытаться подключиться ко всем шардам кластера, если установлен skip_unavailable_shards. #7278 (nvartolomei)
  • Добавлены столбцы total_rows/total_bytes в таблицу system.tables. #9919 (Azat Khuzhin)
  • Таблицы системных логов теперь по умолчанию используют полиморфные части. #9905 (Anton Popov)
  • Добавлен столбец type в system.settings/merge_tree_settings #9909 (Azat Khuzhin)
  • Проверять доступные инструкции CPU при запуске сервера как можно раньше. #9888 (alexey-milovidov)
  • Удалён этап ORDER BY из мутаций, поскольку чтение выполняется из одной упорядоченной части в одном потоке. Также добавлена проверка, что строки в мутациях упорядочены по ключу сортировки и этот порядок не нарушается. #9886 (alesapin)
  • Реализован оператор LIKE для типа FixedString в левой части оператора. Это необходимо для лучшей поддержки запросов TPC-DS. #9890 (alexey-milovidov)
  • Добавлена настройка force_optimize_skip_unused_shards_no_nested, которая отключает force_optimize_skip_unused_shards для вложенных таблиц Distributed #9812 (Azat Khuzhin)
  • Теперь размер столбцов для частей данных MergeTree вычисляется только один раз. #9827 (alesapin)
  • Вычислять константные выражения для optimize_skip_unused_shards (например, SELECT * FROM foo_dist WHERE key=xxHash32(0)) #8846 (Azat Khuzhin)
  • Проверка на использование столбца типа Date или DateTime в TTL-выражениях была удалена. #9967 (Vladimir Chebotarev)
  • Оптимизирована реализация жёстких ссылок в DiskS3. #9760 (Pavel Kovalenko)
  • Параметр set multiple_joins_rewriter_version = 2 включает вторую версию преобразования нескольких JOIN, которая сохраняет неконфликтующие имена столбцов без изменений. Она поддерживает несколько операторов JOIN с USING и позволяет использовать select * для JOIN с подзапросами. #9739 (Artem Zuikov)
  • Реализован «неблокирующий» ALTER для StorageMergeTree #9606 (alesapin)
  • Добавлена полная поддержка таблиц MergeTree на диске DiskS3 #9646 (Pavel Kovalenko)
  • Добавлена поддержка пустых строк в качестве разделителей в функции splitByString. #9742 (hcz)
  • В таблицу system.trace_log добавлен столбец timestamp_ns. Он содержит высокоточный временной штамп события трассировки и позволяет строить временные шкалы профилей потоков («flame charts»). #9696 (Alexander Kuzmenkov)
  • Предотвращено перемешивание сообщений лога с прогрессом выполнения запроса при включённой настройке send_logs_level. #9634 (Azat Khuzhin)
  • Добавлена поддержка MATERIALIZE TTL IN PARTITION. #9581 (Vladimir Chebotarev)
  • Поддержка сложных типов во вложенных полях Avro #10502 (Andrew Onyshchuk)

Повышение производительности

  • Улучшена логика вставки в правую таблицу для Partial MergeJoin. #10467 (Artem Zuikov)
  • Повышена производительность строчно-ориентированных форматов (более чем на 10% для CSV и более чем на 35% для Avro в случае узких таблиц). #10503 (Andrew Onyshchuk)
  • Повышена производительность запросов с явно заданными наборами в правой части оператора IN и кортежами в левой части. #10385 (Anton Popov)
  • Снижено потребление памяти для хеш-таблицы в HashJoin. #10416 (Artem Zuikov)
  • Специальный HashJoin поверх StorageDictionary. Позволяет переписывать функции dictGet() в JOIN. Само по себе это не нарушает обратную совместимость, но может проявить #8400 на некоторых установках. #10133 (Artem Zuikov)
  • Включена параллельная вставка материализованного представления, если это поддерживается его целевой таблицей. #10052 (vxider)
  • Повышена производительность анализа индексов с монотонными функциями. #9607#10026 (Anton Popov)
  • Используются SIMD-интринсики SSE2 и SSE4.2 для ускорения токенизации в bloom-фильтрах. #9968 (Vasily Nemkov)
  • Повышена производительность запросов с явно заданными наборами в правой части оператора IN. Это исправляет регрессию производительности в версии 20.3. #9740 (Anton Popov)
  • Теперь clickhouse-copier разбивает каждый раздел на несколько частей и копирует их независимо. #9075 (Nikita Mikhaylov)
  • Добавлены дополнительные методы агрегации. Например, запрос TPC-H 1 теперь выберет FixedHashMap<UInt16, AggregateDataPtr> и получит прирост производительности на 25%. #9829 (Amos Bird)
  • Используется единый счетчик строк для нескольких потоков в преобразовании pre-limit. Это помогает избежать объединения конвейерных потоков в запросах с limit, но без order by (например, select f(x) from (select x from t limit 1000000000)) и использовать несколько потоков для дальнейшей обработки. #9602 (Nikolai Kochetov)

Улучшения сборки/тестирования/упаковки

  • Использовать форк библиотек AWS SDK из ClickHouse-Extras #10527 (Pavel Kovalenko)
  • Добавлены интеграционные тесты для нового запроса ALTER RENAME COLUMN. #10654 (vzakaznikov)
  • Исправлено возможное переполнение знакового целого при вызове функции now64 с неверными аргументами. Это исправление устраняет #8973 #10511 (alexey-milovidov)
  • Разделены настройки fuzzer и sanitizer для совместимости конфигурации сборки с Oss-fuzz. #10494 (kyprizel)
  • Исправления для clang-tidy под clang-10. #10420 (alexey-milovidov)
  • Отображать абсолютные пути в сообщениях об ошибках, иначе KDevelop не сможет перейти к нужному файлу и вместо этого откроет новый. #10434 (alexey-milovidov)
  • Добавлена переменная окружения ASAN_OPTIONS для анализа ошибок в стресс-тестах CI с AddressSanitizer. #10440 (Nikita Mikhaylov)
  • Включена поддержка ThinLTO для сборок clang (экспериментально). #10435 (alexey-milovidov)
  • Удалена случайная зависимость от Z3, которая могла появиться, если в системе установлен решатель Z3. #10426 (alexey-milovidov)
  • Переместить Docker-файлы интеграционных тестов в директорию docker/. #10335 (Ilya Yatsishin)
  • Разрешено использование clang-10 в CI. Это гарантирует, что проблема #10238 исправлена. #10384 (alexey-milovidov)
  • Обновлён OpenSSL до актуальной версии из ветки upstream master. Исправлена проблема, при которой подключения по TLS могли завершаться с ошибками OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error и SSL Exception: error:2400006E:random number generator::error retrieving entropy. Проблема присутствовала в версии 20.1. #8956 (alexey-milovidov)
  • Исправлена сборка с clang-10. #10238 #10370 (Amos Bird)
  • Добавлен тест производительности для Parallel INSERT для материализованного представления. #10345 (vxider)
  • Исправлен нестабильный тест test_settings_constraints_distributed.test_insert_clamps_settings. #10346 (Vitaly Baranov)
  • Добавлена утилита для загрузки результатов тестов в CI ClickHouse #10330 (Ilya Yatsishin)
  • Преобразование результатов тестов в формат JSONEachRow в утилите junit_to_html #10323 (Ilya Yatsishin)
  • Обновлён cctz. #10215 (alexey-milovidov)
  • Добавлена возможность создавать HTML‑отчет из исходного JUnit XML‑отчета. #10247 (Ilya Yatsishin)
  • Обновлена проверка минимально допустимой версии компилятора. Исправлена коренная причина проблемы #10250 #10256 (alexey-milovidov)
  • Базовая поддержка таблиц Live View поверх распределённых таблиц #10179 (vzakaznikov)
  • Исправлено ложное срабатывание MSan в MergeTreeIndexFullText. Проблема впервые появилась в #9968. #10801 (alexey-milovidov)
  • clickhouse-docker-util #10151 (filimonov)
  • Обновлён pdqsort до актуальной версии #10171 (Ivan)
  • Обновлена libdivide до v3.0 #10169 (Ivan)
  • Добавлена проверка для включённых polymorphic parts. #10086 (Anton Popov)
  • Добавлена сборка с кросс-компиляцией для FreeBSD. Это исправляет #9465 #9643 (Ivan)
  • Добавить тест производительности для #6924 #6980 (filimonov)
  • Добавлена поддержка /dev/null в движок File для ускорения тестирования производительности #8455 (Amos Bird)
  • Переместить все каталоги из /dbms на один уровень выше #9974 (Ivan)
  • Добавлен тест, проверяющий, что чтение из MergeTree в одном потоке происходит в правильном порядке. Дополнение к #9670 #9762 (alexey-milovidov)
  • Исправлен тест 00964_live_view_watch_events_heartbeat.py, чтобы избежать состояния гонки. #9944 (vzakazников)
  • Исправлен интеграционный тест test_settings_constraints #9962 (Vitaly Baranov)
  • Каждая функция в отдельном файле, часть 12. #9922 (alexey-milovidov)
  • Добавлен тест производительности для случая чрезвычайно медленного разбора массива кортежей. #9872 (alexey-milovidov)
  • Обновлена версия zstd до 1.4.4. В ней есть небольшие улучшения производительности и коэффициента сжатия. Если вы запускаете реплики с разными версиями ClickHouse, вы можете увидеть осмысленные сообщения об ошибках Data after merge is not byte-identical to data on another replicas. с пояснением. Эти сообщения являются нормой, и вам не следует беспокоиться. #10663 (alexey-milovidov)
  • Исправлена проблема с отчётом TSan в system.stack_trace. #9832 (alexey-milovidov)
  • Удалена зависимость от clock_getres. #9833 (alexey-milovidov)
  • Добавлена проверка имён идентификаторов с помощью clang-tidy. #9799 (alexey-milovidov)
  • Обновлён Docker-образ «builder». Этот образ не используется в CI, но полезен для разработчиков. #9809 (alexey-milovidov)
  • Удалён устаревший инструмент performance-test, который больше не используется в CI. clickhouse-performance-test — отличный инструмент, но сейчас мы используем гораздо более совершенное решение, выполняющее сравнительное тестирование с использованием сложных статистических формул, чтобы получать достоверные результаты несмотря на всевозможные изменения в окружении. #9796 (alexey-milovidov)
  • Добавлено большинство проверок Clang Static Analyzer. #9765 (alexey-milovidov)
  • Обновлён Poco до версии 1.9.3 в рамках подготовки к поддержке URI MongoDB. #6892 (Alexander Kuzmenkov)
  • Исправлена ошибка сборки с -DUSE_STATIC_LIBRARIES=0 -DENABLE_JEMALLOC=0 #9651 (Artem Zuikov)
  • Для скрипта журнала изменений: если merge-коммит был перенесён (cherry-picked) в релизную ветку, брать название PR из описания коммита. #9708 (Nikolai Kochetov)
  • Добавлена поддержка тега vX.X-conflicts в скрипте backport. #9705 (Nikolai Kochetov)
  • Исправлен auto-label для скрипта бэкпорта. #9685 (Nikolai Kochetov)
  • Использовать libc++ при кросс-сборке для Darwin, чтобы обеспечить一致ность с нативной сборкой. #9665 (Hui Wang)
  • Исправлен флапающий тест 01017_uniqCombined_memory_usage. Продолжение #7236. #9667 (alexey-milovidov)
  • Исправлена сборка с нативным компилятором Clang под macOS #9649 (Ivan)
  • Позволяет добавлять различные сбои вокруг функций pthread_mutex_lock, pthread_mutex_unlock. #9635 (alexey-milovidov)
  • Добавлена поддержка clang-tidy в скрипт packager. #9625 (alexey-milovidov)
  • Добавлена возможность использовать внешнюю библиотеку msgpack. #10168 (Azat Khuzhin)

Релиз ClickHouse v20.3

Релиз ClickHouse v20.3.21.2-lts, 2020-11-02

Исправление ошибок

  • Исправлен dictGet в sharding_key (и в похожих местах, то есть когда контекст функции хранится постоянно). #16205 (Azat Khuzhin).
  • Исправлен некорректный пустой результат для запроса из таблицы Distributed, если запрос содержит WHERE, PREWHERE и GLOBAL IN. Исправляет #15792. #15933 (Nikolai Kochetov).
  • Исправлено отсутствие или появление лишних заголовков в форматах TSV/CSVWithNames. Это исправляет #12504. #13343 (Azat Khuzhin).

Релиз ClickHouse v20.3.20.6-lts, 2020-10-09

Исправление ошибок

  • Мутация могла зависнуть в ожидании несуществующей части после MOVE или REPLACE PARTITION или, в редких случаях, после DETACH или DROP PARTITION. Исправлено. #15724, #15537 (tavplubix).
  • Исправлено зависание запросов с большим количеством подзапросов к одной и той же таблице движка MySQL. Ранее, если в запросе было больше 16 подзапросов к одной и той же таблице MySQL, он зависал навсегда. #15299 (Anton Popov).
  • Исправлена ошибка «Unknown identifier» в GROUP BY, когда запрос содержит JOIN по таблице Merge. #15242 (Artem Zuikov).
  • Исправлено проталкивание предикатов (predicate push down), чтобы оно работало, когда подзапрос содержит функцию finalizeAggregation. Исправляет #14847. #14937 (filimonov).
  • Одновременные запросы ALTER ... REPLACE/MOVE PARTITION ... могли приводить к взаимной блокировке. Исправлено. #13626 (tavplubix).

Релиз ClickHouse v20.3.19.4-lts, 2020-09-18

Исправление ошибок

  • Исправлена редкая ошибка в запросах SELECT, когда запрашиваемый столбец имеет выражение DEFAULT, зависящее от другого столбца, который также имеет DEFAULT, но не присутствует в запросе SELECT и отсутствует на диске. Частично исправляет #14531. #14845 (alesapin).
  • Исправлена ошибка, когда мутация ALTER UPDATE с Nullable-столбцом в выражении присваивания и константным значением (например, UPDATE x = 42) приводила к некорректному значению в столбце или сегфолту. Исправляет #13634, #14045. #14646 (alesapin).
  • Исправлен неверный результат умножения Decimal, вызванный неправильным масштабом (scale) десятичного результата в результирующем столбце. #14603 (Artem Zuikov).

Improvement

  • Добавлена поддержка пользовательских кодеков в компактных партах. #12183 (Anton Popov).

ClickHouse release v20.3.18.10-lts, 2020-09-08

Bug Fix

  • Останавливать выполнение запроса, если исключение произошло в самом PipelineExecutor. Это позволяет предотвратить редкие случаи зависания запроса. Продолжение #14334. #14402 (Nikolai Kochetov).
  • Исправлено поведение, при котором cache-dictionary иногда возвращал значение по умолчанию вместо имеющегося значения из источника. #13624 (Nikita Mikhaylov).
  • Исправлен разбор политик строк (row policies) из users.xml, когда имена баз данных или таблиц содержат точки. Это исправляет #5779, #12527. #13199 (Vitaly Baranov).
  • Исправлен CAST(Nullable(String), Enum()). #12745 (Azat Khuzhin).
  • Исправлена гонка данных в text_log. Она не соответствует какой-либо реальной ошибке. #9726 (alexey-milovidov).

Improvement

  • Исправлено неверное сообщение об ошибке для длинных запросов. Можно было получить синтаксическую ошибку, отличную от Max query size exceeded, для корректного запроса. #13928 (Nikolai Kochetov).
  • Возвращать NULL/ноль, когда значение разбирается не полностью, в функциях parseDateTimeBestEffortOrNull/Zero. Это исправляет #7876. #11653 (alexey-milovidov).

Performance Improvement

  • Незначительно оптимизированы очень короткие запросы с LowCardinality. #14129 (Anton Popov).

Build/Testing/Packaging Improvement

  • Исправлен отчёт UBSan (добавление нуля к nullptr) в HashTable, появившийся после миграции на clang-10. #10638 (alexey-milovidov).

Релиз ClickHouse v20.3.17.173-lts, 2020-08-15

Исправление ошибок

  • Исправлено падение в JOIN с StorageMerge при set enable_optimize_predicate_expression=1. #13679 (Artem Zuikov).
  • Исправлен некорректный возвращаемый тип при сравнении кортежей с элементами NULL. Исправляет #12461. #13420 (Nikolai Kochetov).
  • Исправлена обработка запросов с константными столбцами и префиксом первичного ключа в ORDER BY. #13396 (Anton Popov).
  • Для чисел с установленным старшим битом (MSB) в roundUpToPowerOfTwoOrZero() теперь возвращается переданное число. #13234 (Azat Khuzhin).

Релиз ClickHouse v20.3.16.165-lts 2020-08-10

Исправление ошибок

  • Исправлена ошибка в функции parseDateTimeBestEffort, возникавшая при передаче Unix‑времени в качестве аргумента. Это исправляет #13362. #13441 (alexey-milovidov).
  • Исправлена проблема с потенциально низкой производительностью и слегка некорректным результатом для агрегатных функций uniqExact, topK, sumDistinct и подобных, вызываемых для типов с плавающей запятой (Float) со значениями NaN. Это также приводило к срабатыванию assert в отладочной сборке. Исправляет #12491. #13254 (alexey-milovidov).
  • Исправлена работа функции if с nullable constexpr в качестве условия, не являющегося литералом NULL. Устраняет #12463. #13226 (alexey-milovidov).
  • Исправлена проверка assert в функции arrayElement в случае, когда элементы массива имеют тип Nullable, а индекс массива также имеет тип Nullable. Это исправляет #12172. #13224 (alexey-milovidov).
  • Исправлено ненужное ограничение числа потоков при выполнении запросов SELECT к локальной реплике. #12840 (Nikolai Kochetov).
  • Исправлено возможное появление в данных лишней строки переполнения для запросов WITH TOTALS. #12747 (Nikolai Kochetov).
  • Исправлена проблема с производительностью при работе с большими кортежами, которые интерпретировались как функции в выражении IN. Случай, когда пользователь по какой-то неясной причине пишет WHERE x IN tuple(1, 2, ...) вместо WHERE x IN (1, 2, ...). #12700 (Anton Popov).
  • Исправлено отслеживание памяти для input_format_parallel_parsing (за счёт присоединения потока к группе). #12672 (Azat Khuzhin).
  • Исправлено #12293: разрешено проталкивание предикатов, когда подзапрос содержит предложение WITH. #12663 (Winter Zhang).
  • Исправлена #10572 — некорректная работа индекса фильтра Блума с константным выражением. #12659 (Winter Zhang).
  • Исправлено возникновение SIGSEGV в StorageKafka при недоступности брокера (и не только). #12658 (Azat Khuzhin).
  • Исправлено состояние гонки во внешних словарях с типом кэша, которое могло приводить к падению сервера. #12566 (alesapin).
  • Исправлена ошибка, из-за которой повреждались старые куски данных после выполнения запроса ALTER DELETE при enable_mixed_granularity_parts=1. Исправляет #12536. #12543 (alesapin).
  • Улучшено сообщение об исключении для функции in при некорректном количестве аргументов. #12529 (Anton Popov).
  • Исправлена проблема с производительностью при чтении из компактных частей. #12492 (Anton Popov).
  • Исправлена взаимоблокировка при включённом text_log. #12452 (alexey-milovidov).
  • Исправлена возможная ошибка сегментации при использовании StorageMerge. Закрывает #12054. #12401 (tavplubix).
  • Исправлена работа TOTALS/ROLLUP/CUBE для агрегатных функций с аргументами -State и Nullable. Устраняет #12163. #12376 (alexey-milovidov).
  • Исправлен порядок столбцов в модификаторе WITH FILL. Ранее порядок столбцов в операторе ORDER BY не соблюдался. #12306 (Anton Popov).
  • Избегает возникновения исключения "bad cast" при использовании выражения, фильтрующего данные по виртуальным столбцам (таким как _table в таблицах Merge) или по столбцам "index" в системных таблицах, например при фильтрации по имени базы данных при запросе к system.tables, и которое возвращает тип Nullable. Это исправляет #12166. #12305 (alexey-milovidov).
  • Показывать ошибку при сбое загрузки TrieDictionary. #12290 (Vitaly Baranov).
  • Функция arrayFill работала некорректно для пустых массивов, что могло приводить к аварийному завершению работы. Это исправляет #12263. #12279 (alexey-milovidov).
  • Реализованы преобразования к общему типу для типов LowCardinality. Это позволяет выполнять UNION ALL таблиц со столбцами типа LowCardinality и другими столбцами. Это исправляет #8212. Это исправляет #4342. #12275 (alexey-milovidov).
  • Исправлено поведение, при котором в ходе нескольких последовательных вставок в StorageFile заголовок для некоторых специальных типов записывался более одного раза. Это исправило #6155. #12197 (Nikita Mikhaylov).
  • Исправлены логические функции для значений типа UInt8 в случаях, когда они не равны 0 или 1. #12196 (Alexander Kazakov).
  • Исправлена проверка аргументов dictGet при устранении инъективных функций в GROUP BY. #12179 (Azat Khuzhin).
  • Исправлена некорректная логика в ALTER DELETE, приводившая к удалению записей, когда условие имело значение NULL. Это исправляет #9088. Это закрывает #12106. #12153 (alexey-milovidov).
  • Исправлена трансформация запроса, отправляемого во внешние СУБД (например, MySQL, ODBC), при использовании псевдонимов. Это исправляет #12032. #12151 (alexey-milovidov).
  • Устранено возможное переполнение при целочисленном делении, что исправляет #12119. #12140 (alexey-milovidov).
  • Исправлен потенциальный бесконечный цикл в greatCircleDistance, geoDistance, что устраняет #12117. #12137 (alexey-milovidov).
  • Исправлено возникновение исключения There is no query для материализованных представлений с JOIN или с подзапросами, обращающимися к системным логам (system.query_log, metric_log и т. д.) или к базовой таблице с движком Buffer. #12120 (filimonov).
  • Исправлена проблема с производительностью запросов SELECT с UNION, которая возникала из‑за некорректного лимита на общее число потоков. Исправляет #12030. #12103 (Nikolai Kochetov).
  • Исправлена ошибка сегментации с комбинаторами -StateResample. #12092 (Anton Popov).
  • Исправлено избыточное ограничение числа потоков при выполнении SELECT из VIEW. Исправляет #11937. #12085 (Nikolai Kochetov).
  • Исправлено возможное аварийное завершение работы при использовании некорректного типа для PREWHERE. Исправлены #12053, #12060. #12060 (Nikolai Kochetov).
  • Исправлена ошибка Expected single dictionary argument for function в функции defaultValueOfArgumentType при использовании типа LowCardinality. Исправляет #11808. #12056 (Nikolai Kochetov).
  • Исправлена ошибка Cannot capture column в функциях высшего порядка с аргументом Tuple(LowCardinality). Исправляет #9766. #12055 (Nikolai Kochetov).
  • Теперь метаданные таблиц при загрузке базы данных разбираются параллельно. Это устраняет медленный запуск сервера при большом количестве таблиц. #12045 (tavplubix).
  • Сделать так, чтобы агрегатная функция topK возвращала Enum для типов Enum. Это исправляет #3740. #12043 (alexey-milovidov).
  • Исправлена проверка ограничений: теперь проверяется, что ограничение является константным выражением. Это исправляет #11360. #12042 (alexey-milovidov).
  • Исправлено некорректное сравнение кортежей со столбцами Nullable. Устранена проблема #11985. #12039 (Nikolai Kochetov).
  • Исправлены некорректный результат и потенциальный сбой при вызове функции if с аргументами типа FixedString разных размеров. Это исправление устраняет #11362. #12021 (alexey-milovidov).
  • Запрос, в котором функция neighbor является единственным возвращаемым выражением, может возвращать пустой результат, если функция вызывается со смещением -9223372036854775808. Это исправляет #11367. #12019 (alexey-milovidov).
  • Исправлено потенциальное переполнение массива в generateRandom, которое могло приводить к аварийному завершению работы. Это устраняет #11371. #12013 (alexey-milovidov).
  • Устранено потенциальное исключение с плавающей запятой, что закрывает #11378. #12005 (alexey-milovidov).
  • Исправлено неверное имя настройки в сообщении лога при запуске сервера. #11997 (alexey-milovidov).
  • Исправлена ошибка Query parameter was not set для формата Values. Исправляет #11918. #11936 (tavplubix).
  • Сохраняются псевдонимы для подстановок в запросе (параметризованные запросы). Исправляет #11914. #11916 (alexey-milovidov).
  • Исправлено потенциальное исключение с плавающей точкой при разборе DateTime64. Это исправляет #11374. #11875 (alexey-milovidov).
  • Исправлен учет памяти при работе через HTTP‑интерфейс (исправление особенно важно при wait_end_of_query=1). #11840 (Azat Khuzhin).
  • Исправлен некорректный результат работы if() с NULL-значениями в условии. #11807 (Artem Zuikov).
  • Разбирать метаданные, сохранённые в ZooKeeper, перед проверкой на равенство. #11739 (Azat Khuzhin).
  • Исправлено использование LIMIT n WITH TIES вместе с оператором ORDER BY, в котором используются псевдонимы. #11689 (Anton Popov).
  • Исправлено потенциальное чтение неинициализированной памяти в кеширующем словаре. #10834 (alexey-milovidov).

Улучшение производительности

  • Индекс не использовался для оператора IN с литералами, регрессия производительности, возникшая примерно в v19.3. Это исправляет #10574. #12062 (nvartolomei).

Релиз ClickHouse v20.3.12.112-lts от 2020-06-25

Исправление ошибки

  • Исправлено редкое падение, возникавшее при использовании столбца типа Nullable в условии PREWHERE. Продолжение #11608. #11869 (Nikolai Kochetov).
  • Запретить использование arrayJoin внутри функций высшего порядка. Это приводило к нарушению синхронизации протокола. Закрывает #3933. #11846 (alexey-milovidov).
  • Исправлена проблема чрезмерного использования потоков при выполнении запросов. #11788 (Nikolai Kochetov).
  • Исправлено неожиданное поведение запросов вида SELECT *, xyz.*, которые выполнялись успешно, хотя ожидалась ошибка. #11753 (hexiaoting).
  • Теперь реплицированные операции fetch будут отменяться при изменении метаданных. #11744 (alesapin).
  • Исправлена ошибка LOGICAL_ERROR, возникавшая из-за некорректного вывода типа сложных литералов во входном формате Values. #11732 (tavplubix).
  • Исправлена работа ORDER BY ... WITH FILL над константными столбцами. #11697 (Anton Popov).
  • Передавать корректные тайм-ауты при взаимодействии с мостом XDBC. Ранее тайм-ауты не учитывались при проверке его работоспособности и получении метаинформации. #11690 (alexey-milovidov).
  • Исправлена ошибка, из-за которой system.mutations мог находиться в некорректном состоянии: таблица могла показывать, что вся мутация уже завершена, хотя на сервере все еще оставались задания MUTATE_PART в очереди репликации, и он пытался их выполнить. Исправляет #11611. #11681 (alesapin).
  • Добавлена поддержка регулярных выражений с флагами, игнорирующими регистр. Тем самым исправляются #11101 и #11506. #11649 (alexey-milovidov).
  • Удалена оптимизация тривиального запроса подсчёта, если включена защита на уровне строк (row-level security). В предыдущих версиях пользователь получал общее количество записей в таблице вместо отфильтрованного. Это исправляет #11352. #11644 (alexey-milovidov).
  • Исправлены блум-фильтры для типа String (индексы пропуска данных). #11638 (Azat Khuzhin).
  • Исправлен редкий сбой, вызванный использованием колонки типа Nullable в условии PREWHERE. (Вероятно, это как‑то связано с #11572). #11608 (Nikolai Kochetov).
  • Исправлена ошибка Block structure mismatch для запросов с сэмплированием, читающих из таблицы Buffer. #11602 (Nikolai Kochetov).
  • Исправлен неверный код выхода clickhouse-client при exception.code() % 256 == 0. #11601 (filimonov).
  • Исправлена тривиальная ошибка в сообщении журнала при запуске сервера: «Mark cache size was lowered». Это закрывает #11399. #11589 (alexey-milovidov).
  • Исправлена ошибка Size of offsets does not match size of column, возникавшая в запросах с PREWHERE column in (subquery) и ARRAY JOIN. #11580 (Nikolai Kochetov).
  • Все запросы в HTTP-сессии имели одинаковый query_id. Исправлено. #11578 (tavplubix).
  • Теперь Docker-контейнер clickhouse-server будет отдавать предпочтение IPv6 при проверке доступности сервера. #11550 (Ivan Starkov).
  • Исправлены значения shard_num/replica_num для <node> (ранее нарушали работу параметра use_compact_format_in_distributed_parts_names). #11528 (Azat Khuzhin).
  • Исправлена утечка памяти при генерации исключения в процессе агрегации с функциями -State. Это исправляет #8995. #11496 (alexey-milovidov).
  • Исправлена ошибка, приводившая к неверным результатам распределённых запросов, когда псевдоним мог переопределить квалифицированное имя столбца. Исправлены #9672 #9714. #9972 (Artem Zuikov).

Релиз ClickHouse v20.3.11.97-lts 2020-06-10

Новая возможность

  • Теперь ClickHouse самостоятельно контролирует таймауты источников словарей. В конфигурацию кэшируемого словаря добавлены две новые настройки: strict_max_lifetime_seconds, которая по умолчанию равна max_lifetime, и query_wait_timeout_milliseconds, которая по умолчанию равна одной минуте. Первая настройка также полезна вместе с настройкой allow_read_expired_keys (чтобы запретить чтение сильно устаревших ключей). #10337 (Nikita Mikhaylov).

Исправление ошибки

  • Исправлена ошибка Data compressed with different methods, которая могла возникать при включённом min_bytes_to_use_direct_io и активном PREWHERE при использовании SAMPLE или большого числа потоков. Исправляет #11539. #11540 (alexey-milovidov).
  • Исправлено возвращаемое значение сжатого размера для кодеков. #11448 (Nikolai Kochetov).
  • Исправлено падение сервера, когда для столбца установлен кодек сжатия с аргументами, отличными от литералов. Исправляет #11365. #11431 (alesapin).
  • Исправлена функция pointInPolygon при использовании NaN в качестве точки. Исправляет #11375. #11421 (Alexey Ilyukhov).
  • Исправлено падение при выполнении операции JOIN над LowCarinality(T) и Nullable(T). #11380. #11414 (Artem Zuikov).
  • Исправлен код ошибки для неверного ключа USING. #11373. #11404 (Artem Zuikov).
  • Исправлена работа geohashesInBox при аргументах, выходящих за допустимый диапазон широт и долгот. #11403 (Vasily Nemkov).
  • Улучшены сообщения об ошибках для функций joinGet(). #11389 (Artem Zuikov).
  • Исправлена потенциальная ошибка Pipeline stuck для запросов с внешней сортировкой и оператором LIMIT. Исправляет #11359. #11366 (Nikolai Kochetov).
  • Удалена избыточная блокировка при отправке партий в ReplicatedMergeTree. #11354 (alesapin).
  • Исправлена поддержка \G (вертикальный формат вывода) в clickhouse-client в режиме многострочного ввода. Закрывает #9933. #11350 (alexey-milovidov).
  • Исправлены сбой при прямых запросах SELECT из StorageJoin (без JOIN) и неверное свойство Nullable. #11340 (Artem Zuikov).
  • Исправлен сбой в quantilesExactWeightedArray. #11337 (Nikolai Kochetov).
  • Теперь слияния останавливаются перед изменением метаданных в запросах ALTER. #11335 (alesapin).
  • Снова сделана параллельной запись в MATERIALIZED VIEW при установке параметра parallel_view_processing = 1. Исправляет #10241. #11330 (Nikolai Kochetov).
  • Исправлена функция visitParamExtractRaw при обработке JSON, содержащего строки с несбалансированными символами { или [. #11318 (Ewout).
  • Исправлена крайне редкая гонка в ThreadPool. #11314 (alexey-milovidov).
  • Исправлена потенциальная работа с неинициализированной памятью при преобразовании. Пример: SELECT toIntervalSecond(now64()). #11311 (alexey-milovidov).
  • Исправлена проблема, из-за которой анализ индекса не работал, если в таблице был столбец типа Array в первичном ключе и запрос фильтровал по этому столбцу с помощью функций empty или notEmpty. Это исправляет #11286. #11303 (alexey-milovidov).
  • Исправлена ошибка, из-за которой оценка скорости выполнения запроса могла быть некорректной, а ограничение min_execution_speed могло не работать или работать неправильно, если выполнение запроса ограничивалось настройками max_network_bandwidth, max_execution_speed или priority. Значение по умолчанию параметра timeout_before_checking_execution_speed изменено на ненулевое, потому что иначе настройки min_execution_speed и max_execution_speed не оказывают никакого эффекта. Это исправляет #11297. Это исправляет #5732. Это исправляет #6228. Улучшение удобства использования: предотвращено объединение сообщения об исключении с индикатором прогресса в clickhouse-client. #11296 (alexey-milovidov).
  • Исправлена ошибка, приводившая к сбою при чтении некорректных данных в формате Protobuf. Тем самым исправлены #5957 и #11203. #11258 (Vitaly Baranov).
  • Исправлена ошибка, при которой cache-dictionary мог возвращать значение по умолчанию вместо корректного (когда все ключи просрочены). Это затрагивает только строковые поля. #11233 (Nikita Mikhaylov).
  • Исправлена ошибка Block structure mismatch in QueryPipeline при чтении из VIEW с константами во внутреннем запросе. Исправлена #11181. #11205 (Nikolai Kochetov).
  • Исправлено возможное исключение Invalid status for associated output. #11200 (Nikolai Kochetov).
  • Исправлена потенциальная ошибка Cannot capture column для функций высшего порядка с захваченным аргументом типа Array(Array(LowCardinality)). #11185 (Nikolai Kochetov).
  • Исправлена обработка шаблонов S3 (globbing), которая могла приводить к сбоям при наличии более 1000 ключей и на некоторых бэкендах. #11179 (Vladimir Chebotarev).
  • Если индекс пропуска данных зависит от столбцов, которые будут изменены во время фонового слияния (для SummingMergeTree, AggregatingMergeTree, а также для TTL GROUP BY), он вычислялся некорректно. Эта проблема исправлена переносом расчёта индекса на этап после слияния, чтобы индекс вычислялся по уже объединённым данным. #11162 (Azat Khuzhin).
  • Исправлено чрезмерное резервирование потоков для простых запросов (оптимизация, уменьшающая количество потоков и частично нарушенная после изменений в конвейере). #11114 (Azat Khuzhin).
  • Исправлена оптимизация предикатов для распределённых запросов (enable_optimize_predicate_expression=1) для запросов с предложением HAVING (т.е. когда требуется фильтрация на сервере-инициаторе) за счёт сохранения порядка выражений (чего достаточно для устранения проблемы), а также принудительного использования агрегатором имён столбцов вместо их позиций. Исправления: #10613, #11413. #10621 (Azat Khuzhin).
  • Добавлена логика повторной попытки коммита смещения, чтобы снизить вероятность получения дубликатов из Kafka в редких случаях, когда коммит смещения не удался. #9884 (filimonov).

Улучшение производительности

  • Получать словарь и проверять права доступа только один раз при каждом вызове функции, читающей внешние словари. #10928 (Vitaly Baranov).

Улучшение сборки/тестирования/упаковки

  • Исправлены несколько нестабильных интеграционных тестов. #11355 (alesapin).

Релиз ClickHouse v20.3.10.75-lts 2020-05-23

Исправление ошибок

  • Удалено логирование в задаче финализации мутаций, если в итоге не была финализирована ни одна мутация. #11109 (alesapin).
  • Исправлены ошибки разрешения аргументов функции parseDateTime64BestEffort. #11038 (Vasily Nemkov).
  • Исправлен некорректный размер сырых данных в методе getRawData(). #10964 (Igr).
  • Исправлена несовместимость двухуровневой агрегации между версиями 20.1 и более ранними. Эта несовместимость проявляется, когда на инициирующем узле и удалённых узлах используются разные версии ClickHouse, размер результата GROUP BY велик, и агрегация выполняется по одному полю типа String. Это приводит к появлению нескольких необъединённых строк для одного ключа в результате. #10952 (alexey-milovidov).
  • Исправлена проблема с обратной совместимостью с кортежами в таблицах Distributed. #10889 (Anton Popov).
  • Исправлена ошибка SIGSEGV в StringHashTable, возникавшая, если такого ключа не существует. #10870 (Azat Khuzhin).
  • Исправлена ошибка в ReplicatedMergeTree, из-за которой некоторые операции ALTER для запроса OPTIMIZE могли зависать в ожидании реплики после того, как она становилась неактивной. #10849 (tavplubix).
  • Исправлен порядок столбцов после Block::sortColumns(). #10826 (Azat Khuzhin).
  • Исправлена проблема с мостом ODBC, возникавшая при отключённом кавычировании идентификаторов. Устраняет #7984. #10821 (alexey-milovidov).
  • Исправлены сообщения UBSan и MSan для DateLUT. #10798 (alexey-milovidov).
  • Исправлено некорректное преобразование типов в условиях по ключу. Устраняет #6287. #10791 (Andrew Onyshchuk)
  • Исправлено поведение parallel_view_processing. Теперь все вставки в MATERIALIZED VIEW должны завершаться во всех случаях, даже при возникновении исключения. Исправляет #10241. #10757 (Nikolai Kochetov).
  • Исправлены комбинаторы -OrNull и -OrDefault при совместном использовании с -State. #10741 (hcz).
  • Исправлен сбой в generateRandom при работе с вложенными типами. Устранена проблема #10583. #10734 (Nikolai Kochetov).
  • Исправлено повреждение данных для ключевого столбца LowCardinality(FixedString) в SummingMergeTree, которое могло возникать после слияния. Исправляет #10489. #10721 (Nikolai Kochetov).
  • Исправлено возможное переполнение буфера в функции h3EdgeAngle. #10711 (alexey-milovidov).
  • Исправлена проблема исчезающих итогов. Итоги могли пропадать, если запрос содержал JOIN или подзапрос с внешним условием WHERE. Исправляет #10674. #10698 (Nikolai Kochetov).
  • Исправлено несколько использований оператора IN с одним и тем же набором в одном запросе. #10686 (Anton Popov).
  • Исправлена ошибка, из-за которой HTTP-запросы зависали при закрытии клиентского соединения при readonly=2 и cancel_http_readonly_queries_on_client_close=1. Исправляет #7939, #7019, #7736, #7091. #10684 (tavplubix).
  • Исправлен порядок параметров в конструкторе AggregateTransform. #10667 (palasonic1).
  • Устранено отсутствие параллельного выполнения удалённых запросов при включённом distributed_aggregation_memory_efficient. Исправляет проблему #10655. #10664 (Nikolai Kochetov).
  • Исправлена возможная ошибка в количестве строк для запросов с LIMIT. Исправляет #10566, #10709. #10660 (Nikolai Kochetov).
  • Исправлена ошибка, из-за которой блокировались параллельные операции ALTER, когда таблица содержала много частей. #10659 (alesapin).
  • Исправлена ошибка, из-за которой при выполнении запроса SYSTEM DROP DNS CACHE также сбрасывались кэши, используемые для проверки, разрешено ли пользователю подключаться с определённых IP-адресов. #10608 (tavplubix).
  • Исправлены некорректные скалярные результаты во внутреннем запросе MATERIALIZED VIEW в случаях, когда этот запрос содержал зависимую таблицу. #10603 (Nikolai Kochetov).
  • Исправлен запрос SELECT для столбца ALIAS, у которого тип выражения по умолчанию отличался от типа столбца. #10563 (Azat Khuzhin).
  • Реализовано сравнение между значениями типов DateTime64 и String. #10560 (Vasily Nemkov).
  • Исправлено повреждение индекса, которое в некоторых случаях могло возникать после слияния компактных частей в другую компактную часть. #10531 (Anton Popov).
  • Исправлена ситуация, когда мутация завершала обработку всех частей, но зависала в состоянии is_done=0. #10526 (alesapin).
  • Исправлено переполнение в начале эпохи Unix для часовых поясов с дробным смещением от UTC. Это исправляет #9335. #10513 (alexey-milovidov).
  • Исправлено некорректное завершение работы хранилища Distributed. #10491 (Azat Khuzhin).
  • Исправлено переполнение целых чисел в simpleLinearRegression при работе с большими целыми значениями. #10474 (hcz).

Улучшения сборки/тестирования/упаковки

  • Исправлен отчёт UBSan в библиотеке LZ4. #10631 (alexey-milovidov).
  • Исправлена сборка с clang-10. #10238. #10370 (Amos Bird).
  • Добавлены тесты, воспроизводящие сбой, связанные с настройкой max_rows_to_sort. #10268 (alexey-milovidov).
  • Добавлены улучшения при выводе диагностической информации во входных форматах. Исправлена #10204. #10418 (tavplubix).
  • В docker-образ clickhouse-server добавлены CA-сертификаты. #10476 (filimonov).

Исправление ошибки

  • Исправлена ошибка the BloomFilter false positive must be a double number between 0 and 1. #10551. #10569 (Winter Zhang).

Релиз ClickHouse v20.3.8.53, 2020-04-23

Исправление ошибки

  • Исправлено некорректное поведение функций работы с датой и временем для часовых поясов, в которых смещение относительно UTC изменялось между положительным и отрицательным значениями (например, Pacific/Kiritimati). Это исправляет #7202 #10369 (alexey-milovidov)
  • Исправлена возможная ошибка сегментации при включённом distributed_group_by_no_merge, возникшая в версии 20.3.7.46 из-за #10131. #10399 (Nikolai Kochetov)
  • Исправлена некорректная развёртка типов данных Array(Tuple(...)). Это исправляет #10259 #10390 (alexey-milovidov)
  • Отменено резервирование дисков в Aggregator. Это исправляет ошибку в резервировании дискового пространства, из-за которой крупная внешняя агрегация могла завершаться сбоем, даже если могла бы успешно выполниться #10375 (Azat Khuzhin)
  • Исправлена гонка между DROP и OPTIMIZE в ReplicatedMergeTree. DROP мог оставлять мусор в пути реплики в ZooKeeper при параллельном выполнении запроса OPTIMIZE. #10312 (tavplubix)
  • Исправлена ошибка, из-за которой сервер не мог выполнить ATTACH TABLE после изменения значения по умолчанию столбца. #10441 (alesapin)
  • Не удаляйте каталог metadata, если операция ATTACH DATABASE завершается ошибкой до загрузки таблиц. #10442 (Winter Zhang)
  • Исправлено несколько ошибок, возникавших, когда часть данных вставлялась с кворумом, затем каким‑то образом удалялась (DROP PARTITION, TTL), что приводило к зависанию INSERT-запросов или ложным исключениям в SELECT-запросах. Это исправляет #9946 #10188 (Nikita Mikhaylov)
  • Исправлена возможная ошибка Pipeline stuck в ConcatProcessor, которая могла возникать при выполнении удалённого запроса. #10381 (Nikolai Kochetov)
  • Исправлено некорректное поведение в HashTable, которое вызывало ошибку компиляции при попытке прочитать HashMap из буфера. #10386 (palasonic1)
  • Добавлена возможность использовать count(*) с несколькими JOIN. Исправляет #9853 #10291 (Artem Zuikov)
  • Предпочтительнее использовать fallback_to_stale_replicas вместо skip_unavailable_shards, иначе, если заданы обе настройки и нет актуальных реплик, запрос завершится с ошибкой (патч от @alex-zaitsev). Исправления: #2564. #10422 (Azat Khuzhin)
  • Устранена проблема, при которой запрос с ARRAY JOIN, ORDER BY и LIMIT мог возвращать неполный результат. Исправление для #10226. Автор: Vadim Plakhtinskiy. #10427 (alexey-milovidov)
  • Добавлена проверка количества и типа аргументов при создании индекса BloomFilter #9623 #10431 (Winter Zhang)

Повышение производительности

  • Повышена производительность запросов с явно заданными наборами в правой части оператора IN и кортежами в левой части. Это исправляет регрессию производительности в версии 20.3. #9740, #10385 (Anton Popov)

Релиз ClickHouse v20.3.7.46, 2020-04-17

Исправление ошибок

  • Исправлена ошибка Logical error: CROSS JOIN has expressions для запросов со смешанным использованием запятых и JOIN по имени. #10311 (Artem Zuikov).
  • Исправлены запросы с max_bytes_before_external_group_by. #10302 (Artem Zuikov).
  • Исправлена оптимизация переноса в PREWHERE при наличии функций arrayJoin (в некоторых случаях). Это исправляет #10092. #10195 (alexey-milovidov).
  • Добавлена возможность ослабить ограничение на использование недетерминированных функций в мутациях с помощью настройки allow_nondeterministic_mutations. #10186 (filimonov).

Релиз ClickHouse v20.3.6.40, 2020-04-16

Новая функциональность

  • Добавлена функция isConstant. Эта функция проверяет, является ли её аргумент константным выражением и возвращает 1 или 0. Предназначена для разработки, отладки и демонстрационных целей. #10198 (alexey-milovidov).

Исправление ошибок

  • Исправлена ошибка Pipeline stuck, возникавшая при использовании max_rows_to_group_by и group_by_overflow_mode = 'break'. #10279 (Nikolai Kochetov).
  • Исправлено редкое исключение Cannot drain connections: cancel first. #10239 (Nikolai Kochetov).
  • Исправлена ошибка, из‑за которой ClickHouse выдавал сообщение об ошибке "Unknown function lambda.", когда пользователь пытался выполнить ALTER UPDATE/DELETE над таблицами с ENGINE = Replicated*. Проверка недетерминированных функций теперь корректно обрабатывает lambda‑выражения. #10237 (Alexander Kazakov).
  • Исправлена функция generateRandom для типа Date. Это исправляет #9973. Исправлен пограничный случай, когда даты с годом 2106 вставляются в таблицы MergeTree со старым стилем партиционирования, но партиции имеют имена с годом 1970. #10218 (alexey-milovidov).
  • Преобразовывать типы, если определение таблицы для представления не соответствует запросу SELECT. Это исправляет #10180 и #10022. #10217 (alexey-milovidov).
  • Исправлена обработка в parseDateTimeBestEffort строк в формате RFC-2822, если день недели — вторник или четверг. Это исправляет #10082. #10214 (alexey-milovidov).
  • Исправлены имена константных столбцов внутри JOIN, которые могли конфликтовать с именами констант вне JOIN. #10207 (alexey-milovidov).
  • Исправлено возможное бесконечное выполнение запроса в случаях, когда запрос должен останавливаться на LIMIT при чтении из бесконечного источника, такого как system.numbers или system.zeros. #10206 (Nikolai Kochetov).
  • Исправлено использование текущей базы данных для проверки доступа, когда база данных не указана. #10192 (Vitaly Baranov).
  • Преобразовывать блоки, если структура не совпадает при выполнении INSERT в Distributed(). #10135 (Azat Khuzhin).
  • Исправлен потенциально некорректный результат для extremes в конвейере процессоров. #10131 (Nikolai Kochetov).
  • Исправлены некоторые типы запросов ALTER с компактными частями. #10130 (Anton Popov).
  • Исправлена некорректная проверка index_granularity_bytes при создании новой реплики. Решена проблема #10098. #10121 (alesapin).
  • Исправлен SIGSEGV при выполнении INSERT в таблицу Distributed, когда её структура отличается от структуры базовых таблиц. #10105 (Azat Khuzhin).
  • Исправлена возможная потеря строк в запросах с JOIN и UNION ALL. Устранены проблемы #9826, #10113. #10099 (Nikolai Kochetov).
  • Исправлен запуск реплицируемых таблиц при обновлении со старой версии ClickHouse, в которой отсутствует узел /table/replicas/replica_name/metadata. Исправлено #10037. #10095 (alesapin).
  • Добавлена проверка аргументов и поддержка передачи идентификаторов в качестве аргументов для движка базы данных MySQL. #10077 (Winter Zhang).
  • Исправлена ошибка в источнике словаря ClickHouse при использовании локального сервера ClickHouse. Ошибка могла приводить к повреждению памяти, если типы данных в словаре и источнике были несовместимы. #10071 (alesapin).
  • Исправлена ошибка в запросе CHECK TABLE при наличии в таблице пропускающих индексов. #10068 (alesapin).
  • Исправлена ошибка Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransform. Она возникала при включённом параметре distributed_aggregation_memory_efficient, когда распределённый запрос читал агрегированные данные с разными уровнями из разных шардов (смешанная одно- и двухуровневая агрегация). #10063 (Nikolai Kochetov).
  • Исправлена ошибка сегментации, которая могла возникать в GROUP BY по строковым ключам, содержащим нулевые байты в конце (#8636, #8925). #10025 (Alexander Kuzmenkov).
  • Исправлено количество потоков, используемых для удалённого выполнения запросов (регрессия производительности, начиная с 20.3). Ошибка проявлялась, когда запрос к таблице Distributed одновременно выполнялся на локальных и удалённых шардах. Исправляет #9965. #9971 (Nikolai Kochetov).
  • Исправлена ошибка, из-за которой на одном из этапов обработки запросов к некоторым базам данных не извлекались необходимые таблицы. Исправление для #9699. #9949 (achulkov2).
  • Исправлена ошибка 'Not found column in block', возникавшая при использовании JOIN вместе с TOTALS. Исправляет #9839. #9939 (Artem Zuikov).
  • Исправлена ошибка, из-за которой DDL-запросы с ON CLUSTER зависали при старте сервера. #9927 (Gagan Arneja).
  • Исправлен разбор нескольких хостов при их указании в команде CREATE USER, например CREATE USER user6 HOST NAME REGEXP 'lo.?*host', NAME REGEXP 'lo*host'. #9924 (Vitaly Baranov).
  • Исправлена команда TRUNCATE для движка таблицы Join (#9917). #9920 (Amos Bird).
  • Исправлена ошибка «scalar does not exist» в ALTER-запросах (#9878). #9904 (Amos Bird).
  • Исправлено состояние гонки между командами DROP и OPTIMIZE в ReplicatedMergeTree. #9901 (alesapin).
  • Исправлена ошибка с квалифицированными именами в distributed_product_mode='local'. Исправлена #4756. #9891 (Artem Zuikov).
  • Исправлено вычисление прав доступа для интроспекционных функций на основе настройки 'allow_introspection_functions'. #9840 (Vitaly Baranov).

Улучшения в сборке/тестировании/упаковке

Релиз ClickHouse v20.3.5.21, 2020-03-27

Исправление ошибок

  • Исправлена ошибка «Different expressions with the same alias», возникавшая, когда запрос содержал PREWHERE и WHERE по распределённой таблице и SET distributed_product_mode = 'local'. #9871 (Artem Zuikov).
  • Исправлено чрезмерное потребление памяти мутациями для таблиц со составным первичным ключом. Исправляет #9850. #9860 (alesapin).
  • Для запросов INSERT шард теперь ограничивает настройки, полученные от инициатора, собственными ограничениями вместо выбрасывания исключения. Это исправление позволяет отправлять запросы INSERT на шард с другими ограничениями. Это изменение улучшает исправление #9447. #9852 (Vitaly Baranov).
  • Исправлена ошибка «COMMA to CROSS JOIN rewriter is not enabled or cannot rewrite query» в случае подзапросов с COMMA JOIN вне списка таблиц (то есть в WHERE). Исправляет #9782. #9830 (Artem Zuikov).
  • Исправлено возможное исключение Got 0 in totals chunk, expected 1 на клиенте. Оно возникало для запросов с JOIN, если в присоединяемой правой таблице было ноль строк. Пример: select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;. Исправляет #9777. #9823 (Nikolai Kochetov).
  • Исправлен SIGSEGV при optimize_skip_unused_shards, когда тип не может быть преобразован. #9804 (Azat Khuzhin).
  • Исправлен некорректный запрос ALTER TABLE DELETE COLUMN для компактных частей. #9779 (alesapin).
  • Исправлен max_distributed_connections (с и без Processors). #9673 (Azat Khuzhin).
  • Исправлено несколько случаев, когда часовой пояс аргумента функции использовался некорректно. #9574 (Vasily Nemkov).

Улучшения

  • Удалён этап ORDER BY из мутаций, потому что чтение выполняется из одной упорядоченной части в одном потоке. Также добавлена проверка, что порядок строк в мутации соответствует порядку по ключу сортировки и этот порядок не нарушается. #9886 (alesapin).

Релиз ClickHouse v20.3.4.10, 2020-03-20

Исправление ошибок

  • Этот релиз также содержит все исправления ошибок из 20.1.8.41
  • Исправлена отсутствующая метрика rows_before_limit_at_least для запросов по HTTP (с конвейером процессоров). Это исправляет #9730. #9757 (Nikolai Kochetov)

ClickHouse release v20.3.3.6, 2020-03-17

Исправление ошибок

  • Этот релиз также содержит все исправления ошибок из 20.1.7.38
  • Исправлена ошибка в репликации, из-за которой репликация не работала, если пользователь выполнял мутации в предыдущей версии. Это исправляет #9645. #9652 (alesapin). Это снова делает версию 20.3 обратно совместимой.
  • Добавлена настройка use_compact_format_in_distributed_parts_names, которая позволяет записывать файлы для запросов INSERT в таблицу Distributed в более компактном формате. Это исправляет #9647. #9653 (alesapin). Это снова делает версию 20.3 обратно совместимой.

ClickHouse release v20.3.2.1, 2020-03-12

Обратное несовместимое изменение

  • Исправлена ошибка file name too long при записи данных в таблицы Distributed при большом количестве реплик. Исправлена проблема, из-за которой учетные данные реплик выводились в журнал сервера. Формат имени каталога на диске был изменен на [shard{shard_index}[_replica{replica_index}]]. #8911 (Mikhail Korotov) После обновления до новой версии вы не сможете откатиться на старую без ручного вмешательства, так как старая версия сервера не распознает новый формат каталогов. Если вы хотите выполнить откат, вам необходимо вручную переименовать соответствующие каталоги в старый формат. Это изменение актуально только в том случае, если вы использовали асинхронные INSERT в таблицы Distributed. В версии 20.3.3 мы введем настройку, которая позволит постепенно включать новый формат.
  • Изменён формат записей журнала репликации для команд мутаций. Перед установкой новой версии необходимо дождаться, пока старые мутации будут обработаны.
  • Реализован простой профилировщик памяти, который сохраняет стек-трейсы в system.trace_log на каждые N байт сверх мягкого лимита по выделению памяти #8765 (Ivan) #9472 (alexey-milovidov). Столбец таблицы system.trace_log был переименован из timer_type в trace_type. Это потребует изменений во внешних инструментах анализа производительности и обработки флеймграфов.
  • Использовать везде идентификатор потока ОС вместо внутреннего номера потока. Это исправляет #7477. Старый clickhouse-client не может получать логи, которые сервер отправляет при включённой настройке send_logs_level, потому что были изменены имена и типы структурированных сообщений логов. С другой стороны, разные версии сервера могут отправлять друг другу логи с разными типами. Если вы не используете настройку send_logs_level, вам не о чем беспокоиться. #8954 (alexey-milovidov)
  • Удалена функция indexHint #9542 (alexey-milovidov)
  • Удалены функции findClusterIndex, findClusterValue. Это исправляет проблему #8641. Если вы использовали эти функции, отправьте письмо на clickhouse-feedback@yandex-team.com #9543 (alexey-milovidov)
  • Теперь нельзя создавать столбцы или добавлять столбцы с подзапросом SELECT в качестве значения по умолчанию. #9481 (alesapin)
  • Теперь для подзапросов в JOIN требуются псевдонимы. #9274 (Artem Zuikov)
  • Улучшена логика запросов ALTER MODIFY/ADD. Теперь нельзя ADD столбец без указания типа, MODIFY выражения по умолчанию не меняет тип столбца, а MODIFY типа не приводит к потере значения выражения по умолчанию. Исправлено #8669. #9227 (alesapin)
  • Необходимо перезапустить сервер, чтобы применить изменения в конфигурации логирования. Это временное решение, позволяющее избежать ошибки, из-за которой сервер продолжает записывать логи в удалённый файл (см. #8696). #8707 (Alexander Kuzmenkov)
  • Настройка experimental_use_processors включена по умолчанию. Она включает использование нового конвейера обработки запросов. Это внутреннее изменение, и мы не ожидаем видимых эффектов. Если вы заметите какие-либо проблемы, установите её обратно в 0. #8768 (alexey-milovidov)

Новая функция

  • Добавлены форматы ввода/вывода Avro и AvroConfluent #8571 (Andrew Onyshchuk) #8957 (Andrew Onyshchuk) #8717 (alexey-milovidov)
  • Многопоточное и неблокирующее обновление истекших ключей в словарях cache (с необязательным разрешением на чтение старых значений). #8303 (Nikita Mikhaylov)
  • Добавлен запрос ALTER ... MATERIALIZE TTL. Он выполняет мутацию, которая принудительно удаляет просроченные по TTL данные и пересчитывает метаинформацию о TTL во всех частях. #8775 (Anton Popov)
  • При необходимости переключаться с HashJoin на MergeJoin (на диске) #9082 (Artem Zuikov)
  • Добавлена команда MOVE PARTITION для оператора ALTER TABLE #4729 #6168 (Guillaume Tassery)
  • Перезагрузка конфигурации хранилища из конфигурационного файла на лету. #8594 (Vladimir Chebotarev)
  • Разрешено изменять storage_policy только на не менее «богатую» политику. #8107 (Vladimir Chebotarev)
  • Добавлена поддержка глобов/подстановочных символов в хранилище S3 и табличной функции. #8851 (Vladimir Chebotarev)
  • Реализованы функции bitAnd, bitOr, bitXor, bitNot для типа данных FixedString(N). #9091 (Guillaume Tassery)
  • Добавлена функция bitCount. Это решает проблему #8702. #8708 (alexey-milovidov) #8749 (ikopylov)
  • Добавлена табличная функция generateRandom для генерации случайных строк с заданной схемой. Позволяет заполнять произвольную тестовую таблицу данными. #8994 (Ilya Yatsishin)
  • JSONEachRowFormat: добавлена поддержка частного случая, когда объекты находятся в массиве верхнего уровня. #8860 (Kruglov Pavel)
  • Теперь можно создать столбец с выражением DEFAULT, которое зависит от столбца с выражением ALIAS по умолчанию. #9489 (alesapin)
  • Теперь в clickhouse-obfuscator можно указывать --limit, превышающий размер исходных данных. Данные будут повторяться с другим случайным seed. #9155 (alexey-milovidov)
  • Добавлена функция groupArraySample (аналогичная groupArray) с алгоритмом резервуарной выборки (reservoir sampling). #8286 (Amos Bird)
  • Теперь вы можете отслеживать размер очереди обновлений в словарях cache/complex_key_cache с помощью системных метрик. #9413 (Nikita Mikhaylov)
  • Добавлена возможность использовать CRLF как разделитель строк в формате вывода CSV, когда настройка output_format_csv_crlf_end_of_line установлена в значение 1 #8934 #8935 #8963 (Mikhail Korotov)
  • Реализованы дополнительные функции API H3: h3GetBaseCell, h3HexAreaM2, h3IndexesAreNeighbors, h3ToChildren, h3ToString и stringToH3 #8938 (Nico Mandery)
  • Добавлена новая настройка: max_parser_depth для управления максимальным размером стека и выполнения больших сложных запросов. Это исправляет #6681 и #7668. #8647 (Maxim Smirnov)
  • Добавлена настройка force_optimize_skip_unused_shards, которая вызывает исключение, если невозможно пропустить неиспользуемые шарды #8805 (Azat Khuzhin)
  • Добавлена возможность настраивать несколько дисков/томов для хранения данных, отправляемых движком Distributed #8756 (Azat Khuzhin)
  • Добавлена поддержка политики хранения (<tmp_policy>) для временных данных. #8750 (Azat Khuzhin)
  • Добавлен HTTP‑заголовок X-ClickHouse-Exception-Code, который устанавливается, если было выброшено исключение до отправки данных. Реализация #4971. #8786 (Mikhail Korotov)
  • Добавлена функция ifNotFinite. Это просто синтаксический сахар: ifNotFinite(x, y) = isFinite(x) ? x : y. #8710 (alexey-milovidov)
  • Добавлен столбец last_successful_update_time в таблицу system.dictionaries #9394 (Nikita Mikhaylov)
  • Добавлена функция blockSerializedSize (размер на диске без учёта сжатия) #8952 (Azat Khuzhin)
  • Добавлена функция moduloOrZero #9358 (hcz)
  • Добавлены системные таблицы system.zeros и system.zeros_mt, а также табличные функции zeros() и zeros_mt(). Таблицы (и табличные функции) содержат единственный столбец с именем zero и типом UInt8. Этот столбец содержит нули. Они нужны для тестовых целей как самый быстрый способ генерации большого числа строк. Это исправляет #6604 #9593 (Nikolai Kochetov)

Экспериментальная функция

  • Добавлен новый компактный формат частей в таблицах семейства MergeTree, в котором все столбцы хранятся в одном файле. Это помогает увеличить производительность при небольших и частых вставках данных. Старый формат (один файл на столбец) теперь называется широким. Формат хранения данных управляется настройками min_bytes_for_wide_part и min_rows_for_wide_part. #8290 (Anton Popov)
  • Поддержка хранилища S3 для таблиц Log, TinyLog и StripeLog. #8862 (Pavel Kovalenko)

Исправление ошибки

  • Исправлено неконсистентное использование пробелов в сообщениях лога. #9322 (alexey-milovidov)
  • Исправлена ошибка, из-за которой массивы безымянных кортежей при создании таблицы разворачивались в тип Nested. #8866 (achulkov2)
  • Исправлена проблема, при которой могла возникать ошибка «Too many open files», если в таблице File или табличной функции file было слишком много файлов, соответствующих шаблону glob. Теперь файлы открываются по требованию. Это исправляет #8857 #8861 (alexey-milovidov)
  • Оператор DROP TEMPORARY TABLE теперь удаляет только временную таблицу. #8907 (Vitaly Baranov)
  • Удалять устаревшую партицию при остановке сервера или выполнении DETACH/ATTACH таблицы. #8602 (Guillaume Tassery)
  • Для диска по умолчанию изменён способ расчёта объёма свободного места на основе подкаталога data. Исправлена ошибка, из-за которой объём свободного пространства вычислялся некорректно, если каталог data был примонтирован на отдельное устройство (редкий случай). Это исправляет #7441 #9257 (Mikhail Korotov)
  • Разрешено использование соединения таблиц через запятую (comma/cross join) с IN () внутри. #9251 (Artem Zuikov)
  • Добавлена возможность переписывать CROSS в INNER JOIN, если в секции WHERE присутствует оператор [NOT] LIKE. #9229 (Artem Zuikov)
  • Исправлено возможное получение некорректного результата после GROUP BY при включённой настройке distributed_aggregation_memory_efficient. Исправляет #9134. #9289 (Nikolai Kochetov)
  • Найденные ключи засчитывались как промахи в метриках кэш-словарей. #9411 (Nikita Mikhaylov)
  • Исправлена несовместимость протокола репликации, внесённая в #8598. #9412 (alesapin)
  • Исправлено условие гонки в queue_task_handle при запуске таблиц ReplicatedMergeTree. #9552 (alexey-milovidov)
  • Ключевое слово NOT не работало в запросе SHOW TABLES NOT LIKE #8727 #8940 (alexey-milovidov)
  • Добавлена проверка диапазона для функции h3EdgeLengthM. Без этой проверки возможно переполнение буфера. #8945 (alexey-milovidov)
  • Исправлена ошибка в пакетных вычислениях тернарных логических операторов с числом аргументов более 10. #8718 (Alexander Kazakov)
  • Исправлена ошибка оптимизации PREWHERE, которая могла приводить к ошибкам сегментации (segmentation fault) или к исключению Inconsistent number of columns got from MergeTreeRangeReader. #9024 (Anton Popov)
  • Исправлено неожиданное исключение Timeout exceeded while reading from socket, которое иногда возникает при защищённом подключении до фактического истечения тайм-аута и при включённом профайлере запросов. Также добавлен параметр connect_timeout_with_failover_secure_ms (по умолчанию 100 мс), аналогичный connect_timeout_with_failover_ms, но используемый для защищённых подключений (так как SSL-рукопожатие медленнее, чем обычное TCP‑подключение) #9026 (tavplubix)
  • Исправлена ошибка при финализации мутаций, из-за которой мутация могла зависнуть в состоянии с parts_to_do=0 и is_done=0. #9022 (alesapin)
  • Используйте новую логику ANY JOIN с параметром partial_merge_join. Теперь можно выполнять соединения ANY|ALL|SEMI LEFT и ALL INNER с partial_merge_join=1. #8932 (Artem Zuikov)
  • Теперь шард приводит настройки, полученные от инициатора, к собственным ограничениям вместо генерации исключения. Это исправление позволяет отправлять запросы на шард с отличающимися ограничениями. #9447 (Vitaly Baranov)
  • Исправлена проблема с управлением памятью в MergeTreeReadPool. #8791 (Vladimir Chebotarev)
  • Исправлено семейство функций toDecimal*OrNull() при вызове со строковым аргументом e. Исправляет #8312 #8764 (Artem Zuikov)
  • Убедитесь, что FORMAT Null не отправляет данные клиенту. #8767 (Alexander Kuzmenkov)
  • Исправлена ошибка, из-за которой метка времени в LiveViewBlockInputStream не обновлялась. LIVE VIEW — экспериментальная функция. #8644 (vxider) #8625 (vxider)
  • Исправлено некорректное поведение ALTER MODIFY TTL, которое не позволяло удалить старые выражения TTL. #8422 (Vladimir Chebotarev)
  • Исправлено предупреждение UBSan в MergeTreeIndexSet, что устраняет #9250 #9365 (alexey-milovidov)
  • Исправлено поведение функций match и extract, когда haystack содержит ноль байт. Поведение было некорректным, когда haystack являлся константой. Это исправляет #9160 #9163 (alexey-milovidov) #9345 (alexey-milovidov)
  • Предотвращено выбрасывание исключений из деструктора в сторонней библиотеке Apache Avro. #9066 (Andrew Onyshchuk)
  • Не фиксируйте пакет, полученный из Kafka, частично, так как это может привести к пропускам в данных. #8876 (filimonov)
  • Исправлена работа функции joinGet с nullable-типами возвращаемых значений. #8919 #9014 (Amos Bird)
  • Исправлена проблема несовместимости данных при сжатии с помощью кодека T64. #9016 (Artem Zuikov) Исправлены идентификаторы типов данных в кодеке сжатия T64, приводившие к некорректному (де)сжатию в затронутых версиях. #9033 (Artem Zuikov)
  • Добавлена настройка enable_early_constant_folding; в случаях, когда её использование приводит к ошибкам, она отключается. #9010 (Artem Zuikov)
  • Исправлен оптимизатор проталкивания предикатов для VIEW и включён тест #9011 (Winter Zhang)
  • Исправлена ошибка сегментации в таблицах Merge, которая могла возникать при чтении из хранилищ File #9387 (tavplubix)
  • Добавлена проверка политики хранения в ATTACH PARTITION FROM, REPLACE PARTITION, MOVE TO TABLE. Без неё после перезапуска данные части таблицы могли стать недоступны и помешать запуску ClickHouse. #9383 (Vladimir Chebotarev)
  • Исправлена работа операторов ALTER, если для таблицы задан TTL. #8800 (Anton Popov)
  • Исправлено состояние гонки, которое могло возникать при выполнении команды SYSTEM RELOAD ALL DICTIONARIES, если в это время какой-либо словарь изменялся/добавлялся/удалялся. #8801 (Vitaly Baranov)
  • В предыдущих версиях движок базы данных Memory использовал пустой путь к данным, поэтому таблицы создавались в директории path (например, /var/lib/clickhouse/), а не в директории данных самой базы данных (например, /var/lib/clickhouse/db_name). #8753 (tavplubix)
  • Исправлены неверные сообщения журнала об отсутствующем диске или политике по умолчанию. #9530 (Vladimir Chebotarev)
  • Исправлена ошибка в работе not(has()) для индекса bloom_filter для типов массивов. #9407 (achimbab)
  • Разрешить использование первых столбцов в таблице с движком Log в качестве алиасов #9231 (Ivan)
  • Исправлен порядок диапазонов при чтении из таблицы MergeTree в одном потоке. Это могло приводить к исключениям в MergeTreeRangeReader или некорректным результатам запросов. #9050 (Anton Popov)
  • Изменить reinterpretAsFixedString, чтобы она возвращала FixedString вместо String. #9052 (Andrew Onyshchuk)
  • Исключены крайне редкие случаи, когда пользователь мог получить неверное сообщение об ошибке (Success вместо подробного описания ошибки). #9457 (alexey-milovidov)
  • Не падать при использовании формата Template с пустым шаблоном строки. #8785 (Alexander Kuzmenkov)
  • Файлы метаданных для системных таблиц могли создаваться не в том месте #8653 (tavplubix). Исправлена проблема #8581.
  • Исправлена гонка данных для exception_ptr в кэш-словаре #8303. #9379 (Nikita Mikhaylov)
  • Не генерировать исключение для запроса ATTACH TABLE IF NOT EXISTS. Ранее оно генерировалось, если таблица уже существовала, несмотря на предложение IF NOT EXISTS. #8967 (Anton Popov)
  • Исправлено отсутствие закрывающей скобки в сообщении об исключении. #8811 (alexey-milovidov)
  • Исключено появление сообщения Possible deadlock avoided при запуске clickhouse-client в интерактивном режиме. #9455 (alexey-milovidov)
  • Исправлена проблема, из-за которой заполнение (padding) в конце значения, закодированного в base64, могло быть некорректным. Обновлена библиотека base64. Это исправляет #9491, закрывает #9492 #9500 (alexey-milovidov)
  • Предотвращает потерю данных в Kafka в редких случаях, когда возникает исключение после чтения суффикса, но до его коммита. Исправляет #9378 #9507 (filimonov)
  • Исправлено исключение при выполнении DROP TABLE IF EXISTS #8663 (Nikita Vasilev)
  • Исправлено падение при попытке пользователя выполнить ALTER MODIFY SETTING для таблиц семейства движков MergeTree в старом формате. #9435 (alesapin)
  • Поддержка чисел типа UInt64, которые не помещаются в Int64, в JSON-функциях. Обновлён SIMDJSON до актуальной ветки master. Исправляет #9209 #9344 (alexey-milovidov)
  • Исправлено выполнение обратных предикатов при использовании нестрого монотонного функционального индекса. #9223 (Alexander Kazakov)
  • Не сворачивать константу IN в GROUP BY #8868 (Amos Bird)
  • Исправлена ошибка в мутациях ALTER DELETE, которая приводила к повреждению индекса. Это исправляет #9019 и #8982. Также исправлены крайне редкие условия гонки в запросах ALTER для ReplicatedMergeTree. #9048 (alesapin)
  • При включённой настройке compile_expressions при использовании типа Nullable может возникнуть ошибка unexpected column в LLVMExecutableFunction #8910 (Guillaume Tassery)
  • Несколько исправлений для движка Kafka: 1) исправлены дубликаты, которые появлялись во время ребалансировки группы потребителей. 2) Исправлены редкие «пропуски», возникавшие при опросе данных из нескольких партиций одним poll с частичным коммитом (теперь мы всегда обрабатываем и коммитим весь опрошенный блок сообщений). 3) Исправлен сброс (flush) по размеру блока (до этого корректно работал только сброс по тайм-ауту). 4) улучшена процедура подписки (с обратной связью по assignment). 5) Ускорены тесты (с использованием значений интервалов и тайм-аутов по умолчанию). Из-за того, что ранее данные не сбрасывались по размеру блока (как должно быть согласно документации), этот PR может привести к некоторой деградации производительности с настройками по умолчанию (из-за более частых и меньших по размеру сбросов, которые менее оптимальны). Если вы столкнетесь с проблемами производительности после этого изменения — увеличьте kafka_max_block_size в таблице до большего значения (например, CREATE TABLE ...Engine=Kafka ... SETTINGS ... kafka_max_block_size=524288). Исправляет #7259 #8917 (filimonov)
  • Исправлена ошибка, приводившая к исключению Parameter out of bound в некоторых запросах после оптимизаций PREWHERE. #8914 (Baudouin Giard)
  • Исправлена обработка аргументов с разной константностью в функции arrayZip. #8705 (alexey-milovidov)
  • При выполнении запроса CREATE сворачивать константные выражения в аргументах движка хранения. Заменять пустое имя базы данных на текущую базу данных. Исправлены #6508, #3492, #9262 (tavplubix)
  • Теперь нельзя создавать или добавлять столбцы с простыми циклическими псевдонимами, такими как a DEFAULT b, b DEFAULT a. #9603 (alesapin)
  • Исправлена ошибка с двойным перемещением, которая могла приводить к повреждению исходной части данных. Это актуально, если вы используете ALTER TABLE MOVE #8680 (Vladimir Chebotarev)
  • Теперь идентификатор interval корректно разбирается без обратных кавычек. Исправлена проблема, из-за которой запрос не удавалось выполнить даже при заключении идентификатора interval в обратные или двойные кавычки. Исправляет #9124. #9142 (alexey-milovidov)
  • Исправлены fuzz-тест и некорректное поведение функций bitTestAll/bitTestAny. #9143 (alexey-milovidov)
  • Исправлен возможный сбой или неверное число строк в LIMIT n WITH TIES при большом количестве строк, совпадающих с n-й строкой. #9464 (tavplubix)
  • Исправлены мутации для частей, записанных при включённом insert_quorum. #9463 (alesapin)
  • Исправлена гонка данных при уничтожении Poco::HTTPServer. Она могла возникнуть, когда сервер запускался и сразу же останавливался. #9468 (Anton Popov)
  • Исправлена ошибка, из-за которой при выполнении SHOW CREATE TABLE a_table_that_does_not_exist отображалось вводящее в заблуждение сообщение об ошибке. #8899 (achulkov2)
  • Исправлено исключение Parameters are out of bound в редких случаях, когда в предложении SELECT присутствует константа при наличии предложений ORDER BY и LIMIT. #8892 (Guillaume Tassery)
  • Исправлена ошибка финализации мутаций, из-за которой уже выполненная мутация могла иметь статус is_done=0. #9217 (alesapin)
  • Предотвращено выполнение ALTER ADD INDEX для таблиц MergeTree со старым синтаксисом, поскольку он не работает. #8822 (Mikhail Korotov)
  • Во время запуска сервера не обращайтесь к таблице, от которой зависит LIVE VIEW, чтобы сервер смог успешно запуститься. Также удаляйте зависимости LIVE VIEW при отсоединении LIVE VIEW. LIVE VIEW — экспериментальная функция. #8824 (tavplubix)
  • Исправлена возможная ошибка сегментации в MergeTreeRangeReader при выполнении PREWHERE. #9106 (Anton Popov)
  • Исправлено возможное несовпадение контрольных сумм для столбцов с TTL. #9451 (Anton Popov)
  • Исправлена ошибка, из‑за которой части не переносились в фоновом режиме по правилам TTL в случае, когда был только один том. #8672 (Vladimir Chebotarev)
  • Исправлена проблема Method createColumn() is not implemented for data type Set. Тем самым исправлена #7799. #8674 (alexey-milovidov)
  • Теперь мы будем чаще выполнять финализацию мутаций. #9427 (alesapin)
  • Исправлена intDiv за счёт уменьшения константы на единицу #9351 (hcz)
  • Исправлена возможная гонка в BlockIO. #9356 (Nikolai Kochetov)
  • Исправлена ошибка, приводившая к завершению работы сервера при попытке использовать или удалить таблицу Kafka, созданную с неверными параметрами. #9513 (filimonov)
  • Добавлено обходное решение на случай, если ОС возвращает неверный результат для функции timer_create. #8837 (alexey-milovidov)
  • Исправлена ошибка в использовании параметра min_marks_for_seek. Исправлено сообщение об ошибке, возникавшей при отсутствии ключа шардинга в таблице Distributed при попытке пропустить неиспользуемые шарды. #8908 (Azat Khuzhin)

Улучшение

  • Реализованы запросы ALTER MODIFY/DROP на основе мутаций для семейства движков ReplicatedMergeTree*. Теперь операторы ALTER блокируют только на этапе обновления метаданных и не блокируют после него. #8701 (alesapin)
  • Добавлена возможность переписывать CROSS JOIN в INNER JOIN при наличии предложения WHERE, содержащего неквалифицированные имена. #9512 (Artem Zuиков)
  • Добавить для запросов SHOW TABLES и SHOW DATABASES поддержку выражений WHERE и FROM/IN #9076 (sundyli)
  • Добавлен параметр deduplicate_blocks_in_dependent_materialized_views. #9070 (urykhy)
  • После недавних изменений клиент MySQL начал выводить бинарные строки в шестнадцатеричном виде, из-за чего они стали нечитаемыми (#9032). Обходной путь в ClickHouse — пометить строковые столбцы как UTF-8, что подходит не всегда, но в большинстве случаев. #9079 (Yuriy Baranov)
  • Добавлена поддержка ключей типов String и FixedString в функции sumMap #8903 (Baudouin Giard)
  • Поддержка строковых ключей в столбцах Map в SummingMergeTree #8933 (Baudouin Giard)
  • Сигнализировать пулу потоков о завершении потока, даже если поток завершился с исключением #8736 (Ding Xiang Fei)
  • Добавлена возможность задавать query_id в clickhouse-benchmark #9416 (Anton Popov)
  • Не допускается использование некорректных выражений в запросе ALTER TABLE ... PARTITION partition. Это исправляет #7192 #8835 (alexey-milovidov)
  • Таблица system.table_engines теперь предоставляет информацию о поддержке функций (таких как supports_ttl или supports_sort_order). #8830 (Max Akhmedov)
  • system.metric_log теперь включен по умолчанию. Он будет содержать строки со значениями ProfileEvents и CurrentMetrics, собираемыми с интервалом collect_interval_milliseconds (одна секунда по умолчанию). Таблица очень маленькая (обычно размером в несколько мегабайт), поэтому разумно собирать эти данные по умолчанию. #9225 (alexey-milovidov)
  • Инициализирован профилировщик запросов для всех потоков в группе, что, в частности, позволяет полностью профилировать запросы INSERT. Исправляет #6964 #8874 (Ivan)
  • Теперь временное представление LIVE VIEW создаётся с помощью CREATE LIVE VIEW name WITH TIMEOUT [42] ... вместо CREATE TEMPORARY LIVE VIEW ..., поскольку предыдущий синтаксис не был согласован с CREATE TEMPORARY TABLE ... #9131 (tavplubix)
  • Добавлен параметр конфигурации text_log.level для ограничения записей, попадающих в таблицу system.text_log #8809 (Azat Khuzhin)
  • Добавлена возможность размещать загруженную часть на дисках/томах в соответствии с правилами TTL #8598 (Vladimir Chebotarev)
  • Для внешних словарей MySQL добавлена возможность совместного использования пула подключений MySQL между словарями, что значительно снижает количество подключений к серверам MySQL. #9409 (Clément Rodriguez)
  • В clickhouse-benchmark отображать ближайшее фактическое время выполнения запросов для квантилей вместо интерполированных значений. Лучше показывать значения, соответствующие времени выполнения конкретных запросов. #8712 (alexey-milovidov)
  • Добавлена возможность задавать ключ и временную метку сообщения при вставке данных в Kafka. Исправлены #7198 #8969 (filimonov)
  • Если сервер запущен из терминала, номер потока, идентификатор запроса и приоритет лога выделяются цветом. Это улучшает читаемость коррелированных лог-сообщений для разработчиков. #8961 (alexey-milovidov)
  • Улучшено сообщение об ошибке при загрузке таблиц базы данных Ordinary. #9527 (alexey-milovidov)
  • Реализована поддержка arraySlice для массивов состояний агрегатных функций. Исправляет #9388 #9391 (alexey-milovidov)
  • Разрешено использование константных функций и константных массивов в правой части оператора IN. #8813 (Anton Popov)
  • Если при получении данных для system.replicas произошло исключение ZooKeeper, выводить его в отдельном столбце. Реализует #9137 #9138 (alexey-milovidov)
  • Атомарное удаление частей данных MergeTree при удалении. #8402 (Vladimir Chebotarev)
  • Добавлена поддержка безопасности на уровне строк (row-level security) для распределённых таблиц (Distributed). #8926 (Ivan)
  • Теперь в значениях настроек распознаются суффиксы (например, KB, KiB и т. д.). #8072 (Mikhail Korotov)
  • Предотвращено переполнение памяти при построении результата большого JOIN. #8637 (Artem Zuikov)
  • В интерактивном режиме clickhouse-client в подсказки добавлены имена кластеров. #8709 (alexey-milovidov)
  • Инициализация профилировщика запросов для всех потоков в группе, что, например, позволяет полностью профилировать запросы INSERT #8820 (Ivan)
  • В таблицу system.query_log добавлен столбец exception_code. #8770 (Mikhail Korotov)
  • Включён сервер, совместимый с MySQL, на порту 9004 в файле конфигурации сервера по умолчанию. Исправлена команда для генерации пароля в примере конфигурации. #8771 (Yuriy Baranov)
  • Предотвращено аварийное завершение при остановке, если файловая система смонтирована только для чтения. Исправляет #9094 #9100 (alexey-milovidov)
  • Улучшено сообщение об исключении, когда для HTTP POST-запроса требуется указать длину. #9453 (alexey-milovidov)
  • Добавлены виртуальные столбцы _path и _file в движки HDFS и File, а также в табличные функции hdfs и file #8489 (Olga Khvостикova)
  • Исправлена ошибка Cannot find column при вставке данных в MATERIALIZED VIEW, если во внутреннюю таблицу представления был добавлен новый столбец. #8766 #8788 (vzakaznikov) #8788 #8806 (Nikolai Kochetov) #8803 (Nikolai Kochetov)
  • Исправлена отправка прогресса по нативному клиент-серверному протоколу: теперь он отправляется после финального обновления (как в случае с логами). Это может быть актуально только для некоторых сторонних инструментов, использующих нативный протокол. #9495 (Azat Khuzhin)
  • Добавлена системная метрика, отслеживающая количество клиентских соединений по протоколу MySQL (#9013). #9015 (Eugene Klimov)
  • Теперь HTTP-ответы содержат заголовок X-ClickHouse-Timezone с тем же значением часового пояса, которое возвращает SELECT timezone(). #9493 (Denis Glazachev)

Улучшения производительности

  • Повышена производительность анализа индекса с оператором IN #9261 (Anton Popov)
  • Более простой и эффективный код в Logical Functions + рефакторинг кода. Доработка по отношению к #8718 #8728 (Alexander Kazakov)
  • Общее улучшение производительности (в диапазоне 5%..200% для затронутых запросов) за счёт ещё более строгого aliasing с использованием возможностей C++20. #9304 (Amos Bird)
  • Более строгий aliasing для внутренних циклов функций сравнения. #9327 (alexey-milovidov)
  • Более строгий aliasing для внутренних циклов арифметических функций. #9325 (alexey-milovidov)
  • Реализация ColumnVector::replicate() стала примерно в 3 раза быстрее; через неё реализована ColumnConst::convertToFullColumn(). Это также будет полезно в тестах при материализации констант. #9293 (Alexander Kazakov)
  • Ещё одно небольшое улучшение производительности ColumnVector::replicate() (ускоряет функцию materialize и функции высшего порядка), дальнейшая доработка по #9293 #9442 (Alexander Kazakov)
  • Улучшена производительность агрегатной функции stochasticLinearRegression. Этот патч предоставлен Intel. #8652 (alexey-milovidov)
  • Улучшена производительность функции reinterpretAsFixedString. #9342 (alexey-milovidov)
  • Блоки данных не отправляются клиенту для формата Null в конвейере процессоров. #8797 (Nikolai Kochetov) #8767 (Alexander Kuzmenkov)

Улучшения сборки/тестирования/упаковки

  • Обработка исключений теперь корректно работает в Windows Subsystem for Linux. Подробности см. в https://github.com/ClickHouse-Extras/libunwind/pull/3. Это исправляет ошибки #6480 и #9564 (sobolevsv)
  • Заменён readline на replxx для интерактивного редактирования строк в clickhouse-client #8416 (Ivan)
  • Улучшено время сборки и снижено количество инстанцирований шаблонов в FunctionsComparison. #9324 (alexey-milovidov)
  • Добавлена интеграция clang-tidy в CI. См. также #6044 #9566 (alexey-milovidov)
  • Теперь в CI мы линкуем ClickHouse с помощью lld даже при использовании gcc. #9049 (alesapin)
  • Позволяет случайным образом изменять планирование потоков и вносить сбои, когда установлены переменные окружения THREAD_FUZZER_*. Это помогает при тестировании. #9459 (alexey-milovidov)
  • Включена поддержка защищённых сокетов для stateless-тестов #9288 (tavplubix)
  • Повысить надёжность SPLIT_SHARED_LIBRARIES=OFF #9156 (Azat Khuzhin)
  • Сделайте тест "performance_introspection_and_logging" устойчивым к случайным зависаниям сервера. Это может произойти в среде CI. См. также #9515 #9528 (alexey-milovidov)
  • Проверять XML при проверке стиля кода. #9550 (alexey-milovidov)
  • Исправлено состояние гонки в тесте 00738_lock_for_inner_table. Этот тест использовал sleep. #9555 (alexey-milovidov)
  • Удалены тесты производительности типа once. Это необходимо для запуска всех тестов производительности в режиме статистического сравнения (более надёжно). #9557 (alexey-milovidov)
  • Добавлен тест производительности для арифметических функций. #9326 (alexey-milovidov)
  • Добавлен тест производительности для агрегатных функций sumMap и sumMapWithOverflow. Продолжение к #8933 #8947 (alexey-milovidov)
  • Добавлена проверка стиля для ErrorCodes. #9370 (alexey-milovidov)
  • Добавлен скрипт для истории тестов. #8796 (alesapin)
  • Добавлено предупреждение GCC -Wsuggest-override для поиска и исправления всех случаев, когда должно использоваться ключевое слово override. #8760 (kreuzerkrieg)
  • Игнорировать слабый символ в Mac OS X, так как он должен быть определён #9538 (Deleted user)
  • Нормализовано время выполнения некоторых запросов в тестах производительности. Это сделано в рамках подготовки к запуску всех тестов производительности в сравнительном режиме. #9565 (alexey-milovidov)
  • Исправлены некоторые тесты для поддержки pytest при выполнении тестов запросов #9062 (Ivan)
  • Включить SSL при сборке с MSan, чтобы сервер не падал при запуске stateless-тестов #9531 (tavplubix)
  • Исправлена подстановка базы данных в результатах тестов #9384 (Ilya Yatsishin)
  • Исправления сборки для различных платформ #9381 (proller) #8755 (proller) #8631 (proller)
  • В тестовый Docker-образ stateless-with-coverage добавлен раздел disks #9213 (Pavel Kovalenko)
  • Исключены файлы из дерева исходников при сборке с GRPC #9588 (Amos Bird)
  • Незначительно ускорено время сборки за счёт удаления SessionCleaner из Context. Упрощён код SessionCleaner. #9232 (alexey-milovidov)
  • Обновлена проверка зависших запросов в скрипте clickhouse-test #8858 (Alexander Kazakov)
  • Удалены некоторые ненужные файлы из репозитория. #8843 (alexey-milovidov)
  • Изменён тип тестов производительности math с once на loop. #8783 (Nikolai Kochetov)
  • Добавлен docker-образ, который позволяет собирать интерактивный HTML-отчёт‑браузер кода для нашей кодовой базы. #8781 (alesapin) См. Woboq Code Browser
  • Подавлено несколько сбоев тестов под MSan. #8780 (Alexander Kuzmenkov)
  • Ускорен тест "exception while insert". Этот тест часто завершался по таймауту в сборке debug-with-coverage. #8711 (alexey-milovidov)
  • Обновлены libcxx и libcxxabi до ветки master. В рамках подготовки к #9304 #9308 (alexey-milovidov)
  • Исправлен нестабильно работающий тест 00910_zookeeper_test_alter_compression_codecs. #9525 (alexey-milovidov)
  • Очистить дублирующиеся флаги компоновщика. Убедиться, что компоновщик не будет пытаться разрешить неожиданный символ. #9433 (Amos Bird)
  • Добавлен драйвер clickhouse-odbc в тестовые образы. Это позволяет тестировать взаимодействие ClickHouse с самим собой через собственный ODBC-драйвер. #9348 (filimonov)
  • Исправлено несколько ошибок в модульных тестах. #9047 (alesapin)
  • Включено предупреждение GCC -Wmissing-include-dirs для выявления всех несуществующих include‑директорий — в основном возникающих из‑за ошибок скриптов CMake #8704 (kreuzerkrieg)
  • Описать причины, по которым профилировщик запросов может не работать. Предназначено для #9049 #9144 (alexey-milovidov)
  • Обновлён OpenSSL до актуального upstream master. Исправлена проблема, при которой TLS‑соединения могли завершаться с сообщениями OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error и SSL Exception: error:2400006E:random number generator::error retrieving entropy. Проблема наблюдалась в версии 20.1. #8956 (alexey-milovidov)
  • Обновление Dockerfile сервера #8893 (Ilya Mazaev)
  • Незначительные исправления в скрипте build-gcc-from-sources #8774 (Michael Nacharov)
  • Заменить numbers на zeros в тестах производительности, где столбец number не используется. Это даст более чистые результаты тестов. #9600 (Nikolai Kochetov)
  • Исправлена ошибка переполнения стека при использовании initializer_list в конструкторах Column. #9367 (Deleted user)
  • Обновлена librdkafka до v1.3.0. Включены поставляемые в комплекте библиотеки rdkafka и gsasl на Mac OS X. #9000 (Andrew Onyshchuk)
  • исправление сборки под GCC 9.2.0 #9306 (vxider)

Релиз ClickHouse v20.1

Релиз ClickHouse v20.1.16.120-stable 2020-60-26

Исправление ошибок

  • Исправлен редкий сбой, вызванный использованием столбца Nullable в условии prewhere. Продолжение #11608. #11869 (Nikolai Kochetov).
  • Запрещён arrayJoin внутри функций высшего порядка. Это приводило к нарушению синхронизации протокола. Закрывает #3933. #11846 (alexey-milovidov).
  • Исправлено неожиданное поведение запросов вида SELECT *, xyz.*, которые успешно выполнялись, хотя ожидалась ошибка. #11753 (hexiaoting).
  • Исправлена LOGICAL_ERROR, вызванная некорректным выводом типов сложных литералов во входном формате Values. #11732 (tavplubix).
  • Исправлен ORDER BY ... WITH FILL для константных столбцов. #11697 (Anton Popov).
  • Передаются корректные таймауты при взаимодействии с мостом XDBC. Ранее таймауты не соблюдались при проверке доступности моста и получении метаинформации. #11690 (alexey-milovidov).
  • Добавлена поддержка регулярных выражений с флагами нечувствительности к регистру. Исправляет #11101 и #11506. #11649 (alexey-milovidov).
  • Исправлены фильтры Блума для String (индексы пропуска данных). #11638 (Azat Khuzhin).
  • Исправлен редкий сбой, вызванный использованием столбца Nullable в условии prewhere. (Вероятно, это как-то связано с #11572). #11608 (Nikolai Kochetov).
  • Исправлен неверный код выхода clickhouse-client, когда exception.code() % 256 = 0. #11601 (filimonov).
  • Исправлена тривиальная ошибка в сообщении лога "Mark cache size was lowered" при запуске сервера. Закрывает #11399. #11589 (alexey-milovidov).
  • Теперь Docker-контейнер clickhouse-server будет отдавать предпочтение IPv6 при проверке доступности сервера. #11550 (Ivan Starkov).
  • Исправлена утечка памяти, возникавшая при генерации исключения в середине агрегации с функциями с суффиксом -State. Исправляет #8995. #11496 (alexey-milovidov).
  • Исправлено использование первичного ключа, обёрнутого в функцию с модификатором 'FINAL' и оптимизацией 'ORDER BY'. #10715 (Anton Popov).

Релиз ClickHouse v20.1.15.109-stable 2020-06-19

Исправление ошибки

  • Исправлена избыточная блокировка структуры во время ALTER-запроса. #11790 (alesapin).

Релиз ClickHouse v20.1.14.107-stable 2020-06-11

Исправление ошибки

  • Исправлена ошибка Size of offsets does not match size of column для запросов с PREWHERE column in (subquery) и ARRAY JOIN. #11580 (Nikolai Kochetov).

Релиз ClickHouse v20.1.13.105-stable 2020-06-10

Исправление ошибки

  • Исправлена ошибка Data compressed with different methods, возникавшая, когда был включён min_bytes_to_use_direct_io, а PREWHERE использовался совместно с SAMPLE или большим числом потоков. Это исправляет #11539. #11540 (alexey-milovidov).
  • Исправлен возврат сжатого размера для кодеков. #11448 (Nikolai Kochetov).
  • Исправлен сбой сервера, возникавший, когда у столбца был кодек сжатия с нелитеральными аргументами. Исправляет проблему #11365. #11431 (alesapin).
  • Исправлена ошибка в pointInPolygon при использовании NaN в качестве точки. Исправление для #11375. #11421 (Alexey Ilyukhov).
  • Исправлена функция geohashesInBox для аргументов, выходящих за пределы диапазона широты/долготы. #11403 (Vasily Nemkov).
  • Исправлена потенциальная ошибка Pipeline stuck при выполнении запросов с внешней сортировкой и ограничением (LIMIT). Исправляет #11359. #11366 (Nikolai Kochetov).
  • Исправлен сбой в quantilesExactWeightedArray. #11337 (Nikolai Kochetov).
  • Снова сделана параллельной запись в MATERIALIZED VIEW с настройкой parallel_view_processing = 1. Исправляет #10241. #11330 (Nikolai Kochetov).
  • Исправлена visitParamExtractRaw в случае, когда извлечённый JSON содержит строки с несбалансированными { или [. #11318 (Ewout).
  • Исправлена крайне редкая гонка (race condition) в ThreadPool. #11314 (alexey-milovidov).
  • Исправлена потенциальная проблема с неинициализированной памятью при преобразовании. Пример: SELECT toIntervalSecond(now64()). #11311 (alexey-milovidov).
  • Исправлена проблема, из-за которой анализ индекса не работал, если в первичном ключе таблицы присутствует столбец типа Array и запрос фильтрует по этому столбцу с использованием функций empty или notEmpty. Это исправляет #11286. #11303 (alexey-milovidov).
  • Исправлена ошибка, из-за которой оценка скорости выполнения запроса могла быть некорректной, а ограничение min_execution_speed могло не работать или работать неправильно, если запрос ограничивался настройками max_network_bandwidth, max_execution_speed или priority. Значение по умолчанию для timeout_before_checking_execution_speed изменено на ненулевое, потому что иначе настройки min_execution_speed и max_execution_speed не оказывают никакого эффекта. Это исправляет #11297. Это исправляет #5732. Это исправляет #6228. Улучшение удобства использования: исключено склеивание сообщения об исключении с индикатором прогресса в clickhouse-client. #11296 (alexey-milovidov).
  • Исправлено падение при чтении некорректных данных в формате Protobuf. Исправлены #5957, #11203. #11258 (Vitaly Baranov).
  • Исправлена возможная ошибка Cannot capture column для функций высшего порядка, захватывающих аргумент типа Array(Array(LowCardinality)). #11185 (Nikolai Kochetov).
  • Если индекс пропуска данных зависит от столбцов, которые будут изменяться в процессе фонового слияния (для SummingMergeTree, AggregatingMergeTree, а также для TTL GROUP BY), он вычислялся некорректно. Эта проблема исправлена переносом вычисления индекса на этап после слияния, чтобы индекс рассчитывался по уже слитым данным. #11162 (Azat Khuzhin).
  • Убрано логирование в задаче финализации мутаций, если ничего не было финализировано. #11109 (alesapin).
  • Исправлены ошибки обработки аргументов функции parseDateTime64BestEffort. #10925. #11038 (Vasily Nemkov).
  • Исправлен неверный размер сырых данных в методе getRawData(). #10964 (Igr).
  • Исправлена проблема с обратной совместимостью кортежей в таблицах Distributed. #10889 (Anton Popov).
  • Исправлен SIGSEGV в StringHashTable (при отсутствии такого ключа). #10870 (Azat Khuzhin).
  • Исправлена ошибка в ReplicatedMergeTree, которая могла приводить к зависанию некоторых запросов ALTER с OPTIMIZE в ожидании реплики, ставшей неактивной. #10849 (tavplubix).
  • Исправлен порядок столбцов после Block::sortColumns() (также добавлен тест, показывающий, что это затрагивает реальный сценарий использования — движок Buffer). #10826 (Azat Khuzhin).
  • Исправлена проблема с ODBC bridge при отключённом заключении идентификаторов в кавычки. Это исправляет #7984. #10821 (alexey-milovidov).
  • Исправлены ошибки, выявленные UBSan и MSan, в DateLUT. #10798 (alexey-milovidov).
    • Используйте src_type для корректного приведения типов в условиях по ключу. Исправляет #6287. #10791 (Andrew Onyshchuk).
  • Исправлено поведение parallel_view_processing. Теперь все вставки в MATERIALIZED VIEW должны завершаться даже при возникновении исключения. Исправляет #10241. #10757 (Nikolai Kochetov).
  • Исправлена работа комбинаторов -OrNull и -OrDefault при их совместном использовании с комбинатором -State. #10741 (hcz).
  • Исправлена проблема с исчезающими итогами. Итоги могли быть отфильтрованы, если запрос содержал JOIN или подзапрос с внешним условием WHERE. Исправляет #10674. #10698 (Nikolai Kochetov).
  • Исправлено повторяющееся использование оператора IN с одним и тем же набором значений в одном запросе. #10686 (Anton Popov).
  • Исправлен порядок аргументов в конструкторе AggregateTransform. #10667 (palasonic1).
  • Устранена проблема отсутствия параллельного выполнения удалённых запросов при включённом distributed_aggregation_memory_efficient. Исправляет #10655. #10664 (Nikolai Kochetov).
  • Исправлена оптимизация предикатов для распределённых запросов (enable_optimize_predicate_expression=1) для запросов с секцией HAVING (то есть когда требуется фильтрация на сервере-инициаторе) за счёт сохранения порядка выражений (и этого достаточно для устранения проблемы), а также за счёт принудительного использования агрегатором имён столбцов вместо индексов. Исправления: #10613, #11413. #10621 (Azat Khuzhin).
  • Исправлена ошибка the BloomFilter false positive must be a double number between 0 and 1 #10551. #10569 (Winter Zhang).
  • Исправлен SELECT для псевдонима столбца, у которого тип выражения по умолчанию отличается от типа столбца. #10563 (Azat Khuzhin).
    • Реализовано сравнение значений типов DateTime64 и String (аналогично DateTime). #10560 (Vasily Nemkov).

Релиз ClickHouse v20.1.12.86, 2020-05-26

Исправление ошибки

  • Исправлена несовместимость двухуровневой агрегации между версиями 20.1 и более ранними. Эта несовместимость возникает, когда на инициирующем узле и удалённых узлах используются разные версии ClickHouse, размер результата GROUP BY большой, а агрегация выполняется по одному строковому полю (String). Это приводит к появлению в результате нескольких необъединённых строк для одного ключа. #10952 (alexey-milovidov).
  • Исправлено повреждение данных для ключевого столбца LowCardinality(FixedString) в SummingMergeTree, которое могло возникнуть после слияния. Исправляет #10489. #10721 (Nikolai Kochetov).
  • Исправлена ошибка, которая приводила к зависанию HTTP-запросов при закрытии клиента, когда readonly=2 и cancel_http_readonly_queries_on_client_close=1. Исправлены #7939, #7019, #7736, #7091. #10684 (tavplubix).
  • Исправлена ошибка, из-за которой при выполнении запроса SYSTEM DROP DNS CACHE также сбрасывались кэши, используемые для проверки, разрешено ли пользователю подключаться с определённых IP-адресов. #10608 (tavplubix).
  • Исправлены некорректные скалярные результаты во внутреннем запросе MATERIALIZED VIEW, если этот запрос содержал зависимую таблицу. #10603 (Nikolai Kochetov).
  • Исправлена ситуация, когда мутация завершала все части, но зависала в состоянии is_done=0. #10526 (alesapin).
  • Исправлена ошибка переполнения в начале эпохи Unix для часовых поясов с дробным смещением относительно UTC. Это исправляет проблему #9335. #10513 (alexey-milovidov).
  • Исправлено некорректное завершение работы хранилища Distributed. #10491 (Azat Khuzhin).
  • Исправлено переполнение целых чисел в simpleLinearRegression при очень больших целых значениях. #10474 (hcz).
  • Исправлено удаление каталога метаданных при ошибке выполнения команды ATTACH DATABASE. #10442 (Winter Zhang).
  • Добавлена проверка числа и типов аргументов при создании индекса BloomFilter #9623. #10431 (Winter Zhang).
  • Исправлена ошибка, когда запрос с ARRAY JOIN, ORDER BY и LIMIT мог возвращать неполный результат. Это исправление закрывает #10226. #10427 (alexey-milovidov).
  • Рекомендуется использовать fallback_to_stale_replicas вместо skip_unavailable_shards. #10422 (Azat Khuzhin).
  • Исправлено некорректное разворачивание типов данных Array(Tuple(...)), что устраняет ошибку #10259. #10390 (alexey-milovidov).
  • Исправлено некорректное поведение HashTable, которое вызывало ошибку компиляции при чтении HashMap из буфера. #10386 (palasonic1).
  • Исправлена возможная ошибка Pipeline stuck в ConcatProcessor, которая могла возникать при выполнении удалённого запроса. #10381 (Nikolai Kochetov).
  • Исправлена ошибка Pipeline stuck при использовании max_rows_to_group_by и group_by_overflow_mode = 'break'. #10279 (Nikolai Kochetov).
  • Исправлено несколько ошибок, возникавших, когда часть данных вставлялась с кворумом, затем каким‑то образом удалялась (DROP PARTITION, TTL), что приводило к зависанию INSERT‑запросов или ложным исключениям при выполнении SELECT. Это исправляет #9946. #10188 (Nikita Mikhaylov).
  • Исправлена несовместимость при использовании на удалённых серверах версий ниже 18.12.17, а на инициирующем сервере — более новой версии, при выполнении GROUP BY как по фиксированным, так и по нефиксированным ключам и при использовании двухуровневого метода группировки. #3254 (alexey-milovidov).

Улучшения сборки/тестирования/упаковки

  • В docker-образ clickhouse-server были добавлены сертификаты CA. #10476 (filimonov).

Релиз ClickHouse v20.1.10.70, 2020-04-17

Исправление ошибки

  • Исправлено редкое потенциальное исключение Cannot drain connections: cancel first. #10239 (Nikolai Kochetov).
  • Исправлена ошибка, из-за которой ClickHouse выдавал сообщение об ошибке 'Unknown function lambda.' при попытке пользователя выполнить ALTER UPDATE/DELETE для таблиц с ENGINE = Replicated*. Проверка недетерминированных функций теперь корректно обрабатывает lambda-выражения. #10237 (Alexander Kazakov).
  • Исправлена работа функции parseDateTimeBestEffort со строками в формате RFC-2822, если день недели — вторник или четверг. Это исправляет #10082. #10214 (alexey-milovidov).
  • Исправлены имена столбцов констант внутри оператора JOIN, которые могли конфликтовать с именами констант вне JOIN. #10207 (alexey-milovidov).
  • Исправлена возможная бесконечная работа запроса, который должен останавливаться на LIMIT при чтении из бесконечного источника, такого как system.numbers или system.zeros. #10206 (Nikolai Kochetov).
  • Исправлена оптимизация move-to-prewhere при наличии функций arrayJoin (в некоторых случаях). Это исправляет #10092. #10195 (alexey-milovidov).
  • Добавлена возможность ослабить ограничение на использование недетерминированных функций в мутациях с помощью настройки allow_nondeterministic_mutations. #10186 (filimonov).
  • Преобразовывать блоки, если их структура не совпадает со структурой таблицы при выполнении INSERT в таблицу с движком Distributed. #10135 (Azat Khuzhin).
  • Исправлен SIGSEGV при INSERT в таблицу Distributed, когда её структура отличается от структуры базовых таблиц. #10105 (Azat Khuzhin).
  • Исправлена потенциальная потеря строк в запросах с JOIN и UNION ALL. Исправлены #9826, #10113. #10099 (Nikolai Kochetov).
  • Добавлена проверка аргументов и поддержка аргументов-идентификаторов для движка базы данных MySQL. #10077 (Winter Zhang).
  • Исправлена ошибка в источнике словаря ClickHouse при использовании локального сервера ClickHouse. Ошибка могла приводить к повреждению памяти, если типы в словаре и источнике были несовместимы. #10071 (alesapin).
  • Исправлена ошибка Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransform. Она возникала при включённой настройке distributed_aggregation_memory_efficient, когда распределённый запрос читал агрегированные данные с разным уровнем агрегации с разных шардов (смешение одноуровневой и двухуровневой агрегации). #10063 (Nikolai Kochetov).
  • Исправлена ошибка сегментации, которая могла возникать при выполнении GROUP BY по строковым ключам, содержащим завершающие нулевые байты (#8636, #8925). #10025 (Alexander Kuzmenkov).
  • Исправлена ошибка, из-за которой на одном из этапов обработки запросов к некоторым базам данных не извлекались необходимые таблицы. Исправляет #9699. #9949 (achulkov2).
  • Исправлена ошибка 'Not found column in block', возникавшая, когда в запросе с TOTALS использовался JOIN. Исправление #9839. #9939 (Artem Zuikov).
  • Исправлена ошибка, из-за которой DDL-запросы с ON CLUSTER зависали при запуске сервера. #9927 (Gagan Arneja).
  • Исправлена операция TRUNCATE для движка таблицы Join (#9917). #9920 (Amos Bird).
  • Исправлена ошибка 'scalar does not exist' в запросах ALTER (#9878). #9904 (Amos Bird).
  • Исправлена гонка между операциями drop и optimize в ReplicatedMergeTree. #9901 (alesapin).
  • Исправлена логика DeleteOnDestroy в ATTACH PART, которая могла приводить к автоматическому удалению присоединённой части, и добавлено несколько тестов. #9410 (Vladimir Chebotarev).

Улучшения сборки/тестирования/упаковки

  • Исправлен юнит-тест collapsing_sorted_stream. #9367 (Deleted user).

Релиз ClickHouse v20.1.9.54, 2020-03-28

Исправления ошибок

  • Исправлена ошибка 'Different expressions with the same alias', возникающая, когда запрос содержит PREWHERE и WHERE по распределённой таблице и установлено SET distributed_product_mode = 'local'. #9871 (Artem Zuikov).
  • Исправлено избыточное потребление памяти мутациями для таблиц с составным первичным ключом. Это исправляет #9850. #9860 (alesapin).
  • Для запросов INSERT шард теперь ограничивает настройки, полученные от инициатора, собственными ограничениями шарда вместо генерации исключения. Это исправление позволяет отправлять запросы INSERT на шард с другими ограничениями. Это изменение улучшает исправление #9447. #9852 (Vitaly Baranov).
  • Исправлено возможное исключение Got 0 in totals chunk, expected 1 на клиенте. Оно возникало для запросов с JOIN в случае, если в правой соединяемой таблице не было ни одной строки. Пример: select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;. Исправляет #9777. #9823 (Nikolai Kochetov).
  • Исправлен SIGSEGV с optimize_skip_unused_shards, когда тип не может быть преобразован. #9804 (Azat Khuzhin).
  • Исправлено несколько случаев, когда часовой пояс аргумента функции использовался некорректно. #9574 (Vasily Nemkov).

Улучшения

  • Удалён этап ORDER BY из мутаций, потому что чтение выполняется из одной упорядоченной части в одном потоке. Также добавлена проверка, что порядок строк в мутации соответствует порядку по ключу сортировки и что этот порядок не нарушается. #9886 (alesapin).

Улучшения сборки/тестирования/упаковки

  • Удалены дублирующиеся флаги компоновщика. Гарантируется, что компоновщик не будет искать неожиданный символ. #9433 (Amos Bird).

Релиз ClickHouse v20.1.8.41, 2020-03-20

Исправление ошибок

  • Исправлено возможное постоянное возникновение ошибки Cannot schedule a task (из-за необработанного исключения в ParallelAggregatingBlockInputStream::Handler::onFinish/onFinishThread). Это исправление закрывает #6833. #9154 (Azat Khuzhin)
  • Исправлено чрезмерное потребление памяти в запросах ALTER (мутациях). Это исправление закрывает #9533 и #9670. #9754 (alesapin)
  • Исправлена ошибка при использовании обратных кавычек в DDL внешних словарей. Это исправление закрывает #9619. #9734 (alesapin)

Релиз ClickHouse v20.1.7.38, 2020-03-18

Исправление ошибки

  • Исправлены неверные внутренние имена функций sumKahan и sumWithOverflow. Это приводило к исключению при использовании этих функций в удалённых запросах. #9636 (Azat Khuzhin). Эта проблема была во всех релизах ClickHouse.
  • Разрешить выполнение ALTER ON CLUSTER для таблиц Distributed с внутренней репликацией. Это исправляет #3268. #9617 (shinoi2). Эта проблема присутствовала во всех релизах ClickHouse.
  • Исправлены возможные исключения Size of filter does not match size of column и Invalid number of rows in Chunk в MergeTreeRangeReader. Они могли возникать при выполнении PREWHERE в некоторых случаях. Устраняет #9132. #9612 (Anton Popov)
  • Исправлена ошибка: часовой пояс не сохранялся, если использовалось простое арифметическое выражение вроде time + 1 (в отличие от выражения time + INTERVAL 1 SECOND). Это исправляет #5743. #9323 (alexey-milovidov). Эта ошибка присутствовала во всех релизах ClickHouse.
  • Теперь нельзя создавать или добавлять столбцы с простыми циклическими алиасами вроде a DEFAULT b, b DEFAULT a. #9603 (alesapin)
  • Исправлена проблема, при которой заполнение (padding) в конце значения в кодировке base64 могло оказаться некорректным. Обновлена библиотека base64. Это исправляет #9491, закрывает #9492 и #9500 (alexey-milovidov)
  • Исправлена гонка данных при уничтожении Poco::HTTPServer. Она могла возникать, когда сервер запускался и сразу же останавливался. #9468 (Anton Popov)
  • Исправлен возможный сбой/неверное количество строк в LIMIT n WITH TIES при наличии большого числа строк, совпадающих с n-й строкой. #9464 (tavplubix)
  • Исправлено возможное несоответствие контрольных сумм при использовании TTL для столбцов. #9451 (Anton Popov)
  • Исправлена ошибка, приводившая к падению при попытке пользователя выполнить ALTER MODIFY SETTING для семейств движков таблиц MergeTree старого формата. #9435 (alesapin)
  • Теперь мы будем пытаться чаще финализировать мутации. #9427 (alesapin)
  • Исправлена несовместимость протокола репликации, появившаяся в #8598. #9412 (alesapin)
  • Исправлена обработка not(has()) для индекса bloom_filter по столбцам массивного типа. #9407 (achimbab)
  • Исправлено поведение функций match и extract, когда haystack имеет длину ноль байт. Поведение было некорректным, когда haystack был константой. Это исправляет #9160 #9163 (alexey-milovidov) #9345 (alexey-milovidov)

Улучшения сборки/тестирования/упаковки

Релиз ClickHouse v20.1.6.30, 2020-03-05

Исправление ошибки

  • Исправлена несовместимость данных при сжатии с использованием кодека T64. #9039 (abyss7)
  • Исправлен порядок диапазонов при однопоточном чтении из таблицы MergeTree. Исправляет #8964. #9050 (CurtizJ)
  • Устранён возможный сбой сегментации (segfault) в MergeTreeRangeReader при выполнении PREWHERE. Исправляет ошибку #9064. #9106 (CurtizJ)
  • Исправлена функция reinterpretAsFixedString, теперь она возвращает FixedString вместо String. #9052 (oandrew)
  • Исправлен joinGet для Nullable-типов возвращаемых значений. Исправление для #8919 #9014 (amosbird)
  • Исправлены fuzz-тест и некорректное поведение функций bitTestAll/bitTestAny. #9143 (alexey-milovidov)
  • Исправлено поведение функций match и extract при нулевой длине haystack. Неверное поведение наблюдалось, когда haystack был константой. Исправляет #9160 #9163 (alexey-milovidov)
  • Исправлено выполнение инвертированных предикатов при использовании нестрого монотонного функционального индекса. Исправлена ошибка #9034 #9223 (Akazz)
  • Разрешить преобразование CROSS в INNER JOIN, если в секции WHERE используется оператор [NOT] LIKE. Исправляет #9191 #9229 (4ertus2)
  • Разрешить использование псевдонима в качестве первого столбца (столбцов) в таблице с движком Log. #9231 (abyss7)
  • Разрешено объединение через запятую с IN() внутри. Исправляет #7314. #9251 (4ertus2)
  • Улучшена логика запросов ALTER MODIFY/ADD. Теперь нельзя выполнить ADD столбца без указания типа, MODIFY выражения значения по умолчанию не изменяет тип столбца, а MODIFY типа не приводит к потере значения выражения по умолчанию. Исправляет #8669. #9227 (alesapin)
  • Исправлена проблема с финализацией мутаций, из-за которой уже выполненная мутация могла иметь статус is_done=0. #9217 (alesapin)
  • Добавлена поддержка конвейера «Processors» для system.numbers и system.numbers_mt. Также исправлена ошибка, из-за которой параметр max_execution_time игнорировался. #7796 (KochetovNicolai)
  • Исправлен некорректный подсчёт метрики DictCacheKeysRequestedFound. #9411 (nikitamikhaylov)
  • Добавлена проверка политики хранения в ATTACH PARTITION FROM, REPLACE PARTITION, MOVE TO TABLE, отсутствие которой могло приводить к тому, что данные части становились недоступны после перезапуска и мешали запуску ClickHouse. #9383 (excitoon)
  • Исправлено срабатывание UBSan в MergeTreeIndexSet, что исправляет #9250 #9365 (alexey-milovidov)
  • Исправлена потенциальная гонка данных в BlockIO. #9356 (KochetovNicolai)
  • Поддержка чисел типа UInt64, которые не помещаются в Int64, в функциях, связанных с JSON. Обновлён SIMDJSON до ветки master. Это исправляет #9209 #9344 (alexey-milovidov)
  • Исправлена проблема, из-за которой объем свободного места вычислялся некорректно при монтировании каталога данных на отдельное устройство. Для диска по умолчанию свободное место теперь вычисляется на основе подкаталога data. Это исправляет #7441 #9257 (millb)
  • Исправлена проблема, из-за которой TLS-подключения могли завершаться с ошибкой OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error and SSL Exception: error:2400006E:random number generator::error retrieving entropy. Обновлён OpenSSL до версии upstream master. #8956 (alexey-milovidov)
  • При выполнении запроса CREATE сворачивать константные выражения в аргументах движка хранения. Заменять пустое имя базы данных на текущую базу данных. Это исправляет #6508, #3492. Также исправлена проверка локального адреса в ClickHouseDictionarySource. #9262 (tabplubix)
  • Исправлена ошибка сегментации памяти в StorageMerge, которая могла возникать при чтении из StorageFile. #9387 (tabplubix)
  • Предотвращает потерю данных в Kafka в редких случаях, когда исключение происходит после чтения суффикса, но до фиксации смещения. Исправляет #9378. Связано: #7175 #9507 (filimonov)
  • Исправлена ошибка, приводившая к завершению работы сервера при попытке использования/удаления таблицы Kafka, созданной с некорректными параметрами. Исправляет #9494. Включает #9507. #9513 (filimonov)

Новая функциональность

  • Добавлена настройка deduplicate_blocks_in_dependent_materialized_views для управления поведением идемпотентных вставок в таблицы с материализованными представлениями. Эта новая возможность была добавлена в багфикс-релиз по специальному запросу от Altinity. #9070 (urykhy)

Релиз ClickHouse v20.1.2.4, 2020-01-22

Обратная несовместимость

  • Настройка merge_tree_uniform_read_distribution объявлена устаревшей. Сервер всё ещё распознаёт эту настройку, но она не оказывает никакого эффекта. #8308 (alexey-milovidov)
  • Изменён тип возвращаемого значения функции greatCircleDistance на Float32, потому что теперь результат вычисления имеет тип Float32. #7993 (alexey-milovidov)
  • Теперь ожидается, что параметры запроса представлены в «экранированном» формате. Например, чтобы передать строку a<tab>b, вы должны написать a\tb или a\<tab>b и, соответственно, a%5Ctb или a%5C%09b в URL. Это необходимо для того, чтобы появилась возможность передавать NULL как \N. Это исправляет #7488. #8517 (alexey-milovidov)
  • Включена настройка use_minimalistic_part_header_in_zookeeper для ReplicatedMergeTree по умолчанию. Это существенно уменьшит объём данных, хранящихся в ZooKeeper. Эта настройка поддерживается начиная с версии 19.1, и мы уже используем её в продакшене в нескольких сервисах без каких-либо проблем более полугода. Отключите эту настройку, если у вас есть возможность даунгрейда до версий ниже 19.1. #6850 (alexey-milovidov)
  • Индексы для пропуска данных готовы к использованию в продакшене и включены по умолчанию. Настройки allow_experimental_data_skipping_indices, allow_experimental_cross_to_join_conversion и allow_experimental_multiple_joins_emulation теперь устарели и ничего не делают. #7974 (alexey-milovidov)
  • Добавлена новая логика ANY JOIN для StorageJoin, согласованная с операцией JOIN. Чтобы обновиться без изменения поведения, вам необходимо добавить SETTINGS any_join_distinct_right_table_keys = 1 в метаданные таблиц движка Join или пересоздать эти таблицы после обновления. #8400 (Artem Zuikov)
  • Теперь для применения изменений в конфигурации логирования требуется перезапуск сервера. Это временное обходное решение, позволяющее избежать ошибки, при которой сервер пишет лог в удалённый файл журнала (см. #8696). #8707 (Alexander Kuzmenkov)

Новая функция

  • Добавлена информация о путях частей в system.merges. #8043 (Vladimir Chebotarev)
  • Добавлена возможность выполнения запроса SYSTEM RELOAD DICTIONARY в режиме ON CLUSTER. #8288 (Guillaume Tassery)
  • Добавлена возможность выполнять запросы CREATE DICTIONARY с модификатором ON CLUSTER. #8163 (alesapin)
  • Теперь профиль пользователя в users.xml может наследовать несколько профилей. #8343 (Mikhail f. Shiryaev)
  • Добавлена таблица system.stack_trace, позволяющая просматривать стек-трейсы всех потоков сервера. Это полезно разработчикам для анализа состояния сервера. Это исправляет #7576. #8344 (alexey-milovidov)
  • Добавлен тип данных DateTime64 с настраиваемой точностью до долей секунды. #7170 (Vasily Nemkov)
  • Добавлена табличная функция clusterAllReplicas, которая позволяет выполнять запросы ко всем узлам в кластере. #8493 (kiran sunkari)
  • Добавлена агрегатная функция categoricalInformationValue, которая вычисляет информационную ценность дискретного признака. #8117 (hcz)
  • Ускорен разбор файлов данных в форматах CSV, TSV и JSONEachRow за счёт параллельного парсинга. #7780 (Alexander Kuzmenkov)
  • Добавлена функция bankerRound, выполняющая банковское округление. #8112 (hcz)
  • Добавлена поддержка большего количества языков во встроенном словаре названий регионов: 'ru', 'en', 'ua', 'uk', 'by', 'kz', 'tr', 'de', 'uz', 'lv', 'lt', 'et', 'pt', 'he', 'vi'. #8189 (alexey-milovidov)
  • Улучшена согласованность работы ANY JOIN. Теперь t1 ANY LEFT JOIN t2 эквивалентен t2 ANY RIGHT JOIN t1. #7665 (Artem Zuikov)
  • Добавлена настройка any_join_distinct_right_table_keys, которая включает прежнее поведение для ANY INNER JOIN. #7665 (Artem Zuikov)
  • Добавлены новые типы соединений SEMI и ANTI JOIN. Старое поведение ANY INNER JOIN теперь доступно как SEMI LEFT JOIN. #7665 (Artem Zuikov)
  • Добавлен формат Distributed для движка File и табличной функции file, позволяющий читать из файлов .bin, создаваемых асинхронными вставками в таблицу Distributed. #8535 (Nikolai Kochetov)
  • Добавлен необязательный аргумент столбца для сброса для runningAccumulate, который позволяет сбрасывать результаты агрегации для каждого нового значения ключа. #8326 (Sergey Kononenko)
  • Добавлена возможность использовать ClickHouse в качестве endpoint-а Prometheus. #7900 (vdimir)
  • Добавлен раздел <remote_url_allow_hosts> в config.xml, который ограничивает список разрешённых хостов для удалённых движков таблиц и табличных функций URL, S3, HDFS. #7154 (Mikhail Korotov)
  • Добавлена функция greatCircleAngle, которая вычисляет расстояние на сфере в градусах. #8105 (alexey-milovidov)
  • Изменён радиус Земли для соответствия библиотеке H3. #8105 (alexey-milovidov)
  • Добавлены форматы JSONCompactEachRow и JSONCompactEachRowWithNamesAndTypes для ввода и вывода данных. #7841 (Mikhail Korotov)
  • Добавлена возможность для файловых движков таблиц и табличных функций (File, S3, URL, HDFS), которая позволяет читать и записывать файлы gzip на основе дополнительного параметра движка или расширения файла. #7840 (Andrey Bodrov)
  • Добавлена функция randomASCII(length), генерирующая строку со случайным набором печатаемых ASCII-символов. #8401 (BayoNet) (ASCII)
  • Добавлена функция JSONExtractArrayRaw, которая возвращает массив неразобранных элементов JSON-массива из строки в формате JSON. #8081 (Oleg Matrokhin)
  • Добавлена функция arrayZip, которая позволяет объединять несколько массивов одинаковой длины в один массив кортежей. #8149 (Winter Zhang)
  • Добавлена возможность перемещать данные между дисками на основе настроенных TTL-выражений для семейства движков таблиц *MergeTree. #8140 (Vladimir Chebotarev)
  • Добавлена новая агрегатная функция avgWeighted для вычисления взвешенного среднего. #7898 (Andrey Bodrov)
  • Теперь параллельный разбор включён по умолчанию для форматов TSV, TSKV, CSV и JSONEachRow. #7894 (Nikita Mikhaylov)
  • Добавлены несколько географических функций из библиотеки H3: h3GetResolution, h3EdgeAngle, h3EdgeLength, h3IsValid и h3kRing. #8034 (Konstantин Malanchev)
  • Добавлена поддержка сжатия brotli (br) в хранилищах, работающих с файлами, и табличных функциях. Тем самым исправлена #8156. #8526 (alexey-milovidov)
  • Добавлены функции groupBit* для типа SimpleAggregationFunction. #8485 (Guillaume Tassery)

Исправление ошибки

  • Исправлено переименование таблиц с движком Distributed, устранена проблема #7868. #8306 (tavplubix)
  • Теперь словари поддерживают EXPRESSION для атрибутов в произвольных строках в SQL-диалекте, отличном от ClickHouse. #8098 (alesapin)
  • Исправлен некорректно работающий запрос INSERT SELECT FROM mysql(...). Тем самым исправлены #8070 и #7960. #8234 (tavplubix)
  • Исправлена ошибка «Mismatch column sizes» при вставке значения Tuple по умолчанию из JSONEachRow. Исправляет #5653. #8606 (tavplubix)
  • Теперь при одновременном использовании WITH TIES и LIMIT BY будет выброшено исключение. Также добавлена возможность использовать TOP с LIMIT BY. Это исправляет #7472. #7637 (Nikita Mikhaylov)
  • Устранена непреднамеренная зависимость от новой версии glibc в исполняемом файле clickhouse-odbc-bridge. #8046 (Amos Bird)
  • Исправлена ошибка в функции проверки семейства движков *MergeTree. Теперь она не приводит к ошибке в случае, если количество строк в последнем грануле и последней (нефинальной) метке одинаково. #8047 (alesapin)
  • Исправлена вставка в столбцы типа Enum* после выполнения запроса ALTER, когда базовый числовой тип совпадает с типом, заданным для таблицы. Это исправляет #7836. #7908 (Anton Popov)
  • Разрешён неконстантный отрицательный аргумент "size" для функции substring. Ранее он был запрещён по ошибке. Это исправляет #4832. #7703 (alexey-milovidov)
  • Исправлена ошибка разбора при передаче некорректного количества аргументов в табличный движок (O|J)DBC. #7709 (alesapin)
  • Теперь при отправке логов в syslog используется имя команды запущенного процесса clickhouse. В предыдущих версиях вместо имени команды передавалась пустая строка. #8460 (Michael Nacharov)
  • Исправлена проверка допустимых хостов для localhost. Этот PR исправляет решение, предложенное в #8241. #8342 (Vitaly Baranov)
  • Исправлено редкое аварийное завершение работы в функциях argMin и argMax при длинных строковых аргументах, когда результат используется в функции runningAccumulate. Это исправляет #8325 #8341 (dinosaur)
  • Исправлена проблема чрезмерного выделения памяти для таблиц с движком Buffer. #8345 (Azat Khuzhin)
  • Исправлена потенциальная ошибка в функциях, которые могут принимать NULL одним из аргументов и возвращать значение, отличное от NULL. #8196 (alexey-milovidov)
  • Улучшены вычисления метрик в пуле потоков фоновых процессов для движков таблиц MergeTree. #8194 (Vladimir Chebotarev)
  • Исправлена работа функции IN в предложении WHERE при наличии фильтра на уровне строк таблицы. Исправлены #6687 #8357 (Ivan)
  • Теперь выбрасывается исключение, если целочисленное значение параметра настройки разобрано не полностью. #7678 (Mikhail Korotov)
  • Исправлено исключение при использовании агрегатной функции в запросе к распределённой таблице с более чем двумя локальными шардами. #8164 (小路)
  • Теперь фильтр Блума может обрабатывать массивы нулевой длины и не выполняет избыточные вычисления. #8242 (achimbab)
  • Исправлена проверка допуска клиентского хоста путём сопоставления клиентского хоста с host_regexp, указанным в users.xml. #8241 (Vitaly Baranov)
  • Ослаблена неоднозначная проверка столбцов, приводившая к ложным срабатываниям при нескольких JOIN ON. #8385 (Artem Zuikov)
  • Исправлен возможный сбой сервера (std::terminate), возникавший, когда сервер не мог отправить или записать данные в форматах JSON или XML со значениями типа данных String (которые требуют проверки на корректность UTF-8), либо при сжатии результирующих данных алгоритмом Brotli, а также в некоторых других редких случаях. Это исправляет #7603 #8384 (alexey-milovidov)
  • Исправлено условие гонки в StorageDistributedDirectoryMonitor, обнаруженное CI. Это устраняет #8364. #8383 (Nikolai Kochetov)
  • Теперь фоновые слияния в семействе движков таблиц *MergeTree точнее сохраняют порядок томов, заданный политикой хранения. #8549 (Vladimir Chebotarev)
  • Теперь табличный движок Kafka корректно работает с форматом Native. Это исправляет #6731 #7337 #8003. #8016 (filimonov)
  • Исправлены форматы с заголовками (такие как CSVWithNames), которые выбрасывали исключение о достижении конца файла (EOF) для движка таблицы Kafka. #8016 (filimonov)
  • Исправлена ошибка при построении множества из подзапроса в правой части выражения IN. Что устраняет ошибки #5767 и #2542. #7755 (Nikita Mikhaylov)
  • Исправлено возможное аварийное завершение при чтении из хранилища File. #7756 (Nikolai Kochetov)
  • Исправлено чтение файлов в формате Parquet, содержащих столбцы типа list. #8334 (maxulan)
  • Исправлена ошибка Not found column для распределённых запросов, в которых условие PREWHERE зависит от ключа выборки, если max_parallel_replicas > 1. #7913 (Nikolai Kochetov)
  • Исправлена ошибка Not found column, возникавшая, если запрос использовал PREWHERE, зависящий от алиаса таблицы, и результирующий набор оказывался пустым из-за условия по первичному ключу. #7911 (Nikolai Kochetov)
  • Исправлен возвращаемый тип функций rand и randConstant при аргументе типа Nullable. Теперь функции всегда возвращают UInt32 и никогда Nullable(UInt32). #8204 (Nikolai Kochetov)
  • Отключено проталкивание предикатов для выражения WITH FILL. Это исправляет #7784. #7789 (Winter Zhang)
  • Исправлен некорректный результат функции count() для SummingMergeTree при использовании модификатора FINAL. #3280 #7786 (Nikita Mikhaylov)
  • Исправлен возможный некорректный результат для константных функций с удалённых серверов. Это происходило для запросов с функциями, такими как version(), uptime() и т. п., которые возвращают разные константные значения для разных серверов. Это исправление закрывает #7666. #7689 (Nikolai Kochetov)
  • Исправлена сложная ошибка в оптимизации проталкивания предикатов, которая приводила к неверным результатам. Это исправление устраняет множество проблем, связанных с оптимизацией проталкивания предикатов. #8503 (Winter Zhang)
  • Исправлено аварийное завершение при выполнении запроса CREATE TABLE .. AS dictionary. #8508 (Azat Khuzhin)
  • Несколько улучшений в грамматике ClickHouse в файле .g4. #8294 (taiyang-li)
  • Исправлена ошибка, приводившая к сбоям в операциях JOIN с таблицами с движком Join. Это устраняет #7556 #8254 #7915 #8100. #8298 (Artem Zuikov)
  • Исправлена лишняя перезагрузка словарей при CREATE DATABASE. #7916 (Azat Khuzhin)
  • Ограничено максимальное число потоков чтения из StorageFile и StorageHDFS. Исправляет #7650. #7981 (alesapin)
  • Исправлена ошибка в запросе ALTER ... MODIFY ... CODEC, когда пользователь указывает одновременно выражение по умолчанию и кодек. Исправляет проблему 8593. #8614 (alesapin)
  • Исправлена ошибка в фоновом слиянии столбцов с типом SimpleAggregateFunction(LowCardinality). #8613 (Nikolai Kochetov)
  • Исправлена проверка типов в функции toDateTime64. #8375 (Vasily Nemkov)
  • Теперь сервер не падает при выполнении LEFT или FULL JOIN с использованием движка Join и неподдерживаемыми настройками join_use_nulls. #8479 (Artem Zuikov)
  • Теперь запрос DROP DICTIONARY IF EXISTS db.dict не выбрасывает исключение, если база данных db не существует. #8185 (Vitaly Baranov)
  • Исправлены возможные аварийные завершения работы табличных функций (file, mysql, remote), вызванные использованием ссылки на удалённый объект IStorage. Исправлен некорректный разбор столбцов, указанных при вставке в табличную функцию. #7762 (tavplubix)
  • Перед запуском clickhouse-server убедитесь, что сеть уже поднята и доступна. Это исправляет #7507. #8570 (Zhichang Yu)
  • Исправлена обработка таймаутов для защищённых соединений, чтобы запросы не зависали бесконечно. Это исправляет #8126. #8128 (alexey-milovidov)
  • Исправлена избыточная конкуренция между параллельными рабочими потоками в clickhouse-copier. #7816 (Ding Xiang Fei)
  • Теперь мутации не пропускают присоединённые парты, даже если их версия мутации больше текущей версии мутации. #7812 (Zhichang Yu) #8250 (alesapin)
  • Игнорировать лишние копии частей данных *MergeTree после переноса их на другой диск и перезапуска сервера. #7810 (Vladimir Chebotarev)
  • Исправлено падение при FULL JOIN с LowCardinality в ключе JOIN. #8252 (Artem Zuikov)
  • Запрещено использовать одно и то же имя столбца более одного раза в запросе INSERT, например INSERT INTO tbl (x, y, x). Это исправляет #5465, #7681. #7685 (alesapin)
  • Добавлен резервный вариант определения количества физических ядер CPU для неизвестных процессоров (с использованием количества логических ядер CPU). Это исправляет #5239. #7726 (alexey-milovidov)
  • Исправлена ошибка There's no column, возникавшая для материализованных и alias-столбцов. #8210 (Artem Zuikov)
  • Исправлено падение сервера при использовании запроса EXISTS без указания TABLE или DICTIONARY, например EXISTS t. Исправлена ошибка #8172. Ошибка появилась в версии 19.17. #8213 (alexey-milovidov)
  • Исправлена редкая ошибка с текстом "Sizes of columns does not match", которая могла возникать при использовании столбца типа SimpleAggregateFunction. #7790 (Boris Granveaud)
  • Исправлена ошибка, из-за которой пользователь с пустым allow_databases получал доступ ко всем базам данных (и аналогично для allow_dictionaries). #7793 (DeifyTheGod)
  • Исправлен сбой клиента, если сервер уже разорвал соединение. #8071 (Azat Khuzhin)
  • Исправлено поведение ORDER BY при сортировке по префиксу первичного ключа и суффиксу, не входящему в него. #7759 (Anton Popov)
  • Проверять, присутствует ли в таблице квалифицированный столбец. Исправляет #6836. #7758 (Artem Zuikov)
  • Исправлено поведение, при котором ALTER MOVE, запущенный сразу после завершения слияния, перемещал суперчасть вместо указанной части. Исправляет #8103. #8104 (Vladimir Chebotarev)
  • Исправлена возможная аварийная остановка сервера при использовании UNION с разным количеством столбцов. Исправляет проблему #7279. #7929 (Nikolai Kochetov)
  • Исправлен размер результирующей подстроки для функции substr при отрицательном значении размера. #8589 (Nikolai Kochetov)
  • Теперь сервер не выполняет мутацию части в MergeTree, если в фоновом пуле недостаточно свободных потоков. #8588 (tavplubix)
  • Исправлена небольшая опечатка при форматировании AST для UNION ALL. #7999 (litao91)
  • Исправлены некорректные результаты bloom-фильтра для отрицательных чисел. Это исправляет #8317. #8566 (Winter Zhang)
  • Исправлено потенциальное переполнение буфера в decompress. Злоумышленник мог передать специально сформированные сжатые данные, которые приводили к чтению за пределами буфера. Проблема была обнаружена Эльдаром Зайтовым из команды информационной безопасности «Яндекса». #8404 (alexey-milovidov)
  • Исправлен некорректный результат из-за переполнения целых чисел в arrayIntersect. #7777 (Nikolai Kochetov)
  • Теперь запрос OPTIMIZE TABLE не будет ждать выполнения операции репликами, находящимися офлайн. #8314 (javi santana)
  • Исправлен парсер ALTER TTL для таблиц Replicated*MergeTree. #8318 (Vladimir Chebotarev)
  • Исправлено взаимодействие между сервером и клиентом, чтобы сервер читал информацию о временных таблицах после ошибки запроса. #8084 (Azat Khuzhin)
  • Исправлена ошибка функции bitmapAnd при пересечении агрегированного и скалярного битмапов. #8082 (Yue Huang)
  • Уточнено определение ZXid в соответствии с руководством программиста ZooKeeper (ZooKeeper Programmer's Guide), что позволило исправить ошибку в clickhouse-cluster-copier. #8088 (Ding Xiang Fei)
  • Табличная функция odbc теперь учитывает параметр external_table_functions_use_nulls. #7506 (Vasily Nemkov)
  • Исправлена ошибка, которая приводила к редкой гонке данных. #8143 (Alexander Kazakov)
  • Теперь SYSTEM RELOAD DICTIONARY полностью перезагружает словарь, игнорируя update_field, что исправляет проблему #7440. #8037 (Vitaly Baranov)
  • Добавлена возможность в запросе CREATE проверять существование словаря. #8032 (alesapin)
  • Исправлен парсинг типов Float* в формате Values. Это исправляет #7817. #7870 (tavplubix)
  • Исправлен сбой, возникавший при невозможности зарезервировать дисковое пространство в некоторых фоновых операциях семейства движков таблиц *MergeTree. #7873 (Vladimir Chebotarev)
  • Исправлен сбой операции слияния, возникавший при наличии в таблице столбца SimpleAggregateFunction(LowCardinality). Это исправляет #8515. #8522 (Azat Khuzhin)
  • Восстановлена поддержка всех локалей ICU и добавлена возможность применять правила сортировки (collations) к константным выражениям. Также в таблицу system.collations добавлено имя языка. #8051 (alesapin)
  • Исправлена ошибка, из-за которой внешние словари с нулевым минимальным временем жизни (LIFETIME(MIN 0 MAX N), LIFETIME(N)) не обновлялись в фоновом режиме. #7983 (alesapin)
  • Исправлен сбой при использовании внешнего словаря с источником ClickHouse, если в запросе есть подзапрос. #8351 (Nikolai Kochetov)
  • Исправлен некорректный разбор расширения файла в таблице с движком URL. Это устраняет проблему #8157. #8419 (Andrey Bodrov)
  • Исправлен запрос CHECK TABLE для таблиц *MergeTree без ключа. Устранена проблема #7543. #7979 (alesapin)
  • Исправлено преобразование Float64 в тип MySQL. #8079 (Yuriy Baranov)
  • Теперь, если таблица не была полностью удалена из‑за сбоя сервера, сервер попытается её восстановить и загрузить. #8176 (tavplubix)
  • Исправлена ошибка, из-за которой табличная функция file завершалась сбоем при вставке в несуществующий файл. Теперь в этом случае файл будет создан, после чего вставка будет выполнена. #8177 (Olga Khvostikova)
  • Исправлена редкая взаимоблокировка, которая могла возникать при включённом trace_log. #7838 (filimonov)
  • Добавлена поддержка типов данных, отличных от Date, во внешнем словаре RangeHashed, созданном из DDL-запроса. Исправлена проблема 7899. #8275 (alesapin)
  • Исправлен сбой при вызове функции now64() с результатом другой функции. #8270 (Vasily Nemkov)
  • Исправлена ошибка при определении IP-адреса клиента для подключений через протокол обмена MySQL. #7743 (Dmitry Muzyka)
  • Исправлена обработка пустых массивов в функции arraySplit. Это исправляет #7708. #7747 (hcz)
  • Исправлена проблема, при которой pid-файл другого запущенного clickhouse-server мог быть удалён. #8487 (Weiqing Xu)
  • Исправлена перезагрузка словаря, если он использует invalidate_query, которая останавливала обновления и приводила к исключениям при предыдущих попытках обновления. #8029 (alesapin)
  • Исправлена ошибка в функции arrayReduce, которая могла приводить к «double free», и ошибка в комбинаторе агрегатных функций Resample, которая могла приводить к утечке памяти. Добавлена агрегатная функция aggThrow, которую можно использовать для тестирования. #8446 (alexey-milovidov)

Улучшение

  • Улучшено логирование при работе с движком таблицы S3. #8251 (Grigory Pervakov)
  • Теперь при вызове clickhouse-local без аргументов выводится справочное сообщение. Это исправляет #5335. #8230 (Andrey Nagorny)
  • Добавлена настройка mutations_sync, которая позволяет в синхронном режиме дожидаться завершения запросов ALTER UPDATE/DELETE. #8237 (alesapin)
  • Добавлена возможность задавать относительный user_files_path в config.xml (по аналогии с format_schema_path). #7632 (hcz)
  • Добавлено исключение для недопустимых типов аргументов в функциях преобразования с постфиксом -OrZero. #7880 (Andrey Konyaev)
  • Упростить формат заголовка при отправке данных на шард в распределённом запросе. #8044 (Vitaly Baranov)
  • Рефакторинг табличного движка Live View. #8519 (vzakaznikov)
  • Добавлены дополнительные проверки для внешних словарей, создаваемых на основе DDL-запросов. #8127 (alesapin)
  • Исправлена ошибка Column ... already exists при совместном использовании директив FINAL и SAMPLE, например select count() from table final sample 1/2. Соответствует исправлению #5186. #7907 (Nikolai Kochetov)
  • Теперь в качестве первого аргумента функции joinGet можно использовать идентификатор таблицы. #7707 (Amos Bird)
  • Разрешено использовать MaterializedView с подзапросами для таблиц Kafka. #8197 (filimonov)
  • Теперь фоновые операции перемещения данных между дисками выполняются в отдельном пуле потоков. #7670 (Vladimir Chebotarev)
  • SYSTEM RELOAD DICTIONARY теперь выполняется синхронно. #8240 (Vitaly Baranov)
  • Стек-трейсы теперь отображают физические адреса (смещения в объектном файле) вместо виртуальных адресов памяти (по которым был загружен объектный файл). Это позволяет использовать addr2line, когда бинарный файл является позиционно-независимым и включён ASLR. Это исправляет #8360. #8387 (alexey-milovidov)
  • Добавлена поддержка нового синтаксиса фильтров безопасности на уровне строк: <table name='table_name'>...</table>. Исправлена проблема #5779. #8381 (Ivan)
  • Теперь функция cityHash может работать с типами Decimal и UUID. Исправлена ошибка #5184. #7693 (Mikhail Korotov)
  • Удалена фиксированная гранулярность индекса (ранее 1024) из системных логов, так как она устарела после внедрения адаптивной гранулярности. #7698 (alexey-milovidov)
  • Включён сервер совместимости с MySQL при сборке ClickHouse без поддержки SSL. #7852 (Yuriy Baranov)
  • Теперь сервер вычисляет контрольные суммы распределённых пакетов, что позволяет получать более информативные сообщения об ошибках в случае повреждения данных в пакете. #7914 (Azat Khuzhin)
  • Добавлена поддержка DROP DATABASE, DETACH TABLE, DROP TABLE и ATTACH TABLE для движка базы данных MySQL. #8202 (Winter Zhang)
  • Добавлена поддержка аутентификации в табличную функцию S3 и движок таблиц. #7623 (Vladimir Chebotarev)
  • Добавлена проверка на наличие лишних частей MergeTree на разных дисках, чтобы исключить потерю частей данных на дисках, не описанных в конфигурации. #8118 (Vladimir Chebotarev)
  • Включена поддержка SSL для клиента и сервера на macOS. #8297 (Ivan)
  • Теперь ClickHouse может работать в качестве федеративного сервера MySQL (см. https://dev.mysql.com/doc/refman/5.7/en/federated-create-server.html). #7717 (Maxim Fedotov)
  • clickhouse-client теперь включает bracketed-paste только если включён multiquery и выключен multiline. Это исправляет #7757. #7761 (Amos Bird)
  • Добавлена поддержка Array(Decimal) в функции if. #7721 (Artem Zuikov)
  • Добавлена поддержка типов Decimal в функциях arrayDifference, arrayCumSum и arrayCumSumNegative. #7724 (Artem Zuikov)
  • В таблицу system.dictionaries добавлен столбец lifetime. #6820 #7727 (kekekekule)
  • Улучшена проверка наличия существующих частей на разных дисках для табличных движков *MergeTree. Устраняет проблему #7660. #8440 (Vladimir Chebotarev)
  • Интеграция с AWS SDK для взаимодействия с S3, что позволяет использовать все возможности S3 «из коробки». #8011 (Pavel Kovalenko)
  • Добавлена поддержка подзапросов в таблицах типа Live View. #7792 (vzakaznikov)
  • Проверка на использование столбца Date или DateTime в выражениях TTL была удалена. #7920 (Vladimir Chebotarev)
  • Информация о диске добавлена в таблицу system.detached_parts. #7833 (Vladimir Chebotarev)
  • Теперь настройки max_(table|partition)_size_to_drop можно изменять без перезапуска. #7779 (Grigory Pervakov)
  • Немного улучшено удобство работы с сообщениями об ошибках. Теперь пользователей просят не удалять строки ниже Stack trace:. #7897 (alexey-milovidov)
  • Улучшено чтение сообщений из движка Kafka в различных форматах после #7935. #8035 (Ivan)
  • Улучшена совместимость с клиентами MySQL, не поддерживающими плагин аутентификации sha2_password. #8036 (Yuriy Baranov)
  • В сервере совместимости с MySQL добавлена поддержка большего числа типов столбцов. #7975 (Yuriy Baranov)
  • Реализована оптимизация ORDER BY для хранилищ Merge, Buffer и Materilized View с базовыми таблицами MergeTree. #8130 (Anton Popov)
  • Теперь мы всегда используем POSIX-реализацию функции getrandom для лучшей совместимости со старыми ядрами (< 3.17). #7940 (Amos Bird)
  • Улучшена проверка корректности места назначения в правиле TTL на перемещение. #8410 (Vladimir Chebotarev)
  • Улучшены проверки на повреждённые пакеты данных при вставке для движка таблиц Distributed. #7933 (Azat Khuzhin)
  • Добавлен столбец с массивом имён частей, которые мутации должны обработать в будущем, в таблицу system.mutations. #8179 (alesapin)
  • Оптимизация параллельной сортировки слиянием на уровне процессора. #8552 (Nikolai Kochetov)
  • Настройка mark_cache_min_lifetime устарела и больше ни на что не влияет. В предыдущих версиях кэш меток мог разрастаться в памяти сверх mark_cache_size, чтобы удерживать данные в течение mark_cache_min_lifetime секунд. Это приводило к путанице и более высокому, чем ожидалось, потреблению памяти, что особенно нежелательно на системах с ограниченным объемом памяти. Если после установки этого релиза вы заметите деградацию производительности, следует увеличить значение mark_cache_size. #8484 (alexey-milovidov)
  • Подготовка к повсеместному использованию tid. Это необходимо для #7477. #8276 (alexey-milovidov)

Повышение производительности

  • Оптимизация производительности конвейера процессоров. #7988 (Nikolai Kochetov)
  • Неблокирующее обновление просроченных ключей в кэш-словарях (с возможностью чтения старых значений). #8303 (Nikita Mikhaylov)
  • Соберите ClickHouse без глобального флага -fno-omit-frame-pointer, чтобы освободить ещё один регистр. #8097 (Amos Bird)
  • Ускорена функция greatCircleDistance и добавлены тесты на производительность для неё. #7307 (Olga Khvostikova)
  • Улучшена производительность функции roundDown. #8465 (alexey-milovidov)
  • Улучшена производительность функций max, min, argMin, argMax для типа данных DateTime64. #8199 (Vasily Nemkov)
  • Улучшена производительность сортировки без LIMIT, с большим LIMIT, а также при внешней сортировке. #8545 (alexey-milovidov)
  • Форматирование чисел с плавающей запятой ускорено до 6 раз. #8542 (alexey-milovidov)
  • Улучшена производительность функции modulo. #7750 (Amos Bird)
  • Оптимизированы операции ORDER BY и слияния для одноколоночного ключа. #8335 (alexey-milovidov)
  • Улучшена реализация комбинаторов arrayReduce, -Array и -State. #7710 (Amos Bird)
  • Теперь PREWHERE должен быть оптимизирован так, чтобы быть как минимум столь же эффективным, как WHERE. #7769 (Amos Bird)
  • Улучшена обработка отрицательных чисел функциями round и roundBankers. #8229 (hcz)
  • Улучшена производительность декодирования кодеков DoubleDelta и Gorilla примерно на 30–40 %. Исправлена проблема #7082. #8019 (Vasily Nemkov)
  • Улучшена производительность функций, работающих с base64. #8444 (alexey-milovidov)
  • Добавлена функция geoDistance. Она похожа на greatCircleDistance, но использует аппроксимацию эллипсоидной модели WGS-84. Производительность этих двух функций сопоставима. #8086 (alexey-milovidov)
  • Более быстрые агрегирующие функции min и max для типа данных Decimal. #8144 (Artem Zuikov)
  • Векторизована обработка в функции arrayReduce. #7608 (Amos Bird)
  • Цепочки if теперь оптимизируются как multiIf. #8355 (kamalov-ruslan)
  • Исправлена регрессия производительности движка таблицы Kafka, появившаяся в 19.15. Тем самым исправлена #7261. #7935 (filimonov)
  • Удалена генерация кода с опцией «pie», которую gcc из пакетов Debian иногда включает по умолчанию. #8483 (alexey-milovidov)
  • Параллельный разбор форматов данных #6553 (Nikita Mikhaylov)
  • По умолчанию включён оптимизированный парсер Values с поддержкой выражений (input_format_values_deduce_templates_of_expressions=1). #8231 (tavplubix)

Улучшения сборки/тестирования/упаковки

  • Исправлена сборка под ARM и в минимальной конфигурации. #8304 (proller)
  • Добавлен сброс файла покрытия для clickhouse-server на случай, когда не вызывается std::atexit. Также немного улучшено логирование в stateless-тестах с покрытием. #8267 (alesapin)
  • Обновлена библиотека LLVM в каталоге contrib. Рекомендуется не использовать LLVM из пакетов операционной системы. #8258 (alexey-milovidov)
  • Сделать сборку встроенного curl полностью без вывода. #8232 #8203 (Pavel Kovalenko)
  • Исправлены некоторые предупреждения MemorySanitizer. #8235 (Alexander Kuzmenkov)
  • Используйте макросы add_warning и no_warning в CMakeLists.txt. #8604 (Ivan)
  • Добавлена поддержка объектного хранилища MinIO (S3-совместимого) (https://min.io/) для улучшения интеграционных тестов. #7863 #7875 (Pavel Kovalenko)
  • Заголовочные файлы libc импортированы в contrib. Это позволяет сделать сборки более согласованными на различных системах (только для x86_64-linux-gnu). #5773 (alexey-milovidov)
  • Удалён флаг -fPIC для некоторых библиотек. #8464 (alexey-milovidov)
  • Очистить CMakeLists.txt для curl. См. https://github.com/ClickHouse/ClickHouse/pull/8011#issuecomment-569478910 #8459 (alexey-milovidov)
  • Тихие предупреждения в библиотеке CapNProto. #8220 (alexey-milovidov)
  • Добавлены тесты производительности для хэш-таблиц, оптимизированных под короткие строки. #7679 (Amos Bird)
  • Теперь ClickHouse будет собираться на архитектуре AArch64, даже если MADV_FREE недоступен. Это исправляет #8027. #8243 (Amos Bird)
  • Обновить zlib-ng, чтобы исправить проблемы, выявленные санитайзером памяти. #7182 #8206 (Alexander Kuzменkov)
  • Включена внутренняя библиотека MySQL для систем, отличных от Linux, поскольку использование пакетов ОС очень ненадёжно и обычно вообще не работает. Это исправляет #5765. #8426 (alexey-milovidov)
  • Исправлена сборка на некоторых системах после включения libc++. Эта правка заменяет #8374. #8380 (alexey-milovidov)
  • Методы Field стали более типобезопасными, что позволяет находить больше ошибок. #7386 #8209 (Alexander Kuzmenkov)
  • Добавлены недостающие файлы в подмодуль libc-headers. #8507 (alexey-milovidov)
  • Исправлены некорректные кавычки JSON в выводе тестов производительности. #8497 (Nikolai Kochetov)
  • Теперь стек вызовов отображается для std::exception и Poco::Exception. В предыдущих версиях он был доступен только для DB::Exception. Это улучшает диагностируемость. #8501 (alexey-milovidov)
  • Портирование clock_gettime и clock_nanosleep для новых версий glibc. #8054 (Amos Bird)
  • Включить part_log в пример конфигурации для разработчиков. #8609 (alexey-milovidov)
  • Исправлена асинхронность перезагрузки в 01036_no_superfluous_dict_reload_on_create_database*. #8111 (Azat Khuzhin)
  • Исправлены тесты производительности кодека. #8615 (Vasily Nemkov)
  • Добавлены скрипты установки для сборки в формате .tgz и документация по ним. #8612 #8591 (alesapin)
  • Удалён старый тест ZSTD (он был создан в 2016 году для воспроизведения бага, который был в ZSTD до версии 1.0). Это исправляет #8618. #8619 (alexey-milovidov)
  • Исправлена сборка под Mac OS Catalina. #8600 (meo)
  • Увеличено количество строк в тестах производительности кодеков, чтобы сделать результаты более заметными. #8574 (Vasily Nemkov)
  • В отладочных сборках рассматривайте исключения LOGICAL_ERROR как ошибки утверждений (assertion failures), чтобы их было проще заметить. #8475 (Alexander Kuzmenkov)
  • Тест производительности, связанный с форматами, сделан более детерминированным. #8477 (alexey-milovidov)
  • Обновлён lz4, чтобы исправить сбой в MemorySanitizer. #8181 (Alexander Kuzmenkov)
  • Подавить известное ложноположительное срабатывание MemorySanitizer при обработке исключений. #8182 (Alexander Kuzmenkov)
  • Обновить gcc и g++ до версии 9 в build/docker/build.sh #7766 (TLightSky)
  • Добавлен тестовый сценарий производительности, показывающий, что PREWHERE работает хуже, чем WHERE. #7768 (Amos Bird)
  • Прогресс в исправлении одного нестабильного теста. #8621 (alexey-milovidov)
  • Предотвращено срабатывание MemorySanitizer на данных из libunwind. #8539 (alexey-milovidov)
  • Обновлён libc++ до последней версии. #8324 (alexey-milovidov)
  • Собрать библиотеку ICU из исходного кода. Это исправляет #6460. #8219 (alexey-milovidov)
  • Переключились с libressl на openssl. После этого изменения ClickHouse должен начать поддерживать TLS 1.3 и SNI. Это исправляет #8171. #8218 (alexey-milovidov)
  • Исправлен отчёт UBSan при использовании chacha20_poly1305 в SSL (это происходило при подключении к https://yandex.ru/). #8214 (alexey-milovidov)
  • Исправлены права доступа файла пароля по умолчанию для дистрибутивов Linux в формате .deb. #8075 (proller)
  • Улучшено выражение для получения PID процесса clickhouse-server в clickhouse-test. #8063 (Alexander Kazakov)
  • Обновлён contrib/googletest до v1.10.0. #8587 (Alexander Burmak)
  • Исправлено срабатывание ThreadSanitizer в библиотеке base64. Также библиотека обновлена до последней версии, что, впрочем, несущественно. Это исправляет #8397. #8403 (alexey-milovidov)
  • Исправлен 00600_replace_running_query для процессоров. #8272 (Nikolai Kochetov)
  • Удалена поддержка tcmalloc, чтобы упростить CMakeLists.txt. #8310 (alexey-milovidov)
  • Релизные сборки gcc теперь используют libc++ вместо libstdc++. Раньше libc++ использовалась только с clang. Это улучшит согласованность конфигураций сборок и переносимость. #8311 (alexey-milovidov)
  • Включена поддержка библиотеки ICU при сборке с MemorySanitizer. #8222 (alexey-milovidov)
  • Подавлены предупреждения библиотеки CapNProto. #8224 (alexey-milovidov)
  • Удалены специальные участки кода для tcmalloc, так как он больше не поддерживается. #8225 (alexey-milovidov)
  • Теперь в задаче расчёта покрытия в CI сервер корректно завершается, что позволяет ему сохранить отчёт о покрытии. Это исправляет неполные отчёты о покрытии, которые мы наблюдали в последнее время. #8142 (alesapin)
  • Тесты производительности всех кодеков на значениях Float64 и UInt64. #8349 (Vasily Nemkov)
  • termcap сильно устарел и приводит к различным проблемам (например, отсутствует capability «up» и выводится ^J вместо многострочной последовательности). Предпочтительнее использовать terminfo или поставляемый в комплекте ncurses. #7737 (Amos Bird)
  • Исправлен интеграционный тест test_storage_s3. #7734 (Nikolai Kochetov)
  • Добавлена поддержка StorageFile(<format>, null) для вставки блока в файл заданного формата без записи данных на диск. Это требуется для тестов производительности. #8455 (Amos Bird)
  • Добавлен аргумент --print-time для функциональных тестов, который выводит время выполнения каждого теста. #8001 (Nikolai Kochetov)
  • Добавлены проверки assert в KeyCondition при вычислении ОПЗ. Это исправит предупреждение от gcc-9. #8279 (alexey-milovidov)
  • Вывод параметров cmake в сборках CI. #8273 (Alexander Kuzmenkov)
  • Не генерировать отладочную информацию для некоторых крупных библиотек. #8271 (alexey-milovidov)
  • Сделать так, чтобы log_to_console.xml всегда записывал логи в stderr, независимо от интерактивности среды. #8395 (Alexander Kuzmenkov)
  • Из утилиты clickhouse-performance-test удалены некоторые неиспользуемые функции. #8555 (alexey-milovidov)
  • Теперь мы также будем искать lld-X с соответствующей версией clang-X. #8092 (alesapin)
  • Улучшена сборка Parquet. #8421 (maxulan)
  • Дополнительные предупреждения GCC #8221 (kreuzerkrieg)
  • Пакет для Arch Linux теперь позволяет запускать сервер ClickHouse, а не только клиент. #8534 (Vladimir Chebotarev)
  • Исправлен тест с процессорами. Незначительные оптимизации производительности. #7672 (Nikolai Kochetov)
  • Обновление contrib/protobuf. #8256 (Matwey V. Kornilov)
  • В преддверии перехода на c++20 в качестве новогоднего подарка. "Да пребудет сила C++ с ClickHouse." #8447 (Amos Bird)

Экспериментальная функция

  • Добавлена экспериментальная настройка min_bytes_to_use_mmap_io. Она позволяет читать большие файлы без копирования данных из ядра в пользовательское пространство. По умолчанию настройка отключена. Рекомендуемый порог — около 64 МБ, так как mmap/munmap работают медленно. #8520 (alexey-milovidov)
  • Переработаны квоты как часть системы контроля доступа. Добавлена новая таблица system.quotas, новые функции currentQuota, currentQuotaKey, новый SQL-синтаксис CREATE QUOTA, ALTER QUOTA, DROP QUOTA, SHOW QUOTA. #7257 (Vitaly Baranov)
  • Добавлена возможность пропускать неизвестные настройки с выводом предупреждений вместо выбрасывания исключений. #7653 (Vitaly Baranov)
  • Переработаны политики строк как часть системы контроля доступа. Добавлена новая таблица system.row_policies, новая функция currentRowPolicies(), новый SQL-синтаксис CREATE POLICY, ALTER POLICY, DROP POLICY, SHOW CREATE POLICY, SHOW POLICIES. #7808 (Vitaly Baranov)

Исправление в области безопасности

  • Исправлена возможность чтения структуры каталогов в таблицах с движком File. Это исправляет #8536. #8537 (alexey-milovidov)

Журнал изменений за 2019 год