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

Релиз ClickHouse 20.12

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

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

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

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

  • Обновлена информация о часовых поясах до версии 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).
  • Исправлена проблема, из-за которой некоторые таблицы не синхронизировались из MySQL в ClickHouse, поскольку преобразование префиксного индекса MySQL не поддерживалось в MaterializeMySQL. Это исправляет #15187 и #17912 #17944 (Winter Zhang).
  • Исправлена проблема, при которой оптимизация запроса давала неверный результат, если запрос содержал ARRAY JOIN. #17887 (sundyli).
  • Исправлена возможная ошибка сегментации в агрегатной функции topK. Это закрывает #17404. #17845 (Maksim Kita).
  • Исправлена ситуация, когда таблица system.stack_trace была пустой при работе сервера в режиме демона. #17630 (Amos Bird).

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

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

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

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

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

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

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

Улучшение

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

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

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

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

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

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

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

Релиз ClickHouse 20.11

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

Улучшение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Улучшение

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

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

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

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

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

Релиз ClickHouse 20.10

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

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

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

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

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

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

Улучшение

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

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

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

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

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

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

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

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

Улучшение

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

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

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

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

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

Релиз ClickHouse 20.9

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

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

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

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

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

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

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

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

Улучшение

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

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

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

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

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

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

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

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

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

Улучшение

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

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

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

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

Улучшение

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

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

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

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

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

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

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

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

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

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

Улучшение

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

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

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

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

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

Релиз ClickHouse 20.8

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Улучшение

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

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

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

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

Улучшение

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

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

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

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

Улучшение

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

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

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

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

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

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

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

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

Улучшение

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

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

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

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

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

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

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

Релиз ClickHouse 20.7

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

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

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

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

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

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

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

Улучшение

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

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

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

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

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

Релиз ClickHouse 20.6

Релиз ClickHouse v20.6.3.28-stable

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

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

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

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

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

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

Улучшение

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

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

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

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

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

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

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

Релиз ClickHouse 20.5

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Улучшение

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

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

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

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

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

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

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

Релиз ClickHouse v20.4

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Улучшение

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

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

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

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

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

Релиз ClickHouse v20.3

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

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

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

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

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

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

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

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

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

Улучшение

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

Релиз ClickHouse v20.3.18.10-lts, 2020-09-08

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

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

Улучшение

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

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

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

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

  • Исправлено срабатывание UBSan (добавление нуля к nullptr) в HashTable, возникшее после перехода на clang-10. #10638 (alexey-milovidov).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Улучшение

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

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

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

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

Релиз ClickHouse v20.3.3.6, 2020-03-17

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

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

Релиз ClickHouse v20.3.2.1, 2020-03-12

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

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

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

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

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

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

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

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

Улучшение

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

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

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

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

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

Релиз ClickHouse v20.1

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

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

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

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

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

  • Исправлена избыточная блокировка структуры при 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).
  • Исправлено крайне редкое состояние гонки в ThreadPool. #11314 (alexey-milovidov).
  • Исправлено возможное использование неинициализированной памяти при преобразовании. Пример: SELECT toIntervalSecond(now64()). #11311 (alexey-milovidov).
  • Исправлена проблема, из-за которой анализ индексов не работал, если в первичный ключ таблицы входил столбец типа Array, а запрос фильтровал данные по этому столбцу с помощью функций empty или notEmpty. Это исправление для #11286. #11303 (alexey-milovidov).
  • Исправлена ошибка, из-за которой оценка скорости запроса могла быть некорректной, а ограничение min_execution_speed могло не срабатывать или срабатывать неправильно, если выполнение запроса ограничивается настройками max_network_bandwidth, max_execution_speed или priority. Значение по умолчанию для timeout_before_checking_execution_speed изменено на ненулевое, поскольку в противном случае настройки min_execution_speed и max_execution_speed не оказывают никакого эффекта. Это исправляет #11297. Это исправляет #5732. Это исправляет #6228. Улучшение удобства использования: предотвращено слияние сообщения об исключении с индикатором прогресса в clickhouse-client. #11296 (alexey-milovidov).
  • Исправлен сбой при чтении повреждённых данных в формате Protobuf. Исправлены #5957 и #11203. #11258 (Vitaly Baranov).
  • Исправлена возможная ошибка Cannot capture column в функциях высшего порядка с захваченным аргументом типа Array(Array(LowCardinality)). #11185 (Nikolai Kochetov).
  • Если индекс пропуска данных зависит от столбцов, которые изменяются во время фонового слияния (для SummingMergeTree, AggregatingMergeTree, а также для TTL GROUP BY), он вычислялся некорректно. Эта проблема исправлена: вычисление индекса перенесено на этап после слияния, поэтому теперь индекс рассчитывается по слитым данным. #11162 (Azat Khuzhin).
  • Убрано логирование из задачи финализации мутации, если в итоге ничего не было финализировано. #11109 (alesapin).
  • Исправлены ошибки при разрешении аргументов функции parseDateTime64BestEffort. #10925. #11038 (Vasily Nemkov).
  • Исправлен некорректный размер сырых данных в методе getRawData(). #10964 (Igr).
  • Исправлена проблема с обратной совместимостью кортежей в distributed таблицах. #10889 (Anton Popov).
  • Исправлен SIGSEGV в StringHashTable (если такой ключ не существует). #10870 (Azat Khuzhin).
  • Исправлена ошибка в ReplicatedMergeTree, из-за которой некоторые запросы ALTER при OPTIMIZE могли зависать в ожидании реплики после того, как она становилась неактивной. #10849 (tavplubix).
  • Исправлен порядок столбцов после Block::sortColumns() (также добавлен тест, показывающий, что это влияет на реальный сценарий — движок Buffer). #10826 (Azat Khuzhin).
  • Исправлена проблема с мостом ODBC, возникавшая, когда не требовалось заключать идентификаторы в кавычки. Это исправляет #7984. #10821 (alexey-milovidov).
  • Исправлены сообщения UBSan и MSan об ошибках в DateLUT. #10798 (alexey-milovidov).
    • Используйте src_type для корректного преобразования типов в условиях по ключу. Исправляет #6287. #10791 (Andrew Onyshchuk).
  • Исправлено поведение parallel_view_processing. Теперь при возникновении исключения все вставки в MATERIALIZED VIEW должны корректно завершаться. Исправляет #10241. #10757 (Nikolai Kochetov).
  • Исправлены комбинаторы -OrNull и -OrDefault при использовании вместе с -State. #10741 (hcz).
  • Исправлено исчезновение totals. Totals могли отфильтровываться, если запрос содержал JOIN или подзапрос с внешним условием WHERE. Исправление #10674. #10698 (Nikolai Kochetov).
  • Исправлено несколько случаев использования оператора IN с одним и тем же множеством в одном запросе. #10686 (Anton Popov).
  • Исправлен порядок параметров в конструкторе AggregateTransform. #10667 (palasonic1).
  • Исправлено отсутствие параллельного выполнения удалённых запросов при включённом distributed_aggregation_memory_efficient. Исправляет #10655. #10664 (Nikolai Kochetov).
  • Исправлена оптимизация предикатов для распределённых запросов (enable_optimize_predicate_expression=1) с секцией HAVING (то есть когда требуется фильтрация на сервере-инициаторе): для этого сохранён порядок выражений, чего оказалось достаточно; кроме того, агрегатор теперь принудительно использует имена столбцов вместо индексов. Исправления: #10613, #11413. #10621 (Azat Khuzhin).
  • Исправлена ошибка the BloomFilter false positive must be a double number between 0 and 1 #10551. #10569 (Winter Zhang).
  • Исправлен SELECT для столбца ALIAS, если тип выражения по умолчанию отличается от типа столбца. #10563 (Azat Khuzhin).
    • Реализовано сравнение между значениями DateTime64 и String (как и в случае с DateTime). #10560 (Vasily Nemkov).

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

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

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

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

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

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

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

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

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

Улучшение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Улучшение

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

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

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

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

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

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

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

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

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