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

Список изменений за 2021 год

Релиз ClickHouse v21.12, 2021-12-15

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

  • Исправление функции, которая ранее вела себя нежелательным образом. Запрещён прямой select для Kafka/RabbitMQ/FileLog. Его можно включить с помощью настройки stream_like_engine_allow_direct_select. Прямой select не будет разрешён даже при включённой настройке, если есть присоединённое материализованное представление. Для Kafka и RabbitMQ прямой select, если он разрешён, по умолчанию не будет фиксировать сообщения (commit). Чтобы включить коммиты при прямом select, пользователь должен использовать настройку на уровне хранилища kafka{rabbitmq}_commit_on_select=1 (по умолчанию 0). #31053 (Kseniia Sumarokova).
  • Незначительное изменение поведения новой функции. Возвращать строку без кавычек в JSON_VALUE. Закрывает #27965. #31008 (Kseniia Sumarokova).
  • Переименование настройки. Добавлена поддержка пользовательского представления значений null для входных форматов TSV/CSV. Исправлена десериализация Nullable(String) во входных форматах TSV/CSV/JSONCompactStringsEachRow/JSONStringsEachRow. Настройки output_format_csv_null_representation и output_format_tsv_null_representation переименованы соответственно в format_csv_null_representation и format_tsv_null_representation. #30497 (Kruglov Pavel).
  • Дальнейшее удаление уже неиспользуемого кода. Это актуально только для пользователей версий ClickHouse ранее 20.6. Механизм «выбора лидера» удалён из ReplicatedMergeTree, так как несколько лидеров поддерживаются начиная с 20.6. Если вы обновляетесь со старой версии и некоторая реплика со старой версией является лидером, то сервер не сможет запуститься после обновления. Остановите реплики со старой версией, чтобы новая версия смогла стартовать. После этого будет невозможно откатиться на версию ниже 20.6. #32140 (tavplubix).

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

  • Реализовано больше команд из набора ZooKeeper Four Letter Words в clickhouse-keeper: https://zookeeper.apache.org/doc/r3.4.8/zookeeperAdmin.html#sc_zkCommands. #28981 (JackyWoo). Теперь clickhouse-keeper обладает полной функциональностью.
  • Поддержка типа данных Bool. #31072 (kevin wan).
  • Добавлена поддержка PARTITION BY в хранилищах File, URL, HDFS и для табличной функции INSERT INTO. Закрывает #30273. #30690 (Kseniia Sumarokova).
  • Добавлен CONSTRAINT ... ASSUME ... (без проверки при INSERT). Добавлено преобразование запроса в КНФ (https://github.com/ClickHouse/ClickHouse/issues/11749) для более удобной оптимизации. Добавлено простое переписывание запросов с использованием ограничений (сейчас поддерживается только простое сопоставление, в дальнейшем будет расширено для поддержки <,=,>...). Добавлена возможность заменять «тяжёлые» столбцы «лёгкими» столбцами, если это возможно. #18787 (Nikita Vasilev).
  • Базовая аутентификация для функций HTTP/URL. #31648 (michael1589).
  • Добавлена поддержка использования типа INTERVAL в предложении STEP для модификатора WITH FILL. #30927 (Anton Popov).
  • Добавлена поддержка параллельного чтения из нескольких файлов, а также glob-шаблонов в конструкции FROM INFILE. #30135 (Filatenkov Artur).
  • Добавлена поддержка параметров запросов для таблиц и баз данных типа Identifier. Закрывает #27226. #28668 (Nikolay Degterinsky).
  • Кратко: существенные улучшения полноты и согласованности текстовых форматов. Рефакторинг форматов TSV, TSVRaw, CSV и JSONCompactEachRow, JSONCompactStringsEachRow, удаление дублирующегося кода, добавление базового интерфейса для форматов с суффиксами -WithNames и -WithNamesAndTypes. Добавлены форматы CSVWithNamesAndTypes, TSVRawWithNames, TSVRawWithNamesAndTypes, JSONCompactEachRowWIthNames, JSONCompactStringsEachRowWIthNames, RowBinaryWithNames. Добавлена поддержка параллельного парсинга для форматов TSVWithNamesAndTypes, TSVRaw(WithNames/WIthNamesAndTypes), CSVWithNamesAndTypes, JSONCompactEachRow(WithNames/WIthNamesAndTypes), JSONCompactStringsEachRow(WithNames/WIthNamesAndTypes). Добавлена поддержка сопоставления столбцов и проверки типов для формата RowBinaryWithNamesAndTypes. Добавлена настройка input_format_with_types_use_header, которая задаёт, нужно ли проверять, что типы, записанные в формате <format_name>WIthNamesAndTypes, совпадают со структурой таблицы. Добавлена настройка input_format_csv_empty_as_default, которая используется в формате CSV вместо input_format_defaults_for_omitted_fields (поскольку эта настройка не должна управлять поведением csv_empty_as_default). Исправлено использование настройки input_format_defaults_for_omitted_fields (она использовалась только как csv_empty_as_default, но должна управлять вычислением значений по умолчанию для опущенных полей). Исправлен ввод/вывод Nullable в формате TSVRaw, этот формат сделан полностью совместимым со вставкой в TSV. Исправлена вставка значений NULL в LowCardinality(Nullable) при включённой настройке input_format_null_as_default (ранее вставлялись значения по умолчанию вместо реальных NULL). Исправлена десериализация строк в форматах JSONStringsEachRow/JSONCompactStringsEachRow (строки парсились только до первого символа '\n' или '\t'). Добавлена возможность использовать правило экранирования Raw во входном формате Template. Добавлена диагностическая информация для входного формата JSONCompactEachRow(WithNames/WIthNamesAndTypes). Исправлена ошибка при параллельном парсинге форматов -WithNames в случае, когда значение настройки min_chunk_bytes_for_parallel_parsing меньше размера одной строки в байтах. #30178 (Kruglov Pavel). Добавлена возможность выводить и парсить имена и типы столбцов во входном/выходном формате CustomSeparated. Добавлены форматы CustomSeparatedWithNames/WithNamesAndTypes, аналогичные TSVWithNames/WithNamesAndTypes. #31434 (Kruglov Pavel).
  • Поддержка хранилища Aliyun OSS. #31286 (cfcz48).
  • Делает доступными все параметры глобального пула потоков в конфигурационном файле. #31285 (Tomáš Hromada).
  • Добавлены оконные функции exponentialTimeDecayedSum, exponentialTimeDecayedMax, exponentialTimeDecayedCount и exponentialTimeDecayedAvg, которые более эффективны, чем exponentialMovingAverage, для больших окон. Также охвачено больше сценариев использования. #29799 (Vladimir Chebotarev).
  • Добавлена возможность сжимать логи перед записью в файл с помощью LZ4. Закрывает #23860. #29219 (Nikolay Degterinsky).
  • Добавлена поддержка конструкций JOIN ON 1 = 1, которые имеют семантику CROSS JOIN. Это закрывает #25578. #25894 (Vladimir C).
  • Добавлен комбинатор Map для типа Map. Также старые функции sum-, min-, max- Map для отображённых массивов переименованы в sum-, min-, max- MappedArrays. #24539 (Ildus Kurbangaliev).
  • Сделать чтение по HTTP операцией с поддержкой повторных попыток. Закрывает #29696. #29894 (Kseniia Sumarokova).

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

  • WINDOW VIEW для реализации потоковой обработки в ClickHouse. #8331 (vxider).
  • Прекращена поддержка использования баз данных типа Ordinary с MaterializedMySQL. #31292 (Stig Bakken).
  • Реализованы команды BACKUP и RESTORE для семейства таблиц Log. Эта функция находится в разработке. #30688 (Vitaly Baranov).

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

  • Снижено потребление памяти при чтении форматов Parquet, ORC, Arrow через s3 / url / hdfs (эта оптимизация управляется настройкой input_format_allow_seeks, которая по умолчанию включена). Также добавлена настройка remote_read_min_bytes_for_seek для управления seek‑операциями. Закрывает #10461. Закрывает #16857. #30936 (Kseniia Sumarokova).
  • Добавлены оптимизации для константных условий в JOIN ON, см. #26928. #27021 (Vladimir C).
  • Добавлена поддержка параллельного форматирования для всех текстовых форматов, за исключением JSONEachRowWithProgress и PrettyCompactMonoBlock. #31489 (Kruglov Pavel).
  • Ускорен подсчёт количества для nullable‑столбцов. #31806 (Raúl Marín).
  • Ускорены агрегатные функции avg и sumCount. #31694 (Raúl Марín).
  • Повышена производительность форматов вывода JSON и XML. #31673 (alexey-milovidov).
  • Повышена производительность синхронизации данных с блочным устройством. Закрывает #31181. #31229 (zhanglistar).
  • Исправлена проблема с производительностью запросов в таблицах LiveView. Исправляет #30831. #31006 (vzakaznikov).
  • Ускорен разбор запросов. #31949 (Raúl Марín).
  • Добавлена возможность разделять правила rollup в GraphiteMergeTree для обычных/помеченных метрик (необязательное поле rule_type). #25122 (Michail Safronov).
  • Удалены избыточные запросы DESC TABLE для remote() (в случае remote('127.1', system.one) (т. е. идентификатор в виде db.table вместо строки) выполнялся избыточный запрос DESC TABLE). #32019 (Azat Khuzhin).
  • Оптимизирована функция tupleElement для чтения подколонки при включённой настройке optimize_functions_to_subcolumns. #31261 (Anton Popov).
  • Оптимизирована функция mapContains для чтения подколонки key при включённой настройке optimize_functions_to_subcolumns. #31218 (Anton Popov).
  • Добавлены настройки merge_tree_min_rows_for_concurrent_read_for_remote_filesystem и merge_tree_min_bytes_for_concurrent_read_for_remote_filesystem. #30970 (Kseniia Sumarokova).
  • Реализован пропуск мутаций для различных партиций в StorageMergeTree. #21326 (Vladimir Chebotarev).

Улучшения

  • Запретить удаление таблицы или словаря, если от них зависят другие таблицы или словари. #30977 (tavplubix).
  • Добавлена возможность версионирования состояний агрегатных функций. Теперь мы можем вносить обратно-совместимые изменения в формат сериализации состояний агрегатных функций. Закрывает #12552. #24820 (Kseniia Sumarokova).
  • Добавлена поддержка синтаксиса ALTER MODIFY COLUMN в стиле PostgreSQL. #32003 (SuperDJY).
  • Добавлена поддержка update_field для RangeHashedDictionary, ComplexKeyRangeHashedDictionary. #32185 (Maksim Kita).
  • Функции murmurHash3_128 и sipHash128 теперь принимают произвольное количество аргументов. Это устраняет проблему, описанную в #28774. #28965 (小路).
  • Добавлена поддержка выражений по умолчанию для хранилища HDFS и оптимизировано извлечение данных, когда источник является колоночным. #32256 (李扬).
  • Улучшено имя операции для спана OpenTelemetry. #32234 (Frank Chen).
  • Используйте Content-Type: application/x-ndjson (http://ndjson.org/) для формата вывода JSONEachRow. #32223 (Dmitriy Dorофеев).
  • Улучшен пропуск неизвестных полей при использовании правила экранирования в кавычках в форматах Template/CustomSeparated. Ранее можно было пропускать только строковые значения в кавычках, теперь можно пропускать значения любого типа. #32204 (Kruglov Pavel).
  • Теперь clickhouse-keeper отказывается запускаться или применять изменения конфигурации, если в них есть дублирующиеся идентификаторы или конечные точки. Исправляет #31339. #32121 (alesapin).
  • Устанавливать заголовок Content-Type в HTTP-запросах, генерируемых движком URL. #32113 (Frank Chen).
  • Возвращать заголовок Content-Type со значением 'application/json' для формата JSONEachRow, если включен output_format_json_array_of_rows. #32112 (Frank Chen).
  • Добавлена поддержка разбора знака + перед значениями типов Float32/Float64. #32079 (Kruglov Pavel).
  • Разрешена настройка пользователем параметра hdfs_replication для DiskHDFS и StorageHDFS. Закрывает #32039. #32049 (leosunli).
  • Добавлены поля ClickHouse exception и exception_code в span-лог OpenTelemetry. #32040 (Frank Chen).
  • Улучшена обработка длительности логов спанов OpenTelemetry — ранее на уровне запроса она становилась равной нулю, если при выполнении запроса возникало исключение. #32038 (Frank Chen).
  • Исправлена проблема, из-за которой нельзя было создать LowCardinality для Int256. #31832 (alexey-milovidov).
  • Таблицы system.*_log пересоздаются в случае изменения движка или выражения partition_by. #31824 (Azat Khuzhin).
  • MaterializedMySQL: Исправлена ошибка при работе с таблицей с именем 'table'. #31781 (Håvard Kvålen).
  • Источник словаря ClickHouse: поддержка предопределённых подключений. Закрывает #31705. #31749 (Kseniia Sumarokova).
  • Добавлена возможность использовать предопределённые конфигурации подключений для движков Kafka и RabbitMQ (аналогично другим интеграционным табличным движкам). #31691 (Kseniia Sumarokova).
  • Всегда заново отображать приглашение при перемещении по истории в clickhouse-client. Это улучшит удобство работы с очень длинными запросами, которые не помещаются на экран. #31675 (alexey-milovidov) (автор: Amos Bird).
  • Добавить сочетания клавиш для перемещения по истории (вместо lines/history). #31641 (Azat Khuzhin).
  • Улучшены проверки параметра max_execution_time. Исправлены некоторые случаи, когда проверки тайм‑аута не выполнялись и запрос мог выполняться слишком долго. #31636 (Raúl Marín).
  • Улучшено сообщение об исключении, когда users.xml невозможно загрузить из‑за некорректного хеша пароля. Это закрывает #24126. #31557 (Vitaly Baranov).
  • Использовать имена шарда и реплики из аргументов базы данных Replicated при расширении макросов в аргументах ReplicatedMergeTree, если эти макросы не определены в конфигурации. Закрывает #31471. #31488 (tavplubix).
  • Улучшен анализ проекции min/max/count. Теперь при включённом параметре allow_experimental_projection_optimization виртуальная проекция min/max/count может использоваться вместе со столбцами из ключа партиционирования. #31474 (Amos Bird).
  • Добавлена поддержка параметра --pager для clickhouse-local. #31457 (Azat Khuzhin).
  • Исправлено поведение ожидания редактора во время интерактивного редактирования запроса (waitpid() возвращает -1 при SIGWINCH, а EDITOR и clickhouse-local/clickhouse-client работают одновременно). #31456 (Azat Khuzhin).
  • Выбрасывать исключение, если после поля в формате JSONCompactStrings(EachRow) присутствуют лишние данные. #31455 (Kruglov Pavel).
  • Значение по умолчанию для настроек http_send_timeout и http_receive_timeout изменено с 1800 (30 минут) на 180 (3 минуты). #31450 (tavplubix).
  • MaterializedMySQL теперь обрабатывает DDL-запросы CREATE TABLE ... LIKE .... #31410 (Stig Bakken).
  • Возвращать синтетический запрос CREATE при выполнении SHOW CREATE TABLE для системных таблиц. #31391 (SuperDJY).
  • Ранее прогресс отображался только для табличной функции numbers. Теперь он также отображается для numbers_mt. #31318 (Kseniia Sumarokova).
  • Исходные роли пользователя теперь используются для поиска политик строк, см. #31080. #31262 (Vitaly Baranov).
  • При изменении устаревшей настройки выводить предупреждение в system.warnings. #31252 (tavplubix).
  • Улучшен механизм backoff для фоновых задач очистки в MergeTree. Настройки merge_tree_clear_old_temporary_directories_interval_seconds и merge_tree_clear_old_parts_interval_seconds перенесены из пользовательских настроек в настройки движка MergeTree. #31180 (tavplubix).
  • Теперь каждая реплика будет отправлять клиенту только приращения по счетчикам событий профилирования. #31155 (Dmitry Novik). Это делает опцию --hardware_utilization в clickhouse-client действительно полезной.
  • Включить в clickhouse-client многострочное редактирование по умолчанию. Это устраняет проблему #31121. #31123 (Amos Bird).
  • Нормализация имён функций для запросов ALTER. Это помогает избежать несоответствия метаданных между созданием таблицы с индексами/проекциями и добавлением индексов/проекций через команды ALTER. Это продолжение PR https://github.com/ClickHouse/ClickHouse/pull/20174. Отнесено к улучшениям, так как не было сообщений об ошибках, а сам сценарий встречается довольно редко. #31095 (Amos Bird).
  • Добавлена поддержка модификатора IF EXISTS для запросов RENAME DATABASE/TABLE/DICTIONARY. В этом случае ошибка не возникнет, даже если переименуемая DATABASE/TABLE/DICTIONARY не существует. #31081 (victorgao).
  • Отменять вертикальные слияния при удалении партиции. Это продолжение изменений из https://github.com/ClickHouse/ClickHouse/pull/25684 и https://github.com/ClickHouse/ClickHouse/pull/30996. #31057 (Amos Bird).
  • Локальная сессия внутри источника словаря ClickHouse больше не будет отправлять свои события в сессионный лог. Это устраняет возможную взаимную блокировку (предупреждение tsan) при завершении работы. Также этот PR исправляет нестабильный тест test_dictionaries_dependency_xml/. #31013 (Vitaly Baranov).
  • Меньше блокировок при операции ALTER. #31010 (Amos Bird).
  • Исправлена опция --verbose в интерактивном режиме clickhouse-local и разрешена запись логов в файл. #30881 (Kseniia Sumarokova).
  • Добавлены команды \l, \d, \c в clickhouse-client по аналогии с MySQL и PostgreSQL. #30876 (Pavel Medvedev).
  • Для clickhouse-local или clickhouse-client: если указана опция --interactive вместе с --query или --queries-file, то они сначала выполняются так же, как в неинтерактивном режиме, а затем запускается интерактивный режим. #30851 (Kseniia Sumarokova).
  • Исправлена возможная ошибка "The local set of parts of X doesn't look like the set of parts in ZooKeeper" (если команда DROP завершалась с ошибкой при удалении znode из ZooKeeper). #30826 (Azat Khuzhin).
  • Формат Avro теперь работает с Kafka. Добавлена настройка output_format_avro_rows_in_file. #30351 (Ilya Golshtein).
  • Позволяет задать одну или несколько схем PostgreSQL для одной базы данных MaterializedPostgreSQL. Закрывает #28901. Закрывает #29324. #28933 (Kseniia Sumarokova).
  • Изменены порты по умолчанию, используемые clickhouse-keeper для внутреннего взаимодействия, с 44444 на 9234. Исправляет #30879. #31799 (alesapin).
  • Реализована функция transform с аргументами типа Decimal. #31839 (李帅).
  • Исправлено аварийное завершение на debug-сервере и ошибка DB::Exception: std::out_of_range: basic_string на release-сервере при некорректном URL-адресе HDFS путем добавления дополнительной проверки структуры URL-адреса HDFS. #31042 (Kruglov Pavel).
  • Исправлена возможная ошибка assert в функции/движке таблиц hdfs, добавлен тест. #31036 (Kruglov Pavel).

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

  • Исправлена работа псевдонимов в конструкциях GROUP BY / ORDER BY / LIMIT BY при включённых позиционных аргументах. Закрывает #31173. #31741 (Kseniia Sumarokova).
  • Исправлено использование движка таблицы Buffer с типом данных Map. Исправляет #30546. #31742 (Anton Popov).
  • Исправлено чтение из таблиц MergeTree при включённом use_uncompressed_cache. #31826 (Anton Popov).
  • Исправлено поведение, при котором мутации, для которых нет работы, зависали (при включённой настройке empty_result_for_aggregation_by_empty_set). #32358 (Nikita Mikhaylov).
  • Исправлен пропуск столбцов при записи protobuf. Этот PR исправляет #31160, см. комментарий #31160#issuecomment-980595318. #31988 (Vitaly Baranov).
  • Исправлена ошибка при удалении ненужных столбцов в подзапросе. Если в запросе есть агрегатная функция без GROUP BY, она не должна удаляться, даже если считается ненужной. #32289 (dongyifeng).
  • Лимит квоты ещё не был достигнут, но ограничение уже было превышено. Этот PR исправляет #31174. #31337 (sunny).
  • Исправлена команда SHOW GRANTS при использовании частичных отзывов прав доступа. Этот PR исправляет #31138. #31249 (Vitaly Baranov).
  • Объем памяти был неверно оценен, когда ClickHouse запускался в контейнерах с ограничениями cgroup. #31157 (Pavel Medvedev).
  • Исправлена обработка запросов ALTER ... MATERIALIZE COLUMN ... в случаях, когда тип данных выражения по умолчанию не совпадает с типом данных столбца. #32348 (Anton Popov).
  • Исправлено падение с SIGFPE в агрегатной функции avgWeighted с аргументом Decimal. Исправлена ошибка #32053. #32303 (tavplubix).
  • Сервер мог не запускаться с ошибкой Cannot attach 1 tables due to cyclic dependencies, если таблица Dictionary ссылалась на XML-словарь с тем же именем; это исправлено. Исправлена #31315. #32288 (tavplubix).
  • Исправлена ошибка разбора при десериализации NaN для Nullable(Float) при использовании правила экранирования Quoted. #32190 (Kruglov Pavel).
  • Словари XML: идентификаторы, используемые в запросе CREATE TABLE, во время обновления до более новой версии могут автоматически получать префикс default_database. Закрывает #31963. #32187 (Maksim Kita).
  • Количество активных реплик могло определяться некорректно при вставке с кворумом, если на некоторых репликах был отключён параметр replicated_can_become_leader. Исправлено. #32157 (tavplubix).
  • Словари: исправлены случаи, когда {condition} не работал в пользовательских запросах к базе данных. #32117 (Maksim Kita).
  • Исправлена работа CAST из Nullable с cast_keep_nullable (ранее приводила к ошибке PARAMETER_OUT_OF_BOUND, например для toUInt32OrDefault(toNullable(toUInt32(1)))). #32080 (Azat Khuzhin).
  • Исправлен оператор CREATE TABLE для хранилища Join в некоторых нестандартных случаях. Закрыт #31680. #32066 (SuperDJY).
  • Исправлена ошибка Directory ... already exists and is not empty при отсоединении части. #32063 (tavplubix).
  • MaterializedMySQL (экспериментальная возможность): исправлена некорректная интерпретация данных типа DECIMAL из MySQL. #31990 (Håvard Kvålen).
  • Движок FileLog (экспериментальная возможность) излишне создавал директорию метаданных при ошибке создания таблицы. Исправлено #31962. #31967 (flynn).
  • Некоторая запись GET_PART может зависнуть в очереди репликации, если часть утеряна на всех репликах и в том же разделе нет других частей. Проблема исправлена в случаях, когда ключ раздела содержит только столбцы целочисленных типов или Date[Time]. Исправляет #31485. #31887 (tavplubix).
  • Исправлены функции empty и notEmpty с аргументами типа UUID, что устраняет проблему #31819. #31883 (Anton Popov).
  • Измените путь конфигурации с keeper_server.session_timeout_ms на keeper_server.coordination_settings.session_timeout_ms при создании KeeperTCPHandler. Аналогично для operation_timeout. #31859 (JackyWoo).
  • Исправлена некорректная операция приведения типа Nullable при использовании первичного ключа типа Nullable. (Использование первичного ключа типа Nullable не рекомендуется — пожалуйста, не используйте его.) Это исправляет #31075. #31823 (Amos Bird).
  • Исправлен сбой при использовании рекурсивной UDF в SQL. Закрывает #30856. #31820 (Maksim Kita).
  • Исправлена ошибка, приводившая к сбою при использовании функции dictGet с типом для атрибута словаря, когда этот тип — Nullable. Исправляет #30980. #31800 (Maksim Kita).
  • Исправлено падение при пустом результате выполнения ODBC-запроса (с некоторыми ODBC-драйверами). Закрывает #31465. #31766 (Kseniia Sumarokova).
  • Исправлена проблема с отключением профайлера запросов (в случае query_profiler_real_time_period_ns>0/query_profiler_cpu_time_period_ns>0 профайлер запросов мог оставаться включённым даже после завершения запроса). #31740 (Azat Khuzhin).
  • Исправлена редкая ошибка сегментации при одновременном выполнении запросов ATTACH PARTITION. #31738 (tavplubix).
  • Исправлено состояние гонки в формате вывода JSONEachRowWithProgress, возникавшее при одновременном выводе данных и строк с прогрессом. #31736 (Kruglov Pavel).
  • Исправлена ошибка с сообщением there are no such cluster here при выполнении запроса ON CLUSTER, если указанное имя кластера совпадает с именем базы данных Replicated. #31723 (tavplubix).
  • Исправлено исключение при некоторых вариантах применения функции decrypt к столбцам типа Nullable. Это закрывает #31662. Это закрывает #31426. #31707 (alexey-milovidov).
  • Исправлена работа функции ngrams при наличии в строке символов UTF-8. #31706 (yandd).
  • Настройки input_format_allow_errors_num и input_format_allow_errors_ratio не работали при разборе доменных типов данных, таких как IPv4; это было исправлено. Исправляет #31686. #31697 (tavplubix).
  • Исправлено исключение нулевого указателя в MATERIALIZE COLUMN. #31679 (Nikolai Kochetov).
  • Запрос RENAME TABLE работал некорректно при попытке переименовать DDL-словарь в базе данных Ordinary, ошибка исправлена. #31638 (tavplubix).
  • Реализована агрегатная функция sparkbar так, как было изначально задумано, см.: #26175#issuecomment-960353867, комментарий. #31624 (小路).
  • Исправлена генерация некорректного JSON, возникавшая, когда только имена столбцов содержали недопустимые последовательности UTF-8. #31534 (Kevin Michel).
  • Отключите partial_merge_join_left_table_buffer_bytes, пока ошибка в этой оптимизации не будет исправлена. См. #31009). Удалите лишнюю опцию partial_merge_join_optimizations. #31528 (Vladimir C).
  • Исправлено отображение прогресса выполнения для коротких запросов INSERT SELECT. #31510 (Azat Khuzhin).
  • Исправлено некорректное поведение при использовании GROUP BY с позиционными аргументами. Закрывает #31280#issuecomment-968696186. #31420 (Kseniia Sumarokova).
  • Исправлена ошибка с использованием nullptr в провайдере учетных данных STS для S3. #31409 (Vladimir Chebotarev).
  • Удалена функция notLike из анализа индексов, так как она работала некорректно. #31169 (sundyli).
  • Исправлена ошибка в Keeper, которая могла приводить к невозможности запуска, если часть журналов координации была утеряна и снимок состояния был новее последнего журнала. #31150 (alesapin).
  • Переписано использование правой распределённой таблицы в локальном соединении. Исправляет #25809. #31105 (abel-cheng).
  • Исправлена таблица Merge с псевдонимами и предложением WHERE (ранее она вовсе не работала). Закрывает #28802. #31044 (Kseniia Sumarokova).
  • Исправлены JSON_VALUE/JSON_QUERY с идентификаторами в кавычках. Это позволяет использовать пробелы в JSON-пути. Закрывает #30971. #31003 (Kseniia Sumarokova).
  • Использование функции formatRow с форматами, не ориентированными на строки, приводило к ошибке сегментации (segfault). Теперь использование этой функции с такими форматами не допускается (так как в этом нет смысла). #31001 (Kruglov Pavel).
  • Исправлена ошибка, из-за которой переставали работать запросы SELECT, выполнявшиеся после удаления материализованного представления. Обнаружено в #30691. #30997 (Kseniia Sumarokova).
  • Пропустить проверку max_partition_size_to_drop для ATTACH PARTITION ... FROM и MOVE PARTITION ... #30995 (Amr Alaa).
  • Исправлены некоторые краевые случаи при работе операторов INTERSECT и EXCEPT. Закрывает #30803. #30965 (Kseniia Sumarokova).

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

  • Исправлен некорректный результат фильтрации в сборках для архитектур, отличных от x86. Закрывает #31417. Закрывает #31524. #31574 (alexey-milovidov).
  • Реализована полностью воспроизводимая сборка ClickHouse (байтово идентичная на разных машинах). Закрывает #22113. #31899 (alexey-milovidov). Удалён путь файловой системы к каталогу сборки из бинарных файлов для обеспечения воспроизводимых сборок. Это необходимо для #22113. #31838 (alexey-milovidov).
  • Используем собственные CMakeLists для zlib-ng, cassandra, mariadb-connector-c, а также xz, re2, sentry, gsasl, arrow, protobuf. Это необходимо для #20151. Часть #9226. Небольшой шаг к удалению надоедливого мусора из системы сборки. #30599 (alexey-milovidov).
  • Герметичные сборки: используем фиксированную версию libc и гарантируем, что никакие исходные или бинарные файлы из хостовой ОС не используются во время сборки. Закрывает #27133. Закрывает #21435. Закрывает #30462. #30011 (alexey-milovidov).
  • Добавлена функция getFuzzerData() для упрощения фаззинга отдельных функций. Закрывает #23227. #27526 (Alexey Boykov).
  • Более корректная настройка capabilities внутри Docker. #31802 (Constantine Peresypkin).
  • Включены опции компиляции clang -fstrict-vtable-pointers, -fwhole-program-vtables. #20151 (Maksim Kita).
  • Исключена необходимость загружать архивы с toolchain для кросс-компиляции под FreeBSD. #31672 (alexey-milovidov).
  • Начальная поддержка RISC-V. См. development/build-cross-riscv для особенностей и команды сборки, которая была протестирована. #31309 (Vladimir Smirnov).
  • Поддерживается компиляция на ARM-машинах с параметром -DENABLE_TESTS=OFF. #31007 (zhanghuajie).

Релиз ClickHouse v21.11, 2021-11-09

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

  • Изменён порядок аргументов json_path и json в функциях SQL/JSON (для соответствия стандарту). Закрывает #30449. #30474 (Kseniia Sumarokova).
  • Удалена настройка таблиц MergeTree write_final_mark. Теперь она всегда будет иметь значение true. #30455 (Kseniia Sumarokova). Никаких действий не требуется, все таблицы совместимы с новой версией.
  • Функция bayesAB удалена. Пожалуйста, помогите вернуть эту функцию в обновлённом виде. Это закрывает #26233. #29934 (alexey-milovidov).
  • Это актуально только в том случае, если вы уже начали использовать экспериментальную поддержку clickhouse-keeper. Теперь ClickHouse Keeper по умолчанию создаёт снапшоты, сжатые кодеком ZSTD, вместо собственного формата блочного сжатия ClickHouse LZ4. Это поведение можно отключить с помощью настройки координации compress_snapshots_with_zstd_format (она должна быть одинаковой на всех репликах кворума). Обратная несовместимость встречается довольно редко и может возникнуть только тогда, когда новый узел отправляет снапшот (например, при восстановлении) на старый узел, который не умеет читать снапшоты в формате ZSTD. #29417 (alesapin).

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

  • Новый асинхронный режим INSERT позволяет накапливать вставляемые данные и сохранять их единым пакетом в фоновом режиме. На стороне клиента он может быть включен установкой параметра async_insert для запросов INSERT с данными, встроенными в запрос, или размещёнными в отдельном буфере (например, для запросов INSERT по протоколу HTTP). Если wait_for_async_insert равен true (по умолчанию), клиент будет ждать, пока данные не будут сброшены в таблицу. На стороне сервера он управляется настройками async_insert_threads, async_insert_max_data_size и async_insert_busy_timeout_ms. Реализует #18282. #27537 (Anton Popov). #20557 (Ivan). Замечания по производительности: с асинхронными вставками можно выполнять до примерно 10 000 отдельных запросов INSERT в секунду, поэтому по‑прежнему рекомендуется выполнять вставку пакетами, если требуется достичь производительности до миллионов вставляемых строк в секунду.
  • Добавлен интерактивный режим для clickhouse-local. Теперь вы можете просто запустить clickhouse-local, чтобы получить клиентский интерфейс командной строки ClickHouse без подключения к серверу и обрабатывать данные из файлов и внешних источников. Также объединён код clickhouse-client и clickhouse-local. Закрывает #7203. Закрывает #25516. Закрывает #22401. #26231 (Kseniia Sumarokova).
  • Добавлена поддержка исполняемых (скриптовых) пользовательских функций. Это пользовательские функции (UDF), которые могут быть написаны на любом языке программирования. #28803 (Maksim Kita).
  • Добавлена поддержка предопределённых подключений к внешним источникам данных. Это позволяет избежать необходимости указывать учётные данные или адреса при использовании внешних источников данных — вместо этого к ним можно обращаться по именам. Закрывает #28367. #28577 (Kseniia Sumarokova).
  • Добавлена база данных INFORMATION_SCHEMA с представлениями SCHEMATA, TABLES, VIEWS и COLUMNS, соответствующими таблицам в базе данных system. Закрывает #9770. #28691 (tavplubix).
  • Добавлена поддержка выражения EXISTS (subquery). Закрывает #6852. #29731 (Kseniia Sumarokova).
  • Ведение журнала сессий для аудита. Запись всех успешных и неуспешных событий входа в систему и выхода из неё в новую таблицу system.session_log. #22415 (Vasily Nemkov) (Vitaly Baranov).
  • Поддержка многомерных функций косинусного и евклидова расстояний; расстояний и норм L1, L2, Lp, Linf. Скалярное произведение над кортежами и различные арифметические операторы над кортежами. Это полностью закрывает #4509 и даже больше. #27933 (Alexey Boykov).
  • Добавлена поддержка сжатия и распаковки для INTO OUTFILE и FROM INFILE (с автоматическим определением или с дополнительным необязательным параметром). #27135 (Filatenkov Artur).
  • Добавлена поддержка CORS (Cross-Origin Resource Sharing) для HTTP-запросов OPTIONS. Это означает, что теперь Grafana будет работать с serverless-запросами без костылей. Закрывает #18693. #29155 (Filatenkov Artur).
  • Запросы с JOIN ON теперь поддерживают логические операции OR. #21320 (Ilya Golshtein).
  • Добавлена функция tokens, которая позволяет разбивать строку на токены, используя небуквенно-цифровые ASCII-символы в качестве разделителей. #29981 (Maksim Kita). Добавлена функция ngrams для извлечения n-грамм из текста. Закрывает #29699. #29738 (Maksim Kita).
  • Добавлены функции нормализации Unicode: normalizeUTF8NFC, normalizeUTF8NFD, normalizeUTF8NFKC, normalizeUTF8NFKD. #28633 (darkkeks).
  • Потоковое чтение файлов журналов приложений в ClickHouse с использованием движка таблицы FileLog. Аналогично движкам Kafka или RabbitMQ, но предназначено для добавляемых (append-only) и ротируемых логов в локальной файловой системе. Закрывает #6953. #25969 (flynn) (Kseniia Sumarokova).
  • Добавлен формат вывода CapnProto, переработан формат ввода CapnProto. #29291 (Kruglov Pavel).
  • Добавлена возможность записывать числа в запросах в виде двоичных литералов. Пример: SELECT 0b001;. #29304 (Maksim Kita).
  • Добавлен тип словаря hashed_array. Он экономит память при работе со словарями с несколькими атрибутами. Закрывает #30236. #30242 (Maksim Kita).
  • Добавлена функция JSONExtractKeys. #30056 (Vitaly).
  • Добавлена функция getOSKernelVersion — она возвращает строку с версией ядра операционной системы. #29755 (Memo).
  • Добавлены функции MD4 и SHA384. MD4 — устаревшая и небезопасная хеш-функция; её можно использовать только в редких случаях, когда MD4 уже применяется в какой-то устаревшей системе и вам нужно получить в точности такой же результат. #29602 (Nikita Tikhomirov).
  • HSTS может быть включён для HTTP-сервера ClickHouse, задав положительное значение параметра hsts_max_age в конфигурационном файле. #29516 (凌涛).
  • Поддержка хранилища Huawei OBS. Закрыта задача #24294. #29511 (kevin wan).
  • Новая функция mapContainsKeyLike для проверки наличия в карте ключа, соответствующего простому регулярному выражению. #29471 (凌涛). Новая функция mapExtractKeyLike для получения карты, содержащей только элементы, ключи которых соответствуют заданному шаблону. #30793 (凌涛).
  • Реализована поддержка команды ALTER TABLE x MODIFY COMMENT. #29264 (Vasily Nemkov).
  • Добавляет функции анализа H3, которые отсутствуют в ClickHouse, но доступны через API H3: https://h3geo.org/docs/api/inspection. #29209 (Bharat Nallan).
  • Разрешить выполнение нереплицируемых операций ALTER TABLE FETCH и ATTACH в реплицируемых базах данных. #29202 (Kevin Michel).
  • Добавлена настройка output_format_csv_null_representation: она аналогична output_format_tsv_null_representation, но предназначена для вывода в формате CSV. #29123 (PHO).
  • Добавлена функция zookeeperSessionUptime(), которая возвращает время работы текущей сессии ZooKeeper в секундах. #28983 (tavplubix).
  • Реализована функция h3ToGeoBoundary. #28952 (Ivan Veselov).
  • Добавлена агрегатная функция exponentialMovingAverage, которую можно использовать в качестве оконной функции, что закрывает #27511. #28914 (alexey-milovidov).
  • Позволяет включать подстолбцы столбцов таблицы в результат запроса DESCRIBE (включается настройкой describe_include_subcolumns). #28905 (Anton Popov).
  • В Executable и ExecutablePool добавлена опция send_chunk_header. Если эта опция включена, количество строк чанка (rows_count) с символом перевода строки будет отправлено клиенту перед чанком. #28833 (Maksim Kita).
  • tokenbf_v1 и ngram поддерживают Map с ключом типа String или FixedString. Это повышает эффективность пропуска данных в запросах с фильтром по ключу map. sql CREATE TABLE map_tokenbf ( row_id UInt32, map Map(String, String), INDEX map_tokenbf map TYPE ngrambf_v1(4,256,2,0) GRANULARITY 1 ) Engine=MergeTree() Order by id Для таблицы выше запрос select * from map_tokebf where map['K']='V' пропустит гранулы, которые не содержат ключ A. Конечно, то, сколько строк будет пропущено, зависит от значений granularity и index_granularity, которые вы задали. #28511 (凌涛).
  • Отправка событий профиля с сервера на клиент. Добавлен новый тип пакета ProfileEvents. Закрывает #26177. #28364 (Dmitry Novik).
  • Операции побитового сдвига для типов данных FixedString и String. Это закрывает #27763. #28325 (小路).
  • Поддерживается динамическое добавление и удаление таблиц из репликации PostgreSQL в движке базы данных MaterializedPostgreSQL. Добавлена поддержка оператора ALTER для настроек базы данных. Закрывает #27573. #28301 (Kseniia Sumarokova).
  • Добавлена функция accurateCastOrDefault(x, T). Закрывает задачу #21330. Автор — @taiyang-li. #23028 (Maksim Kita).
  • Добавлены функции toUUIDOrDefault, toUInt8/16/32/64/256OrDefault, toInt8/16/32/64/128/256OrDefault, которые позволяют пользователю задавать значение по умолчанию (не NULL) при неудачном разборе строки. #21330 (taiyang-li).

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

  • Фоновые слияния могут вытеснять друг друга, и они планируются с соответствующими приоритетами. Теперь длительные слияния не будут препятствовать выполнению коротких. Это необходимо для более эффективного планирования и контроля выполнения слияний. Это снижает вероятность возникновения ошибки "too many parts". #22381. #25165 (Nikita Mikhaylov). Добавлена возможность выполнять больше слияний и мутаций, чем количество потоков в фоновом пуле. Слияния и мутации будут выполняться поочередно в соответствии с их размерами (меньший размер имеет более высокий приоритет). Соотношение количества задач к количеству потоков выполнения контролируется настройкой background_merges_mutations_concurrency_ratio, по умолчанию — 2. #29140 (Nikita Mikhaylov).
  • Появилась возможность использовать асинхронное чтение для удалённых файловых систем. Уменьшается количество операций позиционирования при чтении из удалённых файловых систем. Это значительно повышает производительность и позволяет экспериментальным дискам web и s3 работать быстрее, чем EBS при определённых условиях. #29205 (Kseniia Sumarokova). Тем временем тип диска web (статический набор данных, размещённый на веб‑сервере) выведен из статуса экспериментального и признан готовым к промышленной эксплуатации.
  • Запросы с INTO OUTFILE в clickhouse-client теперь будут использовать несколько потоков. Исправлена проблема с мерцанием индикатора прогресса при использовании INTO OUTFILE. Это закрывает #30873. Это закрывает #30872. #30886 (alexey-milovidov).
  • Уменьшен объём избыточных сжатых данных, читаемых с диска, для некоторых типов запросов SELECT (только для семейства движков MergeTree). #30111 (alesapin).
  • Удалены некоторые избыточные вызовы seek при чтении сжатых блоков в семействе движков таблиц MergeTree. #29766 (alesapin).
  • Сделать табличную функцию url способной обрабатывать несколько URL параллельно. Это закрывает задачи #29670 и #29671. #29673 (alexey-milovidov).
  • Улучшена производительность агрегации в порядке первичного ключа (при включённой настройке optimize_aggregation_in_order). #30266 (Anton Popov).
  • Теперь ClickHouse использует DNS‑кэш при взаимодействии с внешним S3. #29999 (alesapin).
  • Добавлена поддержка передачи условий IS NULL/IS NOT NULL во внешние базы данных (например, MySQL). #29463 (Azat Khuzhin). Реализовано преобразование isNull/isNotNull в IS NULL/IS NOT NULL (для внешних БД, например MySQL). #29446 (Azat Khuzhin).
  • Запросы SELECT к таблицам словарей будут использовать несколько потоков. #30500 (Maksim Kita).
  • Улучшена производительность фильтрации (операция WHERE) по столбцам типа Decimal. #30431 (Jun Jin).
  • Удалён разветвлённый код в операции фильтрации, вместо него использована более эффективная реализация на основе popcnt/ctz, обеспечивающая лучшую производительность. #29881 (Jun Jin).
  • Улучшен генератор байтовой маски фильтра (используется для оператора WHERE) — единая функция с инструкциями SSE/AVX2/AVX512. Обратите внимание, что по умолчанию ClickHouse использует только SSE, поэтому это актуально только для кастомных сборок. #30014 (jasperzhu). #30670 (jasperzhu).
  • Улучшена производительность агрегатной функции SUM над Nullable-числами с плавающей запятой. #28906 (Raúl Marín).
  • Ускорен процесс загрузки партий данных при использовании нескольких дисков. Идея аналогична https://github.com/ClickHouse/ClickHouse/pull/16423. В продакшене наблюдается улучшение: 24 мин -> 16 мин. #28363 (Amos Bird).
  • Уменьшены значения по умолчанию для размера частей многочастичной загрузки в S3, чтобы снизить потребление памяти. #28679 (ianton-ru).
  • Ускорена функция bitmapAnd. #28332 (dddounaiking).
  • Удалены неоптимальные уведомления о мутациях в StorageMergeTree, когда ещё идут слияния. #27552 (Vladimir Chebotarev).
  • Попытка повысить производительность сравнения строк. #28767 (alexey-milovidov).
  • Индекс по первичному ключу и фильтр по партиции могут работать в виде кортежа. #29281 (凌涛).
  • Если запрос содержит несколько агрегатных функций quantile с одинаковыми аргументами, но разными значениями параметра уровня, они будут объединены и выполнены за один проход, если включена настройка optimize_syntax_fuse_functions. #26657 (hexiaoting).
  • Теперь агрегация min-max по первому выражению первичного ключа оптимизирована за счёт проекций. Это для #329. #29918 (Amos Bird).

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

  • Добавлена возможность изменять конфигурацию узлов (в конфигурационном файле .xml) для ClickHouse Keeper. #30372 (alesapin).
  • Добавлена агрегатная функция sparkbar. Это закрывает задачу #26175. #27481 (小路). Примечание: в этой функции есть один недостаток, поведение будет изменено в будущих релизах.

Улучшение

  • Добавлена возможность изменять уровни логирования без перезапуска. #29586 (Nikolay Degterinsky).
  • Многочисленные улучшения для пользовательских SQL-функций (SQL UDF). Запросы для операций с пользовательскими SQL-функциями теперь поддерживают оператор ON CLUSTER. Пример: CREATE FUNCTION test_function ON CLUSTER 'cluster' AS x -> x + 1;. Закрывает #30666. #30734 (Maksim Kita). Добавлена поддержка синтаксисов CREATE OR REPLACE, CREATE IF NOT EXISTS. #30454 (Maksim Kita). Добавлена поддержка DROP IF EXISTS. Пример: DROP FUNCTION IF EXISTS test_function. #30437 (Maksim Kita). Добавлена поддержка лямбда-функций. Пример: CREATE FUNCTION lambda_function AS x -> arrayMap(element -> element * 2, x);. #30435 (Maksim Kita). Добавлена поддержка пользовательских SQL-функций для clickhouse-local. #30179 (Maksim Kita).
  • Включён профилировщик памяти для каждого запроса (глобальное значение memory_profiler_step установлено в 4MiB). #29455 (Azat Khuzhin).
  • Добавлены столбцы data_compressed_bytes, data_uncompressed_bytes, marks_bytes в system.data_skipping_indices. Добавлены столбцы secondary_indices_compressed_bytes, secondary_indices_uncompressed_bytes, secondary_indices_marks_bytes в system.parts. Закрыта задача #29697. #29896 (Maksim Kita).
  • Добавлены псевдонимы table для system.tables и database для system.databases #29677. #29882 (kevin wan).
  • Корректно обрабатываются взаимозависимости таблиц при запуске сервера. Закрывает #8004, закрывает #15170. #28373 (tavplubix).
  • Предотвращает возникновение ошибки «Division by zero», когда знаменатель имеет тип Nullable в функциях divide, intDiv и modulo. Закрывает #22621. #28352 (Kruglov Pavel).
  • Добавлена возможность разбирать значения типа данных Date в текстовых форматах как YYYYMMDD в дополнение к YYYY-MM-DD. Это закрывает #30870. #30871 (alexey-milovidov).
  • Web UI: отображение столбиков в ячейках таблицы. #29792 (alexey-milovidov).
  • Теперь пользователь может создавать словари с комментариями: CREATE DICTIONARY ... COMMENT 'vaue' ... #29899 (Vasily Nemkov). Теперь пользователи могут задавать комментарии для базы данных в операторе CREATE DATABASE ... #29429 (Vasily Nemkov).
  • Добавлена настройка compiled_expression_cache_elements_size. Если когда‑нибудь вы захотите воспользоваться этой настройкой, вы уже будете знать, что она делает. #30667 (Maksim Kita).
  • clickhouse-format теперь поддерживает параметр --query. В предыдущих версиях запрос приходилось передавать через stdin. #29325 (凌涛).
  • Добавлена поддержка ALTER TABLE для таблиц в базах данных Memory. Базы данных Memory используются в clickhouse-local. #30866 (tavplubix).
  • Функция arrayStringConcat теперь поддерживает массивы всех сериализуемых типов. #30840 (Nickita Taranov).
  • ClickHouse теперь учитывает ограничения Docker/cgroups при определении доступного объёма памяти. См. #25662. #30574 (Pavel Medvedev).
  • Структура таблиц, получаемая из базы данных PostgreSQL, теперь определяется более надёжно. #30477 (Kseniia Sumarokova).
  • Полная поддержка позиционных аргументов в GROUP BY и ORDER BY. #30433 (Kseniia Sumarokova).
  • Добавлена возможность извлекать элементы нестрокового типа в виде строк с помощью JSONExtractString. Это относится к pull/25452#issuecomment-927123287. #30426 (Amos Bird).
  • Добавлена возможность использовать клауза FINAL в запросах SELECT к таблицам на движке GraphiteMergeTree. #30360 (Nikita Mikhaylov).
  • Незначительные улучшения в клонировании реплик и постановке в очередь выборки для повреждённых частей, которые должны предотвратить крайне редкие случаи зависания записей GET_PART в очереди репликации. #30346 (tavplubix).
  • Разрешены символические ссылки на файлы в каталоге user_files для табличной функции file. #30309 (Kseniia Sumarokova).
  • Исправлено сравнение Date32 с Date, DateTime, DateTime64 и String. #30219 (liang.huang).
  • Добавлена возможность удалять выражение SAMPLE BY из таблиц MergeTree (ALTER TABLE <table> REMOVE SAMPLE BY). #30180 (Anton Popov).
  • Теперь Keeper (как часть clickhouse-server) будет запускаться асинхронно, если сможет подключиться к другому узлу. #30170 (alesapin).
  • Теперь clickhouse-client поддерживает родное многострочное редактирование. #30143 (Amos Bird).
  • Словари polygon (обратное геокодирование): добавлена поддержка чтения содержимого словаря с помощью запроса SELECT, если настройка store_polygon_key_column установлена в true. Закрывает #30090. #30142 (Maksim Kita).
  • Добавлен логотип ClickHouse в интерфейс Play. #29674 (alexey-milovidov).
  • Более информативное сообщение об ошибке при чтении столбца из форматов, поддерживающих Arrow, таких как Arrow, ArrowStream, Parquet и ORC. Это закрывает #29926. #29927 (alexey-milovidov).
  • Устранена гонка данных между flush и startup в таблицах Buffer. Она могла проявляться в тестах. #29930 (Azat Khuzhin).
  • Исправлена проблема lock-order-inversion между DROP TABLE для DatabaseMemory и LiveView. Live View — экспериментальная функциональность. База данных DatabaseMemory используется в clickhouse-local. #29929 (Azat Khuzhin).
  • Исправлена инверсия порядка захвата блокировок между периодической перезагрузкой словаря и перезагрузкой конфигурации. #29928 (Azat Khuzhin).
  • Обновлены файлы zoneinfo до 2021c. #29925 (alexey-milovidov).
  • Добавлена возможность настройки повторных попыток и задержек между ними для clickhouse-copier. #29921 (Azat Khuzhin).
  • Добавлена настройка сервера shutdown_wait_unfinished_queries, позволяющая ожидать выполнения запущенных запросов в течение времени, заданного в shutdown_wait_unfinished. Связано с #24451. #29914 (Amos Bird).
  • Добавлена возможность отслеживать пиковое использование памяти (с новым trace_type в system.trace_logMemoryPeak). #29858 (Azat Khuzhin).
  • Внешние таблицы PostgreSQL: добавлен префикс 'p' для секционированной таблицы в запросе выборки индекса replica identity. #29828 (Shoh Jahon).
  • Применять max_untracked_memory/memory_profiler_step/memory_profiler_sample_probability в операциях mutate/merge для профилирования использования памяти при слияниях. #29681 (Azat Khuzhin).
  • Обфускатор запросов: clickhouse-format --obfuscate теперь работает с большим числом типов запросов. #29672 (alexey-milovidov).
  • Исправлена проблема: clickhouse-format --obfuscate не мог обрабатывать запросы со встроенными словарями (функции regionTo...). #29667 (alexey-milovidov).
  • Исправлена некорректная обработка Nullable в JSON-функциях. Это исправляет #29615. Помечено как улучшение, так как https://github.com/ClickHouse/ClickHouse/pull/28012 ещё не вошёл в релиз. #29659 (Amos Bird).
  • Увеличить значение listen_backlog по умолчанию (чтобы оно соответствовало значению по умолчанию в более новых версиях ядра Linux). #29643 (Azat Khuzhin).
  • Перезагружать словари, модели и пользовательские исполняемые функции при изменении конфигурации сервера (dictionaries_config, models_config, user_defined_executable_functions_config). Закрывает #28142. #29529 (Maksim Kita).
  • Снято бессмысленное ограничение на имя проекции. Теперь имя проекции может начинаться с tmp_. #29520 (Amos Bird).
  • Исправлена ошибка There is no query or query context has expired в мутациях с вложенными подзапросами. Подзапросы в мутациях больше не допускаются, если таблица является реплицируемой и настройка allow_nondeterministic_mutations отключена. #29495 (tavplubix).
  • Применять изменения конфигурации max_concurrent_queries во время работы (без перезапуска). #29414 (Raúl Marín).
  • Добавлена настройка use_skip_indexes. #29405 (Maksim Kita).
  • Добавлена поддержка FREEZE для частей в памяти (для резервного копирования). #29376 (Mo Xuan).
  • Пробрасывать начальный query_id для clickhouse-benchmark (ранее при выполнении удалённого запроса через clickhouse-benchmark запросы на шардах не были связаны с исходным запросом по initial_query_id). #29364 (Azat Khuzhin).
  • Пропускающие индексы tokenbf_v1 и ngrambf_v1: добавлена поддержка типа данных Array с ключом типа String или FixedString. #29280 (Maksim Kita). В пропускающие индексы tokenbf_v1 и ngrambf_v1 добавлена поддержка типа данных Map с ключом типа String или FixedString. Автор @lingtaolf. #29220 (Maksim Kita).
  • Функция has: добавлена поддержка типа данных Map. #29267 (Maksim Kita).
  • Добавлены настройки compress_logs для clickhouse-keeper, которые позволяют сжимать логи clickhouse-keeper (реплицированной машины состояний) с помощью ZSTD. Реализация: #26977. #29223 (alesapin).
  • Добавлена настройка external_table_strict_query — при её включении всё выражение WHERE в запросах к внешним базам данных будет передаваться целиком, даже если оно с ними несовместимо. #29206 (Azat Khuzhin).
  • Отключены проекции при использовании ARRAY JOIN. В предыдущих версиях анализ проекций мог нарушать работу псевдонимов в ARRAY JOIN. #29139 (Amos Bird).
  • Добавлена поддержка большего числа типов в формате ввода/вывода MsgPack. #29077 (Kruglov Pavel).
  • Добавлена возможность ввода и вывода столбцов LowCardinality в формате ORC. #29062 (Kruglov Pavel).
  • SELECT из system.distributed_ddl_queue мог показывать некорректные значения, ошибка исправлена. #29061 (tavplubix).
  • Корректная обработка неизвестных HTTP-методов. Решает #29050. #29057 (Filatenkov Artur).
  • clickhouse-keeper: Исправлена ошибка в clickhouse-keeper-converter, которая могла приводить к потере некоторых данных при восстановлении из журналов ZooKeeper (не из snapshot-снимка). #29030 (小路). Исправлена ошибка в clickhouse-keeper-converter, которая могла приводить к некорректной десериализации журналов ZooKeeper. #29071 (小路).
  • Применять настройки из запросов CREATE ... AS SELECT (исправляет: #28810). #28962 (Azat Khuzhin).
  • Учитывать базу данных по умолчанию для ALTER TABLE ... ON CLUSTER ... REPLACE/MOVE PARTITION FROM/TO ... #28955 (anneji-dev).
  • Протокол gRPC: Разрешено изменять серверное сжатие со стороны клиента. #28953 (Vitaly Baranov).
  • Игнорировать исключение «no data» при чтении температурных датчиков для асинхронных метрик. Тем самым закрывается задача #28852. #28882 (alexey-milovidov).
  • Исправлена логическая гонка, которая в редких случаях могла приводить к ошибке Dictionary not found для существующего словаря. #28853 (tavplubix).
  • Ослаблено ограничение на вложенную функцию при проверке If-комбинатора (но вложенные идентичные комбинаторы запрещены). #28828 (Azat Khuzhin).
  • Исправлено возможное необработанное исключение при остановке сервера. #28761 (Azat Khuzhin).
  • Запрещена очистка временных каталогов tmp, которые могут использоваться активной мутацией/слиянием, если мутация/слияние выполняется чрезвычайно долго. #28760 (Azat Khuzhin).
  • Разрешена оптимизация optimize_arithmetic_operations_in_aggregate_functions = 1 при использовании псевдонимов. #28746 (Amos Bird).
  • Реализована настройка detach_not_byte_identical_parts для ReplicatedMergeTree, которая будет отсоединять, а не удалять части, которые не совпадают побайтно (после операций merge/mutate). #28708 (Azat Khuzhin).
  • Введена настройка max_suspicious_broken_parts_bytes для MergeTree (ограничивает общий размер всех повреждённых частей, значение по умолчанию — 1GiB). #28707 (Azat Khuzhin).
  • Добавлена поддержка раскрытия макросов в настройках таблицы RabbitMQ. #28683 (Vitaly Baranov).
  • Восстановлена возможность многопоточного чтения данных из таблицы с движком Log. #28125 (Vitaly Baranov).
  • Исправлено некорректное обращение с NULL-столбцами в JSON-функциях. Это исправление закрывает #27930. #28012 (Amos Bird).
  • Добавлена возможность задавать размер кэша Mark/Uncompressed для пропускающих индексов отдельно от столбцов. #27961 (Amos Bird).
  • Теперь можно смешивать JOIN с USING с другими типами JOIN. #23881 (darkkeks).
  • Обновлён подмодуль aws-sdk для обработки ограничений частоты запросов (throttling) в Yandex Cloud S3. #30646 (ianton-ru).
  • Исправлено освобождение идентификатора запроса и идентификатора сессии в конце обработки запроса во время gRPC-вызова. #29954 (Vitaly Baranov).
  • Исправлено завершение работы AccessControlManager, чтобы устранить нестабильный тест. #29951 (Vitaly Baranov).
  • Исправлено падение по assert при чтении из HDFS. Обновлена библиотека libhdfs3 для возможности запуска тестов в отладочном режиме. Закрывает #29251. Закрывает #27814. #29276 (Kseniia Sumarokova).

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

  • Добавлена поддержка сборки FreeBSD для машин Aarch64. #29952 (MikaelUrankar).
  • Рекурсивные подмодули больше не требуются для ClickHouse. #30315 (alexey-milovidov).
  • ClickHouse может быть статически собран с musl. Это добавлено как эксперимент, он не поддерживает сборку odbc-bridge, library-bridge, интеграцию с CatBoost и с некоторыми библиотеками. #30248 (alexey-milovidov).
  • Включены Protobuf, Arrow, ORC, Parquet для сборок AArch64 и Darwin (macOS). Это закрывает #29248. Это закрывает #28018. #30015 (alexey-milovidov).
  • Добавлена кросс-сборка для PowerPC (powerpc64le). Это закрывает #9589. Включена поддержка взаимодействия с MySQL для AArch64 и PowerPC. Это закрывает #26301. #30010 (alexey-milovidov).
  • В кросс-компиляционных toolchain'ах оставлены только необходимые файлы. Они включены как подмодули (ранее они загружались как tarball-архивы). #29974 (alexey-milovidov).
  • Реализован подход structure-aware fuzzing в ClickHouse для парсера операторов SELECT. #30012 (Paul).
  • Включён экспериментальный вычислитель constexpr-выражений для clang для ускорения компиляции шаблонного кода. #29668 (myrrc).
  • Добавлена возможность компиляции с использованием более новой версии glibc без использования новых символов. #29594 (Azat Khuzhin).
  • Уменьшен размер бинарника Debug-сборки с помощью опции оптимизации clang. #28736 (flynn).
  • Теперь все образы для CI будут размещаться в отдельном репозитории Docker Hub. #28656 (alesapin).
  • Улучшена поддержка сборки с clang-13. #28046 (Sergei Semin).
  • Добавлена возможность выводить «сырые» события профилирования в clickhouse-client (это может быть полезно для отладки и тестирования). #30064 (Azat Khuzhin).
  • Добавлена зависимость по времени запуска для юнита clickhouse-server (systemd и sysvinit init). #28891 (Azat Khuzhin).
  • Теперь кэш stacktrace перезагружается при повторной загрузке символа. #28137 (Amos Bird).

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

  • Функции для поиска без учета регистра в строках UTF-8, такие как positionCaseInsensitiveUTF8 и countSubstringsCaseInsensitiveUTF8, в очень редких случаях могли находить подстроки, которые на самом деле не совпадали, — проблема исправлена. #30663 (tavplubix).
  • Исправлена ошибка чтения из пустого файла на зашифрованном диске. #30494 (Vitaly Baranov).
  • Исправлена трансформация цепочки дизъюнкций в IN (управляется настройкой optimize_min_equality_disjunction_chain_length) в распределённых запросах с настройкой legacy_column_name_of_tuple_literal = 0. #28658 (Anton Popov).
  • Теперь можно использовать материализованный столбец в качестве ключа шардинга в распределённой таблице, даже если insert_allow_materialized_columns=0. #28637 (Vitaly Baranov).
  • Исправлена обработка ORDER BY ... WITH FILL с заданными TO и FROM при отсутствии строк в результирующем наборе. #30888 (Anton Popov).
  • Исправлена проблема, из-за которой индекс множества не использовался в выражениях AND/OR при более чем двух операндах. Это исправляет #30416. #30887 (Amos Bird).
  • Исправлен сбой при материализации проекции с хеширующей функцией. Этим исправляется #30861. Проблема аналогична https://github.com/ClickHouse/ClickHouse/pull/28560, причина которой — некорректное понимание инварианта о пустоте заголовка. #30877 (Amos Bird).
  • Исправлена неоднозначность при извлечении имени вспомогательного ZooKeeper из пути ZooKeeper в ReplicatedMergeTree. Ранее сервер мог не запуститься с ошибкой Unknown auxiliary ZooKeeper name, если путь ZooKeeper содержал двоеточие. Исправление для #29052. Ранее также допускалось указывать путь ZooKeeper, который не начинается со слэша, но теперь это поведение объявлено устаревшим, и создание новых таблиц с таким путём не допускается. Слэши и двоеточия во вспомогательных именах ZooKeeper также не разрешены. #30822 (tavplubix).
  • Очищать временный каталог, если выполнение localBackup завершилось ошибкой. #30797 (ianton-ru).
  • Исправлено состояние гонки между REPLACE/MOVE PARTITION и фоновым слиянием в нереплицируемом MergeTree, из-за которого часть перемещённых/заменённых данных могла оставаться в партиции. Исправляет #29327. #30717 (tavplubix).
  • Исправлена работа PREWHERE совместно с WHERE в случае всегда истинного условия PREWHERE. #30668 (Azat Khuzhin).
  • Оптимизация проталкивания LIMIT могла приводить к ошибке Cannot find column. Исправляет #30438. #30562 (Nikolai Kochetov).
  • Добавлены недостающие скобки при переписывании isNotNull/isNull в IS [NOT] NULL (что исправляет выполнение запросов, содержащих выражения вроде isNotNull(1)+isNotNull(2)). #30520 (Azat Khuzhin).
  • Устранена взаимоблокировка при операции ALTER со скалярным подзапросом к той же таблице, закрыт #30461. #30492 (Vladimir C).
  • Исправлена ошибка, приводившая к segfault, который мог произойти, если сеанс истекал во время выполнения REPLACE PARTITION. #30432 (tavplubix).
  • Запросы с условием вида IN (subquery) могли возвращать некорректные результаты в случае, если применялась агрегирующая проекция. Исправлено создание множеств для проекций. #30310 (Amos Bird).
  • Исправлена обработка псевдонимов столбцов в запросах JOIN при включённой проекции. Это исправляет #30146. #30293 (Amos Bird).
  • Исправлены некоторые недостатки функции replaceRegexpAll. #30292 (Memo).
  • Исправлен разбор опции preallocate в конфигурации layout для ComplexKeyHashedDictionary и ComplexKeySparseHashedDictionary. #30246 (Maksim Kita).
  • Исправлена работа функции [I]LIKE. Закрывает #28661. #30244 (Nikolay Degterinsky).
  • Исправлен сбой при использовании shortcircuit и LowCardinality в multiIf. #30243 (Raúl Marín).
  • Исправлено вычисление bytes_allocated для nullable-атрибутов в FlatDictionary и HashedDictionary. #30238 (Maksim Kita).
  • Разрешены идентификаторы, начинающиеся с цифр, в нескольких соединениях (JOIN). #30230 (Vladimir C).
  • Исправлено чтение из MergeTree при max_read_buffer_size = 0 (когда пользователь хочет выстрелить себе в ногу), что могло приводить к исключениям Can't adjust last granule, LOGICAL_ERROR или даже к потере данных. #30192 (Azat Khuzhin).
  • Исправлена работа pread_fake_async/pread_threadpool с min_bytes_to_use_direct_io. #30191 (Azat Khuzhin).
  • Исправлена проблема, из‑за которой оператор INSERT SELECT некорректно заполнял MATERIALIZED столбец на основе столбца типа Nullable. #30189 (Azat Khuzhin).
  • Добавлена поддержка аргументов с типом Nullable в функции initializeAggregation. #30177 (Anton Popov).
  • Исправлена ошибка Port is already connected для запросов с GLOBAL IN и WITH TOTALS. Только для версий 21.9 и 21.10. #30086 (Nikolai Kochetov).
  • Устранена гонка между MOVE PARTITION и слияниями/мутациями для MergeTree. #30074 (Azat Khuzhin).
  • Удалённая база данных Memory могла снова появляться после перезапуска сервера; проблема исправлена (#29795). Также добавлена настройка force_remove_data_recursively_on_drop как обходное решение для ошибки Directory not empty при удалении базы данных типа Ordinary (так как в облачной среде невозможно вручную удалить оставшиеся данные). #30054 (tavplubix).
  • Исправлен сбой примера с использованием tuple(), что закрывает #30004. #30016 (flynn).
  • Попытка закрыть задачу: #29965. #29976 (hexiaoting).
  • Устранена возможная гонка данных между FileChecker и StorageLog/StorageStripeLog. #29959 (Azat Khuzhin).
  • Исправлена гонка данных между LogSink::writeMarks() и LogSource в StorageLog. #29946 (Azat Khuzhin).
  • Исправлена потенциальная утечка ресурсов, связанная с лимитом числа параллельных запросов для таблиц семейства MergeTree, возникшая в https://github.com/ClickHouse/ClickHouse/pull/19544. #29879 (Amos Bird).
  • Исправлена проверка повторного создания системных таблиц (не удавалось обнаружить изменения в значениях ENUM). #29857 (Azat Khuzhin).
  • MaterializedMySQL: Исправлена ошибка, из-за которой при потере соединения с MySQL могла быть обработана только часть транзакции. #29837 (Håvard Kvålen).
  • Предотвращает возникновение ошибки Timeout exceeded: elapsed 18446744073.709553 seconds, которая могла возникать в крайне редких случаях, предположительно из‑за некоторого бага в ядре. Исправляет #29154. #29811 (tavplubix).
  • Исправлено некорректное приведение типов в запросе ATTACH TABLE ... FROM 'path', когда вместо пути используется нестроковый литерал. Это могло приводить к чтению из неинициализированной памяти. #29790 (alexey-milovidov).
  • Исправлен конкурентный доступ к LowCardinality во время выполнения GROUP BY (в сочетании с таблицами Buffer это могло приводить к проблемам). #29782 (Azat Khuzhin).
  • Исправлена некорректная работа GROUP BY (несколько строк с одинаковыми ключами в результате) в случае распределённого запроса, когда шарды были на смешанных версиях <= 21.3 и >= 21.4, ключ GROUP BY содержал несколько столбцов, каждый из которых имел фиксированный размер, и была активирована двухуровневая агрегация (см. group_by_two_level_threshold и group_by_two_level_threshold_bytes). Устраняет #29580. #29735 (Nikolai Kochetov).
  • Исправлено некорректное поведение при установке параметра materialized_postgresql_tables_list во время перезапуска сервера. Обнаружено в #28529. #29686 (Kseniia Sumarokova).
  • Условие в предикате фильтрации могло теряться после оптимизации проталкивания (push-down). #29625 (Nikolai Kochetov).
  • Исправлена JIT-компиляция выражений с псевдонимами и укороченным вычислением выражений. Закрывает #29403. #29574 (Maksim Kita).
  • Исправлена редкая ошибка сегментации в запросе ALTER MODIFY при использовании некорректного идентификатора таблицы в выражении DEFAULT, таком как x.y.z.... Исправлено #29184. #29573 (alesapin).
  • Исправлена ошибка разыменования нулевого указателя (nullptr) для GROUP BY WITH TOTALS HAVING (когда столбец из HAVING не был выбран). #29553 (Azat Khuzhin).
  • Избегайте взаимоблокировок при одновременном чтении и записи в таблицах движка Join. #29544 (Raúl Marín).
  • Исправлена ошибка в проверке pathStartsWith, вызванная некорректным использованием std::mismatch: The behavior is undefined if the second range is shorter than the first range.. #29531 (Kseniia Sumarokova).
  • В ODBC Bridge добавлены повторные попытки при ошибке Invalid cursor state. Это ошибка, при которой допустимо повторение запроса. Закрывает #29473. #29518 (Kseniia Sumarokova).
  • Исправлен некорректный разбор имени таблицы при загрузке базы данных Lazy. Исправлена проблема #29456. #29476 (tavplubix).
  • Исправлена возможная ошибка Block structure mismatch для подзапросов с протолкнутым вниз предикатом HAVING. Исправлено #29010. #29475 (Nikolai Kochetov).
  • Исправлена логическая ошибка Cannot capture columns в функциях greatest и least. Закрывает #29334. #29454 (Kruglov Pavel).
  • Движок таблицы RocksDB: исправлено состояние гонки при одновременном открытии БД (и возвращены некоторые тесты, воспроизводящие проблему в CI). #29393 (Azat Khuzhin).
  • Исправлена проблема, при которой replicated access storage некорректно завершало работу при ошибочной конфигурации. #29388 (Kevin Michel).
  • Удалена оконная функция nth_value, так как она небезопасна с точки зрения использования памяти. Это закрывает #29347. #29348 (alexey-milovidov).
  • Исправить вертикальные слияния частей проекций. Это устраняет проблему #29253. Этот PR также исправляет несколько проблем со слиянием и мутацией частей проекций, появившихся в https://github.com/ClickHouse/ClickHouse/pull/25165. #29337 (Amos Bird).
  • Исправлена проблема зависания DDL-запросов в реплицируемой базе данных при добавлении новой реплики. #29328 (Kevin Michel).
  • Исправлены таймауты соединения (send_timeout/receive_timeout). #29282 (Azat Khuzhin).
  • Исправлено возможное исключение Table columns structure in ZooKeeper is different from local table structure при пересоздании или создании новых реплик ReplicatedMergeTree, когда один из столбцов таблицы имеет выражение DEFAULT с регистронезависимыми функциями. #29266 (Anton Popov).
  • Отправлять клиенту (по TCP) обычную ошибку Database doesn't exist (UNKNOWN_DATABASE) вместо Attempt to read after eof (ATTEMPT_TO_READ_AFTER_EOF). #29229 (Azat Khuzhin).
  • Исправлен сегфолт при вставке в столбец типа LowCardinality(Nullable) во входном формате Avro. #29132 (Kruglov Pavel).
  • Не допускать повторного использования ранее выданных учетных данных в случае межсерверного секрета (ранее перед выполнением INSERT через Buffer/Kafka в Distributed-таблицу с настроенным для этого кластера межсерверным секретом для данного соединения мог повторно использоваться ранее установленный пользователь). #29060 (Azat Khuzhin).
  • Обработать any_join_distinct_right_table_keys при JOIN-е со словарём, закрыть #29007. #29014 (Vladimir C).
  • Исправлена ошибка «Not found column ... in block» при выполнении JOIN по столбцу-алиасу, что позволило закрыть #26980. #29008 (Vladimir C).
  • Исправлено количество потоков, используемых в подзапросе GLOBAL IN (из‑за исправления ошибки #19414 он выполнялся только в одном потоке). #28997 (Nikolai Kochetov).
  • Исправлены некорректные оптимизации ORDER BY, если используется WITH FILL. Закрывает #28908. Закрывает #26049. #28910 (alexey-milovidov).
  • Исправлены ошибки в функциях высшего порядка для массивов (SIGSEGV для arrayCompact/ILLEGAL_COLUMN для arrayDifference/arrayCumSumNonNegative) при использовании констант. #28904 (Azat Khuzhin).
  • Исправлено ожидание выполнения мутаций при mutations_sync=2. #28889 (Azat Khuzhin).
  • Исправлены запросы к внешним базам данных (например, MySQL) с несколькими столбцами в условии IN (например, (k,v) IN ((1, 2))). #28888 (Azat Khuzhin).
  • Исправлена ошибка с LowCardinality при ленивом (short-circuit) вычислении функций. Закрывает #28884. #28887 (Kruglov Pavel).
  • Исправлено чтение подстолбцов из compact-частей. #28873 (Anton Popov).
  • Исправлено условие гонки между DROP PART и REPLACE/MOVE PARTITION, которое в редких случаях могло приводить к расхождению реплик. #28864 (tavplubix).
  • Исправлена компиляция выражений с вычислением с коротким замыканием. #28821 (Azat Khuzhin).
  • Исправлен крайне редкий случай, когда реплики ReplicatedMergeTree могут расходиться после жёсткой перезагрузки всех реплик. Ошибка выглядит как Part ... intersects (previous|next) part .... #28817 (alesapin).
  • Улучшена проверка работоспособности соединения, а также добавлен перехват любых исключений при завершении работы RabbitMQ. #28797 (Kseniia Sumarokova).
  • Исправлена безобидная гонка в ReplicatedMergeTreeQueue. Не должна быть заметна пользователю, но могла приводить к неочевидным ошибкам. #28734 (alesapin).
  • Исправлена возможная аварийная остановка при выполнении запроса SELECT с частично созданной агрегатной проекцией при возникновении исключения. #28700 (Amos Bird).
  • Исправлена ошибка при создании распределённых таблиц, приводившая к дампу ядра при передаче ошибочных параметров. #28686 (Zhiyong Wang).
  • Добавлены псевдонимы Settings.Names и Settings.Values для таблицы system.processes. #28685 (Vitaly).
  • Поддержка библиотеки S2 Geometry: исправлено количество аргументов, которые принимают функции s2RectAdd и s2RectContains. #28663 (Bharat Nallan).
  • Исправлено некорректное приведение типа константы при использовании первичного ключа типа Nullable или LowCardinality. #28636 (Amos Bird).
  • Исправлена ошибка "Column is not under aggregate function and not in GROUP BY" при использовании PREWHERE (исправляет: #28461). #28502 (Azat Khuzhin).

Релиз ClickHouse v21.10, 2021-10-16

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

  • Теперь следующие настройки уровня таблицы MergeTree: replicated_max_parallel_sends, replicated_max_parallel_sends_for_table, replicated_max_parallel_fetches, replicated_max_parallel_fetches_for_table больше ни на что не влияют. Они никогда хорошо не работали и были заменены на max_replicated_fetches_network_bandwidth, max_replicated_sends_network_bandwidth и background_fetches_pool_size. #28404 (alesapin).

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

  • Добавлена возможность создания определяемых пользователем функций (UDF) в виде лямбда-выражений. Синтаксис CREATE FUNCTION {function_name} as ({parameters}) -> {function core}. Пример CREATE FUNCTION plus_one as (a) -> a + 1. Авторы @Realist007. #27796 (Maksim Kita) #23978 (Realist007).
  • Добавлен движок таблиц Executable и табличная функция executable. Они позволяют обрабатывать данные внешними скриптами в потоковом режиме. #28102 (Maksim Kita) (ruct).
  • Добавлен движок таблиц ExecutablePool. Аналогичен Executable, но использует пул долго живущих процессов. #28518 (Maksim Kita).
  • Добавлен запрос ALTER TABLE ... MATERIALIZE COLUMN. #27038 (Vladimir Chebotarev).
  • Добавлена поддержка записи по партициям (partitioned) в табличную функцию s3. #23051 (Vladimir Chebotarev).
  • Добавлена поддержка формата сжатия lz4 (в дополнение к gz, bz2, xz, zstd) для импорта/экспорта данных. #25310 (Bharat Nallan).
  • Разрешены позиционные аргументы при включённой настройке enable_positional_arguments. Закрывает #2592. #27530 (Kseniia Sumarokova).
  • Разрешено указывать пользовательские настройки, связанные с файловыми форматами, в секции SETTINGS запроса CREATE для таблиц s3. Это закрывает #27580. #28037 (Nikita Mikhaylov).
  • Разрешено SSL-подключение для движка RabbitMQ. #28365 (Kseniia Sumarokova).
  • Добавлена функция getServerPort для получения порта сервера. Если порт не используется сервером, выбрасывается исключение. #27900 (Amos Bird).
  • Добавлены функции преобразования между «Snowflake ID» и DateTime, DateTime64. См. #27058. #27704 (jasine).
  • Добавлена функция SHA512. #27830 (zhanglistar).
  • Добавлена настройка log_queries_probability, которая позволяет логировать в query_log только часть запросов. Закрывает #16609. #27527 (Nikolay Degterinsky).

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

  • Тип диска web для хранения таблиц только для чтения на веб‑сервере в виде статических файлов. См. #23982. #25251 (Kseniia Sumarokova). В основном он нужен для упрощения тестирования работы на разделяемом хранилище и для удобного импорта наборов данных. Не рекомендуется к использованию до релиза 21.11.
  • Добавлены новые команды BACKUP и RESTORE. #21945 (Vitaly Baranov). Функциональность находится в разработке и не предназначена для использования в текущей версии.

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

  • Ускорены агрегатные функции sumIf и countIf. #28272 (Raúl Marín).
  • Создана виртуальная проекция для индексов minmax. Теперь, когда включена настройка allow_experimental_projection_optimization, запросы будут использовать minmax‑индекс вместо чтения данных, когда это возможно. #26286 (Amos Bird).
  • Добавлены две проверки в sequenceMatch и sequenceCount, которые позволяют завершать выполнение раньше, если некоторой детерминированной части шаблона последовательности нет в списке событий. Это изменение разблокирует множество запросов, которые ранее завершались ошибкой из‑за достижения лимита операций, и в целом ускоряет конвейер обработки. #27729 (Jakub Kuklis).
  • Улучшен анализ первичного ключа за счёт всегда монотонной информации о бинарных функциях, в частности деления на ненулевую константу. #28302 (Amos Bird).
  • Условие фильтрации hasAll теперь использует индексы пропуска данных на основе фильтра Блума. #27984 (Braulio Valdivielso Martínez).
  • Ускорена загрузка кусков данных за счёт откладывания процесса запуска таблицы. #28313 (Amos Bird).
  • Исправлено возможное избыточное количество условий, перенесённых из WHERE в PREWHERE (оптимизация управляется настройкой optimize_move_to_prewhere). #28139 (lthaooo).
  • Настройка optimize_distributed_group_by_sharding_key включена по умолчанию. #28105 (Azat Khuzhin).

Улучшения

  • Перед созданием таблицы Distributed проверять имя кластера и не допускать создание таблицы с неверным именем кластера. Исправляет #27832. #27927 (tavplubix).
  • Добавлена агрегатная функция quantileBFloat16Weighted по аналогии с другими функциями quantile...Weighted, что закрывает #27745. #27758 (Ivan Novitskiy).
  • Добавлена возможность создавать словари с пустым списком атрибутов. #27905 (Maksim Kita).
  • Добавлена интерактивная документация в clickhouse-client о том, как сбросить пароль. Это полезно в случае, когда пользователь установил ClickHouse, задал пароль и тут же его забыл. См. #27750. #27903 (alexey-milovidov).
  • Добавлена поддержка случая, когда данные во входном формате JSONAsString заключены в массив. Закрывает #25517. #25633 (Kruglov Pavel).
  • Добавлен новый столбец last_queue_update_exception в таблицу system.replicas. #26843 (nvartolomei).
  • Добавлена поддержка переподключений при отказе для таблиц MaterializedPostgreSQL. Закрывает #28529. #28614 (Kseniia Sumarokova).
  • Генерировать уникальный UUID сервера при первом запуске. #20089 (Bharat Nallan).
  • Добавлена настройка connection_wait_timeout (значение по умолчанию — 5 секунд, 0 — не ждать) для движка MySQL. #28474 (Azat Khuzhin).
  • Запрещено создавать MaterializedPostgreSQL с некорректными аргументами. Закрывает #28423. #28430 (Kseniia Sumarokova).
  • Использовать реальный временный файл вместо предопределённого файла «rows_sources» для вертикальных слияний. Это позволяет избежать создания мусорных каталогов на временных дисках. #28299 (Amos Bird).
  • Добавлен параметр libhdfs3_conf в конфигурацию сервера вместо использования переменной окружения LIBHDFS3_CONF, экспортируемой в clickhouse-server.service. Это используется для настройки взаимодействия с HDFS. #28268 (Zhichang Yu).
  • Исправлена проблема с удалением частей во временном состоянии, которая могла приводить к неожиданному исключению (Part %name% doesn't exist). Исправляет #23661. #28221 #28221) (Azat Khuzhin).
  • Исправить zookeeper_log.address (до первого патча в этом PR адрес всегда был ::) и сократить количество вызовов getpeername(2) для этого столбца (так как при каждом добавлении записи в zookeeper_log вызывается getpeername(), кэшировать этот адрес в клиенте ZooKeeper, чтобы избежать этого). #28212 (Azat Khuzhin).
  • Поддержка неявных преобразований между индексом оператора [] и ключом типа Map (например, между различными типами Int, а также String и FixedString). #28096 (Anton Popov).
  • Реализована поддержка предложения ON CONFLICT при вставке в таблицу с движком PostgreSQL или в табличную функцию. Закрывает #27727. #28081 (Kseniia Sumarokova).
  • Снижены ограничения для типа данных Enum, чтобы можно было присоединять совместимые данные. Закрывает #26672. #28028 (Dmitry Novik).
  • Добавлена настройка empty_result_for_aggregation_by_constant_keys_on_empty_set для управления поведением группировки по константным ключам над пустым набором данных. Это позволяет вернуть прежнее поведение из #6842. #27932 (Amos Bird).
  • Добавлена настройка replication_wait_for_inactive_replica_timeout. Она позволяет указать, как долго ждать, пока неактивные реплики выполнят запрос ALTER/OPTIMZE/TRUNCATE (значение по умолчанию — 120 секунд). Если replication_alter_partitions_sync равно 2 и некоторые реплики остаются неактивными дольше, чем replication_wait_for_inactive_replica_timeout секунд, будет сгенерировано исключение UNFINISHED. #27931 (tavplubix).
  • Добавлена поддержка лямбда-аргумента для трансформера столбца APPLY, что позволяет вызывать функции с более чем одним аргументом. Реализация для #27877. #27901 (Amos Bird).
  • Включить tcp_keep_alive_timeout по умолчанию. #27882 (Azat Khuzhin).
  • Улучшена отмена удалённых запросов (в случае аварийного завершения удалённого сервера). #27881 (Azat Khuzhin).
  • Используйте многокомпонентную (multipart) загрузку при копировании для больших объектов S3. #27858 (ianton-ru).
  • Разрешён обход символьных ссылок в пути к словарю библиотеки. #27815 (Kseniia Sumarokova).
  • Теперь ALTER MODIFY COLUM столбца из типа T в Nullable(T) не требует выполнения мутации. #27787 (victorgao).
  • Не игнорировать ошибки без сообщения и не учитывать задержки в ReadBufferFromS3. #27484 (Vladimir Chebotarev).
  • Улучшить ALTER ... MATERIALIZE TTL за счёт пересчёта только метаданных без фактического применения TTL. #27019 (lthaooo).
  • Добавлена возможность считывать список пользовательских доменов верхнего уровня без новой строки в конце файла. #28213 (Azat Khuzhin).

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

  • Устранены случаи, при которых чтение сжатых данных из carbon-clickhouse приводило к ошибке 'attempt to read after end of file'. Закрывает #26149. #28150 (FArthur-cmd).
  • Исправлена проверка прав доступа при выполнении запроса GRANT WITH REPLACE с указанием ON CLUSTER. Этот PR улучшает исправление из #27001. #27983 (Vitaly Baranov).
  • Добавлена возможность выполнять выборку с extremes = 1 из столбца типа LowCardinality(UUID). #27918 (Vitaly Baranov).
  • Исправлено приведение типов в стиле PostgreSQL (оператор ::) для отрицательных чисел. #27876 (Anton Popov).
  • После #26864. Исправлено завершение работы NamedSessionStorage: контексты сессий, хранящиеся в NamedSessionStorage, теперь уничтожаются до уничтожения глобального контекста. #27875 (Vitaly Baranov).
  • Исправление ошибки в режиме "strict" функции windowFunnel. Это исправляет #27469. #27563 (achimbab).
  • Исправлен бесконечный цикл при чтении усечённого архива bzip2. #28543 (Azat Khuzhin).
  • Устранён конфликт UUID в DROP TABLE для внутренних DDL-запросов из MaterializedMySQL. MaterializedMySQL — экспериментальная функция. #28533 (Azat Khuzhin).
  • Исправлена ошибка There is no subcolumn при выполнении запроса SELECT к таблицам, содержащим столбцы типа Nested и скалярные столбцы с точкой в имени и тем же префиксом, что и у Nested (например, n.id UInt32, n.arr1 Array(UInt64), n.arr2 Array(UInt64)). #28531 (Anton Popov).
  • Исправлена ошибка, которая могла приводить к сообщению Existing table metadata in ZooKeeper differs in sorting key expression. после выполнения оператора ALTER над ReplicatedVersionedCollapsingMergeTree. Исправлена #28515. #28528 (alesapin).
  • Исправлена возможная утечка наблюдателей ZooKeeper (незначительная проблема) при фоновой обработке распределённой очереди DDL. Закрывает #26036. #28446 (tavplubix).
  • Исправлена ошибка отсутствия кавычек у имён таблиц в движке MaterializedPostgreSQL. Закрывает #28316. #28433 (Kseniia Sumarokova).
  • Исправлено некорректное поведение неприсоединённых строк из nullable-столбца. Закрывает #27691. #28349 (vdimir).
  • Исправлена оптимизация индекса NOT IN для случая, когда используются не все ключевые столбцы. Это исправляет #28120. #28315 (Amos Bird).
  • Исправлена проблема с пересекающимися частями, вызванная заменой новой части на пустую. #28310 (Azat Khuzhin).
  • Исправлены непоследовательные результаты в запросах с ORDER BY и таблицами Merge при включённой настройке optimize_read_in_order. #28266 (Anton Popov).
  • Исправлено возможное чтение неинициализированной памяти при запросах с типом Nullable(LowCardinality) и настройкой extremes, установленной в 1. Тем самым исправлена #28165. #28205 (Nikolai Kochetov).
  • Несколько небольших исправлений для проекций. Подробное описание см. в PR. #28178 (Amos Bird).
  • Исправлены крайне редкие сегфолты при завершении работы из-за неправильного порядка остановки контекста и перезагрузчика конфигурации. #28088 (nvartolomei).
  • Исправлена обработка значения NULL типа Nullable(String) в функции JSONExtract. Это устраняет проблемы #27929 и #27930. Ошибка была внесена в https://github.com/ClickHouse/ClickHouse/pull/25452. #27939 (Amos Bird).
  • Несколько исправлений для нового инструмента clickhouse-keeper. Исправлена редкая ошибка в clickhouse-keeper, когда клиент мог получить ответ наблюдателя (watch response) раньше, чем ответ на исходный запрос (request-response). #28197 (alesapin). Исправлено некорректное поведение в clickhouse-keeper, когда наблюдатели списка (getChildren) срабатывали при set-запросах для дочерних элементов. #28190 (alesapin). Исправлен редкий случай, когда изменения настроек clickhouse-keeper могли приводить к потере записей логов и зависанию сервера. #28360 (alesapin). Исправлена ошибка в clickhouse-keeper, которая могла приводить к бесконечной генерации логов при уменьшении rotate_logs_interval. #28152 (alesapin).

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

  • Включён Thread Fuzzer в стресс‑тесте. Thread Fuzzer — это возможность ClickHouse, которая позволяет тестировать большее количество вариантов планирования потоков и обнаруживать больше потенциальных проблем. Это закрывает #9813. Это закрывает #9814. Это закрывает #9515. Это закрывает #9516. #27538 (alexey-milovidov).
  • Добавлен новый уровень логирования test для тестовых сред. Он ещё более подробный, чем стандартный trace. #28559 (alesapin).
  • На этапе конфигурирования CMake теперь выводится информация о состоянии git. #28047 (Braulio Valdivielso Martínez).
  • Временно переключён репозиторий ubuntu apt на зеркало ru.archive.ubuntu.com, так как репозиторий по умолчанию (archive.ubuntu.com) не отвечает из нашей системы CI. #28016 (Ilya Yatsishin).

Релиз ClickHouse v21.9, 2021-09-09

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

  • Не выводить конечные нули в текстовом представлении типов Decimal. Пример: 1.23 будет выведено вместо 1.230000 для десятичного числа с масштабом 6. Это закрывает #15794. Это может привести к небольшой несовместимости, если ваши приложения каким‑то образом полагались на конечные нули. Сериализацию в выходных форматах можно контролировать с помощью настройки output_format_decimal_trailing_zeros. Реализация toString и приведения к String изменена безусловно. #27680 (alexey-milovidov).
  • Запретить применение параметрической агрегатной функции с комбинатором -Merge к состоянию агрегатной функции, если это состояние было получено агрегатной функцией с другими параметрами. Например, состояние fooState(42)(x) нельзя финализировать с помощью fooMerge(s) или fooMerge(123)(s), параметры должны быть явно указаны как fooMerge(42)(s) и должны совпадать. Это не затрагивает некоторые специальные агрегатные функции, такие как quantile и sequence*, которые используют параметры только для финализации. #26847 (tavplubix).
  • В режиме clickhouse-local всегда считать локальные адреса с портом удалёнными. #26736 (Raúl Marín).
  • Исправлена проблема, из‑за которой в случае сложных запросов с алиасами столбцов, совпадающими с именами выражений, мог происходить некорректный каст. Это исправляет #25447. Это исправляет #26914. Это исправление может привести к несовместимости с предыдущими версиями: если существуют разные выражения с одинаковыми именами, будет выброшено исключение. Это может сломать некоторые редкие случаи, когда установлена настройка enable_optimize_predicate_expression. #26639 (alexey-milovidov).
  • Теперь скалярный подзапрос всегда возвращает результат типа Nullable, если его тип потенциально может быть Nullable. Это необходимо, потому что в случае пустого подзапроса его результат должен быть Null. Ранее могла возникать ошибка о несовместимых типах (вывод типа не выполняет скалярный подзапрос и мог использовать не‑nullable тип). Скалярный подзапрос с пустым результатом, который не может быть преобразован к Nullable (например, Array или Tuple), теперь выбрасывает ошибку. Исправляет #25411. #26423 (Nikolai Kochetov).
  • Введён синтаксис here-документов. Пример: SELECT $doc$ VALUE $doc$. #26671 (Maksim Kita). Это изменение обратно несовместимо, если в запросе есть идентификаторы, содержащие $ #28768.
  • Теперь индексы могут обрабатывать типы Nullable, включая isNull и isNotNull. #12433 и #12455 (Amos Bird) и #27250 (Azat Khuzhin). Но это было сделано с изменением формата на диске, и хотя новый сервер может читать старые данные, старый сервер не может. Также, если у вас есть индексы пропуска данных MINMAX, вы можете получить ошибку Data after mutation/merge is not byte-identical, так как новый индекс будет иметь расширение .idx2, тогда как раньше это было .idx. Это означает, что вам не следует откладывать обновление всех существующих реплик в этом случае, иначе, если старая реплика (<21.9) скачает данные с новой реплики с версией 21.9+, она не сможет применить индекс к загруженной части.

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

  • Реализована укороченная (short-circuit) схема вычисления функций, что закрывает #12587. Добавлена настройка short_circuit_function_evaluation для управления укороченной схемой вычисления функций. #23367 (Kruglov Pavel).
  • Добавлена поддержка операторов INTERSECT, EXCEPT, ANY и ALL. #24757 (Kirill Ershov). (Kseniia Sumarokova).
  • Добавлена поддержка шифрования на уровне виртуальной файловой системы (шифрование данных в состоянии покоя) с использованием алгоритма AES-CTR. #24206 (Latysheva Alexandra). (Vitaly Baranov) #26733 #26377 #26465.
  • Добавлены функции обработки естественного языка (NLP) для токенизации, стемминга, лемматизации и поиска по расширениям синонимов. #24997 (Nikolay Degterinsky).
  • Добавлена интеграция с библиотекой геометрии S2. #24980 (Andr0901). (Nikita Mikhaylov).
  • Добавлены движок таблицы SQLite, табличная функция и движок базы данных. #24194 (Arslan Gumerov). (Kseniia Sumarokova).
  • Добавлена поддержка пользовательского запроса для источников словаря MySQL, PostgreSQL, ClickHouse, JDBC, Cassandra. Закрывает #1270. #26995 (Maksim Kita).
  • Добавлено общее (реплицируемое) хранилище пользователей, ролей, политик по строкам, квот и профилей настроек через ZooKeeper. #27426 (Kevin Michel).
  • Добавлена поддержка сжатия для INTO OUTFILE, которая автоматически выбирает алгоритм сжатия. Закрывает #3473. #27134 (Filatenkov Artur).
  • Добавлена поддержка INSERT ... FROM INFILE по аналогии с SELECT ... INTO OUTFILE. #27655 (Filatenkov Artur).
  • Добавлен словарь complex_key_range_hashed. Закрыта задача #22029. #27629 (Maksim Kita).
  • Добавлена поддержка выражений в секции JOIN ON. Закрыта задача #21868. #24420 (Vladimir C).
  • Когда клиент подключается к серверу, он получает сведения обо всех предупреждениях, которые уже были собраны сервером (это можно отключить с помощью опции --no-warnings). Добавлена таблица system.warnings для сбора предупреждений о конфигурации сервера. #26246 (Filatenkov Artur). #26282 (Filatenkov Artur).
  • Разрешено использовать константные выражения из предложений WITH и SELECT в параметрах агрегатных функций. Закрывает #10945. #27531 (abel-cheng).
  • Добавлена функция tupleToNameValuePairs, которая преобразует именованный кортеж в массив пар. #27505 (Braulio Valdivielso Martínez).
  • Добавлена поддержка алгоритма сжатия bzip2 для импорта и экспорта. Закрывает #22428. #27377 (Nikolay Degterinsky).
  • Добавлена функция bitmapSubsetOffsetLimit(bitmap, offset, cardinality_limit). Она создаёт подмножество bitmap, ограничивая результаты числом cardinality_limit и начиная со смещения offset. #27234 (DHBin).
  • Добавлен столбец default_database в system.users. #27054 (kevin wan).
  • Добавлена поддержка макросов cluster внутри табличных функций 'cluster' и 'clusterAllReplicas'. #26913 (polyprogrammist).
  • Добавлены новые функции currentRoles(), enabledRoles(), defaultRoles(). #26780 (Vitaly Baranov).
  • Новые функции currentProfiles(), enabledProfiles(), defaultProfiles(). #26714 (Vitaly Baranov).
  • Добавлены функции для получения (initial_)query_id текущего запроса. Это закрывает #23682. #26410 (Alexey Boykov).
  • Добавлена поддержка REPLACE GRANT. #26384 (Caspian).
  • Запрос EXPLAIN теперь имеет режим EXPLAIN ESTIMATE ..., который отображает информацию о читаемых строках, метках и частях из таблиц MergeTree. Закрывает #23941. #26131 (fastio).
  • Добавлена таблица system.zookeeper_log. В эту таблицу записываются все действия клиента ZooKeeper. Реализация #25449. #26129 (tavplubix).
  • Репликация без копирования данных для ReplicatedMergeTree поверх хранилища HDFS. #25918 (Zhichang Yu).
  • Добавлена возможность вставки типа Nested как массива структур во входных форматах Arrow, ORC и Parquet. #25902 (Kruglov Pavel).
  • Добавлен новый тип данных Date32 (хранит данные как Int32) с тем же диапазоном дат, что и DateTime64; добавлена поддержка загрузки данных формата Parquet Date32 в ClickHouse Date32. Добавлена новая функция toDate32, аналогичная toDate. #25774 (LiuNeng).
  • Добавлена возможность задавать пользователям базу данных по умолчанию. #25268. #25687 (kevin wan).
  • Добавлен необязательный параметр в движок MongoDB, позволяющий указывать параметры строки подключения и использовать SSL-соединение. Закрывает #21189. Закрывает #21041. #22045 (Omar Bazaraa).

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

  • Добавлен кодек сжатия AES_128_GCM_SIV, который шифрует столбцы вместо их сжатия. #19896 (PHO). Будет переписан, не используйте его.
  • MaterializeMySQL переименован в MaterializedMySQL. #26822 (tavplubix).

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

  • Улучшена производительность быстрых запросов при max_execution_time = 0 за счет уменьшения количества системных вызовов clock_gettime. #27325 (filimonov).
  • Специализированы сравнения, связанные с типами даты и времени, для достижения лучшей производительности. Это исправляет #27083. #27122 (Amos Bird).
  • Реализовано совместное использование файловых дескрипторов при параллельном чтении одних и тех же файлов. На Linux нет заметной разницы в производительности. Но количество открытых файлов на типичных серверах будет значительно (в 10–100 раз) меньше, и это упрощает эксплуатацию. См. #26214. #26768 (alexey-milovidov).
  • Снижена латентность коротких запросов, которые требуют чтения из таблиц с большим количеством столбцов. #26371 (Anton Popov).
  • Отключено построение множеств для индексов при анализе запроса. #26365 (Raúl Marín).
  • Векторизовано вычисление SUM для типов Nullable целых чисел с нативным представлением (David Manzanares, Raúl Marín). #26248 (Raúl Marín).
  • Компилируются выражения, включающие столбцы с типами Enum. #26237 (Maksim Kita).
  • Компилируются агрегатные функции groupBitOr, groupBitAnd, groupBitXor. #26161 (Maksim Kita).
  • Улучшено использование памяти за счет более точного прогнозирования размера блока при чтении пустых столбцов с DEFAULT. Закрывает #17317. #25917 (Vladimir Chebotarev).
  • Снижено потребление памяти и количество читаемых строк в запросах с ORDER BY primary_key. #25721 (Anton Popov).
  • По умолчанию включен distributed_push_down_limit. #27104 (Azat Khuzhin).
  • Обеспечена монотонность toTimeZone, когда timeZone имеет константное значение, чтобы поддержать отсечение партиций при использовании SQL‑запросов вида: #26261 (huangzhaowei).

Улучшение

  • Оконные функции помечены как готовые к общему использованию. Настройка allow_experimental_window_functions удалена. #27184 (Alexander Kuzmenkov).
  • Улучшена совместимость с часовыми поясами, имеющими смещение, не равное целому числу минут. #27080 (Raúl Marín).
  • Если файловый дескриптор в таблице File указывает на обычный файл — разрешить многократное чтение из него. Это позволяет clickhouse-local многократно читать из stdin (с несколькими запросами SELECT или подзапросами), если stdin представляет собой обычный файл, например: clickhouse-local --query "SELECT * FROM table UNION ALL SELECT * FROM table" ... &lt; file. Это исправляет #11124. Совместно с (alexey-milovidov). #25960 (BoloniniD).
  • Удалён дублирующийся анализ индексов и исключены возможные некорректные проверки ограничения LIMIT во время анализа проекций. #27742 (Amos Bird).
  • Включена возможность передавать параметры запроса в теле HTTP‑запросов. #27706 (Hermano Lustosa).
  • Запрещено использовать arrayJoin в выражениях партиционирования. #27648 (Raúl Marín).
  • Записывать IP-адрес клиента в лог при ошибке аутентификации. #27514 (Misko Lee).
  • Используйте bytes вместо strings для бинарных данных в протоколе gRPC. #27431 (Vitaly Baranov).
  • Отправлять ответ с сообщением об ошибке, если HTTP-порт не настроен, а пользователь пытается отправить HTTP-запрос на TCP-порт. #27385 (Braulio Valdivielso Martínez).
  • Добавлена функция _CAST для внутреннего использования, которая не сохраняет nullability типа, тогда как обычное приведение типов сохраняет его в соответствии с настройкой cast_keep_nullable. Закрывает #12636. #27382 (Kseniia Sumarokova).
  • Добавлена настройка log_formatted_queries для логирования дополнительной отформатированной версии запроса в system.query_log. Это полезно для анализа нормализованных запросов, так как функции normalizeQuery и normalizeQueryKeepNames не выполняют разбор и форматирование запросов ради повышения производительности. #27380 (Amos Bird).
  • Добавлены две настройки max_hyperscan_regexp_length и max_hyperscan_regexp_total_length, чтобы предотвратить использование чрезмерно больших регулярных выражений в функциях, связанных с hyperscan, таких как multiMatchAny. #27378 (Amos Bird).
  • Память, потребляемая битовыми агрегатными функциями, теперь учитывается при применении лимитов памяти. Это закрывает #26555. #27252 (alexey-milovidov).
  • Добавлено 10-секундное кэширование для резолвера S3-прокси. #27216 (ianton-ru).
  • Глобальный мьютекс заменён на отдельные блокировки при построении регулярных выражений. Это помогает избежать ситуации, когда длительное построение регулярного выражения блокирует другие связанные потоки. #27211 (Amos Bird).
  • Поддержка схем в движке базы данных PostgreSQL. Закрывает #27166. #27198 (Kseniia Sumarokova).
  • Отслеживание использования памяти в clickhouse-client. #27191 (Filatenkov Artur).
  • Попробуйте записывать query_kind в system.query_log даже если запрос не удалось запустить. #27182 (Amos Bird).
  • В таблицу system.replicas добавлен столбец replica_is_active, который показывает, активна ли реплика. Закрывает #27138. #27180 (Maksim Kita).
  • Разрешена передача параметров запроса через URI сервера в веб-интерфейсе. #27177 (kolsys).
  • Добавлена новая метрика MaxPushedDDLEntryID, представляющая собой максимальный идентификатор DDL-записи, который текущий узел отправляет в ZooKeeper. #27174 (Fuwang Hu).
  • Улучшены проверки существования и проверки на узел с пустой строкой при создании znode в clickhouse-keeper. #27125 (小路).
  • Merge JOIN корректно обрабатывает пустое множество справа. #27078 (Vladimir C).
  • Теперь функции могут быть константами на уровне шарда, что означает, что если они выполняются в контексте распределённой таблицы, то генерируют обычный столбец, а в противном случае возвращают константное значение. Наиболее заметные функции: hostName(), tcpPort(), version(), buildId(), uptime() и т. д. #27020 (Amos Bird).
  • Обновлён extractAllGroupsHorizontal — верхнюю границу числа совпадений в строке можно задать с помощью необязательного третьего аргумента. #26961 (Vasily Nemkov).
  • Экспортировать статистику RocksDB через таблицу system.rocksdb. Читать параметры RocksDB из конфигурации ClickHouse (ключи rocksdb...). ПРИМЕЧАНИЕ: ClickHouse не зависит от RocksDB, это всего лишь один из дополнительных интеграционных движков хранения данных. #26821 (Azat Khuzhin).
  • Менее многословные внутренние логи RocksDB. ПРИМЕЧАНИЕ: ClickHouse не полагается на RocksDB, это всего лишь один из дополнительных интеграционных движков хранения данных. Тем самым закрывается #26252. #26789 (alexey-milovidov).
  • Изменение ролей по умолчанию влияет только на новые сеансы. #26759 (Vitaly Baranov).
  • Watchdog по умолчанию отключён в Docker. Исправлена проблема, из-за которой не обрабатывался Ctrl+C. #26757 (Mikhail f. Shiryaev).
  • SET PROFILE теперь также применяет ограничения, если они заданы для указанного профиля. #26730 (Vitaly Baranov).
  • Улучшена обработка запросов KILL QUERY. #26675 (Raúl Marín).
  • Функция mapPopulatesSeries поддерживает тип данных Map. #26663 (Ildus Kurbangaliev).
  • Исправлены избыточные (x2) попытки подключений при skip_unavailable_shards. #26658 (Azat Khuzhin).
  • Исправлено зависание clickhouse-benchmark при ошибке подключения (например, EMFILE). #26656 (Azat Khuzhin).
  • Позволяет задействовать больше потоков в движке Kafka. #26642 (feihengye).
  • Добавлена поддержка распределения запросов по кругу (round-robin) для clickhouse-benchmark (оно не отличается от обычного запуска на нескольких хостах/портах, за исключением отчёта по статистике). #26607 (Azat Khuzhin).
  • Исполняемые словари (executable, executable_pool) позволяют создавать их с помощью DDL-запроса, выполняемого в clickhouse-local. Закрывает #22355. #26510 (Maksim Kita).
  • Установлен тип клиентского запроса для обработчиков протоколов совместимости mysql и postgresql. #26498 (anneji-dev).
  • Применяйте LIMIT на шардах для запросов вида SELECT * FROM dist ORDER BY key LIMIT 10 при distributed_push_down_limit=1. Избегайте выполнения этапов DISTINCT/LIMIT BY для запросов вида SELECT DISTINCT shading_key FROM dist ORDER BY key. Теперь параметр distributed_push_down_limit учитывается оптимизацией optimize_distributed_group_by_sharding_key. #26466 (Azat Khuzhin).
  • Обновлён protobuf до версии 3.17.3. Журнал изменений доступен по адресу https://github.com/protocolbuffers/protobuf/releases. #26424 (Ilya Yatsishin).
  • Включена настройка use_hedged_requests, позволяющая снижать хвостовые задержки в крупных кластерах. #26380 (alexey-milovidov).
  • Улучшено поведение при наличии несуществующего хоста в списке разрешённых хостов пользователя. #26368 (ianton-ru).
  • Добавлена возможность задавать настройки мониторинга директории движка Distributed через оператор CREATE TABLE (например, CREATE TABLE dist (key Int) Engine=Distributed(cluster, db, table) SETTINGS monitor_batch_inserts=1 и т.п.). #26336 (Azat Khuzhin).
  • Сохранять адрес сервера в URL в истории веб-интерфейса, если он отличается от origin веб-интерфейса. Исправляет #26044. #26322 (alexey-milovidov).
  • Добавлены события профилирования для вызовов sleep / sleepEachRow. #26320 (Raúl Marín).
  • Позволяет повторно использовать соединения шардов между разными кластерами. Также позволяет избежать создания новых соединений при использовании табличной функции cluster. #26318 (Amos Bird).
  • Периодичность очистки старых временных каталогов теперь можно настраивать с помощью параметра со значением по умолчанию. #26212. #26313 (fastio).
  • Добавлена настройка function_range_max_elements_in_block для настройки безопасного порога объёма данных, генерируемого функцией range. Это закрывает #26303. #26305 (alexey-milovidov).
  • Проверять хеш-функцию при создании таблицы, а не при семплировании. Добавлены настройки для MergeTree: если таблица создана с некорректным столбцом семплирования, но семплирование никогда не используется, эти настройки можно отключить, чтобы запускать сервер без выброса исключения. #26256 (zhaoyu).
  • Добавлена настройка output_format_avro_string_column_pattern для вывода указанных столбцов типа String в Avro в виде строк вместо значения по умолчанию — байтов. Реализовано в #22414. #26245 (Ilya Golshtein).
  • Добавлена информация о размерах столбцов в таблицу system.columns для таблиц Log и TinyLog. Это закрывает #9001. #26241 (Nikolay Degterinsky).
  • Не выбрасывать исключение при запросе таблицы system.detached_parts, если используется настраиваемая конфигурация дисков и каталог detached отсутствует на некоторых из них. Это закрывает #26078. #26236 (alexey-milovidov).
  • Добавлена проверка наличия недетерминированных функций в ключах, включая константные выражения, такие как now(), today(). Исправляет #25875. Исправляет #11333. #26235 (alexey-milovidov).
  • преобразовывать типы данных timestamp и timestamptz в DateTime64 в движке таблицы PostgreSQL. #26234 (jasine).
  • Применён более агрессивный анализ индекса IN для проекций, чтобы можно было выбирать лучшую кандидатную проекцию. #26218 (Amos Bird).
  • Удалено ключевое слово GLOBAL для IN при передаче скалярной функции. В предыдущих версиях, если пользователь указывал GLOBAL IN f(x), выбрасывалось исключение. #26217 (Amos Bird).
  • Добавлен идентификатор ошибки (например, BAD_ARGUMENTS) в сообщения об исключениях. Это закрывает #25862. #26172 (alexey-milovidov).
  • Исправлена проблема некорректного вывода с опцией --progress для clickhouse-local. Полоса прогресса будет очищаться при достижении 100% — так же, как в clickhouse-client. Закрывает #17484. #26128 (Kseniia Sumarokova).
  • Добавлена настройка merge_selecting_sleep_ms. #26120 (lthaooo).
  • Удалено сложное использование Linux AIO с предварительным чтением одного блока, вместо него используется простой синхронный ввод-вывод с O_DIRECT. В предыдущих версиях настройка min_bytes_to_use_direct_io могла работать некорректно, если max_threads больше единицы. Чтение с использованием прямого ввода-вывода (который по умолчанию отключен для запросов и включен для крупных слияний) теперь будет работать менее эффективно. Это закрывает #25997. #26003 (alexey-milovidov).
  • Сбрасывать данные в таблице Distributed при выполнении запроса REPLACE TABLE. Исправляет #24566 — не заменять (и не создавать) таблицу в запросе [CREATE OR] REPLACE TABLE ... AS SELECT, если вставка в новую таблицу завершилась с ошибкой. Исправляет #23175. #25895 (tavplubix).
  • Добавлен столбец views в system.query_log, содержащий имена (материализованных или live) представлений, выполняемых запросом. Добавлена новая таблица лога (system.query_views_log), которая содержит информацию о каждом представлении, выполненном в ходе запроса. Изменено выполнение представлений: когда при выполнении представления выбрасывается исключение, любое представление, выполнение которого уже начато, продолжит выполняться до завершения. Ранее так вело себя выполнение только при parallel_view_processing=true, а теперь это поведение используется всегда. — Зависимые представления теперь сообщают о ходе чтения в контекст. #25714 (Raúl Marín).
  • Освобождение соединений теперь выполняется асинхронно после завершения выполнения распределённых запросов. Добавлена новая серверная настройка max_threads_for_connection_collector, которая задаёт количество рабочих потоков для фонового освобождения соединений. Если пул заполнен, соединение будет освобождаться синхронно, но немного иначе, чем раньше: оно освобождается после отправки клиенту EOS, запрос будет считаться успешно завершённым сразу после получения достаточного объёма данных, а любое исключение будет записано в лог вместо проброса клиенту. Добавлена настройка drain_timeout (по умолчанию 3 секунды). Освобождение соединения приведёт к его разрыву по истечении таймаута. #25674 (Amos Bird).
  • Поддержка нескольких директив include в конфигурации. Теперь можно подключать конфигурацию пользователей и конфигурацию удалённых серверов из нескольких источников. Просто поместите элемент <include /> с атрибутом from_zk, from_env или incl, и он будет заменён результатом подстановки. #24404 (nvartolomei).
  • Исправлена вставка нескольких блоков в распределённую таблицу при insert_distributed_one_random_shard = 1. Это редко используемая возможность. Отмечено как улучшение. #23140 (Amos Bird).
  • Добавлена поддержка ключей и значений LowCardinality и FixedString для типа Map. #21543 (hexiaoting).
  • Добавлена возможность перезагрузки конфигурации с локального диска. #19526 (taiyang-li).

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

  • Исправлены несколько ошибок, которые могли приводить к расхождению данных между репликами. #27808 (tavplubix).
  • Исправлена редкая ошибка в DROP PART, которая могла приводить к появлению ошибки Unexpected merged part intersects drop range. #27807 (alesapin).
  • Исправлена ошибка, приводившая к сбоям для некоторых форматов при получении из Kafka NULL‑сообщения (tombstone). Закрывает #19255. #27794 (filimonov).
  • Исправлена фильтрация столбцов при использовании UNION DISTINCT в подзапросе. Закрывает #27578. #27689 (Kseniia Sumarokova).
  • Исправлено некорректное приведение типа, когда функции вроде arrayHas применяются к массивам LowCardinality от Nullable разных нечисловых типов, таких как DateTime и DateTime64. В предыдущих версиях происходило некорректное приведение типа. В новой версии такая ситуация приводит к исключению. Закрывает #26330. #27682 (alexey-milovidov).
  • Исправлена табличная функция PostgreSQL, из-за которой соединения не закрывались. Исправляет #26088. #27662 (Kseniia Sumarokova).
  • Исправлен ещё один случай возникновения ошибки Unexpected merged part ... intersecting drop range .... #27656 (tavplubix).
  • Исправлена ошибка при работе со столбцом‑псевдонимом в таблице Distributed. #27652 (Vladimir C).
  • После того как для max_memory_usage* было установлено ненулевое значение, параметр нельзя было вернуть к 0 (без ограничения). Теперь это исправлено. #27638 (tavplubix).
  • Исправлено переполнение в меньшую сторону (underflow) значения времени при его конструировании из компонентов. Закрывает #27193. #27605 (Vasily Nemkov).
  • Исправлена ошибка, приводившая к сбою во время материализации проекций, если некоторые части содержат отсутствующие столбцы. Это исправляет #27512. #27528 (Amos Bird).
  • исправлена метрика BackgroundMessageBrokerSchedulePoolTask, вероятно, содержавшая опечатку. #27452 (Ben).
  • Исправлены распределённые запросы с нулём шардов и агрегацией. #27427 (Azat Khuzhin).
  • Совместимость в случае отсутствия суффикса «KB» в /proc/meminfo. #27361 (Mike Kot).
  • Исправлен некорректный результат выполнения запроса с построчной защитой (row-level security), PREWHERE и фильтром по LowCardinality. Исправляет проблему #27179. #27329 (Nikolai Kochetov).
  • Исправлена некорректная проверка идентификатора партиции для таблиц MergeTree, созданных с использованием старого синтаксиса. #27328 (tavplubix).
  • Исправлен протокол MySQL при использовании параллельных форматов (CSV/TSV). #27326 (Raúl Marín).
  • Исправлена ошибка Cannot find column для запросов с семплированием (sampling). Появилась в #24574. Исправляет #26522. #27301 (Nikolai Kochetov).
  • Исправлены ошибки вида Expected ColumnLowCardinality, gotUInt8 или Bad cast from type DB::ColumnVector<char8_t> to DB::ColumnLowCardinality для некоторых запросов с LowCardinality в PREWHERE. И, что ещё важнее, исправлено отсутствие пробела в сообщении об ошибке. Исправление для #23515. #27298 (Nikolai Kochetov).
  • Исправлена работа distributed_group_by_no_merge = 2 в сочетании с distributed_push_down_limit = 1 или optimize_distributed_group_by_sharding_key = 1 в сочетании с LIMIT BY и LIMIT OFFSET. #27249 (Azat Khuzhin). Это неочевидные комбинации настроек, которые практически никто не использует.
  • Исправлена проблема, при которой мутация застревала на недопустимых партициях в нереплицированном MergeTree. #27248 (Azat Khuzhin).
  • В случае неоднозначности лямбда-функции отдают предпочтение своим аргументам перед другими псевдонимами или идентификаторами. #27235 (Raúl Marín).
  • Исправлена структура столбцов в операции merge join, закрыт #27091. #27217 (Vladimir C).
  • В редких случаях в таблице system.detached_parts могла содержаться некорректная информация о некоторых частях; это исправлено. Исправлена ошибка #27114. #27183 (tavplubix).
  • Исправлено использование неинициализированной памяти в функциях multiSearch* при пустом массиве, закрыт #27169. #27181 (Vladimir C).
  • Исправлена работа синхронизации в GRPCServer. Этот PR исправляет #27024. #27064 (Vitaly Baranov).
  • Исправлен разбор конфигурации для словарей типов cache, complex_key_cache, ssd_cache, complex_key_ssd_cache. Опции allow_read_expired_keys, max_update_queue_size, update_queue_push_timeout_milliseconds, query_wait_timeout_milliseconds не разбирались для словарей не типа cache. #27032 (Maksim Kita).
  • Исправлено возможное зависание мутаций из-за гонки с DROP_RANGE. #27002 (Azat Khuzhin).
  • Теперь идентификатор партиции в запросах вида ALTER TABLE ... PARTITION ID xxx проверяется на корректность. Исправлено #25718. #26963 (alesapin).
  • Исправлена ошибка "Unknown column name" при использовании нескольких JOIN в некоторых случаях, закрыт #26899. #26957 (Vladimir C).
  • Исправлено чтение пользовательских доменов верхнего уровня (TLD; обработка останавливалась при меньшем буфере или большем файле). #26948 (Azat Khuzhin).
  • Исправлена ошибка Missing columns: 'xxx', возникавшая, если столбец с DEFAULT ссылался на другой нематериализованный столбец без выражения DEFAULT. Исправлено #26591. #26900 (alesapin).
  • Исправлена проблема с загрузкой ключей словаря в library-bridge для источника словаря library. #26834 (Kseniia Sumarokova).
  • Параметры агрегатной функции могли теряться при применении некоторых комбинаторов, что приводило к исключениям вида Conversion from AggregateFunction(topKArray, Array(String)) to AggregateFunction(topKArray(10), Array(String)) is not supported. Проблема исправлена. Исправляет #26196 и #26433. #26814 (tavplubix).
  • Добавлено значение event_time_microseconds для REMOVE_PART в system.part_log. В предыдущих версиях оно не было задано. #26720 (Azat Khuzhin).
  • Не удаляйте данные при остановке таблицы ReplicatedMergeTree во избежание несоответствия данных и метаданных. #26716 (nvartolomei).
  • В некоторых случаях SET ROLE работал некорректно; этот PR исправляет проблему. #26707 (Vitaly Baranov).
  • Некоторые исправления в параллельном форматировании (https://github.com/ClickHouse/ClickHouse/issues/26694). #26703 (Raúl Marín).
  • Исправлена потенциальная ошибка разыменования нулевого указателя (nullptr) в оконных функциях. Это исправляет #25276. #26668 (Alexander Kuzmenkov).
  • Исправлено преобразование файла истории clickhouse-client (при обновлении с формата версии clickhouse-client трёхлетней давности), если файл пуст. #26589 (Azat Khuzhin).
  • Исправлены некорректные имена функций groupBitmapAnd/Or/Xor (в некоторых случаях они могли отображаться неправильно), что устраняет проблему. #26557 (Amos Bird).
  • Обновлена проверка команды chown в entrypoint контейнера clickhouse-server. Это исправляет ошибку, из-за которой в Kubernetes перезапуск пода кластера завершался с ошибкой (или по тайм-ауту). #26545 (Ky Li).
  • Исправлено падение при завершении работы RabbitMQ, если RabbitMQ не был запущен. Закрывает #26504. #26529 (Kseniia Sumarokova).
  • Исправлены проблемы с запросом CREATE DICTIONARY, если имя словаря или имя базы данных были заключены в кавычки. Закрывает #26491. #26508 (Maksim Kita).
  • Исправлено некорректное разрешение имён столбцов после перезаписи псевдонимов столбцов. Это исправляет #26432. #26475 (Amos Bird).
  • Исправлен сбой под msan, выявленный фаззингом. Исправляет #22517. #26428 (Nikolai Kochetov).
  • Исправлен бесконечный поток несоединённых блоков в partial_merge_join, закрыта проблема #26325. #26374 (Vladimir C).
  • Исправлено возможное аварийное завершение при входе под удалённым пользователем. Этот PR исправляет #26073. #26363 (Vitaly Baranov).
  • Исправлена optimize_distributed_group_by_sharding_key для случая нескольких столбцов (приводило к некорректному результату при optimize_skip_unused_shards=1/allow_nondeterministic_optimize_skip_unused_shards=1 и нескольких столбцах в выражении ключа шардинга). #26353 (Azat Khuzhin).
  • Исправлена редкая ошибка в механизме восстановления потерянной реплики, из-за которой реплики могли расходиться. #26321 (tavplubix).
  • Исправлена проблема с декомпрессией zstd (для импорта/экспорта во фреймовом формате zstd, не связанном с данными таблиц), когда в конце внутреннего буфера присутствуют escape-последовательности. Закрывает #26013. #26314 (Kseniia Sumarokova).
  • Исправлена логическая ошибка при выполнении JOIN с totals, закрыт #26017. #26250 (Vladimir C).
  • Удалён лишний символ перевода строки в столбце thread_name таблицы system.stack_trace. Это исправляет #24124. #26210 (alexey-milovidov).
  • Исправлен возможный сбой при использовании более одного выражения untuple. #26179 (alexey-milovidov).
  • Не выбрасывать исключение в toString для Nullable Enum, если в Enum отсутствует значение для нуля; закрыта #25806. #26123 (Vladimir C).
  • Исправлен некорректный sequence_id в пакетах протокола MySQL, которые ClickHouse отправляет при возникновении исключения в ходе выполнения запроса. Это могло приводить к тому, что клиент MySQL разрывал соединение с сервером ClickHouse. Исправляет #21184. #26051 (tavplubix).
  • Исправлен случай, когда cutToFirstSignificantSubdomainCustom()/cutToFirstSignificantSubdomainCustomWithWWW()/firstSignificantSubdomainCustom() возвращают некорректный тип у констант, из‑за чего optimize_skip_unused_shards не работает: #26041 (Azat Khuzhin).
  • Исправлено возможное несоответствие заголовков при использовании обычной проекции с PREWHERE. Это исправляет #26020. #26038 (Amos Bird).
  • Исправлено использование sharding_key, заданного столбцом без функции, для remote() (раньше select * from remote('127.1', system.one, dummy) приводил к ошибке вида Unknown column: dummy, there are only columns .). #25824 (Azat Khuzhin).
  • Исправлены ошибки Not found column ... и Missing column ... при выполнении запросов SELECT к MaterializeMySQL. Исправляет #23708, #24830, #25794. #25822 (tavplubix).
  • Исправлен optimize_skip_unused_shards_rewrite_in для типов, отличных от UInt64 (это могло приводить к выбору неверных шардов или выбрасыванию ошибок Cannot infer type of an empty tuple или Function tuple requires at least one argument). #25798 (Azat Khuzhin).

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

  • Теперь мы запускаем stateful- и stateless‑тесты в случайных часовых поясах. Исправляет #12439. Чтение String как DateTime и запись DateTime как String в формате Protobuf теперь учитывают часовой пояс. Чтение UInt16 как DateTime в форматах Arrow и Parquet теперь сначала обрабатывает значение как Date, а затем преобразует его в DateTime с учётом часового пояса DateTime, поскольку Date сериализуется в Arrow и Parquet как UInt16. GraphiteMergeTree теперь учитывает часовой пояс при округлении времени. Исправляет #5098. Автор: @alexey-milovidov. #15408 (alesapin).
  • clickhouse-test поддерживает SQL‑тесты с шаблонами Jinja2. #26579 (Vladimir C).
  • Добавлена поддержка сборки с clang-13. Это закрывает #27705. #27714 (alexey-milovidov). #27777 (Sergei Semin)
  • Добавлены параметры CMake для сборки с определённым набором инструкций CPU или без него. Это для #17469 и #27509. #27508 (alexey-milovidov).
  • Исправлена компоновка вспомогательных программ при использовании динамических библиотек. #26958 (Raúl Marín).
  • Обновлён RocksDB до состояния ветки master от 2021-07-16. #26411 (alexey-milovidov).

Релиз ClickHouse v21.8, 2021-08-12

Заметки по обновлению

  • В новой версии используется тип данных Map для таблиц системных логов (system.query_log, system.query_thread_log, system.processes, system.opentelemetry_span_log). Эти таблицы будут автоматически созданы с новыми типами данных. Для поддержки старых запросов создаются виртуальные столбцы. Закрывает #18698. #23934, #25773 (hexiaoting, sundy-li, Maksim Kita). Если вы хотите выполнить downgrade с версии 21.8 на более старые версии, вам потребуется вручную очистить системные таблицы с логами. См. /var/lib/clickhouse/data/system/*_log.

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

  • Добавлена поддержка части стандарта SQL/JSON. #24148 (l1tsolaiki, Kseniia Sumarokova).
  • Добавлен сбор общих системных метрик (в system.asynchronous_metrics и system.asynchronous_metric_log) по использованию CPU, диска, памяти, IO, сети, файлов, средней нагрузке, частотам CPU, термодатчикам, счётчикам EDAC, времени работы системы; также добавлены метрики по джиттеру планировщика и времени, затраченному на сбор метрик. Работает аналогично atop в ClickHouse и позволяет получать данные мониторинга даже при отсутствии установленных дополнительных инструментов. Закрывает #9430. #24416 (alexey-milovidov, Yegor Levankov).
  • Добавлены движок таблицы и движок базы данных MaterializedPostgreSQL. Движок базы данных позволяет реплицировать целую базу данных или любой поднабор таблиц этой базы. #20470 (Kseniia Sumarokova).
  • Добавлены новые функции leftPad(), rightPad(), leftPadUTF8(), rightPadUTF8(). #26075 (Vitaly Baranov).
  • Добавлено ключевое слово FIRST в команду ADD INDEX, чтобы можно было добавить индекс в начало списка индексов. #25904 (xjewer).
  • Добавлена таблица system.data_skipping_indices, содержащая информацию о существующих индексах пропуска данных. Закрывает #7659. #25693 (Dmitry Novik).
  • Добавлены функции bin/unbin. #25609 (zhaoyu).
  • Добавлена поддержка типов Map и UInt128, Int128, UInt256, Int256 в функциях mapAdd и mapSubtract. #25596 (Ildus Kurbangaliev).
  • Добавлена поддержка выражения DISTINCT ON (columns), закрывает #25404. #25589 (Zijie Lu).
  • Добавлена возможность сбросить пользовательскую настройку к значению по умолчанию и удалить её из метаданных таблицы. Это позволяет откатить изменение, не зная значения настройки по умолчанию в системе/конфигурации. Закрывает #14449. #17769 (xjewer).
  • Реализована визуализация конвейеров в виде графов в Web UI при выполнении запроса EXPLAIN PIPELINE graph = 1. #26067 (alexey-milovidov).

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

  • Добавлена компиляция агрегатных функций. Используйте опцию compile_aggregate_expressions для включения. #24789 (Maksim Kita).
  • Снижена задержка коротких запросов, которым требуется чтение из таблиц с большим количеством столбцов. #26371 (Anton Popov).

Улучшения

  • Для таблиц системных логов (system.query_log, system.query_thread_log, system.processes, system.opentelemetry_span_log) используется тип данных Map. Эти таблицы будут автоматически создаваться с новыми типами данных. Для поддержки старых запросов добавлены виртуальные столбцы. Закрывает #18698. #23934, #25773 (hexiaoting, sundy-li, Maksim Kita).
  • Для словаря со сложным ключом, содержащим только один атрибут, можно не оборачивать выражение ключа в tuple в функциях dictGet, dictHas. #26130 (Maksim Kita).
  • Реализована функция bin/hex на основе состояний AggregateFunction. #26094 (zhaoyu).
  • Добавлена поддержка аргументов типа UUID для функций empty и notEmpty. UUID считается пустым, если он полностью состоит из нулей (nil UUID). Закрывает #3446. #25974 (zhaoyu).
  • В протокол MySQL добавлена поддержка SET SQL_SELECT_LIMIT. Закрывает #17115. #25972 (Kseniia Sumarokova).
  • Расширена инструментация сетевого взаимодействия: добавлены счётчики байт recv/send; добавлены gauge-метрики для операций recv/send. Добавлена отсутствовавшая документация. Закрывает #5897. #25962 (alexey-milovidov).
  • Добавлена настройка optimize_move_to_prewhere_if_final. Если в запросе используется FINAL, оптимизация move_to_prewhere будет включена только в том случае, если включены обе настройки: optimize_move_to_prewhere и optimize_move_to_prewhere_if_final. Закрывает #8684. #25940 (Kseniia Sumarokova).
  • Разрешить использование сложных идентификаторов соединённых таблиц в кавычках. Закрывает #17861. #25924 (alexey-milovidov).
  • Добавлена поддержка элементов с символами Unicode (например, китайскими, кириллическими) в типах данных Nested. Закрывает #25594. #25923 (alexey-milovidov).
  • Разрешить использование функций quantiles* с aggregate_functions_null_for_empty. Закрывает #25892. #25919 (alexey-milovidov).
  • Позволяет задавать параметры параметрических агрегатных функций в виде произвольных константных выражений (например, 1 + 2), а не только литералов. Также позволяет использовать параметры запроса (в параметризованных запросах вида {param:UInt8}) внутри параметрических агрегатных функций. Закрывает #11607. #25910 (alexey-milovidov).
  • Корректно выбрасывать исключение при попытке разобрать некорректное значение типа Date. Закрывает #6481. #25909 (alexey-milovidov).
  • Поддержка нескольких include-директив в конфигурации. Теперь можно подключать конфигурации пользователей и удалённых серверов из нескольких источников. Достаточно поместить элемент <include /> с атрибутом from_zk, from_env или incl, и он будет заменён соответствующим содержимым. #24404 (nvartolomei).
  • Поддержка запросов со столбцом с именем "null" (имя должно быть заключено в обратные кавычки или двойные кавычки) и ON CLUSTER. Закрывает #24035. #25907 (alexey-milovidov).
  • Добавлена поддержка LowCardinality, Decimal и UUID для JSONExtract. Закрывает #24606. #25900 (Kseniia Sumarokova).
  • Файл истории конвертирован из формата readline в формат replxx. #25888 (Azat Khuzhin).
  • Исправлена ошибка, которая могла приводить к появлению пересекающихся частей после выполнения DROP PART или фонового удаления пустой части. #25884 (alesapin).
  • Улучшена обработка потерянных кусков для таблиц ReplicatedMergeTree. Исправлены редкие несоответствия в ReplicationQueue. Исправлена проблема #10368. #25820 (alesapin).
  • Разрешён запуск clickhouse-client при недоступном для чтения рабочем каталоге. #25817 (ianton-ru).
  • Исправлена ошибка «No available columns» для хранилища Merge. #25801 (Azat Khuzhin).
  • Движок MySQL теперь поддерживает обмен комментариями столбцов между MySQL и ClickHouse. #25795 (Storozhuk Kostiantyn).
  • Исправлено непоследовательное поведение GROUP BY с константой на пустом наборе данных. Закрывает #6842. #25786 (Kseniia Sumarokova).
  • Отмена уже запущенных слияний в разделе при выполнении операций DROP PARTITION и TRUNCATE для ReplicatedMergeTree. Решает проблему #17151. #25684 (tavplubix).
  • Реализована поддержка типа данных ENUM для MaterializeMySQL. #25676 (Storozhuk Kostiantyn).
  • Добавлена поддержка материализованных и псевдонимных столбцов в операциях JOIN, закрыт #13274. #25634 (Vladimir C).
  • Исправлено возможное логическое условие гонки между ALTER TABLE ... DETACH и фоновыми слияниями. #25605 (Azat Khuzhin).
  • Метрика NetworkReceiveElapsedMicroseconds теперь корректно учитывает время ожидания данных от клиента при выполнении INSERT. Закрыта #9958. #25602 (alexey-milovidov).
  • Добавлена поддержка TRUNCATE TABLE для S3 и HDFS. Закрыта задача #25530. #25550 (Kseniia Sumarokova).
  • Поддержка динамической перезагрузки конфигурации для изменения количества потоков в пуле потоков для выполнения фоновых задач (слияния, мутации, загрузки). #25548 (Nikita Mikhaylov).
  • Разрешено извлекать элемент нестрокового типа как строку с помощью JSONExtract. Это для #25414. #25452 (Amos Bird).
  • Добавлена поддержка регулярных выражений в аргументе Database для StorageMerge. Закрыт #776. #25064 (flynn).
  • Веб-интерфейс: если значение выглядит как URL, ссылка создаётся автоматически. #25965 (alexey-milovidov).
  • Команда sudo service clickhouse-server start теперь работает на системах с systemd, таких как CentOS 8. Закрыты #14298. Закрыты #17799. #25921 (alexey-milovidov).

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

  • Исправлена некорректная работа SET ROLE в некоторых случаях. #26707 (Vitaly Baranov).
  • Исправлено возможное разыменование nullptr в оконных функциях. Исправлена #25276. #26668 (Alexander Kuzmenkov).
  • Исправлены некорректные имена функций groupBitmapAnd/Or/Xor. См. #26557 (Amos Bird).
  • Исправлен сбой при завершении работы RabbitMQ, если его настройка не была выполнена. Закрывает #26504. #26529 (Kseniia Sumarokova).
  • Исправлены проблемы с запросом CREATE DICTIONARY, возникавшие при заключении в кавычки имени словаря или базы данных. Закрывает #26491. #26508 (Maksim Kita).
  • Исправлено некорректное разрешение имён после переписывания псевдонимов столбцов. Исправляет #26432. #26475 (Amos Bird).
  • Исправлена проблема бесконечного потока несоединённых блоков в partial_merge_join, закрыта задача #26325. #26374 (Vladimir C).
  • Исправлен возможный сбой при входе под удалённым пользователем. Исправлено #26073. #26363 (Vitaly Baranov).
  • Исправлено поведение настройки optimize_distributed_group_by_sharding_key для нескольких столбцов (оно приводило к некорректным результатам при optimize_skip_unused_shards=1/allow_nondeterministic_optimize_skip_unused_shards=1 и нескольких столбцах в выражении ключа шардинга). #26353 (Azat Khuzhin).
  • Операция CAST из Date в DateTime (или DateTime64) не использовала часовой пояс типа DateTime. Это также могло влиять на сравнение между Date и DateTime. Определение общего типа для Date и DateTime также не использовало соответствующий часовой пояс. Это влияло на результаты функции if и построение массивов. Закрывает #24128. #24129 (Maksim Kita).
  • Исправлена редкая ошибка в механизме восстановления потерянной реплики, которая могла приводить к расхождению между репликами. #26321 (tavplubix).
  • Исправлена декомпрессия zstd в случае, если в конце внутреннего буфера имеются escape-последовательности. Закрывает #26013. #26314 (Kseniia Sumarokova).
  • Исправлена логическая ошибка в JOIN с WITH TOTALS, закрыт #26017. #26250 (Vladimir C).
  • Удалён лишний перенос строки в столбце thread_name таблицы system.stack_trace. Исправлена проблема #24124. #26210 (alexey-milovidov).
  • Исправлен joinGet при работе со столбцами LowCardinality, закрыт #25993. #26118 (Vladimir C).
  • Исправлено возможное аварийное завершение pointInPolygon при отключенной настройке validate_polygons. #26113 (alexey-milovidov).
  • Исправлено возникновение исключения при итерации по несуществующему удалённому каталогу. #26087 (ianton-ru).
  • Исправлен редкий аварийный останов сервера из-за вызова abort в клиенте ZooKeeper. Исправляет #25813. #26079 (alesapin).
  • Исправлена некорректная оценка числа потоков для right join-а с подзапросом в некоторых случаях. Закрывает #24075. #26052 (Vladimir C).
  • Исправлен некорректный sequence_id в пакетах протокола MySQL, которые ClickHouse отправляет при возникновении исключения во время выполнения запроса. Это могло приводить к разрыву соединения MySQL-клиента с сервером ClickHouse. Исправляет #21184. #26051 (tavplubix).
  • Исправлено возможное несоответствие заголовка при использовании обычной проекции с PREWHERE. Исправление для #26020. #26038 (Amos Bird).
  • Исправлено форматирование типа Map с целочисленными ключами при выводе в JSON. #25982 (Anton Popov).
  • Исправлена возможная взаимоблокировка при раскрутке стека профилировщика запросов. Исправление #25968. #25970 (Maksim Kita).
  • Исправлен сбой при вызове dictGet() с некорректными аргументами. #25913 (Vitaly Baranov).
  • Исправлен механизм аутентификации scram-sha-256 для движков PostgreSQL. Закрывает #24516. #25906 (Kseniia Sumarokova).
  • Исправлена чрезмерно долгая задержка повторных попыток для фоновых задач, когда фоновый пул заполнен. Исправляет проблему #25836. #25893 (alesapin).
  • Исправлена обработка исключений на ARM при нестандартном размере страницы памяти. Исправляет #25512, #25044, #24901, #23183, #20221, #19703, #19028, #18391, #18121, #17994, #12483. #25854 (Maksim Kita).
  • Исправлена работа sharding_key, сформированной из столбца без функции, для remote() (раньше select * from remote('127.1', system.one, dummy) приводил к ошибке Unknown column: dummy, there are only columns .). #25824 (Azat Khuzhin).
  • Исправлены ошибки Not found column ... и Missing column ... при выполнении запросов SELECT к MaterializeMySQL. Исправляет #23708, #24830, #25794. #25822 (tavplubix).
  • Исправлена работа optimize_skip_unused_shards_rewrite_in для типов данных, отличных от UInt64 (мог в итоге выбирать некорректные шарды или вызывать ошибки Cannot infer type of an empty tuple или Function tuple requires at least one argument). #25798 (Azat Khuzhin).
  • Исправлена редкая ошибка в запросе DROP PART для таблиц ReplicatedMergeTree, которая могла приводить к сообщению об ошибке Unexpected merged part intersecting drop range. #25783 (alesapin).
  • Исправлена ошибка в TTL с выражением GROUP BY, из-за которой TTL отказывался выполняться после первого запуска в части. #25743 (alesapin).
  • Разрешен доступ движку StorageMerge к таблицам с псевдонимами. Закрывает #6051. #25694 (Kseniia Sumarokova).
  • Исправлена медленная работа dict join в некоторых случаях, закрыта задача #24209. #25618 (Vladimir C).
  • Исправлена работа ALTER MODIFY COLUMN для столбцов, которые участвуют в TTL-выражениях. #25554 (Anton Popov).
  • Исправлена ассерция в PREWHERE при использовании типа, отличного от UInt8, закрыт #19589. #25484 (Vladimir C).
  • Исправлен краш под msan, выявленный фаззингом. Исправляет #22517. #26428 (Nikolai Kochetov).
  • Обновлена проверка команды chown во входной точке Docker-контейнера clickhouse-server. Исправлена ошибка «cluster pod restart failed (or timeout)» в Kubernetes. #26545 (Ky Li).

Релиз ClickHouse v21.7, 2021-07-09

Изменение, несовместимое с предыдущими версиями

  • Повышена производительность запросов с явно заданными большими наборами. Добавлена настройка совместимости legacy_column_name_of_tuple_literal. Имеет смысл установить её в true при поэтапном обновлении кластера с версии ниже 21.7 до любой более новой версии. В противном случае распределённые запросы с явно заданными наборами в конструкции IN могут завершаться с ошибкой во время обновления. #25371 (Anton Popov).
  • Вперёд- и обратно-несовместимое изменение максимального размера буфера в clickhouse-keeper (экспериментальная альтернатива ZooKeeper). Лучше сделать это сейчас (до вывода в production), чем позже. #25421 (alesapin).

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

  • Поддержка конфигурации в формате YAML в качестве альтернативы XML. Это закрывает #3607. #21858 (BoloniniD).
  • Добавлен способ восстановления реплицируемой таблицы, когда данные (возможно) присутствуют, но метаданные ZooKeeper потеряны. Решает #13458. #13652 (Mike Kot).
  • Поддержка structs и maps в форматах Arrow/Parquet/ORC и словарей в форматах ввода/вывода Arrow. Представлена новая настройка output_format_arrow_low_cardinality_as_dictionary. #24341 (Kruglov Pavel).
  • Добавлена поддержка типа Array в словарях. #25119 (Maksim Kita).
  • Добавлена функция bitPositionsToArray. Закрывает #23792. Автор [Kevin Wan] (@MaxWk). #25394 (Maksim Kita).
  • Добавлена функция dateName, которая возвращает такие названия, как 'Friday' или 'April'. Автор [Daniil Kondratyev] (@dankondr). #25372 (Maksim Kita).
  • Добавлена функция toJSONString для сериализации столбцов в их представление в формате JSON. #25164 (Amos Bird).
  • Теперь query_log имеет два новых столбца: initial_query_start_time, initial_query_start_time_microsecond, которые записывают время начала распределённого запроса, если такой есть. #25022 (Amos Bird).
  • Добавлена агрегатная функция segmentLengthSum. #24250 (flynn).
  • Добавлена новая булева настройка prefer_global_in_and_join, которая по умолчанию выполняет все IN/JOIN как GLOBAL IN/JOIN. #23434 (Amos Bird).
  • Добавлена поддержка запросов ALTER DELETE для движка таблиц Join. #23260 (foolchi).
  • Добавлена агрегатная функция quantileBFloat16, а также соответствующие quantilesBFloat16 и medianBFloat16. Это очень простой и быстрый метод оценки квантилей с относительной погрешностью не более 0.390625%. Это закрывает #16641. #23204 (Ivan Novitskiy).
  • Реализована функция sequenceNextNode(), полезная для анализа потоков (flow analysis). #19766 (achimbab).

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

  • Добавлена поддержка виртуальной файловой системы поверх HDFS. #11058 (overshov) (Kseniia Sumarokova).
  • Теперь clickhouse-keeper (экспериментальная альтернатива ZooKeeper) поддерживает ACL типа digest, как в ZooKeeper. #24448 (alesapin).

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

  • Добавлена оптимизация, которая преобразует некоторые функции в чтение подстолбцов для уменьшения объёма читаемых данных. Например, выражение col IS NULL преобразуется в чтение подстолбца col.null. Оптимизацию можно включить с помощью настройки optimize_functions_to_subcolumns, которая сейчас по умолчанию отключена. #24406 (Anton Popov).
  • Переписывается большее количество столбцов в возможные выражения-алиасы. Это может включать более эффективные оптимизации, такие как проекции. #24405 (Amos Bird).
  • Индекс типа bloom_filter может использоваться для выражений с функцией hasAny с константными массивами. Закрывает: #24291. #24900 (Vasily Nemkov).
  • Добавлен экспоненциальный backoff для повторного планирования попытки чтения в случае, если очереди RabbitMQ пусты. (ClickHouse поддерживает импорт данных из RabbitMQ). Закрывает #24340. #24415 (Kseniia Sumarokova).

Улучшение

  • Добавлена возможность ограничивать пропускную способность для репликации. Добавлены две настройки движков Replicated*MergeTree: max_replicated_fetches_network_bandwidth и max_replicated_sends_network_bandwidth, которые позволяют ограничить максимальную скорость реплицируемых загрузок (fetch) и отправок для таблицы. Добавлены две серверные настройки (в профиле пользователя default): max_replicated_fetches_network_bandwidth_for_server и max_replicated_sends_network_bandwidth_for_server, которые ограничивают максимальную скорость репликации для всех таблиц. Ограничения применяются не с идеальной точностью. По умолчанию выключены. Исправляет #1821. #24573 (alesapin).
  • Ограничения на ресурсы и изоляция для мостов ODBC и Library. Используйте отдельную группу и пользователя clickhouse-bridge для процессов bridge. Установите oom_score_adj так, чтобы bridge-процессы были первыми кандидатами для OOM killer. Установите максимальный размер RSS равным 1 GiB. Закрывает #23861. #25280 (Kseniia Sumarokova).
  • Добавлена отдельная символьная ссылка clickhouse-keeper на основной исполняемый файл clickhouse. Теперь можно запускать сервис координации без основного сервера ClickHouse. #24059 (alesapin).
  • Для запросов к VIEW теперь используются глобальные настройки. Исправлена проблема, при которой запросы к VIEW использовали локальные настройки, что приводило к ошибкам, если настройки при CREATE VIEW и SELECT различались. Начиная с текущей версии, VIEW не будет использовать эти изменённые настройки, но вы всё ещё можете передавать дополнительные настройки в секции SETTINGS запроса CREATE VIEW. Закрывает #20551. #24095 (Vladimir).
  • При запуске сервера части с некорректным идентификатором партиции не удалялись, а всегда только отсоединялись. #25070. #25166 (Nikolai Kochetov).
  • Увеличен размер пула фоновых задач до 128 (настройка background_schedule_pool_size). Это позволяет избежать зависаний очереди репликации при медленном подключении к ZooKeeper. #25072 (alesapin).
  • Добавлен параметр MergeTree max_parts_to_merge_at_once, который ограничивает количество частей, которые могут одновременно сливаться в фоновом режиме. Не влияет на запрос OPTIMIZE FINAL. Исправляет #1820. #24496 (alesapin).
  • Разрешено использование оператора NOT IN при отсечении партиций. #24894 (Amos Bird).
  • Распознавать IPv4-адреса, такие как 127.0.1.1, как локальные. Это спорное изменение, которое закрывает #23504. Michael Filimonov протестирует эту возможность. #24316 (alexey-milovidov).
  • База данных ClickHouse, созданная с помощью MaterializeMySQL (это экспериментальная функция), теперь содержит все комментарии к столбцам из материализованной базы данных MySQL. #25199 (Storozhuk Kostiantyn).
  • Добавлены настройки (connection_auto_close/connection_max_tries/connection_pool_size) для табличного движка MySQL. #24146 (Azat Khuzhin).
  • Ускорен запуск движка Distributed. #25663 (Azat Khuzhin).
  • Улучшение для Distributed-таблиц. Исключены реплики из имени каталога (dirname) при internal_replication=true (это позволяет выполнять INSERT в Distributed-таблицу в кластере с любым количеством реплик; ранее поддерживалось только 15 реплик, при большем количестве возникала ошибка ENAMETOOLONG при создании директории для асинхронных блоков). #25513 (Azat Khuzhin).
  • Добавлена поддержка типа Interval для LowCardinality. Это требуется для промежуточных значений некоторых выражений. Закрыта задача #21730. #25410 (Vladimir).
  • Добавлен оператор == во временных условиях для функций sequenceMatch и sequenceCount. Например: sequenceMatch('(?1)(?t==1)(?2)')(time, data = 1, data = 2). #25299 (Christophe Kalenzaga).
  • Добавлены настройки http_max_fields, http_max_field_name_size, http_max_field_value_size. #25296 (Ivan).
  • Добавлена поддержка функции if при использовании в её ветках типов Decimal и Int. Это закрывает #20549. Это закрывает #10142. #25283 (alexey-milovidov).
  • Обновлено приглашение в clickhouse-client и добавлено сообщение при переподключении. Закрывает #10577. #25281 (alexey-milovidov).
  • Исправлено отслеживание памяти в агрегирующей функции topK. Это закрывает #25259. #25260 (alexey-milovidov).
  • Исправлен topLevelDomain для IDN-хостов (например, example.рф), ранее для таких хостов возвращалась пустая строка. #25103 (Azat Khuzhin).
  • Определять версию ядра Linux во время выполнения (для корректной работы вложенного epoll, который требуется для async_socket_for_remote/use_hedged_requests, иначе удалённые запросы могут застревать). #25067 (Azat Khuzhin).
  • Для распределённых запросов при optimize_skip_unused_shards=1 теперь можно пропускать шарду с условием вида (sharding key) IN (one-element-tuple). (Кортежи с несколькими элементами уже поддерживались. Кортеж с одним элементом не работал, потому что он интерпретируется как литерал). #24930 (Amos Bird).
  • Улучшены сообщения логов об ошибках S3, больше нет двойных пробелов в случае пустых ключей и бакетов. #24897 (Vladimir Chebotarev).
  • Некоторые запросы требуют многопроходного семантического анализа. В таком случае попробуйте повторно использовать уже построенные множества для IN. #24874 (Amos Bird).
  • Теперь учитывается max_distributed_connections для insert_distributed_sync (иначе, для очень больших кластеров при синхронной вставке может быть превышен предел max_thread_pool_size). #24754 (Azat Khuzhin).
  • Избегайте подавления ошибок, таких как Limit for rows or bytes to read exceeded, для скалярных подзапросов. #24545 (nvartolomei).
  • Ужесточить парсер String-to-Int, чтобы toInt64('+') вызывал исключение. #24475 (Amos Bird).
  • Если SSD_CACHE создаётся с помощью DDL-запроса, он может быть создан только внутри каталога user_files. #24466 (Maksim Kita).
  • Поддержка PostgreSQL для указания схемы, отличной от схемы по умолчанию, в запросах INSERT. Закрывает #24149. #24413 (Kseniia Sumarokova).
  • Исправлено разрешение IPv6-адресов (то есть теперь корректно выполняется запрос select * from remote('[::1]', system.one)). #24319 (Azat Khuzhin).
  • Устраняет висячие пробелы в конце предложения FROM с подзапросами в многострочном режиме, а также немного изменяет вывод запросов, делая его более удобочитаемым для человека. #24151 (Azat Khuzhin).
  • Улучшение работы распределённых таблиц. Добавлена возможность разбивать распределённый пакет при ошибках (например, из‑за нехватки памяти или повреждения данных) с помощью настройки distributed_directory_monitor_split_batch_on_failure (по умолчанию отключена). #23864 (Azat Khuzhin).
  • Реализована обработка конфликтов имён столбцов в движке таблиц Join. Закрывает #20309. #23769 (Vladimir).
  • Отображение прогресса для движка таблицы File в clickhouse-local и при выполнении запроса INSERT в clickhouse-client при передаче данных через stdin. Закрывает #18209. #23656 (Kseniia Sumarokova).
  • Исправлены ошибки и внесены улучшения в clickhouse-copier. Разрешено копирование таблиц с различными (но совместимыми) схемами. Закрывает #9159. Добавлен тест для копирования ReplacingMergeTree. Закрывает #22711. Добавлена поддержка TTL на столбцах и индексов пропуска данных (Data Skipping Indices). При создании внутренней таблицы типа Distributed они просто удаляются (базовая таблица при этом будет иметь TTL и индексы пропуска данных). Закрывает #19384. Разрешено копирование столбцов MATERIALIZED и ALIAS. В некоторых случаях это может быть полезно (например, если этот столбец входит в PRIMARY KEY). Теперь это можно разрешить, установив свойство allow_to_copy_alias_and_materialized_columns в значение true в конфигурации задачи. Закрывает #9177. Закрывает [#11007] (https://github.com/ClickHouse/ClickHouse/issues/11007). Закрывает #9514. Добавлено свойство allow_to_drop_target_partitions в конфигурацию задачи для удаления секций в исходной таблице перед перемещением вспомогательных таблиц. Закрывает #20957. Удалён запрос OPTIMIZE DEDUPLICATE. Этот обходной приём был необходим, потому что ALTER TABLE MOVE PARTITION повторялся много раз, а обычные таблицы MergeTree не поддерживают дедупликацию. Закрывает #17966. Прогресс теперь записывается в узел ZooKeeper по пути task_path + /status в формате JSON. Закрывает #20955. Добавлена поддержка ReplicatedTables без аргументов. Закрывает #24834. #23518 (Nikita Mikhaylov).
  • Добавлена пауза с экспоненциальной задержкой между повторными попытками чтения из S3. #23461 (Vladimir Chebotarev).
  • При выполнении INSERT в таблицу Distributed учитывать настройку insert_allow_materialized_columns (разрешает вставку в материализованные столбцы). #23349 (Azat Khuzhin).
  • Добавлена поддержка проталкивания LIMIT в распределённые запросы. #23027 (Azat Khuzhin).
  • Исправлена проблема zero-copy репликации с несколькими томами S3 (устраняет #22679). #22864 (ianton-ru).
  • Определять фактический номер порта, к которому осуществляется привязка, когда пользователь запрашивает у операционной системы любой доступный порт, и выводить его в сообщении журнала. #25569 (bnaecker).
  • Исправлена проблема, из-за которой при преобразовании массивов PostgreSQL иногда получался тип данных String вместо n-мерного массива, так как attndims в некоторых случаях работает некорректно. Закрывает #24804. #25538 (Kseniia Sumarokova).
  • Исправлено преобразование DateTime с часовым поясом для MySQL, PostgreSQL и ODBC. Закрывает #5057. #25528 (Kseniia Sumarokova).
  • Различать KILL MUTATION для разных таблиц (исправляет неожиданную ошибку Cancelled mutating parts). #25025 (Azat Khuzhin).
  • Добавлена возможность объявлять диск S3 в корне бакета (виртуальная файловая система S3 — экспериментальная функция, находящаяся в разработке). #24898 (Vladimir Chebotarev).
  • Включено чтение подколонок (например, компонентов Tuple) для распределённых таблиц. #24472 (Anton Popov).
  • Изменение для протокола совместимости с MySQL: функция user теперь возвращает корректный результат. Закрывает #25697. #25697 (sundyli).

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

  • Улучшена обратная совместимость. Использовать старую версию функции вычисления остатка от деления, если она используется в ключе партиционирования. Закрывает #23508. #24157 (Kseniia Sumarokova).
  • Исправлена крайне редкая ошибка на серверах с малым объёмом памяти, которая могла приводить к невозможности выполнять слияния без перезапуска. Возможно, исправляет #24603. #24872 (alesapin).
  • Исправлена крайне редкая ошибка Tagging already tagged part в очереди репликации при одновременном выполнении alter move/replace partition. Вероятно, исправляет #22142. #24961 (alesapin).
  • Исправлено потенциальное падение при вычислении состояний агрегатных функций путём агрегирования состояний других агрегатных функций (непрактичный сценарий использования). См. #24523. #25015 (alexey-milovidov).
  • Исправлено поведение в случае, когда запрос SYSTEM RESTART REPLICA или SYSTEM SYNC REPLICA не завершается. Это было обнаружено на сервере с крайне небольшим объёмом ОЗУ. #24457 (Nikita Mikhaylov).
  • Исправлена ошибка, которая могла приводить к зависанию клиента ZooKeeper в clickhouse-server. #24721 (alesapin).
  • Если соединение с ZooKeeper было потеряно и реплика была клонирована после его восстановления, ее очередь репликации могла содержать устаревшие записи. Исправлено ошибочное срабатывание assert, когда очередь репликации содержит пересекающиеся виртуальные части. Это может редко происходить, если какая‑то часть данных была утеряна. Вместо завершения работы теперь выводится сообщение об ошибке в лог. #24777 (tavplubix).
  • Исправлена потеря условия WHERE при оптимизации проталкивания выражений в плане запроса (настройка query_plan_filter_push_down = 1 теперь включена по умолчанию). Исправляет #25368. #25370 (Nikolai Kochetov).
  • Исправлена ошибка, которая могла приводить к пересекающимся частям данных после слияний с TTL: Part all_40_40_0 is covered by all_40_40_1 but should be merged into all_40_41_1. This shouldn't happen often.. #25549 (alesapin).
  • При потере соединения с ZooKeeper таблица ReplicatedMergeTree могла ожидать завершения фоновых операций перед повторной попыткой подключения. Это исправлено, теперь фоновые операции принудительно останавливаются. #25306 (tavplubix).
  • Исправлена ошибка Key expression contains comparison between inconvertible types в запросах с ARRAY JOIN в случае, если массив используется в качестве первичного ключа. Исправляет #8247. #25546 (Anton Popov).
  • Исправлены некорректные итоги в запросах WITH TOTALS и WITH FILL. Исправляет #20872. #25539 (Anton Popov).
  • Исправлена гонка данных при выполнении запроса к system.clusters одновременно с перезагрузкой конфигурации кластера. #25737 (Amos Bird).
  • Исправлена ошибка No such file or directory при перемещении таблицы типа Distributed между базами данных. Исправление для #24971. #25667 (tavplubix).
  • REPLACE PARTITION в редких случаях мог игнорироваться, если исходный раздел был пустым. Ошибка исправлена. Исправляет #24869. #25665 (tavplubix).
  • Исправлена ошибка в движке базы данных Replicated, которая в редких случаях могла приводить к пропуску поставленного в очередь DDL‑запроса одной из реплик. #24805 (tavplubix).
  • Исправлено разыменование нулевого указателя при вызове EXPLAIN AST без запроса. #25631 (Nikolai Kochetov).
  • Исправлена логика ожидания автоматического удаления пустых частей. Это могло приводить к полному заполнению пула фоновых задач и зависанию репликации. #23315 (Anton Popov).
  • Исправлено восстановление таблицы, хранящейся в виртуальной файловой системе S3 (это экспериментальная функция, пока не предназначенная для использования в продакшене). #25601 (ianton-ru).
  • Исправлено разыменование nullptr в формате Arrow при использовании Decimal256. Добавлена поддержка Decimal256 в формате Arrow. #25531 (Kruglov Pavel).
  • Исправлен лишний символ подчёркивания перед именами предварительно обработанных файлов конфигурации. #25431 (Vitaly Baranov).
  • Исправление для инструмента clickhouse-copier: устранена ошибка, приводившая к сегфолту при отсутствии sharding_key в конфигурации задачи копировщика. #25419 (Nikita Mikhaylov).
  • Исправлен столбцовый трансформер REPLACE при использовании в DDL путём корректного заключения форматированного запроса в кавычки. Это исправляет #23925. #25391 (Amos Bird).
  • Исправлена проблема, которая могла приводить к недетерминированному поведению функции quantileDeterministic и аналогичных функций. Это закрывает #20480. #25313 (alexey-milovidov).
  • Добавлена поддержка SimpleAggregateFunction(LowCardinality) для SummingMergeTree. Исправляет проблему #25134. #25300 (Nikolai Kochetov).
  • Исправлена логическая ошибка, приводившая к исключению с сообщением "Cannot sum Array/Tuple in min/maxMap". #25298 (Kruglov Pavel).
  • Исправлена ошибка Bad cast from type DB::ColumnLowCardinality to DB::ColumnVector<char8_t> в запросах, в которых аргумент LowCardinality использовался в операторе IN (эта ошибка появилась в 21.6). Исправляет #25187. #25290 (Nikolai Kochetov).
  • Исправлено некорректное поведение joinGetOrNull с не-nullable столбцами. Это исправляет #24261. #25288 (Amos Bird).
  • Исправлено некорректное поведение и отчёт UBSan при работе с большими целыми числами. В предыдущих версиях CAST(1e19 AS UInt128) возвращал ноль. #25279 (alexey-milovidov).
  • Исправлена ошибка, возникавшая при вставке подмножества столбцов в формате CSVWithNames. Исправляет #25129. #25169 (Nikita Mikhaylov).
  • Не используйте проекцию таблицы для SELECT с FINAL. Это в настоящее время не поддерживается. #25163 (Amos Bird).
  • Исправлена возможная потеря частей данных после обновления до 21.5 в случае, если в ключе партиционирования таблицы использовался UUID (использовать UUID в ключе партиционирования не рекомендуется). Исправление для #25070. #25127 (Nikolai Kochetov).
  • Исправлена ошибка, приводившая к сбою запроса с CROSS JOIN при joined_subquery_requires_alias = 0. Исправляет #24011. #25082 (Nikolai Kochetov).
  • Исправлена ошибка с константными map в функции mapContains, которая приводила к ошибке empty column was returned by function mapContains. Закрывает #25077. #25080 (Kruglov Pavel).
  • Убрана возможность создавать таблицы со столбцами, ссылающимися на самих себя, например a UInt32 ALIAS a + 1 или b UInt32 MATERIALIZED b. Исправлены #24910, #24292. #25059 (alesapin).
  • Исправлен неверный результат при использовании агрегирующей проекции с непустым ключом GROUP BY для запроса с GROUP BY по пустому ключу. #25055 (Amos Bird).
  • Исправлена сериализация разделённых вложенных сообщений в формате Protobuf. Этот PR исправляет #24647. #25000 (Vitaly Baranov).
  • Исправлена обработка настроек LIMIT/OFFSET для распределённых запросов (теперь они игнорируются на удалённых узлах). #24940 (Azat Khuzhin).
  • Исправлено возможное переполнение буфера кучи (heap-buffer-overflow) в формате Arrow. #24922 (Kruglov Pavel).
  • Исправлена возможная ошибка 'Cannot read from istream at offset 0' при чтении файла с DiskS3 (виртуальная файловая система S3 является экспериментальной функциональностью в разработке и не должна использоваться в продакшене). #24885 (Pavel Kovalenko).
  • Исправлено исключение "Missing columns" при выполнении JOIN с распределённым материализованным представлением. #24870 (Azat Khuzhin).
  • Разрешить использование значений NULL в протоколе совместимости с PostgreSQL. Закрывает #22622. #24857 (Kseniia Sumarokova).
  • Исправлена ошибка, из-за которой при ожидании завершения мутации клиенту могло выбрасываться исключение Mutation was killed, когда мутация ещё не была загружена в память. #24809 (alesapin).
  • Исправлена ошибка в десериализации состояния генератора случайных чисел, которая могла приводить к тому, что некоторые типы данных, такие как AggregateFunction(groupArraySample(N), T)), вели себя недетерминированно. #24538 (tavplubix).
  • Запрещено строить uniqXXXXStates на основе других состояний агрегации. #24523 (Raúl Marín). Затем это снова разрешено за счёт устранения первопричины связанной проблемы. (alexey-milovidov).
  • Исправлено использование кортежей в запросах вида CREATE .. AS SELECT. #24464 (Anton Popov).
  • Исправлено вычисление общего количества байтов в таблице Buffer. В текущей версии ClickHouse счётчик total_writes.bytes слишком сильно уменьшается во время сброса буфера. Это приводит к переполнению счётчика, и totalBytes начинает возвращать значение порядка 17,44 ЭБ спустя некоторое время после сброса. #24450 (DimasKovas).
  • Исправлена некорректная информация о монотонности функции toWeek. Это исправление закрывает #24422. Этот баг появился в https://github.com/ClickHouse/ClickHouse/pull/5212 и позже проявился из‑за более продвинутого механизма отсечения партиций. #24446 (Amos Bird).
  • Когда аутентификация пользователей осуществляется через LDAP. Исправлена потенциальная взаимоблокировка, которая могла возникать при (пере)сопоставлении ролей LDAP, когда группа LDAP сопоставлялась с несуществующей локальной ролью. #24431 (Denis Glazachev).
  • В сообщении "multipart/form-data" CRLF, предшествующий границе, следует считать частью этой границы. Исправляет #23905. #24399 (Ivan).
  • Исправлена операция DROP PARTITION при пересечении с фиктивными частями. В редких случаях могли существовать части с версией мутации, превышающей текущий номер блока. #24321 (Amos Bird).
  • Исправлена ошибка переноса материализованного представления из базы данных Ordinary в Atomic (запрос RENAME TABLE). Теперь внутренняя таблица переносится в новую базу данных вместе с материализованным представлением. Исправляет #23926. #24309 (tavplubix).
  • Разрешены пустые HTTP-заголовки. Исправляет #23901. #24285 (Ivan).
  • Правильная обработка мутаций (ALTER UPDATE/DELETE) в таблицах Memory. Закрывает #24274. #24275 (flynn).
  • Сделать свойство LowCardinality для столбца в результате JOIN таким же, как у входного столбца, закрыть #23351 и #20315. #24061 (Vladimir).
  • Исправление для таблиц Kafka. Устранён баг в поведении при аварийном переключении: движок с Engine = Kafka не мог запустить потребление, если у того же потребителя ранее было пустое назначение разделов. Закрывает #21118. #21267 (filimonov).

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

  • Добавлены сборки darwin-aarch64 (Mac M1 / Apple Silicon) в CI #25560 (Ivan) и добавлены ссылки в документацию и на сайт (alexey-milovidov).
  • Добавлено кроссплатформенное встраивание бинарных ресурсов в исполняемые файлы. Работает на Illumos. #25146 (bnaecker).
  • Добавлены параметры, связанные с JOIN, в стресс‑тесты для улучшения фаззинга. #25200 (Vladimir).
  • Включена сборка с модулем s3 в OS X #25217. #25218 (kevin wan).
  • Добавлены интеграционные тесты для JDBC bridge. #25047 (Zhichun Wu).
  • Конфигурация интеграционных тестов теперь по‑особому обрабатывает словари. Удалена оставшаяся ручная настройка словарей. #24728 (Ilya Yatsishin).
  • Добавлены тесты libfuzzer для класса YAMLParser. #24480 (BoloniniD).
  • Для запуска интеграционных тестов теперь используется Ubuntu 20.04, версия docker-compose, используемая для интеграционных тестов, обновлена до 1.28.2. Переменные окружения теперь влияют на работу docker-compose. Переработан тест test_dictionaries_all_layouts_separate_sources, чтобы разрешить параллельный запуск. #20393 (Ilya Yatsishin).
  • Исправлена ошибка TOCTOU в установочном скрипте. #25277 (alexey-milovidov).

Релиз ClickHouse 21.6, 2021-06-05

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

  • uniqState / uniqHLL12State / uniqCombinedState / uniqCombined64State создают несовместимые состояния с типом UUID. #33607.

Примечания по обновлению

  • Библиотека сжатия zstd обновлена до v1.5.0. При репликации вы можете получать сообщения вида «checksum does not match». Эти сообщения ожидаемы из‑за обновления алгоритма сжатия, и вы можете их игнорировать. Они носят информационный характер и не указывают ни на какие виды нежелательного поведения.
  • Настройка compile_expressions включена по умолчанию. Хотя она была тщательно протестирована в широком спектре сценариев, если вы обнаружите какое‑либо нежелательное поведение на ваших серверах, вы можете попробовать отключить эту настройку.
  • Значения типа UUID нельзя сравнивать с целыми числами. Например, вместо uuid != 0 указывайте uuid != '00000000-0000-0000-0000-000000000000'.

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

  • Добавлен оператор приведения типа, аналогичный оператору в Postgres (::). Например: [1, 2]::Array(UInt8), 0.1::Decimal(4, 4), number::UInt16. #23871 (Anton Popov).
  • Подготовить поддержку больших целых чисел к использованию в production. Добавить поддержку типа данных UInt128. Исправить известные проблемы с типом данных Decimal256. Добавить поддержку больших целых чисел в словарях. Добавить поддержку функций gcd/lcm для больших целых чисел. Добавить поддержку больших целых чисел в функциях поиска по массивам и условных функциях. Добавить поддержку LowCardinality(UUID). Добавить поддержку больших целых чисел в табличной функции generateRandom и в clickhouse-obfuscator. Исправить ошибку при возврате UUID из скалярных подзапросов. Это исправляет #7834. Это исправляет #23936. Это исправляет #4176. Это исправляет #24018. Обратное несовместимое изменение: значения типа UUID нельзя сравнивать с целым числом. Например, вместо uuid != 0 пишите uuid != '00000000-0000-0000-0000-000000000000'. #23631 (alexey-milovidov).
  • Реализована поддержка типа данных Array для вставки и выборки данных в форматах Arrow, Parquet и ORC. #21770 (taylor12805).
  • Реализованы комментарии для таблиц. Закрывает #23225. #23548 (flynn).
  • Добавлена поддержка создания словарей с помощью DDL-запросов в clickhouse-local. Закрывает #22354. Добавлена поддержка DETACH DICTIONARY PERMANENTLY. Добавлена поддержка EXCHANGE DICTIONARIES для движка базы данных Atomic. Добавлена поддержка перемещения словарей между базами данных с помощью RENAME DICTIONARY. #23436 (Maksim Kita).
  • Добавлена агрегатная функция uniqTheta для поддержки Theta Sketch в ClickHouse. #23894. #22609 (Ping Yu).
  • Добавлена функция splitByRegexp. #24077 (abel-cheng).
  • Добавлена функция arrayProduct, которая принимает массив в качестве аргумента и возвращает произведение всех элементов массива. Закрывает #21613. #23782 (Maksim Kita).
  • Добавлен столбец thread_name в system.stack_trace. Тем самым закрыта задача #23256. #24124 (abel-cheng).
  • Если insert_null_as_default = 1, в запросах INSERT ... SELECT и INSERT ... SELECT ... UNION ALL ... вместо NULL вставляются значения по умолчанию. Закрывает #22832. #23524 (Kseniia Sumarokova).
  • Добавлена поддержка отображения прогресса в clickhouse-local с помощью опции --progress. #23196 (Egor Savin).
  • Добавлена поддержка HTTP-сжатия (определяемого HTTP-заголовком Content-Encoding) в источнике словаря http. Это исправляет #8912. #23946 (FArthur-cmd).
  • Добавлены SYSTEM QUERY RELOAD MODEL, SYSTEM QUERY RELOAD MODELS. Закрыта задача #18722. #23182 (Maksim Kita).
  • Добавлена настройка json (булевый параметр, по умолчанию 0) для запроса EXPLAIN PLAN. При включении вывод запроса будет одной JSON-строкой. Рекомендуется использовать формат TSVRaw, чтобы избежать излишнего экранирования. #23082 (Nikolai Kochetov).
  • Добавлена настройка indexes (логическая, по умолчанию отключена) для запроса EXPLAIN PIPELINE. При включении показывает используемые индексы, количество отфильтрованных частей и гранул для каждого применённого индекса. Поддерживается для таблиц семейства MergeTree*. #22352 (Nikolai Kochetov).
  • LDAP: реализовано определение DN пользователя для использования при сопоставлении групп Active Directory с ролями ClickHouse. #22228 (Denis Glazachev).
  • Новая агрегатная функция deltaSumTimestamp для суммирования разницы между последовательными строками с сохранением порядка при слиянии за счёт хранения временных меток. #21888 (Russ Frank).
  • Добавлен менее безопасный IMDS-провайдер учетных данных для S3, который корректно работает в Docker. #21852 (Vladimir Chebotarev).
  • Добавить обратно функцию indexHint. Это для #21238. Это отменяет изменения из #9542. Это исправляет #9540. #21304 (Amos Bird).

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

  • Добавлена поддержка проекций (PROJECTION) для таблиц MergeTree*. #20202 (Amos Bird).

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

  • Включена настройка compile_expressions по умолчанию. Когда эта настройка включена, комбинации простых функций и операторов во время выполнения компилируются в нативный код с помощью LLVM. #8482 (Maksim Kita, alexey-milovidov). Примечание: если у вас возникают проблемы, отключите эту опцию.
  • Обновлена библиотека re2. Улучшена производительность сопоставления с регулярными выражениями. Также этот PR добавляет совместимость с gcc-11. #24196 (Raúl Marín).
  • Формат ввода ORC теперь читает данные по stripe вместо чтения всей таблицы в память за один раз, что экономит память при очень большом размере файла. #23102 (Chao Ma).
  • Слияние агрегатных функций sum, count и avg в запросе в одну агрегатную функцию. Оптимизация управляется настройкой optimize_fuse_sum_count_avg. Это реализовано с помощью новой агрегатной функции sumCount. Эта функция возвращает кортеж из двух полей: sum и count. #21337 (hexiaoting).
  • Обновление zstd до v1.5.0. Производительность сжатия улучшена на несколько процентов. #24135 (Raúl Marín). Примечание: вы можете получать сообщения о том, что "checksum does not match" при репликации. Эти сообщения ожидаемы из-за обновления алгоритма сжатия, и их можно игнорировать.
  • Улучшена производительность таблиц Buffer: больше не берётся блокировка для total_bytes/total_rows для движка Buffer. #24066 (Azat Khuzhin).
  • Возвращена поддержка предварительного выделения памяти (preallocate) для словарей hashed/sparse_hashed. #23979 (Azat Khuzhin).
  • Включён async_socket_for_remote по умолчанию (меньшее количество потоков при выполнении запросов к Distributed-таблицам с большим fanout). #23683 (Nikolai Kochetov).

Улучшение

  • Добавлен виртуальный столбец _partition_value в семейство таблиц MergeTree. Он может использоваться для детерминированной фильтрации партиций. Это необходимо для реализации механизма сопоставления партиций при мутациях. #23673 (Amos Bird).
  • Добавлен параметр region для S3‑хранилища и диска. #23846 (Vladimir Chebotarev).
  • Добавлена возможность настраивать разные уровни логирования для разных каналов. Закрывает #19569. #23857 (filimonov).
  • Сохраняется часовой пояс по умолчанию в операциях с DateTime, если он не был указан явно. Например, если вы добавите одну секунду к значению типа DateTime без часового пояса, оно останется DateTime без часового пояса. В предыдущих версиях значение часового пояса по умолчанию явно подставлялось в возвращаемый тип данных, и тип становился DateTime('something'). Это закрывает #4854. #23392 (alexey-milovidov).
  • Добавлена возможность указывать пустую строку вместо имени базы данных для хранилища MySQL. Для запросов будет использоваться база данных по умолчанию. В предыдущих версиях это работало только для запросов SELECT; теперь добавлена поддержка и для INSERT. Это закрывает #19281. Это может быть полезно при работе с Sphinx или другими внешними базами данных, совместимыми с MySQL. #23319 (alexey-milovidov).
  • Исправлен quantile(s)TDigest. Добавлена специальная обработка единичных центроидов в соответствии с tdunning/t-digest 3.2+. Также была исправлена ошибка с чрезмерной компрессией центроидов в реализации более ранней версии алгоритма. #23314 (Vladimir Chebotarev).
  • Функция now64 теперь поддерживает необязательный аргумент часового пояса. #24091 (Vasily Nemkov).
  • Исправлена ситуация, когда индикатор прогресса при работе в интерактивном режиме clickhouse-client, появляясь посреди данных, мог перезаписывать часть уже выведенных на экран данных в терминале. Это закрывает #19283. #23050 (alexey-milovidov).
  • Исправлен сбой при ошибке выделения памяти в simdjson. https://github.com/simdjson/simdjson/pull/1567. Помечено как улучшение, поскольку это крайне редкая ошибка. #24147 (Amos Bird).
  • Не выгружать словари до остановки хранилища (это позволит избежать возможных ошибок external dictionary 'DICT' not found при остановке сервера во время финального сброса данных движка Buffer). #24068 (Azat Khuzhin).
  • Сбрасывать таблицы типа Buffer перед их остановкой (в рамках одной базы данных), чтобы избежать отбрасывания блоков, когда базовая таблица уже отсоединена (и появления ошибки Destination table default.a_data_01870 doesn't exist. Block of data is discarded в журнале). #24067 (Azat Khuzhin).
  • Теперь при prefer_column_name_to_alias = 1 также будут предпочитаться имена столбцов для group by, having и order by. Это исправляет #23882. #24022 (Amos Bird).
  • Добавлена поддержка ORDER BY WITH FILL для DateTime64. #24016 (kevin wan).
  • Включить возможность использования DateTime64 в качестве столбца версии в ReplacingMergeTree. #23992 (kevin wan).
  • Записывать в журнал сведения об имени ОС, версии ядра и архитектуре CPU при запуске сервера. #23988 (Azat Khuzhin).
  • Добавлена поддержка указания схемы таблицы для источника словаря postgresql. Закрывает #23958. #23980 (Kseniia Sumarokova).
  • Добавлены подсказки для имён элементов Enum (предлагаются варианты имён в случае опечаток). Закрывает #17112. #23919 (flynn).
  • Измеряйте долю найденных значений (процент ключей, для которых значение было найдено) для словарей (см. found_rate в system.dictionaries). #23916 (Azat Khuzhin).
  • Разрешить добавление отдельных настроек очереди через настройку таблицы rabbitmq_queue_settings_list. (Закрывает #23737 и #23918). Разрешить пользователю управлять всей конфигурацией RabbitMQ: если настройка таблицы rabbitmq_queue_consume установлена в 1, движок таблицы RabbitMQ будет подключаться только к указанной очереди и не будет выполнять никакую настройку на стороне потребителя RabbitMQ, такую как объявление обменников, очередей и привязок. (Закрывает #21757). Добавить корректную очистку при удалении таблицы RabbitMQ — удалять очереди, которые были объявлены таблицей, и все привязанные обменники, если они были созданы таблицей. #23887 (Kseniia Sumarokova).
  • Добавлены broken_data_files/broken_data_compressed_bytes в system.distribution_queue. Добавлена метрика для числа файлов асинхронной вставки в таблицы типа Distributed, помеченных как повреждённые (BrokenDistributedFilesToInsert). #23885 (Azat Khuzhin).
  • Выполнение запроса к system.tables больше не требует обращения к ZooKeeper. #23793 (Fuwang Hu).
  • Теперь параметр lock_acquire_timeout_for_background_operations учитывается для запросов OPTIMIZE. #23623 (Azat Khuzhin).
  • Возможность изменять настройки диска S3 во время работы с помощью новой SQL-команды SYSTEM RESTART DISK. #23429 (Pavel Kovalenko).
  • Если пользователь допустил ошибочную конфигурацию, по ошибке установив max_distributed_connections в значение ноль, каждый запрос к таблице Distributed будет приводить к исключению с сообщением, содержащим "logical error". Но на самом деле это ожидаемое поведение, а не логическая ошибка, так что текст сообщения об исключении был немного некорректным. Это также запускало проверки в нашей CI-среде, призванные гарантировать отсутствие логических ошибок. Вместо этого мы будем рассматривать max_distributed_connections, ошибочно настроенный в ноль, как минимально возможное значение (один). #23348 (Azat Khuzhin).
  • По умолчанию параметр min_bytes_to_use_mmap_io отключён. #23322 (Azat Khuzhin).
  • Реализована поддержка NULL-значений (nullability) для LowCardinality при использовании join_use_nulls, закрыт #15101. #23237 (vdimir).
  • Добавлена возможность восстанавливать части таблиц MergeTree в каталог detached для диска S3. #23112 (Pavel Kovalenko).
  • Повторные попытки при обрыве HTTP-соединения с S3. #22988 (Vladimir Chebotarev).
  • Добавлены настройки external_storage_max_read_rows и external_storage_max_read_rows для движка таблиц MySQL, источника словаря и выборки небольших объемов данных в MaterializeMySQL. #22697 (TCeason).
  • MaterializeMySQL (экспериментальная функция): ранее MySQL 5.7.9 не поддерживался из‑за несовместимости SQL. Теперь проверка параметров MySQL делегирована MaterializeMySQL. #23413 (TCeason).
  • Добавлена поддержка чтения подстолбцов для распределённых таблиц. #24472 (Anton Popov).
  • Исправлено использование кортежей в запросах CREATE .. AS SELECT. #24464 (Anton Popov).
  • Поддержка формата Parquet в таблицах Kafka. #23412 (Chao Ma).

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

  • Используйте старую версию функции вычисления остатка (modulo) при её использовании в ключе партиционирования и первичном ключе. Закрывает #23508. #24157 (Kseniia Sumarokova). Это было причиной обратной несовместимости в предыдущих релизах.
  • Исправлено поведение, при котором запрос SYSTEM RESTART REPLICA или SYSTEM SYNC REPLICA обрабатывался бесконечно долго и не завершался. Это наблюдалось на сервере с крайне малым объёмом оперативной памяти. #24457 (Nikita Mikhaylov).
  • Исправлена некорректная монотонность функции toWeek. Это исправляет #24422. Эта ошибка была допущена в #5212 и позднее проявилась из‑за более интеллектуального механизма отсечения партиций. #24446 (Amos Bird).
  • Исправлена ошибка удаления раздела с пересекающимися фиктивными частями. В редких случаях могли появляться части с версией мутации больше текущего номера блока. #24321 (Amos Bird).
  • Исправлена ошибка при перемещении материализованного представления из базы данных Ordinary в Atomic с помощью запроса RENAME TABLE. Теперь внутренняя таблица также перемещается в новую базу данных вместе с материализованным представлением. Исправлено #23926. #24309 (tavplubix).
  • Разрешены пустые HTTP-заголовки в клиентских запросах. Исправляет #23901. #24285 (Ivan).
  • Установите max_threads = 1, чтобы исправить ошибку мутаций таблиц Memory. Закрывает #24274. #24275 (flynn).
  • Исправлена опечатка в реализации таблиц Memory, эта ошибка появилась в #15127. Закрывает #24192. #24193 (张中南).
  • Исправлено некорректное завершение работы сервера из‑за недоступности HDFS во время выполнения запроса. Закрывает #24117. #24191 (Kseniia Sumarokova).
  • Исправлен сбой при обновлении столбца Nested с константным условием. #24183 (hexiaoting).
  • Исправлено состояние гонки, которое могло возникать в RBAC при большой нагрузке. Этот PR исправляет #24090, #24134, #24176 (Vitaly Baranov).
  • Исправлена редкая ошибка, из‑за которой могла появляться частично инициализированная таблица, способная обрабатывать запросы на запись (insert/alter/и т. д.). Теперь такие таблицы будут в режиме только для чтения. #24122 (alesapin).
  • Исправлена проблема, из-за которой EXPLAIN PIPELINE с SELECT xxx FINAL показывал неверный конвейер. (hexiaoting).
  • Исправлено использование константного (const) значения типа DateTime вместо столбца типа DateTime64 в WHERE. #24100 (Vasily Nemkov).
  • Исправлен сбой в операции merge JOIN, закрывает #24010. #24013 (vdimir).
  • Некоторые запросы ALTER PARTITION могли вызывать ошибки Part A intersects previous part B и Unexpected merged part C intersecting drop range D в очереди репликации. Проблема исправлена. Исправляет #23296. #23997 (tavplubix).
  • Исправлена ошибка SIGSEGV при использовании внешнего GROUP BY и строки переполнения (т. е. для запросов вида SELECT FROM GROUP BY WITH TOTALS SETTINGS max_bytes_before_external_group_by>0, max_rows_to_group_by>0, group_by_overflow_mode='any', totals_mode='before_having'). #23962 (Azat Khuzhin).
  • Исправлен учет метрик ключей словаря CACHE при наличии дубликатов в источнике (что приводило к переполнению DictCacheKeysRequestedMiss). #23929 (Azat Khuzhin).
  • Исправлена реализация пула соединений движка PostgreSQL. Закрывает #23897. #23909 (Kseniia Sumarokova).
  • Исправлено поведение настройки distributed_group_by_no_merge = 2 с GROUP BY и агрегатной функцией, заключённой в обычную функцию (было сломано в #23546). Выбрасывается исключение при попытке использовать distributed_group_by_no_merge = 2 с оконными функциями. Отключён optimize_distributed_group_by_sharding_key для запросов с оконными функциями. #23906 (Azat Khuzhin).
  • Исправление для табличной функции s3: улучшена обработка HTTP‑ошибок. Тела ответов HTTP‑ошибок раньше игнорировались. #23844 (Vladimir Chebotarev).
  • Исправление для табличной функции s3: улучшена обработка URI. Устранена проблема совместимости с URL-адресами, содержащими символ +: данные с такими ключами ранее не удавалось прочитать. #23822 (Vladimir Chebotarev).
  • Исправлена ошибка Can't initialize pipeline with empty pipe для запросов с GLOBAL IN/JOIN и use_hedged_requests. Это исправление закрывает #23431. #23805 (Nikolai Kochetov).
  • Исправлена проблема: CLEAR COLUMN не работал, когда на него ссылалось материализованное представление. Закрыта #23764. #23781 (flynn).
  • Исправлена ошибка использования памяти после её освобождения (heap use-after-free) при чтении из HDFS при использовании формата Values. #23761 (Kseniia Sumarokova).
  • Избежать возможной ошибки «Cannot schedule a task» (в случае возникновения исключения) при выполнении INSERT в таблицу Distributed. #23744 (Azat Khuzhin).
  • Исправлена ошибка при восстановлении отставшей реплики ReplicatedMergeTree. Некоторые обновления метаданных могли быть проигнорированы такой репликой, если запрос ALTER выполнялся во время её простоя. #23742 (tavplubix).
  • Исправлена ошибка в работе Join с WITH TOTALS, закрыт #17718. #23549 (vdimir).
  • Исправлена потенциальная ошибка Block structure mismatch для запросов с UNION, которая могла возникнуть после оптимизации filter-pushdown. Исправляет #23029. #23359 (Nikolai Kochetov).
  • Добавлено приведение типов при включённой настройке optimize_skip_unused_shards_rewrite_in. Исправляет отчёт MSan. #23219 (Azat Khuzhin).
  • Добавлена недостающая проверка при обновлении вложенных подстолбцов, закрыта задача: #22353. #22503 (hexiaoting).

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

  • Добавлена поддержка сборки на Illumos. #24144. Добавлена поддержка сборки на операционных системах, основанных на Solaris. #23746 (bnaecker).
  • Добавлены дополнительные бенчмарки для хеш-таблиц, включая Swiss Table от Google (которая оказалась медленнее хеш-таблицы ClickHouse в нашем конкретном сценарии использования). #24111 (Maksim Kita).
  • Обновлена librdkafka с 1.6.0-RC3 до 1.6.1. #23874 (filimonov).
  • Всегда явно включён параметр asynchronous-unwind-tables. Это может исправить профилировщик запросов на AArch64. #23602 (alexey-milovidov).
  • Устранена возможная зависимость сборки от локали и порядка в файловой системе. Это позволяет получать воспроизводимые сборки. #23600 (alexey-milovidov).
  • Удалён источник недетерминизма при сборке. Теперь сборки, выполненные в разное время, будут давать байтово идентичные бинарные файлы. Частично решает #22113. #23559 (alexey-milovidov).
  • Добавлен простой инструмент для бенчмаркинга (Zoo)Keeper. #23038 (alesapin).

Релиз ClickHouse 21.5, 2021-05-20

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

  • Изменено сравнение целых чисел и чисел с плавающей запятой, когда целое число не может быть точно представлено в типе с плавающей запятой. В новой версии операция сравнения будет возвращать false, поскольку при этом возникает ошибка округления. Пример: 9223372036854775808.0 != 9223372036854775808, потому что число 9223372036854775808 не может быть точно представлено в виде числа с плавающей запятой (и 9223372036854775808.0 округляется до 9223372036854776000.0). Но в предыдущей версии сравнение возвращало, что числа равны, потому что при преобразовании числа с плавающей запятой 9223372036854776000.0 обратно в UInt64 получается 9223372036854775808. Для справки: язык программирования Python также считает эти числа равными. Но это поведение зависело от модели CPU (разные результаты на AMD64 и AArch64 для некоторых чисел вне диапазона), поэтому мы сделали сравнение более точным. Целые и вещественные числа будут считаться равными только если целое число может быть представлено в типе с плавающей запятой точно. #22595 (alexey-milovidov).
  • Удалена поддержка argMin и argMax для единственного аргумента типа Tuple. Код не был безопасен с точки зрения управления памятью. Возможность была добавлена по ошибке и сбивала людей с толку. Эти функции могут быть повторно введены под другими именами позднее. Это исправляет #22384 и откатывает #17359. #23393 (alexey-milovidov).

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

  • Добавлены функции dictGetChildren(dictionary, key), dictGetDescendants(dictionary, key, level). Функция dictGetChildren возвращает всех прямых потомков в виде массива индексов. Это обратное преобразование для dictGetHierarchy. Функция dictGetDescendants возвращает всех потомков так, как если бы dictGetChildren была применена рекурсивно level раз. Нулевое значение параметра level эквивалентно бесконечности. Улучшена производительность функций dictGetHierarchy, dictIsIn. Закрывает #14656. #22096 (Maksim Kita).
  • Добавлена функция dictGetOrNull. Работает как dictGet, но возвращает Null, если ключ не найден в словаре. Закрывает #22375. #22413 (Maksim Kita).
  • Добавлена табличная функция s3Cluster, которая позволяет обрабатывать файлы из s3 параллельно на каждом узле заданного кластера. #22012 (Nikita Mikhaylov).
  • Добавлена поддержка реплик и шардов в движке таблиц / табличной функции MySQL/PostgreSQL. Вы можете написать SELECT * FROM mysql('host{1,2}-{1|2}', ...). Закрывает #20969. #22217 (Kseniia Sumarokova).
  • Добавлен запрос ALTER TABLE ... FETCH PART .... Аналогичен FETCH PARTITION, но загружает только одну часть. #22706 (turbo jason).
  • Добавлена настройка max_distributed_depth, которая ограничивает глубину рекурсивных запросов к таблицам Distributed. Закрывает #20229. #21942 (flynn).

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

  • Повышена производительность intDiv за счёт динамической диспетчеризации для AVX2. Это закрывает #22314. #23000 (alexey-milovidov).
  • Повышена производительность чтения из входного формата ArrowStream для источников, отличных от локального файла (например, URL). #22673 (nvartolomei).
  • Отключено сжатие по умолчанию при работе с localhost (через clickhouse-client или между серверами при распределённых запросах) по нативному протоколу. Это может улучшить производительность некоторых операций импорта/экспорта. Это закрывает #22234. #22237 (alexey-milovidov).
  • Исключены значения, не принадлежащие шарду, из правой части условия IN для распределённых запросов (при включённом optimize_skip_unused_shards_rewrite_in, он включён по умолчанию, так как по-прежнему требует optimize_skip_unused_shards). #21511 (Azat Khuzhin).
  • Повышена производительность чтения подмножества столбцов с движком таблиц семейства File и столбцовыми форматами, такими как Parquet, Arrow или ORC. Это закрывает #issue:20129. #21302 (keenwolf).
  • Разрешено переносить больше условий в PREWHERE, как это было до версии 21.1 (корректировка внутренних эвристик). Недостаточное количество перенесённых условий могло приводить к ухудшению производительности. #23397 (Anton Popov).
  • Повышена производительность ODBC-подключений и исправлены все накопившиеся в бэклоге проблемы. Вместо библиотеки Poco::ODBC используется библиотека nanodbc. Закрывает #9678. Добавлена поддержка DateTime64 и Decimal* для движка таблиц ODBC. Закрывает #21961. Исправлена проблема с обрезанием текста на кириллице. Закрывает #16246. Добавлены пулы подключений для ODBC bridge. #21972 (Kseniia Sumarokova).

Улучшения

  • По умолчанию значение max_uri_size (максимального размера URL в HTTP-интерфейсе) увеличено до 1 МиБ. Это закрывает задачу #21197. #22997 (alexey-milovidov).
  • Установите background_fetches_pool_size в значение 8, что лучше подходит для продакшн-сред с частыми небольшими вставками данных или медленным кластером ZooKeeper. #22945 (alexey-milovidov).
  • В FlatDictionary добавлены параметры initial_array_size, max_array_size. #22521 (Maksim Kita).
  • Добавлена новая настройка non_replicated_deduplication_window для дедупликации вставок в нереплицируемые таблицы MergeTree. #22514 (alesapin).
  • Обновлены пути к конфигам модели CatBoost при перезагрузке конфигурации. #22434 (Kruglov Pavel).
  • Добавлена поддержка типа Decimal256 в словарях. Decimal256 — экспериментальная возможность. Закрывает #20979. #22960 (Maksim Kita).
  • По умолчанию включён async_socket_for_remote (для распределённых запросов требуется меньше потоков ОС). #23683 (Nikolai Kochetov).
  • Исправлен quantile(s)TDigest. Добавлена специальная обработка одиночных центроидов в соответствии с tdunning/t-digest 3.2+. Также исправлена ошибка с чрезмерным сжатием центроидов в реализации более ранней версии алгоритма. #23314 (Vladimir Chebotarev).
  • Имя функции unhex сделано регистронезависимым для совместимости с MySQL. #23229 (alexey-milovidov).
  • Реализованы функции arrayHasAny, arrayHasAll, has, indexOf, countEqual для общего случая, когда типы элементов массива различаются. В предыдущих версиях функции arrayHasAny, arrayHasAll возвращали значение false, а has, indexOf, countEqual выбрасывали исключение. Также добавлена поддержка типов Decimal и больших целых чисел в функциях has и аналогичных им. Это закрывает #20272. #23044 (alexey-milovidov).
  • Увеличен лимит на максимальное число совпадений в результате функции extractAllGroupsHorizontal. #23036 (Vasily Nemkov).
  • Не выполняйте optimize_skip_unused_shards для кластера с одним узлом. #22999 (Azat Khuzhin).
  • Добавлена поддержка запуска clickhouse-keeper (экспериментальной замены ZooKeeper, совместимой по интерфейсу) с SSL. Параметр конфигурации keeper_server.tcp_port_secure можно использовать для безопасного взаимодействия между клиентом и keeper-сервером. Параметр keeper_server.raft_configuration.secure можно использовать для включения внутреннего защищённого взаимодействия между узлами. #22992 (alesapin).
  • Добавлена возможность сбрасывать буфер только в фоновом режиме для таблиц Buffer. #22986 (Azat Khuzhin).
  • При выполнении выборки из таблицы MergeTree с NULL в условии WHERE в редких случаях генерировалось исключение. Это закрывает #20019. #22978 (alexey-milovidov).
  • Исправлена обработка ошибок в Poco HTTP Client для AWS. #22973 (kreuzerkrieg).
  • Теперь учитывается max_part_removal_threads для ReplicatedMergeTree. #22971 (Azat Khuzhin).
  • Исправлен неочевидный граничный случай в настройках MergeTree при inactive_parts_to_throw_insert = 0 совместно с inactive_parts_to_delay_insert > 0. #22947 (Azat Khuzhin).
  • dateDiff теперь работает с аргументами DateTime64 (даже для значений, выходящих за пределы диапазона DateTime) #22931 (Vasily Nemkov).
  • MaterializeMySQL (экспериментальная функция): добавлена возможность реплицировать базы данных MySQL, содержащие представления, не приводя к ошибкам. Это достигается за счёт игнорирования представлений. #22760 (Christian).
  • Разрешено использование строковых политик RBAC через протокол PostgreSQL. Закрывает #22658. Протокол PostgreSQL по умолчанию включён в конфигурации. #22755 (Kseniia Sumarokova).
  • Добавлена метрика для отслеживания того, сколько времени уходит на ожидание блокировки буферного слоя. #22725 (Azat Khuzhin).
  • Разрешено использование CTE в определениях VIEW. Это закрывает #22491. #22657 (Amos Bird).
  • Очищать оставшуюся часть экрана и показывать курсор в clickhouse-client, если предыдущая программа оставила в терминале мусор. Исправляет #16518. #22634 (alexey-milovidov).
  • Функция round теперь ведет себя одинаково на платформах, отличных от x86_64. Используется округление половин до ближайшего четного (банковское округление). #22582 (alexey-milovidov).
  • Корректно проверять структуру блоков данных, отправляемых распределёнными таблицами. #22325 (Azat Khuzhin).
  • Добавлена возможность публиковать ошибки Kafka в виртуальный столбец движка Kafka, поведение которой контролируется настройкой kafka_handle_error_mode. #21850 (fastio).
  • Добавлены псевдонимы simpleJSONExtract/simpleJSONHas для visitParam/visitParamExtract{UInt, Int, Bool, Float, Raw, String}. Исправляет #21383. #21519 (fastio).
  • Добавлен clickhouse-library-bridge для источника словаря library. Закрывает #9502. #21509 (Kseniia Sumarokova).
  • Запретить удаление столбца, если он используется в материализованном представлении. Закрывает #21164. #21303 (flynn).
  • Добавлена поддержка динамических межсерверных учетных данных (их ротация без простоя). #14113 (johnskopis).
  • Добавлена поддержка хранения в Kafka с сообщениями в форматах Arrow и ArrowStream. #23415 (Chao Ma).
  • Исправлена отсутствующая точка с запятой в сообщении об исключении. Пользователю может быть неприятно читать это сообщение. #23208 (alexey-milovidov).
  • Исправлены пропущенные пробелы в некоторых сообщениях об исключениях, связанных с типом LowCardinality. #23207 (alexey-milovidov).
  • Ранее некоторые значения в ячейках таблиц в формате Markdown выравнивались по центру. Теперь этого нет. #23096 (alexey-milovidov).
  • Удалены несущественные детали из подсказок в clickhouse-client. Закрывает #22158. #23040 (alexey-milovidov).
  • Исправлен расчёт поля bytes_allocated в system.dictionaries для sparse_hashed словарей. #22867 (Azat Khuzhin).
  • Исправлен приблизительный подсчёт общего числа строк с учётом обратного чтения из MergeTree. #22726 (Azat Khuzhin).
  • Исправлен случай, когда можно было сконфигурировать словарь с источником ClickHouse, ссылающимся на себя, что приводило к бесконечному циклу. Закрывает #14314. #22479 (Maksim Kita).

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

  • Несколько исправлений для подстрахованных (hedged) запросов. Исправлена ошибка Can't initialize pipeline with empty pipe для запросов с GLOBAL IN/JOIN, когда включена настройка use_hedged_requests. Исправляет #23431. #23805 (Nikolai Kochetov). Исправлена гонка состояний в подстрахованных подключениях, приводившая к сбою. Исправляет #22161. #22443 (Kruglov Pavel). Исправлен возможный сбой в случае, если от удалённого запроса был получен unknown packet (при включённом async_socket_for_remote). Исправляет #21167. #23309 (Nikolai Kochetov).
  • Исправлена ошибка, из-за которой при отключении настройки input_format_with_names_use_header все входные данные в формате CSVWithNames отбрасывались. Это исправляет #22406. #23202 (Nikita Mikhaylov).
  • Исправлена проблема с тайм-аутом соединения через удалённый JDBC bridge. Закрывает #9609. #23771 (Maksim Kita, alexey-milovidov).
  • Исправлена логика начальной загрузки complex_key_hashed, если указан update_field. Закрывает #23800. #23824 (Maksim Kita).
  • Исправлен сбой, возникавший при одновременном применении PREWHERE и фильтра политики строк при пустом результате выборки. #23763 (Amos Bird).
  • Исправлена возможная ошибка "Cannot schedule a task" (которая могла возникать при исключении) при выполнении INSERT в таблицу Distributed. #23744 (Azat Khuzhin).
  • Добавлено исключение на случай полностью совпадающих значений в обеих выборках в агрегатной функции mannWhitneyUTest. Это исправляет #23646. #23654 (Nikita Mikhaylov).
  • Исправлена ошибка сервера при вставке данных по HTTP, приводившая к возникновению исключения. Исправляет #23512. #23643 (Nikita Mikhaylov).
  • Исправлена неверная интерпретация некоторых выражений LIKE с последовательностями экранирования. #23610 (alexey-milovidov).
  • Исправлено зависание команды перезапуска/остановки. Закрывает #20214. #23552 (filimonov).
  • Исправлена работа сопоставителя COLUMNS для запросов SELECT с несколькими операциями JOIN. Закрывает #22736. #23501 (Maksim Kita).
  • Исправлен сбой при изменении значения по умолчанию у столбца, когда сам столбец используется как параметр ReplacingMergeTree. #23483 (hexiaoting).
  • Исправлены краевые случаи при вертикальных слияниях с ReplacingMergeTree. В редких случаях они могли приводить к сбоям слияний с исключениями вида Incomplete granules are not allowed while blocks are granules size. #23459 (Anton Popov).
  • Исправлена ошибка, из-за которой было невозможно привести пустой литерал массива к массиву с размерностью больше 1, например CAST([] AS Array(Array(String))). Закрывает #14476. #23456 (Maksim Kita).
  • Исправлена ошибка, из‑за которой агрегатная функция deltaSum возвращала некорректный результат после сброса счётчика. #23437 (Russ Frank).
  • Исправлена ошибка Cannot unlink file, возникавшая при неудачном создании таблицы ReplicatedMergeTree с многодисковой конфигурацией. Это закрывает #21755. #23433 (tavplubix).
  • Исправлена проблема генерации несовместимых константных выражений при отсечении партиций на основе виртуальных столбцов. Это исправляет https://github.com/ClickHouse/ClickHouse/pull/21401#discussion_r611888913. #23366 (Amos Bird).
  • Исправлен сбой при установке join_algorithm в значение 'auto' и выполнении JOIN с Dictionary. Закрыто #23002. #23312 (Vladimir).
  • Не ослаблять условия NOT при отсечении партиций. Это исправляет #23305 и #21539. #23310 (Amos Bird).
  • Исправлена крайне редкая гонка состояний при фоновом удалении старых блоков. Она могла приводить к тому, что блок не дедуплицировался, если он находился слишком близко к концу окна дедупликации. #23301 (tavplubix).
  • Исправлено очень редкое (распределённое) состояние гонки между созданием и удалением таблиц ReplicatedMergeTree. Оно могло вызывать исключения с сообщением node doesn't exist при попытке создать реплицированную таблицу. Исправляет #21419. #23294 (tavplubix).
  • Исправлено создание словаря с простым ключом из DDL, если первичный ключ не является первым атрибутом. Исправляет #23236. #23262 (Maksim Kita).
  • Исправлено чтение из ODBC, если в таблице много длинных имён столбцов. Закрывает #8853. #23215 (Kseniia Sumarokova).
  • MaterializeMySQL (экспериментальная возможность): исправлена ошибка Not found column при выполнении запроса к MaterializeMySQL с условием по ключевому столбцу. Исправлено #22432. #23200 (tavplubix).
  • Исправлена обработка алиасов, если подзапрос был оптимизирован до константы. Исправляет #22924. Исправляет #10401. #23191 (Maksim Kita).
  • Сервер мог не запуститься, если настройка data_type_default_nullable была включена в профиле по умолчанию; теперь это исправлено. Исправлена проблема #22573. #23185 (tavplubix).
  • Исправлен сбой при завершении работы сервера, происходивший из‑за ошибочного учета активных подключений. #23154 (Vitaly Baranov).
  • Исправлена ошибка Table .inner_id... doesn't exist при выполнении SELECT из материализованного представления после его отсоединения от базы данных Atomic и последующего повторного подключения. #23047 (tavplubix).
  • Исправлена ошибка Cannot find column in ActionsDAG result, которая могла возникать, если в подзапросе используется untuple. Исправляет #22290. #22991 (Nikolai Kochetov).
  • Исправлено использование константных столбцов типа Map со значениями, допускающими NULL. #22939 (Anton Popov).
  • исправлена функция formatDateTime() для DateTime64 и спецификатора формата "%C", а также функция toDateTime64() для больших значений и ненулевого масштаба. #22937 (Vasily Nemkov).
  • Исправлено падение при использовании mannWhitneyUTest и rankCorr с оконными функциями. Это исправляет #22728. #22876 (Nikita Mikhaylov).
  • LIVE VIEW (экспериментальная функция): исправлено возможное зависание при одновременном выполнении команд DROP/CREATE для TEMPORARY LIVE VIEW в TemporaryLiveViewCleaner, см.. #22858 (Vitaly Baranov).
  • Исправлено проталкивание HAVING в случае, когда фильтрующий столбец используется в агрегатной функции. #22763 (Anton Popov).
  • Исправлены возможные зависания запросов к ZooKeeper при возникновении исключения OOM. Исправлено #22438. #22684 (Nikolai Kochetov).
  • Исправлен механизм ожидания завершения мутаций на нескольких репликах для движков таблиц ReplicatedMergeTree. Ранее запрос mutation/alter мог завершаться до фактического выполнения мутации на других репликах. #22669 (alesapin).
  • Исправлено исключение для таблиц движка Log с вложенными типами при отсутствии столбцов в предложении SELECT. #22654 (Azat Khuzhin).
  • Исправлено бесконечное ожидание для вспомогательных запросов к AWS. #22594 (Vladimir Chebotarev).
  • Исправлена ошибка, приводившая к сбою при очень раннем закрытии соединения клиентом #22579. #22591 (nvartolomei).
  • Тип данных Map (экспериментальная возможность): исправлено неверное форматирование функции map в распределённых запросах. #22588 (foolchi).
  • Исправлена десериализация пустой строки без завершающего перевода строки в формате TSV. Это закрывает #20244. Возможный обходной путь без обновления версии: установить input_format_null_as_default в значение 0. В старых версиях оно по умолчанию было равно 0. #22527 (alexey-milovidov).
  • Исправлено некорректное приведение типа столбца LowCardinality в алгоритме Merge Join. Закрывает #22386, #22388. #22510 (Vladimir).
  • Переполнение буфера при чтении могло произойти в полнотекстовом индексе tokenbf_v1. Лишние байты не используются, но операция чтения в редких случаях могла приводить к аварийному завершению работы. Это закрывает #19233. #22421 (alexey-milovidov).
  • Не ограничивать размер HTTP-чанков. Исправляет #21907. #22322 (Ivan).
  • Исправлена ошибка, приводившая к недостаточной агрегации данных при включённом optimize_aggregation_in_order и большом количестве частей в таблице. Незначительно улучшена производительность агрегации при включённом optimize_aggregation_in_order. #21889 (Anton Popov).
  • Проверка, используется ли представление табличной функции в качестве столбца. Дополнение к #20350. #21465 (Amos Bird).
  • Исправлена ошибка "unknown column" для таблиц с движком Merge в запросах с JOIN и агрегацией. Закрыты #18368 и #22226. #21370 (Vladimir).
  • Исправлены конфликты имён в оптимизации pushdown. Это приводило к некорректной фильтрации по условию WHERE после FULL JOIN. Закрыта #20497. #20622 (Vladimir).
  • Исправлена крайне редкая ошибка, при которой вставка с кворумом (quorum insert) при quorum_parallel=1 на самом деле не является «кворумом» из‑за дедупликации. #18215 (filimonov — сообщил о проблеме, alesapin — исправил).

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

  • Запускать stateless-тесты в параллельном режиме в CI. #22300 (alesapin).
  • Упростить пакеты Debian. Это исправляет #21698. #22976 (alexey-milovidov).
  • Добавлена поддержка сборки ClickHouse на Apple M1. #21639 (changvvb).
  • Исправлена сборка ClickHouse Keeper для macOS. #22860 (alesapin).
  • Исправлены некоторые тесты на платформе AArch64. #22596 (alexey-milovidov).
  • Добавлено выравнивание функций для потенциально более высокой производительности. #21431 (Danila Kutenin).
  • Адаптированы некоторые тесты для вывода идентичных результатов на amd64 и aarch64 (qemu). Результат зависел от особенностей реализации поведения CPU. #22590 (alexey-milovidov).
  • Разрешить профилирование запросов только на x86_64. См. #15174 и #15638. Это закрывает #15638. #22580 (alexey-milovidov).
  • Разрешить сборку с внешней библиотекой xz (lzma), используя опцию CMake USE_INTERNAL_XZ_LIBRARY=OFF. #22571 (Kfir Itzhak).
  • Включить встроенный openldap на ppc64le. #22487 (Kfir Itzhak).
  • Отключить несовместимые (обычно платформозависимые) библиотеки на ppc64le. #22475 (Kfir Itzhak).
  • Добавить тест Jepsen в CI для ClickHouse Keeper. #22373 (alesapin).
  • Собирать jemalloc с поддержкой профилирования кучи (heap profiling). #22834 (nvartolomei).
  • Исключить неопределённое поведение (UB) в движках *Log при разблокировке rwlock из другого потока. #22583 (Azat Khuzhin).
  • Исправлено неопределённое поведение (UB) за счёт разблокировки rwlock TinyLog из того же потока. #22560 (Azat Khuzhin).

Релиз ClickHouse 21.4

Релиз ClickHouse 21.4.1 2021-04-12

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

  • Функция toStartOfIntervalFunction теперь выравнивает часовые интервалы по полуночи (в предыдущих версиях они выравнивались по началу UNIX-эпохи). Например, toStartOfInterval(x, INTERVAL 11 HOUR) разобьёт каждый день на три интервала: 00:00:00..10:59:59, 11:00:00..21:59:59 и 22:00:00..23:59:59. Такое поведение лучше соответствует практическим потребностям. Это закрывает #9510. #22060 (alexey-milovidov).
  • Age и Precision в конфигурациях Graphite rollup должны увеличиваться от периода хранения к периоду хранения. Теперь это проверяется, и неправильная конфигурация приводит к выбросу исключения. #21496 (Mikhail f. Shiryaev).
  • Исправлена ошибка, из-за которой cutToFirstSignificantSubdomainCustom()/firstSignificantSubdomainCustom() возвращали неверный результат для доменов трёх и более уровней, присутствующих в пользовательском списке доменов верхнего уровня. Для входных доменов, совпадающих с этими пользовательскими доменами верхнего уровня, домен третьего уровня считался первым значимым. Сейчас это исправлено. Это изменение может привести к несовместимости, если функция используется, например, в ключе шардинга. #21946 (Azat Khuzhin).
  • Столбец keys в таблице system.dictionaries был заменён на столбцы key.names и key.types. Столбцы key.names, key.types, attribute.names, attribute.types из таблицы system.dictionaries больше не требуют загрузки словаря. #21884 (Maksim Kita).
  • Теперь реплики, обрабатывающие команду ALTER TABLE ATTACH PART[ITION], сначала ищут части в своих папках detached/ перед тем, как забирать данные с других реплик. В качестве детали реализации в реплицированном логе введена новая команда ATTACH_PART. Части ищутся и сравниваются по их контрольным суммам. #18978 (Mike Kot). Примечание:
    • Запросы ATTACH PART[ITION] могут не работать во время обновления кластера.
    • Невозможно откатиться к более старой версии ClickHouse после выполнения запроса ALTER ... ATTACH в новой версии, так как старые серверы не смогут обработать запись ATTACH_PART в реплицированном логе.
  • В этой версии пустой <remote_url_allow_hosts></remote_url_allow_hosts> блокирует весь доступ к удалённым хостам, тогда как в предыдущих версиях он ничего не делал. Если вы хотите сохранить старое поведение и у вас есть пустой элемент remote_url_allow_hosts в файле конфигурации, удалите его. #20058 (Vladimir Chebotarev).

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

  • Расширен диапазон DateTime64 для поддержки дат в диапазоне от 1925 до 2283 годов. Улучшена поддержка DateTime вокруг нулевой даты (1970-01-01). #9404 (alexey-milovidov, Vasily Nemkov). Не все функции работы с датой и временем корректно работают для расширенного диапазона дат.
  • Добавлена поддержка Kerberos-аутентификации для предварительно настроенных пользователей и HTTP-запросов (GSS-SPNEGO). #14995 (Denis Glazachev).
  • Добавлена настройка prefer_column_name_to_alias для использования исходных имён столбцов вместо алиасов. Это необходимо для лучшей совместимости с распространёнными правилами задания алиасов в базах данных. Относится к #9715 и #9887. #22044 (Amos Bird).
  • Добавлены функции dictGetChildren(dictionary, key), dictGetDescendants(dictionary, key, level). Функция dictGetChildren возвращает всех дочерних элементов в виде массива индексов. Это обратное преобразование к dictGetHierarchy. Функция dictGetDescendants возвращает всех потомков, как если бы dictGetChildren была применена рекурсивно level раз. Нулевое значение level эквивалентно бесконечности. Закрывает #14656. #22096 (Maksim Kita).
  • Добавлен источник словаря executable_pool. Закрыт тикет #14528. #21321 (Maksim Kita).
  • Добавлена табличная функция dictionary. Она работает аналогично движку Dictionary. Закрывает #21560. #21910 (Maksim Kita).
  • Добавлена поддержка типа Nullable для атрибута PolygonDictionary. #21890 (Maksim Kita).
  • Функции dictGet, dictHas теперь используют имя текущей базы данных, если оно не указано для словарей, созданных с помощью DDL. Исправляет #21632. #21859 (Maksim Kita).
  • Добавлена функция dictGetOrNull. Работает как dictGet, но возвращает Null, если ключ не найден в словаре. Закрывает #22375. #22413 (Maksim Kita).
  • Реализовано асинхронное обновление в словарях ComplexKeyCache, SSDCache, SSDComplexKeyCache. Добавлена поддержка типа Nullable в словарях Cache, ComplexKeyCache, SSDCache, SSDComplexKeyCache. Добавлена поддержка получения нескольких атрибутов с помощью функций dictGet, dictGetOrDefault. Исправлена ошибка #21517. #20595 (Максим Кита).
  • Добавлена поддержка функции dictHas для RangeHashedDictionary, что исправляет #6680. #19816 (Maksim Kita).
  • Добавлена функция timezoneOf, которая возвращает имя часового пояса для типов данных DateTime или DateTime64. Это не закрывает issue #9959. Исправлены несоответствия в названиях функций: добавлены псевдонимы timezone, timeZone, toTimezone, toTimeZone, timezoneOf и timeZoneOf. #22001 (alexey-milovidov).
  • Добавлено новое необязательное предложение GRANTEES для команд CREATE/ALTER USER. Оно указывает пользователей или роли, которым разрешено получать привилегии от этого пользователя при условии, что этому пользователю также выданы все необходимые права с опцией GRANT (grant option). По умолчанию используется GRANTEES ANY, что означает, что пользователь с опцией GRANT может выдавать права кому угодно. Синтаксис: CREATE USER ... GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]. #21641 (Vitaly Baranov).
  • Добавлен новый столбец slowdowns_count в system.clusters. При использовании запросов с подстраховкой (hedged requests) он показывает, сколько раз произошло переключение на другую реплику из‑за медленного ответа текущей реплики. Также теперь отображается фактическое значение errors_count в system.clusters. #21480 (Kruglov Pavel).
  • Добавлен виртуальный столбец _partition_id для движков семейства MergeTree*. Добавлена возможность отсекать партиции по _partition_id. Добавлена функция partitionID() для вычисления строкового идентификатора партиции. #21401 (Amos Bird).
  • Добавлена функция isIPAddressInRange для проверки, входит ли IPv4- или IPv6-адрес в заданный сетевой префикс CIDR. #21329 (PHO).
  • Добавлена новая SQL-команда ALTER TABLE 'table_name' UNFREEZE [PARTITION 'part_expr'] WITH NAME 'backup_name'. Эта команда необходима для корректного удаления «замороженных» партиций со всех дисков. #21142 (Pavel Kovalenko).
  • Поддерживает неявное преобразование типа ключа для JOIN. #19885 (Vladimir).

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

  • Поддержка фрейма RANGE OFFSET (для оконных функций) для типов с плавающей запятой. Реализованы оконные функции lagInFrame/leadInFrame, которые аналогичны lag/lead, но учитывают оконный фрейм. При фрейме between unbounded preceding and unbounded following они эквивалентны. Это закрывает #5485. #21895 (Alexander Kuzmenkov).
  • Репликация без копирования данных (zero-copy) для ReplicatedMergeTree поверх хранилища S3. #16240 (ianton-ru).
  • Добавлена возможность мигрировать существующий диск S3 на схему с поддержкой резервного копирования и восстановления. #22070 (Pavel Kovalenko).

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

  • Добавлена поддержка параллельного форматирования в clickhouse-local и в остальных случаях. #21630 (Nikita Mikhaylov).
  • Поддержка параллельного парсинга для форматов CSVWithNames и TSVWithNames. Это закрывает #21085. #21149 (Nikita Mikhaylov).
  • Включено чтение с использованием mmap IO для файловых диапазонов начиная с 64 MiB (настройка min_bytes_to_use_mmap_io). Это может привести к умеренному улучшению производительности. #22326 (alexey-milovidov).
  • Добавлен кэш для файлов, читаемых с использованием настройки min_bytes_to_use_mmap_io. Это даёт значительный (в 2 раза и более) прирост производительности, когда значение настройки небольшое, за счёт избегания частых вызовов mmap/munmap и последующих отказов страниц. Обратите внимание, что у mmap IO есть серьёзные недостатки, делающие его менее надёжным в продакшене (например, зависания или SIGBUS на неисправных дисках; менее контролируемое использование памяти). Тем не менее, он хорош в бенчмарках. #22206 (alexey-milovidov).
  • Исключено лишнее копирование данных при использовании кодека NONE. Обратите внимание, что кодек NONE в основном бесполезен — рекомендуется всегда использовать сжатие (по умолчанию — LZ4). Вопреки распространённому мнению, отключение сжатия может не улучшить производительность (возможен противоположный эффект). Кодек NONE полезен в некоторых случаях: — когда данные не поддаются сжатию; — для синтетических бенчмарков. #22145 (alexey-milovidov).
  • Более быстрый GROUP BY с небольшим max_rows_to_group_by и group_by_overflow_mode='any'. #21856 (Nikolai Kochetov).
  • Оптимизирована производительность запросов вида SELECT ... FINAL ... WHERE. Теперь в запросах с FINAL разрешено переносить в PREWHERE столбцы, которые входят в ключ сортировки. #21830 (foolchi).
  • Улучшена производительность за счёт замены memcpy на другую реализацию. Это закрывает #18583. #21520 (alexey-milovidov).
  • Улучшена производительность агрегации по порядку ключа сортировки (при включённой настройке optimize_aggregation_in_order). #19401 (Anton Popov).

Улучшение

  • Добавлен пул соединений для движка таблиц/баз данных PostgreSQL и для источника словаря. Должно исправить #21444. #21839 (Kseniia Sumarokova).
  • Поддержка нестандартной схемы таблиц для хранилища/табличной функции postgres. Закрывает #21701. #21711 (Kseniia Sumarokova).
  • Поддержан приоритет реплик для источника словаря PostgreSQL. #21710 (Kseniia Sumarokova).
  • Добавлена новая настройка таблиц MergeTree min_bytes_to_rebalance_partition_over_jbod, которая позволяет сбалансированно распределять новые части по разным дискам JBOD-тома. #16481 (Amos Bird).
  • Добавлены значения Grant, Revoke и System в столбец query_kind для соответствующих запросов в system.query_log. #21102 (Vasily Nemkov).
  • Добавлена возможность настраивать тайм‑ауты для HTTP‑подключений, используемых для репликации, независимо от других HTTP‑тайм‑аутов. #20088 (nvartolomei).
  • Улучшено сообщение об исключении на стороне клиента при возникновении исключения во время записи блоков сервером. В предыдущих версиях клиент мог получать вводящее в заблуждение сообщение вроде Data compressed with different methods. #22427 (alexey-milovidov).
  • Исправлена ошибка Directory tmp_fetch_XXX already exists, возникавшая после неудачной загрузки части. Временный каталог загрузки удаляется, если он уже существует. Исправлено #14197. #22411 (nvartolomei).
  • Исправлен отчёт MSan для функции range с аргументом UInt256 (поддержка больших целых чисел — экспериментальная). Исправление закрывает #22157. #22387 (alexey-milovidov).
  • В таблицу system.processes добавлен столбец current_database. Он содержит текущую базу данных запроса. #22365 (Alexander Kuzmenkov).
  • Добавлены функции поиска и навигации по истории без учета регистра, а также перемещения по частям слов в clickhouse-client. #22105 (Amos Bird).
  • Если кортеж из NULL-значений, например (NULL, NULL), находится в левой части оператора IN, а в правой части находятся кортежи без NULL, например SELECT (NULL, NULL) IN ((0, 0), (3, 1)), теперь возвращается 0 вместо генерации исключения о несовместимых типах. Такое выражение также может появиться в результате оптимизации чего‑то вроде SELECT (NULL, NULL) = (8, 0) OR (NULL, NULL) = (3, 2) OR (NULL, NULL) = (0, 0) OR (NULL, NULL) = (3, 1). Это закрывает #22017. #22063 (alexey-milovidov).
  • Обновлена используемая версия simdjson до 0.9.1, что исправляет #21984. #22057 (Vitaly Baranov).
  • Добавлены регистронезависимые псевдонимы для функций CONNECTION_ID() и VERSION(), что исправило #22028. #22042 (Eugene Klimov).
  • Добавлена опция strict_increase в функцию windowFunnel, чтобы каждое событие учитывалось только один раз (решает #21835). #22025 (Vladimir).
  • Если ключ партиционирования таблицы MergeTree не содержит столбцов типов Date или DateTime, но содержит ровно один столбец типа DateTime64, его значения отображаются в столбцах min_time и max_time в таблицах system.parts и system.parts_columns. Добавлены столбцы min_time и max_time в таблицу system.parts_columns (здесь была несогласованность с таблицей system.parts). Это закрывает #18244. #22011 (alexey-milovidov).
  • Добавлена поддержка настройки replication_alter_partitions_sync=1 в clickhouse-copier для перемещения партиций из вспомогательной таблицы в целевую. Уменьшены значения таймаутов по умолчанию. Исправлена проблема #21911. #21912 (turbo jason).
  • Показывать в системных таблицах путь к каталогу данных таблиц EmbeddedRocksDB. #21903 (tavplubix).
  • Добавлено событие профиля HedgedRequestsChangeReplica, изменён тайм-аут чтения данных с секунд на миллисекунды. #21886 (Kruglov Pavel).
  • DiskS3 (экспериментальная функция в разработке). Исправлена ошибка, из-за которой было невозможно переместить директорию, если целевой каталог не пуст и используется кэш-диск. #21837 (Pavel Kovalenko).
  • Улучшено форматирование типов данных Array и Map в веб-интерфейсе. #21798 (alexey-milovidov).
  • Обновляйте кластеры только если их конфигурации были изменены. #21685 (Kruglov Pavel).
  • Распространение настроек запроса и сессии для распределённых DDL-запросов. Установите distributed_ddl_entry_format_version в 2, чтобы включить эту возможность. Добавлена настройка distributed_ddl_output_mode. Поддерживаемые режимы работы: none, throw (по умолчанию), null_status_on_timeout и never_throw. Различные исправления и улучшения для движка базы данных Replicated. #21535 (tavplubix).
  • Если PODArray был создан с размером элемента, который не является ни делителем, ни кратным 16, могло произойти переполнение буфера. В текущих релизах таких ошибок нет. #21533 (alexey-milovidov).
  • Добавлены столбцы last_error_time/last_error_message/last_error_stacktrace/remote в таблицу system.errors. #21529 (Azat Khuzhin).
  • Добавлены псевдонимы simpleJSONExtract/simpleJSONHas к visitParam/visitParamExtract{UInt, Int, Bool, Float, Raw, String}. Исправлено #21383. #21519 (fastio).
  • Добавлена настройка optimize_skip_unused_shards_limit для ограничения числа значений ключа шардирования для optimize_skip_unused_shards. #21512 (Azat Khuzhin).
  • Улучшен clickhouse-format, чтобы он не выбрасывал исключение при наличии лишних пробелов или комментариев после последнего запроса, а также чтобы он выдавал исключение как можно раньше с понятным сообщением при форматировании запроса ASTInsertQuery с данными. #21311 (flynn).
  • Улучшена поддержка целочисленных ключей в типе данных Map. #21157 (Anton Popov).
  • MaterializeMySQL: попытка повторного подключения к MySQL при потере соединения. #20961 (Håvard Kvålen).
  • Поддерживается больше случаев преобразования CROSS JOIN в INNER JOIN. #20392 (Vladimir).
  • Не создавать пустые парты при INSERT при включенной настройке optimize_on_insert. Исправляет #20304. #20387 (Kruglov Pavel).
  • MaterializeMySQL: добавлен индекс пропуска minmax для столбца _version. #20382 (Stig Bakken).
  • Добавлена опция --backslash для clickhouse-format, добавляющая обратную косую черту в конец каждой строки форматированного запроса. #21494 (flynn).
  • Теперь ClickHouse не будет выбрасывать исключение LOGICAL_ERROR, когда мы пытаемся изменить уже ранее затронутую часть. Исправляет #22013. #22291 (alesapin).

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

  • Удалён сокет из epoll перед отменой приёмника пакетов в HedgedConnections, чтобы предотвратить возможное состояние гонки. Исправляет #22161. #22443 (Kruglov Pavel).
  • Добавлен недостающий учет памяти в параллельных процедурах парсинга. В предыдущих версиях могла возникать ошибка OOM, когда результирующий набор содержал очень большие блоки данных. Исправляет #22008. #22425 (alexey-milovidov).
  • Исправлено исключение, которое могло возникать при выполнении SELECT с константным условием WHERE, если в исходной таблице есть столбцы с именами, состоящими только из цифр. #22270 (LiuNeng).
  • Исправлена проблема с отменой запросов при use_hedged_requests=0 и async_socket_for_remote=1. #22183 (Azat Khuzhin).
  • Исправлено необработанное исключение в InterserverIOHTTPHandler. #22146 (Azat Khuzhin).
  • Исправлена точка входа Docker на случай, если http_port отсутствует в конфигурации. #22132 (Ewout).
  • Исправлена ошибка Invalid number of rows in Chunk в операции JOIN с TOTALS и arrayJoin. Закрывает #19303. #22129 (Vladimir).
  • Исправлено имя фонового пула потоков, который использовался для опроса сообщений из Kafka. Движок Kafka с неисправным пулом потоков не будет забирать сообщения из очереди сообщений. #22122 (fastio).
  • Исправлено ожидание выполнения запросов OPTIMIZE и ALTER для движков таблиц ReplicatedMergeTree. Теперь запрос не будет зависать, когда таблица была отсоединена или перезапущена. #22118 (alesapin).
  • Отключены async_socket_for_remote/use_hedged_requests для проблемных версий ядра Linux. #22109 (Azat Khuzhin).
  • Точка входа Docker: избегать выполнения chown для . в случае, когда LOG_PATH пуст. Закрывает #22100. #22102 (filimonov).
  • В функции decrypt отсутствовала проверка минимально допустимого размера данных, зашифрованных в режиме AEAD. Это закрывает #21897. #22064 (alexey-milovidov).
  • В редких случаях слияние для CollapsingMergeTree может создать гранулу с количеством строк index_granularity + 1. Из‑за этого внутренняя проверка, добавленная в #18928 (затрагивает версии 21.2 и 21.3), может завершиться с ошибкой Incomplete granules are not allowed while blocks are granules size. Эта ошибка не позволяла сливать части. #21976 (Nikolai Kochetov).
  • Отменено изменение #15454, которое могло привести к существенному росту потребления памяти при загрузке внешних словарей хешированного типа. Это закрывает проблему #21935. #21948 (Maksim Kita).
  • Предотвращены перекрытия хеджированных подключений (ошибка Unknown packet 9 from server). #21941 (Azat Khuzhin).
  • Исправлено чтение HTTP POST-запроса с типом содержимого «multipart/form-data» в ряде случаев. #21936 (Ivan).
  • Исправлены некорректные результаты ORDER BY в запросах с оконными функциями при включённой оптимизации чтения в порядке первичного ключа. Исправление #21828. #21915 (Alexander Kuzmenkov).
  • Исправлено взаимоблокирование при первом запуске модели CatBoost. Закрывает #13832. #21844 (Kruglov Pavel).
  • Исправлен некорректный результат выполнения запроса (и возможный сбой), который мог возникать, когда условие WHERE или HAVING проталкивалось перед GROUP BY. Исправляет #21773. #21841 (Nikolai Kochetov).
  • Улучшены обработка ошибок и логирование в WriteBufferFromS3. #21836 (Pavel Kovalenko).
  • Исправлены возможные падения в агрегатных функциях с комбинатором Distinct при использовании двухуровневой агрегации. Это доработка исправления из #18365. Ошибка воспроизводилась только в продакшн-среде. #21818 (Amos Bird).
  • Исправлен анализ индекса скалярного подзапроса. Это исправляет #21717, которая была внесена изменениями из #18896. #21766 (Amos Bird).
  • Исправлена ошибка для таблиц с движком ReplicatedMerge, из-за которой запрос ALTER MODIFY COLUMN не менял тип столбца Decimal, если его разрядность (32 бита или 64 бита) не изменялась. #21728 (alesapin).
  • Исправлено возможное бесконечное ожидание при одновременном выполнении OPTIMIZE и DROP для ReplicatedMergeTree. #21716 (Azat Khuzhin).
  • Исправлена работа функции arrayElement с типом Map для константных целочисленных аргументов. #21699 (Anton Popov).
  • Исправлена ошибка SIGSEGV при обращении к несуществующим атрибутам из ip_trie при использовании access_to_key_from_attributes. #21692 (Azат Khuzhin).
  • Сервер теперь принимает подключения только после инициализации DDLWorker и словарей. #21676 (Azat Khuzhin).
  • Добавлено преобразование типов для ключей таблиц типа Join, отсутствие которого ранее приводило к SIGSEGV. #21646 (Azat Khuzhin).
  • Исправлена отмена распределённых запросов (например, простого запроса SELECT из нескольких шардов с LIMIT, то есть select * from remote('127.{2,3}', system.numbers) limit 100) при async_socket_for_remote=1. #21643 (Azat Khuzhin).
  • Исправлен fsync_part_directory при горизонтальном слиянии. #21642 (Azat Khuzhin).
  • Удалены неизвестные столбцы из присоединённой таблицы в условии WHERE для запросов к внешним движкам баз данных (MySQL, PostgreSQL). close #14614, close #19288 (дубликат), close #19645 (дубликат). #21640 (Vladimir).
  • std::terminate вызывалась при ошибке записи данных в S3. #21624 (Vladimir).
  • Исправлена возможная ошибка Cannot find column при включённом optimize_skip_unused_shards и отсутствии шардов. #21579 (Azat Khuzhin).
  • В случае если запрос содержит константное условие WHERE и включена настройка optimize_skip_unused_shards, все шарды могут быть пропущены, и запрос может вернуть некорректный пустой результат. #21550 (Amos Bird).
  • Исправлена ошибка, из-за которой табличная функция clusterAllReplicas возвращала неверное значение _shard_num. Закрывает #21481. #21498 (flynn).
  • Исправлена проблема, при которой таблица S3 продолжала использовать старые учетные данные после обновления конфигурации. #21457 (Grigory Pervakov).
  • Исправлено условие гонки для SSL-объекта внутри SecureSocket в Poco. #21456 (Nikita Mikhaylov).
  • Исправлен разбор формата Avro для Kafka. Устраняет проблему #21437. #21438 (Ilya Golshtein).
  • Исправлены тайм-ауты на приём и отправку данных, а также неблокирующее чтение в защищённом сокете. #21429 (Kruglov Pavel).
  • Флаг force_drop_table не работал для MATERIALIZED VIEW; ошибка была исправлена. Исправляет #18943. #20626 (tavplubix).
  • Исправлены конфликты имён в PredicateRewriteVisitor. Это приводило к некорректной фильтрации в WHERE после полного соединения (FULL JOIN). Закрывает #20497. #20622 (Vladimir).

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

  • Добавлены тесты Jepsen для ClickHouse Keeper. #21677 (alesapin).
  • Запускать тесты без состояния параллельно в CI. Зависит от #22181. #22300 (alesapin).
  • Включена проверка статуса для запуска CI SQLancer. #22015 (Ilya Yatsishin).
  • Несколько подготовительных изменений для сборок под PowerPC: включено использование встроенной openldap на ppc64le. #22487 (Kfir Itzhak). Включена поддержка компиляции на ppc64le с использованием Clang. #22476 (Kfir Itzhak). Исправлена компиляция Boost на ppc64le. #22474 (Kfir Itzhak). Исправлена ошибка CMake о том, что внутренняя переменная CMake CMAKE_ASM_COMPILE_OBJECT не установлена на ppc64le. #22469 (Kfir Itzhak). Исправлена проблема в Fedora/RHEL/CentOS с поиском libclang_rt.builtins на ppc64le. #22458 (Kfir Itzhak). Включена сборка с jemalloc на ppc64le. #22447 (Kfir Itzhak). Исправлено встраивание конфигурации ClickHouse и встраивание часовых поясов cctz на ppc64le. #22445 (Kfir Itzhak). Исправлена компиляция на ppc64le и настроено использование корректного регистра указателя инструкции на ppc64le. #22430 (Kfir Itzhak).
  • Повторно включена библиотека S3 (AWS) на aarch64. #22484 (Kfir Itzhak).
  • Добавлен пакет tzdata в Docker-контейнеры, так как он необходим для чтения формата ORC. Это закрывает #14156. #22000 (alexey-milovidov).
  • Добавлены два аргумента для Dockerfile для образа clickhouse-server: deb_location и single_binary_location. #21977 (filimonov).
  • Разрешить использование clang-tidy с релизными сборками путём включения assert-ов, если используется clang-tidy. #21914 (alexey-milovidov).
  • Добавлены имена исполняемых файлов llvm-12 в поиск в скриптах CMake. Добавлены неявные преобразования констант для подавления предупреждений clang. Обновлены подмодули для сборки с CMake 3.19. Подавлена рекурсия при раскрытии макросов в библиотеке readpassphrase. Устаревший флаг -fuse-ld заменён на --ld-path для clang. #21597 (Ilya Yatsishin).
  • Обновлён docker/test/testflows/runner/dockerd-entrypoint.sh для использования Yandex dockerhub-proxy, поскольку Docker Hub ввёл очень жёсткие лимиты на частоту запросов #21551 (vzakaznikov).
  • Исправлена сборка динамической библиотеки на macOS. #20184 (nvartolomei).
  • Добавлена опция ctime в zookeeper-dump-tree. Она позволяет вывести время создания узла. #21842 (Ilya).

Релиз ClickHouse 21.3 (LTS)

Релиз ClickHouse v21.3, 2021-03-12

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

  • Теперь создание таблиц MergeTree в старом синтаксисе с TTL таблицы не допускается, поскольку TTL просто игнорируется. Операция ATTACH старых таблиц по‑прежнему возможна. #20282 (alesapin).
  • Теперь все имена функций с нечувствительностью к регистру будут переписаны в их каноническое представление. Это необходимо для маршрутизации запросов по проекциям (предстоящая функциональность). #20174 (Amos Bird).
  • Исправлено создание TTL в случаях, когда его выражение является функцией и совпадает с ключом ORDER BY. Теперь разрешено задавать пользовательскую агрегацию для столбцов первичного ключа в TTL с GROUP BY. Обратная несовместимость: для столбцов первичного ключа, которые не входят в GROUP BY и не заданы явно, теперь при истечении TTL применяется функция any вместо max. Также, если вы используете TTL с WHERE или GROUP BY, вы можете сталкиваться с исключениями при слияниях во время поэтапного обновления. #15450 (Anton Popov).

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

  • Добавлены настройки файлового движка: engine_file_empty_if_not_exists и engine_file_truncate_on_insert. #20620 (M0r64n).
  • Добавлена агрегатная функция deltaSum для суммирования разностей между последовательными строками. #20057 (Russ Frank).
  • Новый столбец event_time_microseconds в таблице system.part_log. #20027 (Bharat Nallan).
  • Добавлена функция timezoneOffset(datetime), которая возвращает смещение от UTC в секундах. Это закрывает #issue:19850. #19962 (keenwolf).
  • Добавлена настройка insert_shard_id для поддержки вставки данных в конкретный шард из распределённой таблицы. #19961 (flynn).
  • Функция reinterpretAs обновлена для поддержки больших целых чисел. Исправляет #19691. #19858 (Maksim Kita).
  • В клиенте S3 добавлена поддержка Server Side Encryption Customer Keys (заголовок x-amz-server-side-encryption-customer-(key/md5)). Подробнее см. по ссылке. Закрывает #19428. #19748 (Vladimir Chebotarev).
  • Добавлена опция implicit_key для источника словаря executable. Позволяет не выводить ключ для каждой записи, если записи поступают в том же порядке, что и входные ключи. Реализует #14527. #19677 (Maksim Kita).
  • Добавлены типы квот query_selects и query_inserts. #19603 (JackyWoo).
  • Добавлена функция extractTextFromHTML. #19600 (zlx19950903), (alexey-milovidov).
  • Таблицы с движком MergeTree* теперь имеют две новые настройки на уровне таблицы для управления параллельным выполнением запросов. Настройка max_concurrent_queries ограничивает количество одновременно выполняемых запросов, связанных с этой таблицей. Настройка min_marks_to_honor_max_concurrent_queries указывает применять предыдущую настройку только если запрос читает как минимум указанное количество меток. #19544 (Amos Bird).
  • Добавлена функция file для чтения файла из директории user_files как строки (String). Она отличается от табличной функции file. Реализует #issue:18851. #19204 (keenwolf).

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

  • Добавлен экспериментальный движок базы данных Replicated. Он реплицирует DDL‑запросы между несколькими узлами. #16193 (tavplubix).
  • Добавлена экспериментальная поддержка оконных функций, включаемая параметром allow_experimental_window_functions = 1. Это предварительная альфа‑версия, не предназначенная для использования в продуктиве и в будущих релизах изменяющаяся с нарушением обратной совместимости. См. документацию со списком поддерживаемых возможностей. #20337 (Alexander Kuzmenkov).
  • Добавлена возможность создавать резервные копии и восстанавливать файлы метаданных для DiskS3. #18377 (Pavel Kovalenko).

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

  • Хеджированные запросы при выполнении удалённых запросов. При включении параметра use_hedged_requests (по умолчанию отключён) можно устанавливать несколько соединений с разными репликами для одного запроса. Новое соединение создаётся, если ни одно из существующих соединений с репликой (репликами) не было установлено в течение hedged_connection_timeout или данные не были получены в течение receive_data_timeout. Запрос использует первое соединение, которое отправит непустой пакет прогресса (или пакет данных, если включён allow_changing_replica_until_first_data_packet); остальные соединения отменяются. Поддерживаются запросы с max_parallel_replicas > 1. #19291 (Kruglov Pavel). Это позволяет значительно снизить хвостовые задержки на очень больших кластерах.
  • Добавлена поддержка PREWHERE (и включена соответствующая оптимизация) для таблиц, у которых заданы выражения построчной (row-level) безопасности. #19576 (Denis Glazachev).
  • Настройка distributed_aggregation_memory_efficient включена по умолчанию. Она снижает потребление памяти и улучшает производительность распределённых запросов. #20599 (alexey-milovidov).
  • Улучшена производительность операций GROUP BY с несколькими ключами фиксированного размера. #20472 (alexey-milovidov).
  • Улучшена производительность агрегатных функций за счёт более строгого соблюдения правил aliasing. #19946 (alexey-milovidov).
  • Ускорено чтение из таблиц Memory в экстремальных случаях (когда скорость чтения достигает порядка 50 ГБ/с) за счёт упрощения конвейера и, как следствие, уменьшения конкуренции за блокировки при планировании конвейера. #20468 (alexey-milovidov).
  • Частично переработан HTTP-сервер, чтобы уменьшить число копирований входящих и исходящих данных. Это даёт до 1,5-кратного роста производительности при вставке длинных записей по HTTP. #19516 (Ivan).
  • Добавлена настройка compress для таблиц Memory. Если она включена, таблица будет использовать меньше оперативной памяти. На некоторых машинах и для некоторых наборов данных это также может работать быстрее при выполнении SELECT-запросов, но так бывает не всегда. Это закрывает #20093. Примечание: есть причины, по которым таблицы Memory могут работать медленнее, чем MergeTree: (1) отсутствие сжатия, (2) фиксированный размер блоков, (3) отсутствие индексов и prewhere... #20168 (alexey-milovidov).
  • Немного улучшен код агрегации. #20978 (alexey-milovidov).
  • Вернуть специализации intDiv/modulo для повышения производительности. Это исправляет #21293. Регрессия появилась в https://github.com/ClickHouse/ClickHouse/pull/18145. #21307 (Amos Bird).
  • Блоки больше не сжимаются слишком сильно в INSERT SELECT, если выполняется вставка в таблицу Memory. В предыдущих версиях после выполнения INSERT SELECT в таблице Memory создавалось неэффективное представление данных. Это закрывает #13052. #20169 (alexey-milovidov).
  • Исправлен как минимум один случай, когда парсер DataType мог иметь экспоненциальную сложность (обнаружено фаззером). Это закрывает #20096. #20132 (alexey-milovidov).
  • Параллелизовать SELECT с FINAL для одной части с уровнем > 0, когда настройка do_not_merge_across_partitions_select_final имеет значение 1. #19375 (Kruglov Pavel).
  • Заполнять только запрошенные столбцы при выполнении запросов к system.parts и system.parts_columns. Закрывает #19570. #21035 (Anmol Arora).
  • Выполнены алгебраические оптимизации арифметических выражений внутри агрегатной функции avg. Закрыто #20092. #20183 (flynn).

Улучшение

  • Методы сжатия, нечувствительные к регистру, для табличных функций. Также исправлен метод сжатия LZMA, который ранее проверялся только в верхнем регистре. #21416 (Vladimir Chebotarev).
  • Добавлены две настройки, позволяющие задерживать вставку или выбрасывать ошибку при слишком большом количестве неактивных частей. Это полезно, когда сервер не успевает достаточно быстро очищать части. #20178 (Amos Bird).
  • Улучшена совместимость с клиентами MySQL. 1. MySQL JDBC 2. mycli. #21367 (Amos Bird).
  • Запрещено удалять столбец, если он используется в материализованном представлении. Закрывает #21164. #21303 (flynn).
  • Источник словаря MySQL теперь будет повторять попытки при неожиданных обрывах соединения (Lost connection to MySQL server during query), которые иногда происходят при SSL/TLS-подключениях. #21237 (Alexander Kazakov).
  • Улучшение удобства использования: более последовательный разбор значений DateTime64: распознаётся случай, когда UNIX-метка времени с субсекундным разрешением задаётся как масштабированное целое число (например, 1111111111222 вместо 1111111111.222). Это закрывает #13194. #21053 (alexey-milovidov).
  • При включённой настройке distributed_group_by_no_merge выполняется только слияние отсортированных блоков на инициаторе. #20882 (Azat Khuzhin).
  • При загрузке конфигурации для источника MySQL ClickHouse теперь будет случайным образом перемешивать список реплик с одинаковым приоритетом, чтобы обеспечить работу round-robin-алгоритма выбора endpoint MySQL. Это закрывает #20629. #20632 (Alexander Kazakov).
  • Функция 'reinterpretAs(x, Type)' была переименована в 'reinterpret(x, Type)'. #20611 (Maksim Kita).
  • Поддержка vhost для движка RabbitMQ #20576. #20596 (Kseniia Sumarokova).
  • Улучшена сериализация для составных типов данных Array и Tuple. Улучшено сопоставление перечислимых типов данных с перечислимыми типами protobuf. Исправлена сериализация типа данных Map. Пропущенные значения теперь задаются по умолчанию. #20506 (Vitaly Baranov).
  • Исправлена гонка между выполнением распределённых DDL‑задач и очисткой очереди DDL. Теперь DDL‑задача не может быть удалена из ZooKeeper, если ещё есть активные воркеры. Исправляет #20016. #20448 (tavplubix).
  • Обеспечена корректная работа FQDN и других функций, связанных с DNS, в образах Alpine. #20336 (filimonov).
  • Не допускается раннее свёртывание констант для явно запрещённых функций. #20303 (Azat Khuzhin).
  • Неявное преобразование из целого числа в тип Decimal могло завершаться успешно, даже если целочисленное значение не входило в диапазон значений типа Decimal. Теперь в таком случае генерируется ошибка ARGUMENT_OUT_OF_BOUND. #20232 (tavplubix).
  • Неблокирующий SYSTEM FLUSH DISTRIBUTED. #20215 (Azat Khuzhin).
  • Нормализовать выражения count(constant) и sum(1) до count(). Это необходимо для маршрутизации запросов с проекциями. #20175 (Amos Bird).
  • Поддержка всех нативных целочисленных типов данных в bitmap-функциях. #20171 (Amos Bird).
  • Обновлены CacheDictionary, ComplexCacheDictionary, SSDCacheDictionary, SSDComplexKeyDictionary для использования LRUHashMap в качестве базового индекса. #20164 (Maksim Kita).
  • Настройку access_management теперь можно задавать при запуске через CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT; по умолчанию она отключена (0), как и ранее. #20139 (Marquitos).
  • Исправлена toDateTime64(toDate()/toDateTime()) для типа DateTime64 — реализовано ограничение значений DateTime64, соответствующее поведению DateTime. #20131 (Azat Khuzhin).
  • Улучшения квот: SHOW TABLES теперь считается одним запросом при расчёте квоты, а не двумя. Запросы SYSTEM теперь потребляют квоту. Исправлено вычисление конца интервала при потреблении квоты. #20106 (Vitaly Baranov).
  • Добавлена поддержка выражений path IN (set) для таблицы system.zookeeper. #20105 (小路).
  • Показывать полную информацию о таблицах MaterializeMySQL в system.tables. #20051 (Stig Bakken).
  • Исправлена гонка данных в исполняемом словаре, которая возникала только при некорректном использовании (когда скрипт возвращает данные, игнорируя входные данные). #20045 (alexey-milovidov).
  • Значением опции MYSQL_OPT_RECONNECT теперь можно управлять с помощью параметра "opt_reconnect" в секции config реплики MySQL. #19998 (Alexander Kazakov).
  • Если пользователь вызывает функцию JSONExtract с запрошенным типом Float32, теперь допускается неточное преобразование к результирующему типу. Например, число 0.1 в JSON имеет двойную точность и не может быть точно представлено в Float32, но пользователь всё равно хочет его получить. В предыдущих версиях возвращалось 0 для типа non-Nullable и NULL для типа Nullable, чтобы указать, что преобразование неточно. Логика была полностью корректной, но вызывала удивление у пользователей и приводила к вопросам. Это закрывает #13962. #19960 (alexey-milovidov).
  • Добавлено преобразование структуры блока при INSERT в таблицы типа Distributed, если она не соответствует. #19947 (Azat Khuzhin).
  • Улучшение для таблицы system.distributed_ddl_queue. Теперь MaxDDLEntryID инициализируется последним значением после перезапуска. До этого PR MaxDDLEntryID оставался равным нулю, пока не была обработана новая DDLTask. #19924 (Amos Bird).
  • Показывать таблицы MaterializeMySQL в system.parts. #19770 (Stig Bakken).
  • Добавлена отдельная директива конфигурации для профиля Buffer. #19721 (Azat Khuzhin).
  • Перемещены условия, не относящиеся к JOIN, в предложение WHERE. #18720. #19685 (hexiaoting).
  • Добавлена возможность ограничивать скорость INSERT в Distributed в зависимости от объёма байтов, ожидающих асинхронной отправки (добавлены настройки bytes_to_delay_insert/max_delay_to_insert и bytes_to_throw_insert для движка Distributed). #19673 (Azat Khuzhin).
  • Исправлены редкие случаи, когда ошибки записи могли игнорироваться в деструкторах. #19451 (Azat Khuzhin).
  • Выводить inline-кадры в трассировке стека для фатальных ошибок. #19317 (Ivan).

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

  • Исправлены лишние переподключения к ZooKeeper и возможность наличия двух активных сессий для одного сервера ClickHouse. Обе проблемы возникли в результате изменений в #14678. #21264 (alesapin).
  • Исправлена ошибка Bad cast from type ... to DB::ColumnLowCardinality, возникавшая при вставке в таблицу со столбцом LowCardinality из формата Values. Исправление для #21140 #21357 (Nikolai Kochetov).
  • Исправлен дедлок в мутациях ALTER DELETE для нереплицируемых движков таблиц MergeTree, возникающий, если в предикате используется эта же таблица. Исправляет #20558. #21477 (alesapin).
  • Исправлен SIGSEGV при сбоях в распределённых запросах. #21434 (Azat Khuzhin).
  • Теперь запросы ALTER MODIFY COLUMN будут корректно вносить изменения в ключ партиционирования, пропускающие индексы, TTL и т. д. Исправляет проблему #13675. #21334 (alesapin).
  • Исправлена ошибка, связанная с join_use_nulls и объединением TOTALS из подзапросов. Это закрывает #19362 и #21137. #21248 (vdimir).
  • Исправлена ошибка, приводившая к сбою EXPLAIN для запроса с UNION. Исправляет #20876, #21170. #21246 (flynn).
  • Теперь мутации допустимы только для движков таблиц, которые их поддерживают (семейство MergeTree, Memory, MaterializedView). Остальные движки будут сообщать более понятную ошибку. Исправляет #21168. #21183 (alesapin).
  • Исправляет #21112. Исправлена ошибка, которая могла приводить к дубликатам при запросе INSERT (если один из обратных вызовов приходил с небольшим опозданием). #21138 (Kseniia Sumarokova).
  • Исправлена работа input_format_null_as_default, чтобы он вступал в силу для допускающих NULL типов. Это исправляет #21116. #21121 (Amos Bird).
  • Исправлена ошибка, связанная с приведением типа Tuple к типу Map. Закрывает #21029. #21120 (hexiaoting).
  • Исправлена утечка метаданных при удалении таблиц Replicated*MergeTree с пользовательским (нестандартным) кластером ZooKeeper. #21119 (fastio).
  • Исправлена ошибка несоответствия типов при использовании ключей LowCardinality в функции joinGet. Это исправляет #21114. #21117 (Amos Bird).
  • исправлено: значения default_replica_path и default_replica_name были бесполезны для движка Replicated(*)MergeTree, когда требовалось указать другие параметры движка. #21060 (mxzlxy).
  • Был возможен выход за пределы памяти при форматировании специально сконструированного значения типа DateTime64 вне допустимого диапазона. Устраняет #20494. Устраняет #20543. #21023 (alexey-milovidov).
  • Блокировка параллельных вставок в хранилище JOIN. #21009 (vdimir).
  • Исправлено поведение, при котором ALTER MODIFY COLUMN создавал мутацию, которая заведомо должна была завершиться ошибкой. #21007 (Anton Popov).
  • Закрыт #9969. Исправлена ошибка HTTP-сжатия Brotli, возникавшая для больших объёмов данных, слегка усложнённой структуры и при использовании формата вывода JSON. Обновлена библиотека Brotli до последней версии, чтобы включить «исправление редкого доступа к неинициализированным данным в кольцевом буфере». #20991 (Kseniia Sumarokova).
  • Исправлена ошибка 'Empty task was returned from async task queue' при отмене запроса. #20881 (Azat Khuzhin).
  • Запрос USE database; не работал при подключении к серверу ClickHouse с помощью клиента MySQL 5.7; проблема устранена. Исправлена #18926. #20878 (tavplubix).
  • Исправлено использование комбинатора -Distinct совместно с комбинатором -State в агрегатных функциях. #20866 (Anton Popov).
  • Исправлена работа подзапроса с UNION DISTINCT и предложением LIMIT. Закрыт #20597. #20610 (flynn).
  • Исправлено неконсистентное поведение словаря в запросах, ищущих отсутствующие ключи в словаре. #20578 (Nikita Mikhaylov).
  • Исправлено использование количества потоков для скалярных подзапросов и подзапросов по индексу (после #19007 всегда использовался один поток). Исправлены #20457, #20512. #20550 (Nikolai Kochetov).
  • Исправлена ошибка, из‑за которой мог происходить сбой при получении неизвестного пакета от удалённого запроса (была внесена в #17868). #20547 (Azat Khuzhin).
  • Добавлены корректные проверки при разборе имён каталогов для асинхронных операций INSERT (исправляет SIGSEGV). #20498 (Azat Khuzhin).
  • Исправлена некорректная работа функции transform для ключей с плавающей точкой. Закрывает #20460. #20479 (flynn).
  • Исправлен бесконечный цикл, возникавший при распространении псевдонимов WITH на подзапросы. Это исправляет #20388. #20476 (Amos Bird).
  • Исправлено некорректное завершение работы сервера при отключении HTTP-клиента. #20464 (Azat Khuzhin).
  • Исправлена ошибка LOGICAL_ERROR при join_use_nulls=1, когда в JOIN используется константа из SELECT. #20461 (Azat Khuzhin).
  • Проверять, используется ли табличная функция view в списке выражений, и в таком случае выбрасывать ошибку. Это исправляет #20342. #20350 (Amos Bird).
  • Предотвращено некорректное разыменование в словаре RANGE_HASHED(). #20345 (Azat Khuzhin).
  • Исправлена ошибка разыменования null при join_use_nulls=1. #20344 (Azat Khuzhin).
  • Исправлена ошибка, приводившая к некорректным результатам бинарных операций между двумя константными значениями типа Decimal с разным масштабом. Устраняет #20283. #20339 (Maksim Kita).
  • Исправлена проблема слишком частых повторных запусков неудавшихся фоновых задач для семейства движков таблиц ReplicatedMergeTree. Это могло приводить к чрезмерному объёму логирования и повышенной нагрузке на CPU. Исправляет #20203. #20335 (alesapin).
  • Ограничены операции DROP и RENAME над столбцом версии в движках таблиц *CollapsingMergeTree и ReplacingMergeTree. #20300 (alesapin).
  • Исправлено поведение, при котором в случае некорректного JSON предпринималась попытка прочитать весь файл в память, что приводило к выбросу исключения аллокатором. Исправлена #19719. #20286 (Nikita Mikhaylov).
  • Исправлено исключение, возникающее при вертикальном слиянии для семейства движков таблиц MergeTree, которые не поддерживают вертикальные слияния. Исправляет #20259. #20279 (alesapin).
  • Исправлено редкое падение сервера при перезагрузке конфигурации во время завершения работы. Исправлена ошибка #19689. #20224 (alesapin).
  • Исправлена работа CTE в INSERT SELECT. Это исправление закрывает #20187 и #20195. #20211 (Amos Bird).
  • Исправлена ошибка #19314. #20156 (Ivan).
  • исправлена функция toMinute для корректной обработки особого часового пояса. #20149 (keenwolf).
  • Исправлен сбой сервера после выполнения запроса с функцией if, в котором результат ветвей then/else имеет тип Tuple. Тип Tuple должен содержать Array или другой сложный тип. Исправляет #18356. #20133 (alesapin).
  • Движок таблицы MongoDB теперь устанавливает соединение только при чтении данных. ATTACH TABLE больше не будет пытаться подключаться. #20110 (Vitaly Baranov).
  • Исправление ошибки в StorageJoin. #20079 (vdimir).
  • Исправлен случай, когда при вычислении остатка от деления отрицательного числа на небольшой делитель результирующий тип данных был недостаточно большим, чтобы вместить отрицательный результат. Это закрывает #20052. #20067 (alexey-milovidov).
  • MaterializeMySQL: Исправлена репликация для запросов, которые обновляют несколько таблиц. #20066 (Håvard Kvålen).
  • Предотвращена ошибка «Connection refused» в Docker во время выполнения скрипта инициализации. #20012 (filimonov).
  • EmbeddedRocksDB — экспериментальное хранилище. Исправлена проблема отсутствия корректной проверки типов. Код упрощён. Это закрывает #19967. #19972 (alexey-milovidov).
  • Исправлена ошибка в функции fromModifiedJulianDay, приводившая к segfault при использовании аргумента типа Nullable(T) для любых целочисленных типов, кроме Int32. #19959 (PHO).
  • Исправлено падение при использовании индекса BloomFilter. Исправляет #19757. #19884 (Maksim Kita).
  • Могла возникать взаимоблокировка, если включен system.text_log. Это исправляет #19874. #19875 (alexey-milovidov).
  • Исправлена ошибка запуска сервера с таблицами, имеющими выражения по умолчанию, содержащие dictGet(). Теперь можно определять возвращаемый тип функции dictGet() без загрузки словаря. #19805 (Vitaly Baranov).
  • Исправлена ошибка аварийного завершения работы clickhouse-client при выполнении только команды SELECT. #19790 (taiyang-li).
  • Исправлена ошибка, из-за которой перенос частей в целевую таблицу мог завершаться с ошибкой при запуске нескольких экземпляров clickhouse-copier. #19743 (madianjun).
  • Фоновый поток, выполняющий запросы ON CLUSTER, мог зависать в ожидании действий от удалённой реплицируемой таблицы. Это исправлено. #19684 (yiguolei).

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

  • Добавлена возможность собирать ClickHouse с глобально включённым AVX-2. Это даёт небольшое преимущество в производительности на современных CPU. Не рекомендуется для боевой эксплуатации и пока не будет официально поддерживаться. #20180 (alexey-milovidov).
  • Исправлена часть проблем, найденных Coverity. См. #19964. #20010 (alexey-milovidov).
  • Добавлена возможность запуска модифицированного исполняемого файла под gdb. В предыдущей версии, если вы ставили точку останова в gdb до запуска, сервер отказывался запускаться из-за неудачной проверки целостности. #21258 (alexey-milovidov).
  • Добавлен тест для различных методов сжатия в Kafka. #21111 (filimonov).
  • Исправлен конфликт портов в тесте test_storage_kerberized_hdfs. #19974 (Ilya Yatsishin).
  • Добавлен вывод stdout и stderr в лог при неудачном запуске Docker в интеграционных тестах. До этого PR в таком случае выводилось очень короткое сообщение об ошибке, которое не помогало в расследовании проблем. #20631 (Vitaly Baranov).

Релиз ClickHouse 21.2

Релиз ClickHouse v21.2.2.8-stable, 2021-02-07

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

  • Побитовые функции (bitAnd, bitOr и т.д.) запрещены для аргументов с плавающей точкой. Теперь необходимо выполнять явное приведение к целому типу. #19853 (Azat Khuzhin).
  • Функции lcm/gcd для чисел с плавающей точкой запрещены. #19532 (Azat Khuzhin).
  • Исправлено отслеживание использования памяти для OPTIMIZE TABLE/слияний; теперь также учитываются лимиты памяти запроса и семплирование для OPTIMIZE TABLE/слияний. #18772 (Azat Khuzhin).
  • Запрещено использовать столбец с плавающей точкой в качестве ключа партиционирования, см. #18421. #18464 (hexiaoting).
  • Избыточные скобки в определениях типов больше не поддерживаются, пример: Array((UInt8)).

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

  • Добавлен движок таблицы PostgreSQL (для SELECT и INSERT, с поддержкой многомерных массивов), а также в виде табличной функции. Добавлен источник словаря PostgreSQL. Добавлен движок базы данных PostgreSQL. #18554 (Kseniia Sumarokova).
  • Тип данных Nested теперь поддерживает произвольные уровни вложенности. Добавлены подстолбцы сложных типов, такие как size0 в Array, null в Nullable, имена элементов Tuple, которые можно читать без чтения всего столбца. #17310 (Anton Popov).
  • Добавлена поддержка типа Nullable для FlatDictionary, HashedDictionary, ComplexKeyHashedDictionary, DirectDictionary, ComplexKeyDirectDictionary, RangeHashedDictionary. #18236 (Maksim Kita).
  • Добавляет новую таблицу system.distributed_ddl_queue, которая отображает запросы в очереди обработчика DDL. #17656 (Bharat Nallan).
  • Добавлена поддержка сопоставления имён групп LDAP и, в целом, значений атрибутов с локальными ролями для пользователей из LDAP‑каталогов. #17211 (Denis Glazachev).
  • Добавлена поддержка вставки в табличную функцию cluster, а для обеих табличных функций remote и cluster — поддержка распределения данных по узлам на основе ключа шардирования. Закрывает #16752. #18264 (flynn).
  • Добавлена функция decodeXMLComponent для декодирования символов в XML. Пример: SELECT decodeXMLComponent('Hello,&quot;world&quot;!') #17659. #18542 (nauta).
  • Добавлены функции parseDateTimeBestEffortUSOrZero, parseDateTimeBestEffortUSOrNull. #19712 (Maksim Kita).
  • Добавлена математическая функция sign. #19527 (flynn).
  • В system.query_log добавлена информация об использованных возможностях (функциях, движках таблиц и т. д.). #18495. #19371 (Kseniia Sumarokova).
  • Функция formatDateTime поддерживает модификатор %Q для форматирования даты в номер квартала. #19224 (Jianmei Zhang).
  • Добавлена поддержка сочетания клавиш MetaKey+Enter в интерфейсе Play UI. #19012 (sundyli).
  • Добавлены три функции для типа данных Map: 1. mapContains(map, key) — проверяет, содержит ли map.keys второй параметр key. 2. mapKeys(map) — возвращает все ключи в виде массива (Array). 3. mapValues(map) — возвращает все значения в виде массива (Array). #18788 (hexiaoting).
  • Добавлена настройка log_comment, связанная с #18494. #18549 (Zijie Lu).
  • Добавлена поддержка аргумента-кортежа в функциях argMin и argMax. #17359 (Ildus Kurbangaliev).
  • Добавлена поддержка синтаксиса EXISTS VIEW. #18552 (Du Chuan).
  • Добавлен синтаксис SELECT ALL. Закрывает #18706. #18723 (flynn).

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

  • Ускорено удаление парций за счет уменьшения числа системных вызовов stat. Возвращена ранее существовавшая оптимизация. Интерфейс IDisk сделан более безопасным. Закрывает #19065. #19086 (alexey-milovidov).
  • Псевдонимы, объявленные в выражении WITH, корректно используются при анализе индексов. Запросы вида WITH column AS alias SELECT ... WHERE alias = ... теперь могут использовать индекс. #18896 (Amos Bird).
  • Добавлен optimize_alias_column_prediction (включен по умолчанию), который будет: - Учитывать столбцы‑псевдонимы в WHERE при отсечении партиций и пропуске данных с помощью вторичных индексов; - Учитывать столбцы‑псевдонимы в WHERE для тривиальных запросов подсчета строк в optimize_trivial_count; - Учитывать столбцы‑псевдонимы в GROUP BY/ORDER BY для optimize_aggregation_in_order/optimize_read_in_order. #16995 (sundyli).
  • Ускорена агрегатная функция sum. Улучшение заметно только на синтетических бенчмарках и мало практично. #19216 (alexey-milovidov).
  • Обновлен libc++ и используется другой ABI для повышения производительности. #18914 (Danila Kutenin).
  • Функции sumIf() и sum(if()) автоматически переписываются в countIf() в логически эквивалентных случаях. #17041 (flynn).
  • Используется пул подключений для соединений с S3, управляемый настройкой s3_max_connections. #13405 (Vladimir Chebotarev).
  • Добавлена поддержка опции long в zstd для более эффективного сжатия строковых столбцов и экономии места. #17184 (ygrek).
  • Незначительно снижена задержка сервера за счет исключения обращения к конфигурации при каждом новом соединении. #19863 (alexey-milovidov).
  • Снижена конкуренция за блокировки для нескольких уровней движка Buffer. #19379 (Azat Khuzhin).
  • Добавлена поддержка разбиения шага Filter в плане запроса на пару Expression + Filter. Совместно с оптимизацией объединения Expression + Expression (#17458) это может переносить вычисление некоторых выражений на шаг после Filter. #19253 (Nikolai Kochetov).

Улучшение

  • SELECT count() FROM table теперь можно выполнить, если из table можно выбрать хотя бы один столбец. Этот PR исправляет #10639. #18233 (Vitaly Baranov).
  • При взаимодействии с удалёнными серверами MySQL устанавливайте кодировку utf8mb4. Исправляет #19795. #19800 (alexey-milovidov).
  • Табличная функция S3 теперь поддерживает режим сжатия auto (автоопределение типа сжатия). Это закрывает #18754. #19793 (Vladimir Chebotarev).
  • Корректный вывод бесконечных аргументов функции formatReadableTimeDelta. В предыдущих версиях происходило неявное преобразование в целочисленное значение, зависящее от конкретной реализации. #19791 (alexey-milovidov).
  • Табличная функция S3 будет использовать глобальный регион, если его не удаётся определить однозначно. Это закрывает #10998. #19750 (Vladimir Chebotarev).
  • В распределённых запросах, если включена настройка async_socket_for_remote, мог происходить переполнение стека как минимум в отладочной конфигурации сборки при использовании в таблице очень глубоко вложенного типа данных (например, Array(Array(Array(...more...)))). Это исправляет #19108. Это изменение вносит небольшую обратную несовместимость: избыточные скобки в определениях типов больше не поддерживаются, пример: Array((UInt8)). #19736 (alexey-milovidov).
  • Добавлен отдельный пул для брокеров сообщений (RabbitMQ и Kafka). #19722 (Azat Khuzhin).
  • Исправлена редкая ситуация превышения лимита max_number_of_merges_with_ttl_in_pool (могло назначаться больше слияний с TTL) для нереплицируемого MergeTree. #19708 (alesapin).
  • Dictionary: улучшено сообщение об ошибке при разборе атрибутов. #19678 (Maksim Kita).
  • Добавлена настройка для отключения проверки контрольных сумм при чтении. Никогда не должна использоваться в продакшене. Пожалуйста, не ожидайте какой-либо выгоды от её отключения. Может использоваться только для экспериментов и бенчмарков. Настройка применима только к таблицам семейства MergeTree. Контрольные суммы всегда проверяются для других табличных движков и при приёме данных по сети. Согласно моим наблюдениям, разницы в производительности нет, либо она менее 0,5 %. #19588 (alexey-milovidov).
  • Добавлена поддержка константного результата в функции multiIf. #19533 (Maksim Kita).
  • Включена поддержка функций length, empty и notEmpty для типа данных Map, которые возвращают число ключей в Map. #19530 (taiyang-li).
  • Добавлена опция --reconnect в clickhouse-benchmark. При указании этой опции клиент будет переподключаться перед каждым запросом. Это необходимо для тестирования. #19872 (alexey-milovidov).
  • Добавлена поддержка нового расположения файла .debug. Исправляет #19348. #19520 (Amos Bird).
  • Функция toIPv6 анализирует IP-адреса в формате IPv4. #19518 (Bharat Nallan).
  • Добавлено поле http_referer в system.query_log, system.processes и т. д., что закрывает #19389. #19390 (alexey-milovidov).
  • Улучшена совместимость с MySQL за счёт того, что больше функций стали нечувствительными к регистру, и добавления алиасов. #19387 (Daniil Kondratyev).
  • Добавлены метрики для типов частей MergeTree (Wide/Compact/InMemory). #19381 (Azat Khuzhin).
  • Разрешён запуск Docker с произвольным UID. #19374 (filimonov).
  • Исправлено неверное выравнивание значений типа данных IPv4 в форматах Pretty. Они выравнивались по правому краю вместо левого. Это закрывает #19184. #19339 (alexey-milovidov).
  • Добавлена возможность изменять max_server_memory_usage без перезапуска. Это закрывает #18154. #19186 (alexey-milovidov).
  • Исключение при вызове функции bar с определённым значением NaN в предыдущих версиях могло несколько вводить в заблуждение. Это исправляет #19088. #19107 (alexey-milovidov).
  • Явно установлены uid/gid пользователя и группы clickhouse на фиксированное значение 101 в образах clickhouse-server. #19096 (filimonov).
  • Исправлена ошибка PeekableReadBuffer: Memory limit exceed при вставке данных, содержащих очень длинные строки. Исправляет #18690. #18979 (tavplubix).
  • Docker-образ: несколько улучшений точки входа clickhouse-server. #18954 (filimonov).
  • Добавлены normalizeQueryKeepNames и normalizedQueryHashKeepNames, чтобы нормализовать запросы без маскировки длинных имен с помощью ?. Это помогает лучше анализировать сложные логи запросов. #18910 (Amos Bird).
  • Проверять поблочные контрольные суммы распределённого батча на стороне отправителя перед отправкой (без повторного чтения файла — контрольные суммы проверяются в процессе чтения), что позволяет избежать «зависания» INSERT на стороне получателя (в случае усечённого .bin-файла на стороне отправителя). Не читать .bin-файлы дважды для пакетного INSERT (ранее это требовалось для вычисления числа строк/байт с учётом схлопывания, теперь эта информация включена в заголовок, при этом сохранена обратная совместимость). #18853 (Azat Khuzhin).
  • Исправлены проблемы с RIGHT и FULL JOIN таблиц с состояниями агрегатных функций. В предыдущих версиях выбрасывалось исключение, связанное с методом cloneResized. #18818 (templarzq).
  • Добавлены настройки S3-эндпоинтов на основе префиксов. #18812 (Vladimir Chebotarev).
  • Добавлена поддержка типов аргументов [UInt8, UInt16, UInt32, UInt64] в функциях bitmapTransform, bitmapSubsetInRange, bitmapSubsetLimit, bitmapContains. Это закрывает #18713. #18791 (sundyli).
  • Разрешить дополнительное использование псевдонимов для CTE (Common Table Expressions). Распространить CSE (устранение общих подвыражений, Common Subexpressions Elimination) на подзапросы того же уровня при enable_global_with_statement = 1. Это исправляет #17378. Это также исправляет https://github.com/ClickHouse/ClickHouse/pull/16575#issuecomment-753416235. #18684 (Amos Bird).
  • Обновлена librdkafka до версии v1.6.0-RC2. Исправлена проблема #18668. #18671 (filimonov).
  • При возникновении неожиданных исключений автоматически перезапускать фоновый поток, который отвечает за выполнение распределённых DDL‑запросов. Исправляет #17991. #18285 (徐炘).
  • Обновлён AWS C++ SDK для поддержки глобальных регионов в S3. #17870 (Vladimir Chebotarev).
  • Добавлена поддержка предложения WITH ... [AND] [PERIODIC] REFRESH [interval_in_sec] при создании таблиц типа LIVE VIEW. #14822 (vzakaznikov).
  • Ограничены запросы MODIFY TTL для таблиц MergeTree, созданных в старом синтаксисе. Ранее такой запрос успешно выполнялся, но фактически не оказывал никакого эффекта. #19064 (Anton Popov).

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

  • Исправлена ошибка в анализе индексов для бинарных функций с константным аргументом, приводившая к некорректным результатам запросов. Это исправляет #18364. #18373 (Amos Bird).
  • Исправлена ошибка запуска сервера при наличии таблиц с выражениями по умолчанию, содержащими dictGet(). Добавлена возможность получать тип возвращаемого значения dictGet() без загрузки словаря. #19805 (Vitaly Baranov).
  • Устранено падение сервера при выполнении запроса с функцией if, возвращающей тип Tuple в качестве результата ветвей then/else, когда Tuple содержит Array или другой сложный тип. Исправляет #18356. #20133 (alesapin).
  • MaterializeMySQL (экспериментальная возможность): исправлена репликация для запросов, обновляющих несколько таблиц. #20066 (Håvard Kvålen).
  • Предотвращена ошибка «Connection refused» в Docker во время выполнения инициализационного скрипта. #20012 (filimonov).
  • EmbeddedRocksDB — экспериментальное хранилище. Исправлена проблема, связанная с отсутствием корректной проверки типов. Код упрощён. Это исправление закрывает #19967. #19972 (alexey-milovidov).
  • Исправлена ошибка сегментации в функции fromModifiedJulianDay, возникающая при типе аргумента Nullable(T) для любого целочисленного типа, отличного от Int32. #19959 (PHO).
  • Функция greatCircleAngle в предыдущих версиях возвращала неточные значения. Это исправление закрывает #19769. #19789 (alexey-milovidov).
  • Исправлена редкая ошибка, из-за которой некоторые реплицируемые операции (такие как mutation) не могли обработать отдельные части после повреждения данных. Исправляет #19593. #19702 (alesapin).
  • Фоновый поток, выполняющий запросы ON CLUSTER, мог зависнуть, ожидая, что удалённая реплицируемая таблица выполнит какое-либо действие. Это исправлено. #19684 (yiguolei).
  • Исправлена некорректная десериализация описания столбцов. Она делала невозможным выполнение запроса INSERT в таблицу, содержащую столбец с именем \. #19479 (alexey-milovidov).
  • Помечать распределённый пакет как повреждённый, если один из файлов содержит пустой блок данных. #19449 (Azat Khuzhin).
  • Исправлена крайне редкая ошибка, из-за которой мутация могла зависнуть после DROP/DETACH/REPLACE/MOVE PARTITION. Она была частично исправлена в #15537 для большинства случаев. #19443 (tavplubix).
  • Исправлена потенциальная ошибка Extremes transform was already added to pipeline. Исправляет #14100. #19430 (Nikolai Kochetov).
  • Исправлено значение по умолчанию в типах JOIN с ненулевым значением по умолчанию (например, для некоторых Enum). Закрывает #18197. #19360 (vdimir).
  • Не помечать файл для распределённой отправки как повреждённый при достижении конца файла (EOF). #19290 (Azat Khuzhin).
  • Исправлена утечка файлового дескриптора канала (pipe) для async_socket_for_remote. #19153 (Azat Khuzhin).
  • Исправлено бесконечное чтение из файла в формате ORC (регрессия появилась в #10580). Устранена проблема #19095. #19134 (Nikolai Kochetov).
  • Исправлена проблема в модуле записи данных MergeTree, которая могла приводить к созданию меток большего размера, чем фиксированный размер гранулярности. Устраняет проблему #18913. #19123 (alesapin).
  • Исправлена ошибка при запуске, из-за которой ClickHouse не удавалось прочитать кодек сжатия из LowCardinality(Nullable(...)), что приводило к исключению Attempt to read after EOF. Исправляет #18340. #19101 (alesapin).
  • Упрощена реализация tupleHammingDistance. Добавлена поддержка кортежей произвольной, но одинаковой длины. Исправлена проблема #19029. #19084 (Nikolai Kochetov).
  • Теперь groupUniqArray возвращает корректный тип для аргумента типа Enum. Это закрывает #17875. #19019 (alexey-milovidov).
  • Исправлена возможная ошибка Expected single dictionary argument for function при использовании функции ignore с аргументом типа LowCardinality. Устраняет проблему #14275. #19016 (Nikolai Kochetov).
  • Исправлена проблема вставки столбца LowCardinality в таблицу с движком TinyLog. Устраняет #18629. #19010 (Nikolai Kochetov).
  • Исправлена небольшая проблема в операторе JOIN: он пытается материализовать константные столбцы, но наш код ожидает их в других местах. #18982 (Nikita Mikhaylov).
  • Отключена оптимизация optimize_move_functions_out_of_any, поскольку она не всегда корректна. Закрывает #18051. Закрывает #18973. #18981 (alexey-milovidov).
  • Устранено возможное исключение QueryPipeline stream: different number of columns, возникавшее при объединении шагов Expression в плане запроса. Исправлено #18190. #18980 (Nikolai Kochetov).
  • Исправлена очень редкая взаимоблокировка при завершении работы. #18977 (tavplubix).
  • Исправлены редкие сбои при исчерпании оперативной памяти на сервере. #18976 (tavplubix).
  • Исправлено некорректное поведение, при котором запрос ALTER TABLE ... DROP PART 'part_name' приводил к удалению всех блоков дедупликации во всей партиции. Исправляет #18874. #18969 (alesapin).
  • Исправлена проблема #18894: добавлена проверка, чтобы избежать исключения, когда длинный алиас столбца (в стиле 'table.column', обычно автоматически сгенерированный BI-инструментами вроде Looker) совпадает с длинным именем таблицы. #18968 (Daniel Qin).
  • Исправлена ошибка Task was not found in task queue (которая могла возникать только для удалённых запросов при async_socket_for_remote = 1). #18964 (Nikolai Kochetov).
  • Исправлена ошибка, из-за которой мутация с некоторым экранированным текстом (например, ALTER ... UPDATE e = CAST('foo', 'Enum8(\'foo\' = 1')) сериализовывалась некорректно. Исправляет #18878. #18944 (alesapin).
  • ATTACH PARTITION теперь сбрасывает мутации. #18804. #18935 (fastio).
  • Исправлена проблема с bitmapOrCardinality, которая могла приводить к разыменованию нулевого указателя. Это закрывает #18911. #18912 (sundyli).
  • Исправлена ошибка Attempt to read after eof при попытке привести NULL из Nullable(String) к Nullable(Decimal(P, S)). Теперь функция CAST возвращает NULL, когда не может разобрать десятичное число из nullable-строки. Исправляет #7690. #18718 (Winter Zhang).
  • Исправлена проблема преобразования типов данных для движка MySQL. #18124 (bo zeng).
  • Исправлено исключение, приводившее к аварийному завершению clickhouse-client при выполнении только select. #19790 (taiyang-li).

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

  • Запуск SQLancer (логический fuzzer SQL) в CI. #19006 (Ilya Yatsishin).
  • Query Fuzzer будет более активно выполнять фуззинг недавно добавленных тестов. Закрывает #18916. #19185 (alexey-milovidov).
  • Интеграция с Big List of Naughty Strings для улучшения фуззинга. #19480 (alexey-milovidov).
  • Добавлены интеграционные тесты, выполняемые с MSan. #18974 (alesapin).
  • Исправлены ошибки MemorySanitizer в cyrus-sasl и musl. #19821 (Ilya Yatsishin).
  • Проверка на недостаточное количество аргументов в функции positionCaseInsensitiveUTF8 вызывала срабатывание AddressSanitizer. #19720 (alexey-milovidov).
  • Удалён параметр --project-directory для docker-compose в интеграционных тестах. Исправлено форматирование логов из docker-контейнера. #19706 (Ilya Yatsishin).
  • Упрощена генерация macros.xml для интеграционных тестов. Больше нет избыточного логирования из dicttoxml. Проект dicttoxml неактивен более 5 лет. #19697 (Ilya Yatsishin).
  • Добавлена возможность явно включать или отключать watchdog через переменную окружения CLICKHOUSE_WATCHDOG_ENABLE. По умолчанию он включён, если сервер не присоединён к терминалу. #19522 (alexey-milovidov).
  • Добавлена возможность собирать ClickHouse с поддержкой Kafka на arm64. #19369 (filimonov).
  • Добавлена возможность собирать librdkafka без SSL. #19337 (filimonov).
  • Восстановлена поддержка ввода из Kafka в сборках для FreeBSD. #18924 (Alexandre Snarskii).
  • Исправлено потенциальное разыменование nullptr в табличной функции VALUES. #19357 (alexey-milovidov).
  • Предотвращены срабатывания UBSan в функции arrayElement, а также в substring и arraySum. Исправляет #19305. Исправляет #19287. Закрывает #19336. #19347 (alexey-milovidov).

Релиз ClickHouse 21.1

Релиз ClickHouse v21.1.3.32-stable, 2021-02-03

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

  • Исправлен сбой индекса BloomFilter. Исправляет #19757. #19884 (Maksim Kita).
  • Исправлено аварийное завершение при проталкивании предикатов в подзапрос с UNION DISTINCT. Это исправляет #19855. #19861 (Amos Bird).
  • Исправлена фильтрация по значениям типа UInt8, превышающим 127. #19799 (Anton Popov).
  • В предыдущих версиях нестандартные аргументы для функции arrayEnumerateUniq могли приводить к аварийному завершению или бесконечному циклу. Это исправление закрывает #19787. #19788 (alexey-milovidov).
  • Исправлено переполнение стека при использовании точного сравнения арифметического типа со строковым типом. #19773 (tavplubix).
  • Исправлена ошибка, вызывавшая сбой при использовании имени вложенного столбца в WHERE или PREWHERE. Исправляет #19755. #19763 (Nikolai Kochetov).
  • Исправлена ошибка сегментации в функции bitmapAndnot. Исправлена проблема #19668. #19713 (Maksim Kita).
  • Некоторые функции, работающие с большими целыми числами, могут приводить к segfault. Большие целые числа — экспериментальная возможность. Это закрывает #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).
  • Было возможно чтение неинициализированной памяти в функциях encrypt/decrypt при передаче пустой строки в качестве IV (инициализационного вектора). Это закрывает #19391. #19397 (alexey-milovidov).
  • Исправлено потенциальное переполнение буфера в библиотеке Uber H3. См. https://github.com/uber/h3/issues/392. Это закрывает #19219. #19383 (alexey-milovidov).
  • Исправлен столбец system.parts_state (ошибка LOGICAL_ERROR при запросе этого столбца из-за некорректного порядка). #19346 (Azat Khuzhin).
  • Исправлено потенциальное получение некорректного результата или segfault при агрегации, если материализованное представление и его целевая таблица имеют разную структуру. Исправление для #18063. #19322 (tavplubix).
  • Исправлена ошибка 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).
  • Исправлена ошибка There is no checkpoint при вставке данных через HTTP-интерфейс с использованием формата Template или CustomSeparated. Исправлено #19021. #19072 (tavplubix).
  • Отключено свёртывание констант в подзапросах на этапе анализа, если результат не может быть вычислен. #18446 (Azat Khuzhin).
  • Мутация могла зависать в ожидании несуществующей части после MOVE или REPLACE PARTITION или, в редких случаях, после DETACH или DROP PARTITION. Проблема исправлена. #15537 (tavplubix).

Релиз ClickHouse v21.1.2.15-stable 2021-01-18

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

  • Настройка input_format_null_as_default включена по умолчанию. #17525 (alexey-milovidov).
  • Добавлена проверка ограничений для настроек профилей из конфигурации. Сервер не запустится, если users.xml содержит настройки, которые не удовлетворяют соответствующим ограничениям. #18486 (tavplubix).
  • Ограничено использование ALTER MODIFY SETTING для изменения настроек хранения, влияющих на части данных (write_final_mark и enable_mixed_granularity_parts). #18306 (Amos Bird).
  • Значение insert_quorum_parallel по умолчанию установлено в 1. Это значительно удобнее в использовании, чем «последовательные» кворумные вставки. Но если вы полагаетесь на последовательную согласованность, следует вернуть значение настройки обратно в ноль. #17567 (alexey-milovidov).
  • Удалена функция sumburConsistentHash. Это закрывает #18120. #18656 (alexey-milovidov).
  • Удалены агрегатные функции timeSeriesGroupSum, timeSeriesGroupRateSum, потому что один мой знакомый сказал, что они никогда не работали. Это исправляет #16869. Если вам всё же удалось успешно использовать эти функции, напишите письмо на feedback@clickhouse.com. #17423 (alexey-milovidov).
  • Запрещён вызов toUnixTimestamp(Date()) (раньше он просто возвращал представление Date в виде UInt16). #17376 (Azat Khuzhin).
  • Разрешено использовать расширенные целочисленные типы (Int128, Int256, UInt256) в функциях avg и avgWeighted. Также разрешено использовать разные типы (целочисленный, десятичный, с плавающей запятой) для значения и для веса в функции avgWeighted. Это обратно несовместимое изменение: теперь функции avg и avgWeighted всегда возвращают Float64 (как задокументировано). До этого изменения типом результата для аргументов типа Decimal также был Decimal. #15419 (Mike).
  • Выражение toUUID(N) больше не работает. Замените его на toUUID('00000000-0000-0000-0000-000000000000'). Это изменение обусловлено неочевидными результатами toUUID(N), где N не равно нулю.
  • SSL-сертификаты с некорректным значением "key usage" отклоняются. В предыдущих версиях они продолжали работать. См. #19262.
  • Ссылки incl на файл подстановок (/etc/metrika.xml) были удалены из конфигурации по умолчанию (<remote_servers>, <zookeeper>, <macros>, <compression>, <networks>). Если вы использовали файл подстановок и полагались на эти неявные ссылки, вам следует добавить их обратно вручную и явно, добавив соответствующие секции с атрибутами incl="..." перед обновлением. См. #18740 (alexey-milovidov).

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

  • Реализована поддержка протокола gRPC в ClickHouse. #15111 (Vitaly Baranov).
  • Добавлена возможность использования нескольких кластеров ZooKeeper. #17070 (fastio).
  • Добавлена поддержка запросов REPLACE TABLE и CREATE OR REPLACE TABLE. #18521 (tavplubix).
  • Реализовать UNION DISTINCT и по умолчанию трактовать простой оператор UNION как UNION DISTINCT. Добавить настройку union_default_mode, которая позволяет рассматривать его как UNION ALL или требовать явного указания режима. #16338 (flynn).
  • Добавлена функция accurateCastOrNull. Это закрывает #10290. Добавлены преобразования типов в выражениях вида x IN (subquery). Это закрывает #10266. #16724 (Maksim Kita).
  • Словарь IP-адресов напрямую поддерживает типы IPv4 / IPv6. #17571 (vdimir).
  • Словарь IP теперь поддерживает выборку по ключам. Это исправляет #18241. #18480 (vdimir).
  • Добавлена поддержка сжатия и распаковки *.zst для импорта и экспорта данных. Теперь можно использовать *.zst в функции file() и Content-encoding: zstd в HTTP‑клиенте. Тем самым закрывается задача #16791. #17144 (Abi Palagashvili).
  • Добавлены агрегатные функции mannWitneyUTest, studentTTest и welchTTest. Немного отрефакторена функция rankCorr. #16883 (Nikita Mikhaylov).
  • Добавлены функции countMatches/countMatchesCaseInsensitive. #17459 (Azat Khuzhin).
  • Реализованы функции countSubstrings()/countSubstringsCaseInsensitive()/countSubstringsCaseInsensitiveUTF8() (подсчёт количества вхождений подстроки). #17347 (Azat Khuzhin).
  • Добавлена информация об используемых базах данных, таблицах и столбцах в таблице system.query_log. Добавлены поля query_kind и normalized_query_hash. #17726 (Amos Bird).
  • Добавлена настройка optimize_on_insert. При включении для вставляемого блока данных выполняется то же преобразование, как если бы над этим блоком было выполнено слияние (например, Replacing, Collapsing, Aggregating...). Эта настройка включена по умолчанию. Она может повлиять на поведение материализованных представлений и MaterializeMySQL (см. подробное описание). Тем самым закрывается #10683. #16954 (Kruglov Pavel).
  • Аутентификация по Kerberos для HDFS. #16621 (Ilya Golshtein).
  • Добавлена поддержка оператора SHOW SETTINGS для вывода параметров из system.settings. Также поддерживаются оператор SHOW CHANGED SETTINGS и условие LIKE/ILIKE. #18056 (Jianmei Zhang).
  • Функция position теперь поддерживает синтаксис POSITION(needle IN haystack) для обеспечения совместимости с SQL. Это закрывает #18701. ... #18779 (Jianmei Zhang).
  • Теперь для таблиц семейства MergeTree появилась новая настройка хранилища max_partitions_to_read. Она ограничивает максимальное число партиций, которые могут быть прочитаны в одном запросе. Также добавлена пользовательская настройка force_max_partition_limit для жёсткого применения этого ограничения. #18712 (Amos Bird).
  • Добавлен столбец query_id в system.part_log для вставленных частей. Закрывает #10097. #18644 (flynn).
  • Добавлена возможность использовать CREATE TABLE AS SELECT с явным указанием столбцов. Пример: CREATE TABLE t1 (x String) ENGINE = Memory AS SELECT 1;. #18060 (Maksim Kita).
  • Добавлены агрегатные функции arrayMin, arrayMax, arrayAvg. #18032 (Maksim Kita).
  • Реализован запрос ATTACH TABLE name FROM 'path/to/data/' (col1 Type1, .... Он создаёт новую таблицу с указанной структурой и присоединяет к ней данные из указанного каталога в user_files. #17903 (tavplubix).
  • Добавлена поддержка мутаций для StorageMemory, что закрывает задачу #9117. #15127 (flynn).
  • Поддерживается синтаксис EXISTS DATABASE name. #18458 (Du Chuan).
  • Добавлена поддержка встроенных функций isIPv4String && isIPv6String, как в MySQL. #18349 (Du Chuan).
  • Добавлена новая настройка insert_distributed_one_random_shard = 1, позволяющая выполнять вставку в многошардовую распределённую таблицу без распределяющего ключа. #18294 (Amos Bird).
  • Добавлены настройки min_compress_block_size и max_compress_block_size в MergeTreeSettings, которые имеют приоритет над глобальными настройками и применяются при их установке. Закрывает 13890. #17867 (flynn).
  • Добавлена поддержка 64-битных roaring-битмапов. #17858 (Andy Yang).
  • Расширен синтаксис OPTIMIZE ... DEDUPLICATE, что позволяет задавать явный (или неявный с помощью звёздочки/трансформеров столбцов) список столбцов, по которым выполняется проверка на дубликаты. ... #17846 (Vasily Nemkov).
  • Добавлены функции toModifiedJulianDay, fromModifiedJulianDay, toModifiedJulianDayOrNull и fromModifiedJulianDayOrNull. Эти функции преобразуют дату в пролептическом григорианском календаре в число модифицированного юлианского дня и обратно. #17750 (PHO).
  • Добавлена возможность использовать пользовательский список доменов верхнего уровня (TLD): добавлены функции firstSignificantSubdomainCustom, cutToFirstSignificantSubdomainCustom. #17748 (Azat Khuzhin).
  • Добавлена поддержка протокола PROXYv1 для инкапсуляции нативного TCP-интерфейса. Добавлена возможность привязывать квоты к IP-адресу, переданному прокси (применяется для адреса из PROXYv1 и для X-Forwarded-For из HTTP-интерфейса). Это полезно, если вы предоставляете доступ к ClickHouse только через доверенный прокси (например, CloudFlare), но хотите учитывать потребление ресурсов пользователями по их исходным IP-адресам. Этим исправляется #17268. #17707 (alexey-milovidov).
  • Теперь clickhouse-client поддерживает открытие редактора, заданного в переменной окружения EDITOR, для редактирования команд. Alt-Shift-E. #17665 (Amos Bird).
  • Добавлена функция encodeXMLComponent для экранирования символов при помещении строки в текстовый узел или атрибут XML. #17659 (nauta).
  • Введён синтаксис DETACH TABLE/VIEW ... PERMANENTLY, чтобы после перезапуска таблица не появлялась снова автоматически (только по явному запросу). Таблицу по-прежнему можно снова присоединить, используя короткий синтаксис ATTACH TABLE. Реализует #5555. Исправляет #13850. #17642 (filimonov).
  • Добавлены асинхронные метрики общего количества строк, байт и частей в таблицах MergeTree. Исправляет #11714. #17639 (flynn).
  • Добавлены настройки limit и offset для пагинации вне SQL-запроса: #16176. Они полезны для построения API. Эти две настройки будут влиять на запрос SELECT так, как если бы он выполнялся как select * from (your_original_select_query) t limit xxx offset xxx;. #17633 (hexiaoting).
  • Добавлен новый комбинатор агрегатной функции: -SimpleState для построения типов SimpleAggregateFunction в запросе. Он полезен для определения MaterializedView движка AggregatingMergeTree и также будет полезен для проекций. #16853 (Amos Bird).
  • Добавлен параметр queries-file для clickhouse-client и clickhouse-local. #15930 (Maksim Kita).
  • Добавлен параметр query в утилиту clickhouse-benchmark. #17832 (Maksim Kita).
  • EXPLAIN AST теперь поддерживает запросы не только типа SELECT. #18136 (taiyang-li).

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

  • Добавлены функции для вычисления minHash и simHash текстовых n-грамм и шинглов. Они предназначены для поиска частичных дубликатов. Также добавлены функции bitHammingDistance и tupleHammingDistance. #7649 (flynn).
  • Добавлен новый тип данных Map. См. #1841. Первая версия типа Map поддерживает только значения типа String в качестве ключей и значений. #15806 (hexiaoting).
  • Реализован альтернативный SQL-парсер, основанный на ANTLR4 runtime и сгенерированный из EBNF-грамматики. #11298 (Ivan).

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

  • Новая реализация словаря IP-адресов с меньшим потреблением памяти, улучшенной производительностью в некоторых случаях и исправленными ошибками. #16804 (vdimir).
  • Параллельное форматирование при экспорте данных. #11617 (Nikita Mikhaylov).
  • Интеграция с LDAP: Добавлен параметр verification_cooldown в конфигурацию подключения к серверу LDAP, позволяющий кэшировать успешные операции bind на настраиваемый период времени. #15988 (Denis Glazachev).
  • Добавлена опция --no-system-table для clickhouse-local для запуска без системных таблиц. Это позволяет избежать инициализации DateLUT, которая при старте может занимать заметное время (десятки миллисекунд). #18899 (alexey-milovidov).
  • Замените PODArray на PODArrayWithStackMemory в AggregateFunctionWindowFunnelData, чтобы повысить производительность функции windowFunnel. #18817 (flynn).
  • Не отправлять пустые блоки на шарды при синхронной вставке (INSERT) в таблицу типа Distributed. Это закрывает #14571. #18775 (alexey-milovidov).
  • Оптимизировано чтение в движке StorageMemory. #18052 (Maksim Kita).
  • Для преобразования чисел с плавающей запятой в строки вместо ryu теперь используется алгоритм Dragonbox. Это значительно повышает производительность такого преобразования. #17831 (Maksim Kita).
  • Ускорена реализация IPv6CIDRToRange. #17569 (vdimir).
  • Добавлена настройка remerge_sort_lowered_memory_bytes_ratio (если использование памяти после повторной сортировки не снижается как минимум на этот коэффициент, повторная сортировка будет отключена). #17539 (Azat Khuzhin).
  • Улучшена производительность AggregatingMergeTree с SimpleAggregateFunction(String) в составе первичного ключа. #17109 (Azat Khuzhin).
  • Теперь комбинатор -If девиртуализирован, а count корректно векторизован. Эти изменения относятся к этому PR. #17043 (Amos Bird).
  • Исправлена проблема с производительностью чтения из таблиц Merge при работе с очень большим числом таблиц MergeTree. Исправляет #7748. #16988 (Anton Popov).
  • Улучшена производительность функции repeat. #16937 (satanson).
  • Незначительно улучшена производительность парсинга чисел с плавающей запятой. #16809 (Maksim Kita).
  • Добавлена возможность пропускать уже объединённые партиции для OPTIMIZE TABLE ... FINAL. #15939 (Kruglov Pavel).
  • Интегрирована библиотека fast_float от Daniel Lemire для парсинга чисел с плавающей запятой. #16787 (Maksim Kita). Она не включена по умолчанию, так как её производительность всё ещё ниже, чем у базового парсера чисел с плавающей запятой в ClickHouse.
  • Исправлена настройка max_distributed_connections (она влияет на prefer_localhost_replica = 1 и max_threads != max_distributed_connections). #17848 (Azat Khuzhin).
  • Адаптивный выбор загрузки данных в S3 одной или несколькими частями. Режим загрузки одной частью управляется новой настройкой max_single_part_upload_size. #17934 (Pavel Kovalenko).
  • Поддержка асинхронных задач в PipelineExecutor. Базовая поддержка асинхронных сокетов для удалённых запросов. #17868 (Nikolai Kochetov).
  • Позволяет использовать оптимизацию optimize_move_to_prewhere с компактными частями, когда размеры столбцов неизвестны. #17330 (Anton Popov).

Улучшение

  • Избегает взаимоблокировки при выполнении операции INSERT SELECT в ту же таблицу с движками таблиц TinyLog или Log. Исправляет #6802. Исправляет #18691. Исправляет #16812. Исправляет #14570. #15260 (alexey-milovidov).
  • Добавлена поддержка синтаксиса SHOW CREATE VIEW name, как в MySQL. #18095 (Du Chuan).
  • Разрешены все запросы вида Decimal * Float и наоборот, включая агрегатные (например, SELECT sum(decimal_field * 1.1) или SELECT dec_col * float_col), результирующий тип — Float32 или Float64. #18145 (Mike).
  • Улучшен минимальный веб-интерфейс: добавлена история; добавлена поддержка обмена (sharing); устранено состояние гонки между запросами; добавлены индикаторы выполняющегося и готового запроса; добавлен favicon; добавлено распознавание Ctrl+Enter, если текстовая область не в фокусе. #17293 #17770 (alexey-milovidov).
  • clickhouse-server не отправлял запрос close на сервер ZooKeeper. #16837 (alesapin).
  • Предотвращено аварийное завершение работы сервера при слишком низких лимитах памяти (max_memory_usage = 1 / max_untracked_memory = 1). #17453 (Azat Khuzhin).
  • Исправлен недетерминированный результат функции windowFunnel при одинаковых метках времени для разных событий. #18884 (Fuwang Hu).
  • Docker: Явно задаёт UID/GID пользователя clickhouse и его группы равными фиксированному значению 101 в Docker-образах clickhouse-server. #19096 (filimonov).
  • Асинхронные операции INSERT в таблицы Distributed: Добавлены две новые настройки (по аналогии с семейством MergeTree): - fsync_after_insert — выполнять fsync для каждой вставки. Снижает производительность вставок. - fsync_directories — выполнять fsync для временного каталога (используется только для асинхронных INSERT) после всех операций (записей, переименований и т. д.). #18864 (Azat Khuzhin).
  • Команда SYSTEM KILL теперь работает в Docker. Это исправляет проблему #18847. #18848 (alexey-milovidov).
  • Раскрывать макросы в пути ZooKeeper при выполнении FETCH PARTITION. #18839 (fastio).
  • Примените ALTER TABLE <replicated_table> ON CLUSTER MODIFY SETTING ... ко всем репликам, так как мы не реплицируем такие команды ALTER. #18789 (Amos Bird).
  • Разрешить трансформеру столбцов EXCEPT принимать строку в качестве шаблона регулярного выражения. Это устраняет #18685. #18699 (Amos Bird).
  • Исправлена работа SimpleAggregateFunction в SummingMergeTree. Теперь она работает как AggregateFunction. В предыдущих версиях значения просто суммировались, не учитывая агрегатную функцию. Это исправляет #18564. #8052. #18637 (Amos Bird). Ещё одно исправление использования SimpleAggregateFunction в SummingMergeTree. Это исправляет #18676. #18677 (Amos Bird).
  • Исправлена ошибка assert внутри аллокатора, когда последний аргумент функции bar равен NaN. Теперь выбрасывается обычное исключение ClickHouse. Это исправляет #17876. #18520 (Nikita Mikhaylov).
  • Исправлена проблема с удобством использования: в некоторых инструментах после сообщения об исключении отсутствовал перевод строки. #18444 (alexey-milovidov).
  • Добавлена возможность изменять тип столбца первичного и ключа партиционирования с LowCardinality(Type) на Type и обратно. Также добавлена возможность изменять тип столбца первичного ключа с EnumX на тип IntX. Исправлена #5604. #18362 (alesapin).
  • Реализован доступ к полям с помощью untuple. #18133. #18309 (hexiaoting).
  • Разрешён разбор полей типа Array из CSV, если они представлены строкой, содержащей массив, сериализованный как вложенный CSV. Пример: "[""Hello"", ""world"", ""42"""" TV""]" будет разобран как ['Hello', 'world', '42" TV']. Разрешён разбор массива в CSV в строке без окружающих квадратных скобок. Пример: "'Hello', 'world', '42"" TV'" будет разобран как ['Hello', 'world', '42" TV']. #18271 (alexey-milovidov).
  • Улучшен расчет адаптивной гранулярности для широких частей таблиц MergeTree. #18223 (alesapin).
  • Теперь clickhouse install работает на Mac. Проблема заключалась в том, что на этой платформе нет procfs. #18201 (Nikita Mikhaylov).
  • Улучшены подсказки по синтаксису запросов SHOW .... #18183 (Du Chuan).
  • Поддержка агрегирования массивов функциями arrayMin, arrayMax, arraySum, arrayAvg для типов данных Int128, Int256, UInt256. #18147 (Maksim Kita).
  • Добавлен параметр disk в настройки хранилища Set и Join. #18112 (Grigory Pervakov).
  • Управление доступом: теперь табличная функция merge() требует, чтобы у текущего пользователя была привилегия SELECT на каждую таблицу, из которой она получает данные. Этот PR исправляет #16964. #18104 #17983 (Vitaly Baranov).
  • Временные таблицы теперь видны в системных таблицах system.tables и system.columns только в той сессии, в которой они были созданы. Внутренняя база данных _temporary_and_external_tables теперь скрыта в этих системных таблицах; вместо этого временные таблицы отображаются как таблицы с пустым именем базы данных и установленным флагом is_temporary. #18014 (Vitaly Baranov).
  • Исправлена проблема с отображением в clickhouse-client при изменении размера окна терминала. #18009 (Amos Bird).
  • Уменьшена детализация логов для событий при обрыве соединения клиентом: уровень логирования понижен с Warning до Information. #18005 (filimonov).
  • Принудительное удаление пустых или некорректных файлов метаданных из файловой системы для DiskS3. S3 — экспериментальная возможность. #17935 (Pavel Kovalenko).
  • Управление доступом: allow_introspection_functions=0 запрещает использование функций интроспекции, но больше не запрещает выдачу привилегий на них (получателю привилегий нужно будет установить allow_introspection_functions=1, чтобы иметь возможность ими воспользоваться). Аналогично, allow_ddl=0 запрещает использование DDL-команд, но больше не запрещает выдачу привилегий на них. #17908 (Vitaly Baranov).
  • Улучшение удобства работы: подсказки для названий столбцов. #17112. #17857 (fastio).
  • Добавлена диагностическая информация при попытке двух таблиц движка Merge читать данные друг друга. #17854 (徐炘).
  • Добавлена возможность переопределять значение тайм-аута для выполняемого скрипта при использовании Docker-образа ClickHouse. #17818 (Guillaume Tassery).
  • Проверяет синтаксис определения движка таблиц системных логов, чтобы предотвратить некоторые ошибки конфигурации. Отмечается, что эта проверка не является семантической, то есть такие ошибки, как несуществующие столбцы или функции в выражениях, будут обнаружены только при создании таблицы. #17739 (Du Chuan).
  • Убрано выбрасывание исключения при инициализации таблицы RabbitMQ при отсутствии соединения (переподключение будет выполняться в фоновом режиме). #17709 (Kseniia Sumarokova).
  • Не игнорируйте ограничения памяти сервера при сбросе буфера. #17646 (Azat Khuzhin).
  • Переход на пропатченную версию RocksDB (из ClickHouse-Extras) для исправления ошибки типа use-after-free. #17643 (Nikita Mikhaylov).
  • Добавлено смещение в сообщение об исключении при параллельном парсинге. Это исправляет #17457. #17641 (Nikita Mikhaylov).
  • Не выбрасывать ошибку "Too many parts" во время выполнения запроса INSERT. #17566 (alexey-milovidov).
  • Разрешено использование параметров запроса в операторе UPDATE в запросе ALTER. Исправляет #10976. #17563 (alexey-milovidov).
  • Обфускатор запросов: предотвращает использование некоторых ключевых слов SQL в качестве имён идентификаторов. #17526 (alexey-milovidov).
  • Экспортировать через серверную метрику идентификатор текущей максимальной DDL-записи, выполненной DDLWorker. Это полезно, чтобы проверить, не завис ли где-нибудь DDLWorker. #17464 (Amos Bird).
  • Экспорт асинхронных метрик текущих потоков всех серверов. Это полезно для отладки проблем вроде этой. #17463 (Amos Bird).
  • Теперь в запросы с подстановочным символом (*) включаются динамические столбцы, такие как MATERIALIZED и ALIAS, когда параметры asterisk_include_materialized_columns и asterisk_include_alias_columns включены. #17462 (Ken Chen).
  • Добавлена возможность задавать TTL для удаления старых записей из таблиц системного журнала, используя атрибут <ttl> в config.xml. #17438 (Du Chuan).
  • Теперь запросы, приходящие на сервер по протоколам MySQL и PostgreSQL, имеют разные типы интерфейса (их можно увидеть в столбце interface таблицы system.query_log): 4 для MySQL и 5 для PostgreSQL, вместо ранее использовавшегося значения 1, которое теперь используется только для нативного протокола. #17437 (Vitaly Baranov).
  • Исправлен разбор клаузы SETTINGS в запросе INSERT ... SELECT ... SETTINGS. #17414 (Azat Khuzhin).
  • Исправлен учёт памяти в RadixSort. #17412 (Nikita Mikhaylov).
  • Добавлена проверка на eof в receiveHello на сервере, чтобы предотвратить исключение Attempt to read after eof. #17365 (Kruglov Pavel).
  • Избежать возможного переполнения стека при преобразовании в bigint. Тип больших целых чисел носит экспериментальный характер. #17269 (flynn).
  • Теперь индексы типа set работают с GLOBAL IN. Это исправляет #17232, #5576. #17253 (Amos Bird).
  • Добавлен предел числа HTTP‑перенаправлений в запросах к хранилищу S3 (s3_max_redirects). #17220 (ianton-ru).
  • Когда комбинатор -OrNull используется вместе с комбинаторами -If, -Merge, -MergeState, -State, -OrNull следует указывать первым. #16935 (flynn).
  • Добавлена поддержка настройки HTTP‑прокси и HTTPS‑эндпоинта для S3. #16861 (Pavel Kovalenko).
  • Добавлена корректная аутентификация через переменные окружения, ~/.aws и AssumeRole для клиента S3. #16856 (Vladimir Chebotarev).
  • Добавлены дополнительные спаны OpenTelemetry. Добавлен пример экспорта данных спанов в Zipkin. #16535 (Alexander Kuzmenkov).
  • Кэш-словари: полностью устранены обратные вызовы и блокировки при доступе к ним. Ключи не разделяются на «не найденные» и «просроченные», а хранятся в одной и той же карте во время выполнения запроса. #14958 (Nikita Mikhaylov).
  • Исправлены неработающие fsync_part_directory/fsync_after_insert/in_memory_parts_insert_sync (экспериментальная функциональность). #18845 (Azat Khuzhin).
  • Разрешено использование движка Atomic для вложенной базы данных движка MaterializeMySQL. #14849 (tavplubix).

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

  • Исправлена проблема, из-за которой сервер в крайне редких случаях мог перестать принимать подключения. #17542 (Amos Bird, alexey-milovidov).
  • Исправлен анализ индексов для бинарных функций с константным аргументом, приводивший к некорректным результатам запросов. Это исправление решает #18364. #18373 (Amos Bird).
  • Исправлен возможный некорректный анализ индекса, когда типы операндов при сравнении с индексом различаются. Это исправление закрывает #17122. #17145 (Amos Bird).
  • Отключена запись с AIO во время слияний, так как она в крайне редких случаях может приводить к повреждению данных в столбцах первичного ключа. #18481 (alesapin).
  • Ограничено слияние широких частей в компактные. При вертикальном слиянии это приводило к повреждению результирующей части. #18381 (Anton Popov).
  • Исправлена возможная неполнота результата запроса при чтении из MergeTree* в случае read backoff (сообщение <Debug> MergeTreeReadPool: Will lower number of threads в логах). Проблема была введена в #16423. Исправляет #18137. #18216 (Nikolai Kochetov).
  • Исправлена ошибка использования после освобождения памяти (use-after-free) в библиотеке rocksdb. #18862 (sundyli).
  • Исправлено бесконечное чтение из файла в формате ORC (ошибка возникла в #10580). Исправлена #19095. #19134 (Nikolai Kochetov).
  • Исправлена ошибка в модуле записи данных MergeTree, которая могла приводить к созданию маркеров с размером больше фиксированного размера гранулы. Исправляет #18913. #19123 (alesapin).
  • Исправлена ошибка при запуске, из‑за которой ClickHouse не удавалось прочитать кодек сжатия из LowCardinality(Nullable(...)) и выбрасывалось исключение Attempt to read after EOF. Исправляет #18340. #19101 (alesapin).
  • Ограничены запросы 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).
  • Операция JOIN пытается материализовать константные столбцы, но наш код ожидает их в других местах. #18982 (Nikita Mikhaylov).
  • Отключить настройку optimize_move_functions_out_of_any, так как эта оптимизация не всегда работает корректно. Это исправляет #18051. Это исправляет #18973. #18981 (alexey-milovidov).
  • Исправлено возможное исключение QueryPipeline stream: different number of columns, возникавшее при слиянии шагов Expression в плане запроса. Исправляет #18190. #18980 (Nikolai Kochetov).
  • Исправлена крайне редкая взаимоблокировка при завершении работы. #18977 (tavplubix).
  • Исправлена ошибка, из-за которой запрос ALTER TABLE ... DROP PART 'part_name' удалял все блоки дедупликации во всей партиции. Исправляет #18874. #18969 (alesapin).
  • Операция ATTACH PARTITION должна сбрасывать мутацию. #18804. #18935 (fastio).
  • Исправлена ошибка в bitmapOrCardinality, которая могла привести к разыменованию нулевого указателя (nullptr). Это закрывает #18911. #18912 (sundyli).
  • Исправлено возможное зависание clickhouse-local при завершении работы. Это исправляет #18891. #18893 (alexey-milovidov).
  • Запросы к внешним базам данных (MySQL, ODBC, JDBC) некорректно переписывались, если содержали выражение вида x IN table. Это исправляет #9756. #18876 (alexey-milovidov).
  • Исправлен комбинатор *If с унарной функцией и типами Nullable. #18806 (Azat Khuzhin).
  • Исправлена проблема, из-за которой асинхронные распределённые INSERT-запросы могли быть отклонены сервером, если параметр network_compression_method был глобально установлен в значение, отличающееся от значения по умолчанию. Это исправляет #18741. #18776 (alexey-milovidov).
  • Исправлена ошибка Attempt to read after eof при попытке привести NULL из Nullable(String) к Nullable(Decimal(P, S)). Теперь функция CAST возвращает NULL, если не может преобразовать десятичное число из строки типа Nullable(String). Исправляет #7690. #18718 (Winter Zhang).
  • Исправлена незначительная проблема с логированием. #18717 (sundyli).
  • Исправлена проблема удаления пустых кусков в таблицах ReplicatedMergeTree, созданных со старым синтаксисом. Исправляет ошибку #18582. #18614 (Anton Popov).
  • Исправлена предыдущая ошибка переполнения даты при различных значениях. Значение типа Date строго ограничено датой "2106-02-07", приведение даты > "2106-02-07" приводит к значению 0. #18565 (hexiaoting).
  • Добавлена поддержка типа данных FixedString для репликации из MySQL. Репликация из MySQL — экспериментальная функция. Этот патч исправляет #18450, а также #6556. #18553 (awesomeleo).
  • Исправлена потенциальная ошибка Pipeline stuck при использовании ORDER BY после подзапроса с соединением RIGHT или FULL. #18550 (Nikolai Kochetov).
  • Исправлена ошибка, которая могла приводить к зависанию запросов ALTER после принудительного завершения соответствующей мутации командой kill. Обнаружено с помощью thread fuzzer. #18518 (alesapin).
  • Корректная поддержка значения 12AM в функции parseDateTimeBestEffort. Это исправляет #18402. #18449 (vladimir-golovchenko).
  • Исправлена ошибка value is too short при выполнении функций toType(...) (toDate, toUInt32 и т. д.) с аргументом типа Nullable(String). Теперь такие функции возвращают NULL при ошибке разбора вместо генерации исключения. Исправляет #7673. #18445 (tavplubix).
  • Исправлено неожиданное поведение команды SHOW TABLES. #18431 (fastio).
  • Исправлено: комбинатор -SimpleState генерировал несовместимые тип аргумента и тип возвращаемого значения. #18404 (Amos Bird).
  • Исправлено возможное состояние гонки при одновременном использовании таблиц Set или Join и выполнении запросов к system.tables. #18385 (alexey-milovidov).
  • Исправлено заполнение таблицы system.settings_profile_elements. Этот PR исправляет #18231. #18379 (Vitaly Baranov).
  • Исправлены возможные падения в агрегатных функциях с комбинатором Distinct при использовании двухуровневой агрегации. Исправлена проблема #17682. #18365 (Anton Popov).
  • Исправлена проблема, из-за которой процесс clickhouse-odbc-bridge был недоступен серверу на машинах с двойным стеком IPv4/IPv6; исправлена проблема, из-за которой обновления словарей ODBC выполнялись с использованием некорректных запросов и/или приводили к аварийному завершению процесса odbc-bridge; возможно, закрывает #14489. #18278 (Denis Glazachev).
  • Управление доступом: теперь запрос SELECT count() FROM table может быть выполнен, если у пользователя есть доступ как минимум к одному столбцу в таблице. Этот PR исправляет #10639. #18233 (Vitaly Baranov).
  • Управление доступом: SELECT JOIN теперь требует наличия привилегии SELECT для каждой из присоединяемых таблиц. Этот PR исправляет #17654. #18232 (Vitaly Baranov).
  • Исправлено сравнение ключей между типами Enum и Int. Исправляет #17989. #18214 (Amos Bird).
  • Репликация из MySQL (экспериментальная функция). Исправляет #18186, исправляет #16372. Исправлена проблема преобразования уникального ключа в движке базы данных MaterializeMySQL. #18211 (Winter Zhang).
  • Исправлена некорректная обработка запросов, использующих одновременно WITH FILL и WITH TIES #17466. #18188 (hexiaoting).
  • Исправлена вставка строки со значением по умолчанию в случае ошибки разбора в последнем столбце. Устраняет #17712. #18182 (Jianmei Zhang).
  • Исправлена ошибка Unknown setting profile при попытке установить профиль настроек. #18167 (tavplubix).
  • Исправлена ошибка, из-за которой запрос MODIFY COLUMN ... REMOVE TTL фактически не удалял TTL столбца. #18130 (alesapin).
  • Исправлено исключение std::out_of_range: basic_string при разборе URL-адресов S3. #18059 (Vladimir Chebotarev).
  • Исправлено сравнение DateTime64 и Date. Исправлены ошибки #13804 и #11222. ... #18050 (Vasily Nemkov).
  • Репликация из MySQL (экспериментальная функция): исправлены #15187, #17912, добавлена поддержка преобразования префиксного индекса MySQL для MaterializeMySQL. #17944 (Winter Zhang).
  • Когда ротация журналов сервера была настроена с использованием параметра logger.size с числовым значением больше 2^32, журналы не ротировались корректно. Ошибка исправлена. #17905 (Alexander Kuzmenkov).
  • Тривиальная оптимизация запроса приводила к неверному результату, если запрос содержал ARRAY JOIN (то есть запрос на самом деле нетривиален). #17887 (sundyli).
  • Исправлена возможная ошибка сегментации в агрегатной функции topK. Это исправление закрывает #17404. #17845 (Maksim Kita).
  • WAL (экспериментальная функция): не восстанавливать части из WAL, если in_memory_parts_enable_wal отключён. #17802 (detailyang).
  • Сообщение об исключении, связанном с максимальным размером удаляемой таблицы, отображалось некорректно. #17764 (alexey-milovidov).
  • Исправлена возможная ошибка сегментации при недостатке места при вставке в таблицу Distributed. #17737 (tavplubix).
  • Исправлена проблема, при которой ClickHouse не удавалось возобновить соединение с серверами MySQL. #17681 (Alexander Kazakov).
  • Windows: Исправлена ошибка Function not implemented при выполнении запроса RENAME в базе данных Atomic при работе ClickHouse в подсистеме Windows для Linux (WSL). Исправлена #17661. #17664 (tavplubix).
  • Могло некорректно определяться, является ли кластер кольцевым (перекрёстно реплицируемым), при выполнении запроса ON CLUSTER из‑за гонки при pool_size > 1. Исправлено. #17640 (tavplubix).
  • Исправлена проблема с пустой таблицей system.stack_trace при работе сервера в режиме демона. #17630 (Amos Bird).
  • Исключение fmt::v7::format_error может быть записано в лог в фоновом режиме для таблиц MergeTree. Это исправляет #17613. #17615 (alexey-milovidov).
  • При использовании clickhouse-client в интерактивном режиме с многострочными запросами однострочный комментарий ошибочно считался продолжающимся до конца запроса. Это исправляет #13654. #17565 (alexey-milovidov).
  • Исправлено зависание запроса ALTER, когда соответствующая мутация была остановлена на другой реплике. Исправлена проблема #16953. #17499 (alesapin).
  • Исправлена проблема с учетом памяти, когда ClickHouse занижал размер кэша меток. Это могло происходить при большом количестве очень маленьких файлов с метками. #17496 (alesapin).
  • Исправлена работа ORDER BY при включённой настройке optimize_redundant_functions_in_order_by. #17471 (Anton Popov).
  • Исправлены случаи появления дубликатов после DISTINCT, которые могли возникать из‑за некорректной оптимизации. Исправлено в #17294. #17296 (li chengxiang). #17439 (Nikolai Kochetov).
  • Исправлена проблема высокой загрузки CPU фоновыми задачами таблиц *MergeTree. #17416 (tavplubix).
  • Исправлен возможный сбой при чтении из таблицы JOIN с типами LowCardinality. Устраняет проблему #17228. #17397 (Nikolai Kochetov).
  • Репликация из MySQL (экспериментальная функция): Исправление #16835 — попытка устранить несоответствие заголовков выводу оператора MySQL SHOW. #17366 (Winter Zhang).
  • Исправлена работа с недетерминированными функциями в оптимизаторе предикатов. Исправлена проблема #17244. #17273 (Winter Zhang).
  • Исправлена потенциальная ошибка Unexpected packet Data received from client при выполнении распределённых запросов с LIMIT. #17254 (Azat Khuzhin).
  • Исправлена проблема с инвалидацией индекса множеств при наличии константных столбцов в подзапросе. Это исправляет #17246. #17249 (Amos Bird).
  • clickhouse-copier: исправление обработки таблиц без партиционирования #15235. #17248 (Qi Chen).
  • Исправлены потенциальные проблемы с мутациями для частей, хранящихся на диске S3 (экспериментальная функция). #17227 (Pavel Kovalenko).
  • Исправление ошибки в функции fuzzBits, связанный тикет: #16980. #17051 (hexiaoting).
  • Исправлена работа настройки optimize_distributed_group_by_sharding_key для запросов только с OFFSET. #16996 (Azat Khuzhin).
  • Исправлены запросы с JOIN из таблиц Merge к таблицам Distributed. #16993 (Azat Khuzhin).
  • Исправлена оптимизация ORDER BY с монотонными функциями. Исправлена ошибка #16107. #16956 (Anton Popov).
  • Исправлено некорректное сравнение типов DateTime64 с разными степенями точности. Исправлены #16655 ... #16952 (Vasily Nemkov).
  • Исправлена оптимизация GROUP BY при включённой настройке optimize_aggregators_of_group_by_keys и использовании JOIN. Исправляет #12604. #16951 (Anton Popov).
  • Незначительное исправление в запросе SHOW ACCESS. #16866 (tavplubix).
  • Исправлено поведение настройки optimize_trivial_count_query при использовании предиката по партициям. #16767 (Azat Khuzhin).
  • Возвращать количество затронутых строк для запросов INSERT по сетевому протоколу MySQL. Ранее ClickHouse всегда возвращал 0, теперь это исправлено. Исправляет #16605. #16715 (Winter Zhang).
  • Исправлено непоследовательное поведение, вызванное использованием select_sequential_consistency в оптимизированном простом запросе COUNT и в системных таблицах. #16309 (Hao Chen).
  • Выбрасывать ошибку, если трансформер столбца REPLACE применяется к несуществующему столбцу. #16183 (hexiaoting).
  • Генерировать исключение в случае условия ON, не являющегося equi-join, в RIGHT или FULL JOIN. #15162 (Artem Zuikov).

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

  • Добавлена простая проверка целостности бинарного файла ClickHouse. Она позволяет обнаруживать повреждение данных из‑за неисправного оборудования (битовая деградация на носителях данных или битовые сбои в ОЗУ). #18811 (alexey-milovidov).
  • Заменён OpenSSL на BoringSSL. Это позволяет избежать проблем при использовании санитайзеров. Исправляет #12490. Исправляет #17502. Исправляет #12952. #18129 (alexey-milovidov).
  • Упростили init-скрипт Sys/V. Он не работал в Ubuntu 12.04 и более ранних версиях. #17428 (alexey-milovidov).
  • В скрипт ./clickhouse install внесено несколько улучшений. #17421 (alexey-milovidov).
  • Теперь ClickHouse может выступать в роли фиктивного ZooKeeper. В настоящее время реализация хранилища представляет собой просто хеш-таблицу в памяти, а сервер частично поддерживает протокол ZooKeeper. #16877 (alesapin).
  • Устранена проблема с удалением неактивных наблюдателей списка для TestKeeperStorage (мок для ZooKeeper). #18065 (alesapin).
  • Добавлена команда SYSTEM SUSPEND для инъекции сбоев. Она может использоваться для облегчения тестов отказоустойчивости. Тем самым закрывается #15979. #18850 (alexey-milovidov).
  • Генерировать идентификатор сборки при линковке ClickHouse с lld. Выяснилось, что lld по умолчанию его не генерирует на моей машине. Идентификатор сборки используется для отчётов о сбоях и интроспекции. #18808 (alexey-milovidov).
  • Исправлены ошибки shellcheck в проверке стиля. #18566 (Ilya Yatsishin).
  • Обновлены данные о часовых поясах до версии 2020e. #18531 (alesapin).
  • Исправлены предупреждения codespell. Проверки стиля разделены на отдельные этапы. Обновлён Docker-образ для проверок стиля. #18463 (Ilya Yatsishin).
  • Автоматическая проверка документации на наличие оставшихся маркеров конфликтов. #18332 (alexey-milovidov).
  • Включён Thread Fuzzer для проверки нестабильных stateless-тестов. #18299 (alesapin).
  • Не используйте непотокобезопасную функцию strerror. #18204 (alexey-milovidov).
  • Обновлено действие рабочего процесса anchore/scan-action@main (перенесено с master на main). #18192 (Stig Bakken).
  • Теперь clickhouse-test выполняет операции DROP/CREATE баз данных с тайм-аутом. #18098 (alesapin).
  • Добавлена экспериментальная поддержка фреймворка Pytest для stateless-тестов. #17902 (Ivan).
  • Теперь в интеграционных тестах используется актуальная версия Docker-демона. #17671 (alesapin).
  • Отправлять сведения об официальной сборке, оперативной памяти, процессоре и свободном месте на диске в Sentry, если она включена. Sentry — это необязательная функция, помогающая разработчикам ClickHouse. Закрывает #17279. #17543 (alexey-milovidov).
  • В коде clickhouse-copier была обнаружена неинициализированная переменная. #17363 (Nikita Mikhaylov).
  • Исправлен один отчёт MSan из #17309. #17344 (Nikita Mikhaylov).
  • Исправление проблемы с IPv6 в библиотеке Arrow Flight. Подробнее см. в комментариях. #16664 (Zhanna).
  • Добавлена библиотека, которая заменяет некоторые функции libc на ловушки, завершающие процесс. #16366 (alexey-milovidov).
  • Выводить диагностические сообщения в логи сервера при переполнении стека и отправлять сообщение об ошибке в clickhouse-client. Это закрывает #14840. #16346 (alexey-milovidov).
  • Теперь мы можем запускать почти все функциональные тесты без состояния параллельно. #15236 (alesapin).
  • Исправлена порча данных при snappy-декомпрессии в librdkafka (проблема возникала только в сборках gcc10, но официальные сборки уже используют clang, поэтому, по крайней мере, недавние официальные релизы не затронуты). #18053 (Azat Khuzhin).
  • Если сервер был убит OOM-killer'ом, выводить сообщение в журнал. #13516 (alexey-milovidov).
  • PODArray: устранён вызов memcpy с аргументами (nullptr, 0) (исправление по отчёту UBSan). Это исправляет #18525. #18526 (alexey-milovidov).
  • Небольшое улучшение объединения путей Zookeeper внутри DDLWorker. #17767 (Bharat Nallan).
  • Добавлена возможность перезагружать символы из файла отладки. В этом PR также исправлена проблема с build-id. #17637 (Amos Bird).

История изменений за 2020 год