Релиз ClickHouse v21.12, 2021-12-15. Презентация, Видео
Обратно несовместимое изменение
- Исправление для возможности, которая ранее вела себя нежелательным образом. Запрещён прямой
SELECTдля Kafka/RabbitMQ/FileLog. Его можно включить с помощью настройкиstream_like_engine_allow_direct_select. ПрямойSELECTне будет разрешён, даже если эта настройка включена, при наличии присоединённого materialized view. Для Kafka и RabbitMQ прямойSELECT, если он разрешён, по умолчанию не будет подтверждать сообщения. Чтобы включить подтверждение при прямом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).
Новая возможность
- В
clickhouse-keeperреализованы дополнительные команды ZooKeeper Four Letter Words: 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). - Добавлена поддержка параллельного чтения из нескольких файлов, а также глоб-шаблонов в предложении
FROM INFILE. #30135 (Filatenkov Artur). - Добавлена поддержка параметров запроса
Identifierдля таблиц и баз данных. Закрывает #27226. #28668 (Nikolay Degterinsky). - TLDR: Значительно улучшены полнота и согласованность текстовых форматов. Выполнен рефакторинг форматов
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). - Ускорен
countдля столбцов с типом Nullable. #31806 (Raúl Marín). - Ускорены агрегатные функции
avgиsumCount. #31694 (Raúl Marín). - Улучшена производительность выходных форматов JSON и XML. #31673 (alexey-milovidov).
- Улучшена производительность синхронизации данных с блочным устройством. Это закрывает #31181. #31229 (zhanglistar).
- Исправлена проблема с производительностью запросов в таблицах
LiveView. Исправляет #30831. #31006 (vzakaznikov). - Ускорен парсинг запросов. #31949 (Raúl Marí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 Dorofeev). - Улучшен пропуск неизвестных полей при использовании правила экранирования кавычками в форматах 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). - В лог span OpenTelemetry добавлены поля ClickHouse
exceptionиexception_code. #32040 (Frank Chen). - Улучшена длительность в логах span’ов 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).
- Добавлены сочетания клавиш для перемещения по истории (вместо строк/истории). #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). - Улучшен механизм задержки для фоновых задач очистки в
MergeTree. Настройкиmerge_tree_clear_old_temporary_directories_interval_secondsиmerge_tree_clear_old_parts_interval_secondsперенесены из пользовательских настроек в настройки MergeTree. #31180 (tavplubix). - Теперь каждая реплика будет отправлять клиенту только инкрементальную информацию о счётчиках profile events. #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). - В
clickhouse-clientдобавлены команды\l,\d,\c— как в MySQL и PostgreSQL. #30876 (Pavel Medvedev). - Для clickhouse-local или clickhouse-client: если опция
--interactiveиспользуется вместе с--queryили--queries-file, сначала выполняются команды, как в неинтерактивном режиме, а затем запускается интерактивный режим. #30851 (Kseniia Sumarokova). - Исправлена возможная ошибка “Локальный набор частей X не совпадает с набором частей в 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).
- Реализована поддержка аргументов Decimal в функции transform. #31839 (李帅).
- Исправлено аварийное завершение в сервере отладочной сборки и ошибка
DB::Exception: std::out_of_range: basic_stringв сервере релизной сборки в случае некорректного 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). - Исправлен редкий segfault при одновременном выполнении запросов
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).
- Переписана правая distributed таблица в локальный JOIN. Исправляет #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переставали работать, если выполнялись после удаления materialized view. Обнаружено в #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).
- Для
zlib-ng,cassandra,mariadb-connector-c,xz,re2,sentry,gsasl,arrowиprotobufиспользуются наши собственные CMakeLists. Это требуется для #20151. Часть #9226. Небольшой шаг к удалению раздражающего мусора из системы сборки. #30599 (alexey-milovidov). - Герметичные сборки: используется фиксированная версия libc, а также гарантируется, что во время сборки не используются никакие исходные или бинарные файлы из хостовой ОС. Это закрывает #27133. Это закрывает #21435. Это закрывает #30462. #30011 (alexey-milovidov).
- Добавлена функция
getFuzzerData()для упрощения фаззинга отдельных функций. Это закрывает #23227. #27526 (Alexey Boykov). - Более корректная настройка привилегий в Docker. #31802 (Constantine Peresypkin).
- Включены параметры компиляции clang
-fstrict-vtable-pointers,-fwhole-program-vtables. #20151 (Maksim Kita). - Исключена загрузка tarball-архивов 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). - Удалена настройка таблицы
MergeTreewrite_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. Скалярное произведение для Tuple и различные арифметические операторы для Tuple. Это полностью закрывает #4509 и не только. #27933 (Alexey Boykov).
- Добавлена поддержка сжатия и распаковки для
INTO OUTFILEиFROM INFILE(с автоопределением или с указанием дополнительного необязательного параметра). #27135 (Filatenkov Artur). - Добавлена поддержка CORS (Cross Origin Resource Sharing) через HTTP-запрос
OPTIONS. Это означает, что теперь Grafana сможет работать с бессерверными запросами без костылей. Закрывает #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, но для журналов в локальной файловой системе с режимом только дозаписи и ротацией. Закрывает #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 уже применяется в какой-то legacy-системе и нужно получить в точности такой же результат. #29602 (Nikita Tikhomirov). - HSTS можно включить для HTTP-сервера ClickHouse, указав положительное значение
hsts_max_ageв конфигурационном файле. #29516 (凌涛). - Поддержка объектного хранилища Huawei OBS. Закрывает #24294. #29511 (kevin wan).
- Новая функция
mapContainsKeyLikeдля получения map, ключи которой соответствуют простому регулярному выражению. #29471 (凌涛). Новая функцияmapExtractKeyLikeдля получения map, в которой остаются только элементы, соответствующие указанному шаблону регулярного выражения. #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 в базах данных Replicated. #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 или FixedSring. Это улучшает пропуск данных в запросах с фильтром по ключу 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).
- Добавлена поддержка pushdown для
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) и функция all in one с инструкциями 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).
- Уменьшен размер части multipart-загрузки S3 в настройках по умолчанию, чтобы снизить использование памяти. #28679 (ianton-ru).
- Ускорена работа функции
bitmapAnd. #28332 (dddounaiking). - Убраны избыточные уведомления о мутациях в
StorageMergeTree, пока всё ещё выполняются слияния. #27552 (Vladimir Chebotarev). - Попытка повысить производительность сравнения строк. #28767 (alexey-milovidov).
- Индекс первичного ключа и фильтр по партиции теперь могут работать с Tuple. #29281 (凌涛).
- Если запрос содержит несколько агрегатных функций quantile с одинаковыми аргументами, но с разными параметрами уровня, они будут объединены и выполнены за один проход, если включена настройка
optimize_syntax_fuse_functions. #26657 (hexiaoting). - Теперь агрегирование min-max по первому выражению первичного ключа оптимизируется с помощью проекции. Это сделано для #329. #29918 (Amos Bird).
Экспериментальные возможности
- Добавлена возможность изменять конфигурацию узлов ClickHouse Keeper (в файле
.xml). #30372 (alesapin). - Добавлена агрегатная функция
sparkbar. Это закрывает #26175. #27481 (小路). Примечание: у этой функции есть один недостаток; её поведение будет изменено в будущих версиях.
Улучшения
- Пользователи могут менять уровни логирования без перезапуска. #29586 (Nikolay Degterinsky).
- Несколько улучшений для 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). - В
system.data_skipping_indicesдобавлены столбцыdata_compressed_bytes,data_uncompressed_bytes,marks_bytes. Вsystem.partsдобавлены столбцыsecondary_indices_compressed_bytes,secondary_indices_uncompressed_bytes,secondary_indices_marks_bytes. Закрывает #29697. #29896 (Maksim Kita). - В system.tables добавлен псевдоним
table, а в system.databases — псевдонимdatabase#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). - Веб-интерфейс: отрисовка столбиков в ячейках таблицы. #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). - Небольшие улучшения в клонировании реплик и добавлении в очередь операций fetch для повреждённых частей, которые должны предотвратить крайне редкие зависания записей
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). - В интерфейс Play добавлен логотип ClickHouse. #29674 (alexey-milovidov).
- Улучшено сообщение об исключении при чтении столбца из форматов с поддержкой Arrow, таких как
Arrow,ArrowStream,ParquetиORC. Это закрывает #29926. #29927 (alexey-milovidov). - Исправлена гонка между сбросом и запуском в таблицах
Buffer. Это может проявляться в тестах. #29930 (Azat Khuzhin). - Исправлена
lock-order-inversionприDROP TABLEдляDatabaseMemoryиLiveView. Live View — экспериментальная возможность. База данных Memory используется в 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_log—MemoryPeak). #29858 (Azat Khuzhin). - Внешние таблицы PostgreSQL: в запрос для получения индекса replica identity добавлен префикс партиционированной таблицы ‘p’. #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 (а не из снимка). #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, которые могут использоваться активной операцией mutation/merge, если такая mutation/merge длится необычно долго. #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 для поддержки троттлинга в Yandex Cloud S3. #30646 (ianton-ru).
- Исправлено освобождение идентификаторов запроса и сеанса в конце обработки запроса при обработке вызова gRPC. #29954 (Vitaly Baranov).
- Исправлено завершение работы
AccessControlManager, чтобы устранить нестабильность теста. #29951 (Vitaly Baranov). - Исправлено падение на failed assertion при чтении из
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).
- В 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).
- Добавлена возможность выводить сырые profile events в
clickhouse-client(это может быть полезно для отладки и тестирования). #30064 (Azat Khuzhin). - Добавлена зависимость от времени для unit
clickhouse-server(в systemd и sysvinit). #28891 (Azat Khuzhin). - Кэш stacktrace теперь перезагружается при перезагрузке символа. #28137 (Amos Bird).
Исправление ошибки
- Функции для регистронезависимого поиска в строках UTF-8, такие как
positionCaseInsensitiveUTF8иcountSubstringsCaseInsensitiveUTF8, в очень редких случаях могли находить подстроки, которые на самом деле не совпадали; это исправлено. #30663 (tavplubix). - Исправлено чтение из пустого файла на зашифрованном диске. #30494 (Vitaly Baranov).
- Исправлено преобразование цепочки дизъюнкций в
IN(управляется настройкойoptimize_min_equality_disjunction_chain_length) в distributed queries с настройкойlegacy_column_name_of_tuple_literal = 0. #28658 (Anton Popov). - Разрешено использовать материализованный столбец в качестве ключа сегментирования в distributed таблице, даже при
insert_allow_materialized_columns=0:. #28637 (Vitaly Baranov). - Исправлено
ORDER BY ... WITH FILLпри заданныхTOиFROMи отсутствии строк в результирующем наборе. #30888 (Anton Popov). - Исправлено: индекс Set не использовался в выражениях AND/OR, когда операндов было больше двух. Это исправляет #30416. #30887 (Amos Bird).
- Исправлен сбой при материализации проекции с хеш-функцией. Это исправляет #30861. Проблема аналогична https://github.com/ClickHouse/ClickHouse/pull/28560 и связана с некорректным пониманием инварианта пустоты header. #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в конфигурации структуры для ComplexKeyHashedDictionary и ComplexKeySparseHashedDictionary. #30246 (Maksim Kita). - Исправлена функция
[I]LIKE. Исправление закрывает #28661. #30244 (Nikolay Degterinsky). - Устранён сбой при использовании shortcircuit и lowcardinality в multiIf. #30243 (Raúl Marín).
- FlatDictionary, HashedDictionary: исправлен расчёт bytes_allocated для атрибутов Nullable. #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 некорректно заполнял материализованный столбец на основе 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). - Исправлено падение sample при использовании
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).
- Исправлен редкий segfault в запросе
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:Поведение не определено, если второй диапазон короче первого.. #29531 (Kseniia Sumarokova). - В мост ODBC добавлены повторные попытки при ошибке 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: исправлена гонка при многократном открытии DB (и возвращены некоторые тесты, воспроизводящие эту проблему в CI). #29393 (Azat Khuzhin).
- Исправлено некорректное завершение работы реплицируемого хранилища доступа при ошибочной конфигурации. #29388 (Kevin Michel).
- Удалена оконная функция
nth_value, так как она небезопасна по потреблению памяти. Закрывает #29347. #29348 (alexey-milovidov). - Исправлено вертикальное слияние частей проекций. Это исправляет #29253. В этом PR также исправлено несколько проблем со слиянием/мутацией проекций, появившихся в https://github.com/ClickHouse/ClickHouse/pull/25165. #29337 (Amos Bird).
- Исправлено зависание DDL-запросов в базе данных Replicated при добавлении новой реплики. #29328 (Kevin Michel).
- Исправлены тайм-ауты подключения (
send_timeout/receive_timeout). #29282 (Azat Khuzhin). - Исправлено возможное исключение
Table columns structure in ZooKeeper is different from local table structure, возникавшее при пересоздании или создании новых репликReplicatedMergeTree, если один из столбцов таблицы имеет выражение по умолчанию с регистронезависимыми функциями. #29266 (Anton Popov). - Возвращать клиенту (по TCP) стандартную ошибку
Database doesn't exist error(UNKNOWN_DATABASE) вместоAttempt to read after eof(ATTEMPT_TO_READ_AFTER_EOF). #29229 (Azat Khuzhin). - Исправлен segfault при вставке в столбец типа LowCardinality(Nullable) в формате входных данных Avro. #29132 (Kruglov Pavel).
- Не допускайте повторного использования ранее заданных учетных данных при использовании межсерверного секрета (Ранее при
INSERTчерез Buffer/Kafka в distributed таблицу с настроенным для этого кластера межсерверным секретом мог повторно использоваться ранее заданный пользователь для этого соединения). #29060 (Azat Khuzhin). - Исправлена обработка
any_join_distinct_right_table_keysпри JOIN со словарём, закрыт #29007. #29014 (Vladimir C). - Исправлена ошибка “Столбец … не найден в блоке” при 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при сокращённом вычислении функции. Закрывает #28884. #28887 (Kruglov Pavel). - Исправлено чтение подстолбцов из компактных частей. #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). - Исправлен coredump при создании distributed таблиц, если переданы неверные параметры. #28686 (Zhiyong Wang).
- Добавлены псевдонимы Settings.Names и Settings.Values для таблицы system.processes. #28685 (Vitaly).
- Поддержка библиотеки S2 Geometry: исправлено число аргументов, требуемых функциями
s2RectAddиs2RectContains. #28663 (Bharat Nallan). - Исправлено некорректное преобразование типа константы при использовании первичного ключа с типом Nullable или LowCardinality. #28636 (Amos Bird).
- Исправлено “Столбец не находится в агрегатной функции и не указан в 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). - Добавлена поддержка записи по партициям в табличную функцию
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теперь может использовать индексы пропуска данных bloom filter. #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). - В таблицу
system.replicasдобавлен новый столбецlast_queue_update_exception. #26843 (nvartolomei). - Поддержана возможность повторного подключения при отказоустойчивом переключении для таблиц
MaterializedPostgreSQL. Закрывает #28529. #28614 (Kseniia Sumarokova). - При первом запуске сервера генерируется уникальный UUID сервера. #20089 (Bharat Nallan).
- Добавлена настройка
connection_wait_timeoutдля движкаMySQL(по умолчанию — 5 секунд, 0 — не ждать). #28474 (Azat Khuzhin). - Запрещено создание
MaterializedPostgreSQLс некорректными аргументами. Закрывает #28423. #28430 (Kseniia Sumarokova). - Используйте реальный tmp-файл вместо предопределённого “rows_sources” для Вертикального слияния. Это позволяет избежать создания лишних каталогов на tmp-дисках. #28299 (Amos Bird).
- Добавлен параметр
libhdfs3_confв конфигурацию сервера вместо экспорта переменной окруженияLIBHDFS3_CONFвclickhouse-server.service. Это необходимо для настройки взаимодействия с HDFS. #28268 (Zhichang Yu). - Исправлено удаление частей в состоянии Temporary, которое могло приводить к неожиданному исключению (
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 upload с копированием для больших объектов S3. #27858 (ianton-ru).
- Разрешён обход символических ссылок в пути к библиотечному словарю. #27815 (Kseniia Sumarokova).
- Теперь
ALTER MODIFY COLUMTв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, возникавшая при выборке из таблиц, содержащих столбцы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). - Исправлено некорректное поведение строк, не попавших в JOIN, для столбца 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).
- Исправлены крайне редкие segfault’ы при завершении работы, вызванные неправильным порядком остановки перезагрузчика контекста/конфигурации. #28088 (nvartolomei).
- Исправлена обработка значения NULL с типом
Nullable(String)в функцииJSONExtract. Это исправляет #27929 и #27930. Проблема появилась после изменений в https://github.com/ClickHouse/ClickHouse/pull/25452 . #27939 (Amos Bird). - Несколько исправлений для нового инструмента
clickhouse-keeper. Исправлена редкая ошибка вclickhouse-keeper, из-за которой клиент мог получить ответ о срабатывании наблюдения раньше, чем ответ на запрос. #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).
- Репозиторий apt в Ubuntu временно переключили на зеркало ru.archive.ubuntu.com, так как репозиторий по умолчанию (archive.ubuntu.com) не отвечает из нашего CI. #28016 (Ilya Yatsishin).
Релиз ClickHouse v21.9, 2021-09-09
Обратно несовместимое изменение
- Больше не выводятся конечные нули в текстовом представлении типов
Decimal. Пример: для decimal с scale 6 будет выводиться1.23вместо1.230000. Это закрывает #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). - Теперь scalar subquery всегда возвращает результат типа
Nullable, если его тип может бытьNullable. Это необходимо, потому что в случае пустого подзапроса результатом должен бытьNull. Ранее можно было получить ошибку о несовместимых типах (при выводе типа scalar subquery не выполняется, и мог использоваться не-Nullable тип). Scalar subquery с пустым результатом, который нельзя преобразовать вNullable(например,ArrayилиTuple), теперь вызывает ошибку. Исправляет #25411. #26423 (Nikolai Kochetov). - Добавлен синтаксис here document. Пример:
SELECT $doc$ VALUE $doc$. #26671 (Maksim Kita). Это изменение обратно несовместимо, если в запросе есть идентификаторы, содержащие$#28768. - Теперь индексы могут работать с типами Nullable, включая
isNullиisNotNull. #12433 и #12455 (Amos Bird) и #27250 (Azat Khuzhin). Однако для этого потребовались изменения формата хранения на диске: новый server может читать старые данные, а старый — уже нет. Кроме того, если у вас естьMINMAXиндекс пропуска данных, вы можете получить ошибкуData after mutation/merge is not byte-identical, поскольку новый индекс будет иметь расширение.idx2, тогда как раньше использовалось.idx. Поэтому не стоит откладывать обновление всех существующих реплик: иначе, если старая реплика (<21.9) загрузит данные с новой реплики 21.9+, она не сможет применить индекс к загруженной части.
Новая возможность
- Реализовано вычисление функций с коротким замыканием, закрывает #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). Она создаёт подмножество битмапа, ограниченное значением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). - Репликация zero-copy для
ReplicatedMergeTreeповерх хранилищаHDFS. #25918 (Zhichang Yu). - Добавлена поддержка вставки типа Nested в виде массива структур во входных форматах
Arrow,ORCиParquet. #25902 (Kruglov Pavel). - Добавлен новый тип данных
Date32(данные хранятся как Int32), поддерживается тот же диапазон дат, что и дляDateTime64, поддерживается загрузка parquet date32 в ClickHouseDate32. Добавлена новая функция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" ... < file. Это закрывает #11124. В соавторстве с (alexey-milovidov). #25960 (BoloniniD). - Устранено дублирование при анализе индексов и исключены возможные некорректные проверки LIMIT при анализе проекций. #27742 (Amos Bird).
- Добавлена возможность передавать параметры запроса в теле HTTP-запросов. #27706 (Hermano Lustosa).
- Запретить использование
arrayJoinв выражениях партиции. #27648 (Raúl Marín). - Логировать IP-адрес клиента при неудачной аутентификации. #27514 (Misko Lee).
- Использовать байты вместо строк для двоичных данных в протоколе gRPC. #27431 (Vitaly Baranov).
- Отправляется ответ с сообщением об ошибке, если HTTP-порт не задан, а пользователь пытается отправить HTTP-запрос на TCP-порт. #27385 (Braulio Valdivielso Martínez).
- Добавлена функция
_CASTдля внутреннего использования, которая не сохраняет Nullable у типа, тогда как обычное приведение сохраняет его в соответствии с настройкой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).
- Разделили глобальный mutex на отдельные операции построения regexp. Это помогает избежать блокировки других связанных потоков из-за длительного построения regexp. #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).
- Теперь функции могут быть константами уровня сегмента, то есть, если они выполняются в контексте некоторой distributed таблицы, они генерируют обычный столбец, а в противном случае возвращают константное значение. Среди наиболее примечательных функций:
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). - Для запросов вида
SELECT * FROM dist ORDER BY key LIMIT 10сdistributed_push_down_limit=1LIMITтеперь применяется на сегментах. Для запросов видаSELECT DISTINCT shading_key FROM dist ORDER BY keyвыполнение этаповDistinct/LIMIT BYтеперь исключается. Теперь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 в истории веб-интерфейса, если он отличается от адреса, с которого открыт веб-интерфейс. Это закрывает #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больше единицы. Чтение с direct IO (которое по умолчанию отключено для запросов и включено по умолчанию для крупных слияний) будет работать менее эффективно. Это закрывает #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 />с атрибутомfrom_zk,from_envилиincl, и он будет заменён соответствующей подстановкой. #24404 (nvartolomei). - Исправлена вставка нескольких блоков в distributed таблицу при
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). - Исправлен выход значения времени за нижнюю границу диапазона при его построении из компонентов. Закрывает #27193. #27605 (Vasily Nemkov).
- Исправлен сбой во время материализации проекции, когда в некоторых частях отсутствуют столбцы. Это исправление для #27512. #27528 (Amos Bird).
- исправлена метрика
BackgroundMessageBrokerSchedulePoolTask; возможно, в её названии была опечатка. #27452 (Ben). - Исправлена работа распределённых запросов при нулевом количестве сегментов и агрегации. #27427 (Azat Khuzhin).
- Совместимость в случаях, когда
/proc/meminfoне содержит суффикса KB. #27361 (Mike Kot). - Исправлен некорректный результат запроса с безопасностью на уровне строк, PREWHERE и фильтром LowCardinality. Исправляет #27179. #27329 (Nikolai Kochetov).
- Исправлена некорректная проверка идентификатора партиции для таблиц MergeTree, созданных по старому синтаксису. #27328 (tavplubix).
- Исправлена работа протокола MySQL при использовании параллельных форматов (CSV / TSV). #27326 (Raúl Marín).
- Исправлена ошибка
Cannot find columnдля запросов со сэмплированием. Ошибка появилась в #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). - При применении некоторых комбинаторов параметры aggregate function могли теряться, что приводило к исключениям вида
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 Docker-образа 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).
- Исправлен бесконечный поток блоков, не вошедших в JOIN, при закрытии
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 нет значения для 0, закрывает #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 ...при выполнении выборки из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).
Улучшения сборки/тестирования/пакетирования
- Теперь тесты с сохранением состояния и тест без сохранения состояния запускаются в случайных часовых поясах. Исправляет #12439. Чтение String как DateTime и запись DateTime как String в формате Protobuf теперь учитывают часовой пояс. Чтение UInt16 как DateTime в форматах Arrow и Parquet теперь интерпретирует его как Date, а затем преобразует в DateTime с учетом часового пояса DateTime, поскольку в Arrow и Parquet тип Date сериализуется как 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
Примечания к обновлению
- В новой версии для таблиц системных журналов (
system.query_log,system.query_thread_log,system.processes,system.opentelemetry_span_log) используется тип данныхMap. Эти таблицы будут автоматически созданы с новыми типами данных. Для поддержки старых запросов создаются виртуальные столбцы. Закрыто #18698. #23934, #25773 (hexiaoting, sundy-li, Maksim Kita). Если вы хотите откатиться с версии 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, времени непрерывной работы системы; также добавлены метрики о джиттере планировщика и времени, затраченном на сбор метрик. Это работает в ClickHouse аналогичноatopи позволяет получать доступ к данным мониторинга, даже если у вас не установлены дополнительные инструменты. Закрывает #9430. #24416 (alexey-milovidov, Yegor Levankov). - Добавлены движок таблицы MaterializedPostgreSQL и движок базы данных. Этот движок базы данных позволяет реплицировать базу данных целиком или любое подмножество её таблиц. #20470 (Kseniia Sumarokova).
- Добавлены новые функции
leftPad(),rightPad(),leftPadUTF8(),rightPadUTF8(). #26075 (Vitaly Baranov). - В команду
ADD INDEXдобавлено ключевое словоFIRST, позволяющее добавлять индекс в начало списка индексов. #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). - Добавлена поддержка
SET SQL_SELECT_LIMITдля протокола MySQL. Закрывает #17115. #25972 (Kseniia Sumarokova). - Расширено инструментирование сетевого взаимодействия: добавлены Counter для байтов recv/send; добавлены Gauge для recvs/sends. Добавлена недостающая документация. Закрывает #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). - Разрешена поддержка сложных идентификаторов JOIN-таблиц в кавычках. Закрывает #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 />с атрибутом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).
- Исправлена ошибка “Нет доступных столбцов” в табличном движке
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, если инициализация RabbitMQ не была запущена. Закрывает #26504. #26529 (Kseniia Sumarokova).
- Исправлены проблемы с запросом
CREATE DICTIONARY, если имя словаря или базы данных было заключено в кавычки. Закрывает #26491. #26508 (Maksim Kita). - Исправлена ошибка разрешения имён после перезаписи псевдонимов столбцов. Исправление #26432. #26475 (Amos Bird).
- Исправлен бесконечный поток блоков, не объединённых через JOIN, при завершении
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 с totals, закрыт #26017. #26250 (Vladimir C).
- Удалён лишний символ новой строки в столбце
thread_nameтаблицыsystem.stack_trace. Исправлено в #24124. #26210 (alexey-milovidov). - Исправлен
joinGetдля столбцовLowCarinality, закрыт #25993. #26118 (Vladimir C). - Исправлен возможный сбой в
pointInPolygon, если настройкаvalidate_polygonsотключена. #26113 (alexey-milovidov). - Исправлена ошибка, из-за которой при итерации по несуществующему удалённому каталогу генерировалось исключение. #26087 (ianton-ru).
- Исправлен редкий сбой сервера, вызванный
abortв клиенте ZooKeeper. Исправление #25813. #26079 (alesapin). - Исправлена неверная оценка количества потоков для правого 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). - Исправлен assert в
PREWHEREдля типа, отличного от UInt8; закрыт #19589. #25484 (Vladimir C). - Исправлен сбой msan, выявленный фаззингом. Исправление #22517. #26428 (Nikolai Kochetov).
- Обновлена проверка команды
chownв entrypoint-скрипте Docker дляclickhouse-server. Это исправляет ошибку ‘не удалось перезапустить под кластера (или произошёл тайм-аут)’ в 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).
- Добавлена поддержка структур и 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(), полезная дляанализа потоков. #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). - Большее число столбцов теперь переписывается в возможные alias-выражения. Это может улучшить оптимизацию, например при использовании проекций. #24405 (Amos Bird).
- Индекс типа
bloom_filterможно использовать для выражений с функциейhasAnyи константными массивами. Это закрывает: #24291. #24900 (Vasily Nemkov). - Добавлена экспоненциально увеличивающаяся задержка для повторного планирования попытки чтения в случае, если очереди RabbitMQ пусты. (ClickHouse поддерживает импорт данных из RabbitMQ). Закрывает #24340. #24415 (Kseniia Sumarokova).
Улучшение
- Добавлена возможность ограничивать пропускную способность репликации. Добавлены две настройки Replicated*MergeTree:
max_replicated_fetches_network_bandwidthиmax_replicated_sends_network_bandwidth, которые позволяют ограничить максимальную скорость загрузки/отправки при репликации для таблицы. Добавлены две общесерверные настройки (в профиле пользователяdefault):max_replicated_fetches_network_bandwidth_for_serverиmax_replicated_sends_network_bandwidth_for_server, которые ограничивают максимальную скорость репликации для всех таблиц. Настройки применяются не абсолютно точно. По умолчанию отключено. Исправляет #1821. #24573 (alesapin). - Ограничения ресурсов и изоляция для мостов ODBC и Library. Используйте отдельные группу и пользователя
clickhouse-bridgeдля процессов мостов. Установите oom_score_adj так, чтобы мосты становились первыми кандидатами для 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). - При запуске сервера части с некорректным ID партиции не удалялись никогда, а всегда переводились в состояние detached. #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 с cluster при любом количестве реплик; раньше поддерживалось только 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, разрешён пропуск сегмента при условии вида(ключ сегментирования) IN (one-element-tuple). (Tuple из многих элементов уже поддерживались. Tuple из одного элемента не работал, потому что разбирался как литерал). #24930 (Amos Bird). - Улучшены сообщения лога об ошибках S3: при пустых ключах и бакетах больше не появляется двойной пробел. #24897 (Vladimir Chebotarev).
- Некоторые запросы требуют многопроходного семантического анализа. В этом случае попробуйте повторно использовать готовые множества для
IN. #24874 (Amos Bird). - Теперь для
insert_distributed_syncучитываетсяmax_distributed_connections(иначе на больших кластерах при синхронной вставке может не хватитьmax_thread_pool_size). #24754 (Azat Khuzhin). - Избегайте скрывать ошибки, такие как
Limit for rows or bytes to read exceeded, в скалярных подзапросах. #24545 (nvartolomei). - Ужесточён парсер преобразования String в Int, чтобы
toInt64('+')генерировал исключение. #24475 (Amos Bird). - Если
SSD_CACHEсоздаётся с помощью DDL-запроса, его можно создавать только в каталогеuser_files. #24466 (Maksim Kita). - Поддержка PostgreSQL для указания схемы, отличной от используемой по умолчанию, в запросах вставки. Закрывает #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 для столбцов и индексов пропуска данных. При создании внутренней distributed таблицы они просто удаляются (в базовой таблице TTL и skipping indices сохраняются). Закрывает #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_allow_materialized_columns(разрешает материализованные столбцы) теперь учитывается при INSERT в таблицуDistributed. #23349 (Azat Khuzhin). - Добавлена возможность проталкивать LIMIT в распределённых запросах. #23027 (Azat Khuzhin).
- Исправлена zero-copy-репликация при использовании нескольких томов S3 (исправление #22679). #22864 (ianton-ru).
- Определять фактический номер порта, к которому выполнена привязка, если пользователь запрашивает у операционной системы любой свободный порт, и показывать его в сообщении лога. #25569 (bnaecker).
- Исправлен случай, когда преобразование массивов Postgres иногда приводило к типу данных 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) для distributed таблиц. #24472 (Anton Popov).
- Добавлена возможность для протокола совместимости с MySQL: функция
userтеперь возвращает корректный результат. Закрывает #25697. #25697 (sundyli).
Исправление ошибок
- Улучшена обратная совместимость. При использовании в ключе партиционирования теперь используется старая версия функции modulo. Закрывает #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отсутствует в конфигурации задачи copier. #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).
- Исправлено возможное переполнение буфера в куче в формате
Arrow. #24922 (Kruglov Pavel). - Исправлена возможная ошибка ‘Cannot read from istream at offset 0’ при чтении файла из DiskS3 (виртуальная файловая система S3 — экспериментальная возможность, которая находится в разработке и не должна использоваться в продакшене). #24885 (Pavel Kovalenko).
- Исправлено исключение “Отсутствуют столбцы” при JOIN с распределённым materialized view. #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 EB. #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).
- Исправлено удаление партиции при наличии пересекающихся фиктивных частей. В редких случаях могли быть части с версией мутации, превышающей номер текущего блока. #24321 (Amos Bird).
- Исправлена ошибка при перемещении materialized view из базы данных Ordinary в базу данных Atomic (запрос
RENAME TABLE). Теперь внутренняя таблица перемещается в новую базу данных вместе с materialized view. Исправлено #23926. #24309 (tavplubix). - Разрешены пустые HTTP-заголовки. Исправлено #23901. #24285 (Ivan).
- Исправлена обработка мутаций (ALTER UPDATE/DELETE) в таблицах Memory. Закрывает #24274. #24275 (flynn).
- Свойство LowCardinality столбца в выводе JOIN сделано таким же, как во входных данных; закрыты #23351, #20315. #24061 (Vladimir).
- Исправление для таблиц Kafka. Исправлена ошибка в поведении аварийного переключения: при
Engine = Kafkaне удавалось начать чтение, если у того же consumer ранее был пустой assignment. Закрывает #21118. #21267 (filimonov).
Улучшения сборки/тестирования/пакетирования
- В CI добавлены сборки
darwin-aarch64(Mac M1 / Apple Silicon) #25560 (Ivan), а также ссылки на документацию и сайт (alexey-milovidov). - Добавлено кроссплатформенное встраивание бинарных ресурсов в исполняемые файлы. Работает на Illumos. #25146 (bnaecker).
- В стресс-тесты добавлены параметры, связанные с JOIN, для улучшения фаззинга. #25200 (Vladimir).
- Включена сборка с модулем S3 на macOS #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). - Довести поддержку больших целых чисел до промышленной готовности. Добавить поддержку типа данных
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). - В
system.stack_traceдобавлен столбецthread_name. Это исправляет #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(boolean, по умолчанию выключена) в запросEXPLAIN PIPELINE. При включении отображает используемые индексы, количество отфильтрованных частей и гранул для каждого применённого индекса. Поддерживается для таблицMergeTree*. #22352 (Nikolai Kochetov). - LDAP: реализована функциональность определения user DN для использования при сопоставлении групп Active Directory с ролями ClickHouse. #22228 (Denis Glazachev).
- Новая агрегатная функция
deltaSumTimestampдля суммирования разницы между последовательными строками с сохранением порядка при слиянии благодаря хранению временных меток. #21888 (Russ Frank). - Добавлен менее безопасный IMDS-провайдер учетных данных для S3, который корректно работает в Docker. #21852 (Vladimir Chebotarev).
- Снова добавлена функция
indexHint. Это относится к #21238. Это отменяет изменения из #9542. Это исправляет #9540. #21304 (Amos Bird).
Экспериментальные возможности
Улучшение производительности
- Настройка
compile_expressionsтеперь включена по умолчанию. Когда эта настройка включена, композиции простых функций и операторов компилируются в нативный код с помощью LLVM во время выполнения. #8482 (Maksim Kita, alexey-milovidov). Примечание: если возникнут проблемы, отключите эту опцию. - Обновлена библиотека
re2. Повышена производительность сопоставления по регулярным выражениям. Также этот PR добавляет совместимость с gcc-11. #24196 (Raúl Marín). - Входной format 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). - Возвращена поддержка предварительного выделения памяти для словарей hashed/sparse_hashed. #23979 (Azat Khuzhin).
async_socket_for_remoteтеперь включен по умолчанию (меньше потоков при запросах к таблицамDistributedс большим fanout). #23683 (Nikolai Kochetov).
Улучшение
- В семейство таблиц MergeTree добавлен виртуальный столбец
_partition_value. Его можно использовать для детерминированного отсечения партиций. Он нужен для реализации сопоставления партиций для мутаций. #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. Добавлена специальная обработка singleton-центроидов в соответствии с tdunning/t-digest 3.2+. Также исправлена ошибка, приводившая к чрезмерному сжатию центроидов в реализации более ранней версии алгоритма. #23314 (Vladimir Chebotarev). - Функция
now64теперь поддерживает необязательный аргументtimezone. #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 (доли случаев, в которых значение было найдено) для Dictionaries (см.
found_rateвsystem.dictionaries). #23916 (Azat Khuzhin). - Добавлена возможность задавать специфические настройки очереди через параметр таблицы
rabbitmq_queue_settings_list. (Закрывает #23737 и #23918). Пользователь теперь может полностью управлять настройкой RabbitMQ: если параметр таблицыrabbitmq_queue_consumeустановлен в1, то движок таблицы RabbitMQ будет подключаться только к указанной очереди и не будет выполнять никакую настройку RabbitMQ на стороне потребителя, такую как объявление exchange, очередей и привязок. (Закрывает #21757). Добавлена корректная очистка при удалении таблицы RabbitMQ — удаляются очереди, объявленные таблицей, а также все привязанные exchanges, если они были созданы этой таблицей. #23887 (Kseniia Sumarokova). - Добавлены
broken_data_files/broken_data_compressed_bytesвsystem.distribution_queue. Добавлена метрика количества файлов для асинхронной вставки в Distributed-таблицы, помеченных как повреждённые (BrokenDistributedFilesToInsert). #23885 (Azat Khuzhin). - Запрос к
system.tablesбольше не обращается к ZooKeeper. #23793 (Fuwang Hu). - Для запросов
OPTIMIZEтеперь учитываетсяlock_acquire_timeout_for_background_operations. #23623 (Azat Khuzhin). - Возможность изменять настройки диска
S3на лету с помощью новой SQL-командыSYSTEM RESTART DISK. #23429 (Pavel Kovalenko). - Если пользователь применил неверную конфигурацию, по ошибке установив
max_distributed_connectionsв ноль, каждый запрос к таблицеDistributedбудет генерировать исключение с сообщением, содержащим “logical error”. Но на самом деле это ожидаемое поведение, а не logical error, поэтому текст исключения был немного некорректным. Это также запускало проверки в нашем CI-окружении, которые гарантируют, что logical error никогда не возникают. Вместо этого мы будем трактоватьmax_distributed_connections, ошибочно установленный в ноль, как минимально возможное значение (единица). #23348 (Azat Khuzhin). - По умолчанию отключена
min_bytes_to_use_mmap_io. #23322 (Azat Khuzhin). - Добавлена поддержка
LowCardinality, допускающегоNULL, с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).- Добавлена возможность чтения подстолбцов в distributed таблицах. #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).
- Исправлена ошибка при перемещении materialized view из базы данных Ordinary в базу данных Atomic (запрос
RENAME TABLE). Теперь внутренняя таблица переносится в новую базу данных вместе с materialized view. Исправление #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).
- Исправлена редкая ошибка, из-за которой частично инициализированная table могла обслуживать операции записи (вставка/ALTER и т. д.). Теперь такие table будут работать в режиме только для чтения. #24122 (alesapin).
- Исправлена ошибка:
EXPLAIN PIPELINEсSELECT xxx FINALпоказывал неверный конвейер. (hexiaoting). - Исправлена работа с константным значением
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не работает, если на этот столбец ссылается materialized view. Закрывает #23764. #23781 (flynn). - Исправлено обращение к освобождённой памяти в куче при чтении из 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, которая могла возникать после оптимизации 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-соединений и исправлены все оставшиеся проблемы из бэклога. Используется библиотека
nanodbcвместоPoco::ODBC. Закрывает #9678. Добавлена поддержка DateTime64 и Decimal* для движка таблицы ODBC. Закрывает #21961. Исправлена проблема с обрезанием кириллического текста. Закрывает #16246. Добавлены пулы соединений для моста ODBC. #21972 (Kseniia Sumarokova).
Улучшения
- Значение
max_uri_size(максимальный размер URL в HTTP-интерфейсе) по умолчанию увеличено до 1 MiB. Это закрывает #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-server.keeper_server.raft_configuration.secureможно использовать для включения защищенной внутренней связи между узлами. #22992 (alesapin). - Добавлена возможность сбрасывать буфер только в фоновом режиме для таблиц
Buffer. #22986 (Azat Khuzhin). - При выборке из таблицы MergeTree с NULL в условии WHERE в редких случаях возникало исключение. Это закрывает #20019. #22978 (alexey-milovidov).
- Исправлена обработка ошибок в HTTP-клиенте Poco для 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).
- Добавлена метрика, показывающая, сколько времени занимает ожидание блокировки слоя Buffer. #22725 (Azat Khuzhin).
- Разрешена возможность использования CTE в определении VIEW. Это исправляет #22491. #22657 (Amos Bird).
- Очистить остальную часть экрана и показать курсор в
clickhouse-client, если предыдущая программа оставила мусор в терминале. Закрывает #16518. #22634 (alexey-milovidov). - Функция
roundтеперь ведёт себя одинаково на платформах, отличных от x86_64. Используется округление до ближайшего чётного при значении, равном половине (банковское округление). #22582 (alexey-milovidov). - Исправлена проверка структуры блоков данных, отправляемых таблицами Distributed. #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для библиотечного источника словаря. Закрывает #9502. #21509 (Kseniia Sumarokova). - Запрещено удалять столбец, если на него есть ссылка из materialized view. Закрывает #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 requests. Исправлена ошибка
Can't initialize pipeline with empty pipeдля запросов сGLOBAL IN/JOIN, когда включена настройкаuse_hedged_requests. Исправление #23431. #23805 (Nikolai Kochetov). Исправлено состояние гонки в hedged connections, приводившее к сбою. Это исправляет #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-мосту. Закрывает #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с escape-последовательностями. #23610 (alexey-milovidov). - Исправлено зависание при выполнении команд restart / stop. Закрывает #20214. #23552 (filimonov).
- Исправлен сопоставитель
COLUMNSдля случая с несколькими JOIN в SELECT-запросе. Закрывает #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 со словарём. Закрывает #23002. #23312 (Vladimir).
- Не ослабляйте условия NOT при отсечении партиций. Это исправляет #23305 и #21539. #23310 (Amos Bird).
- Исправлено очень редкое состояние гонки при фоновой очистке старых блоков. Из-за него блок мог не дедуплицироваться, если находился слишком близко к концу окна дедупликации. #23301 (tavplubix).
- Исправлено крайне редкое (distributed) состояние гонки между созданием и удалением таблиц 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при выборке из materialized view после её отсоединения от базы данных 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). - Исправлен pushdown для
HAVINGв случае, если столбец фильтра используется в агрегации. #22763 (Anton Popov). - Исправлены возможные зависания в запросах к Zookeeper при возникновении исключения OOM. Исправлено #22438. #22684 (Nikolai Kochetov).
- Исправлено ожидание завершения мутаций на нескольких репликах для движков таблиц ReplicatedMergeTree. Ранее запрос 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в ноль. В старых версиях это значение было равно нулю. #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). - Проверка использования табличной функции view в качестве столбца. Это дополняет #20350. #21465 (Amos Bird).
- Исправлена ошибка “неизвестный столбец” для таблиц с движком
Mergeв запросах сJOINи агрегацией. Закрывает #18368 и #22226. #21370 (Vladimir). - Исправлены конфликты имен при оптимизации pushdown. Это приводило к некорректной фильтрации
WHEREпосле FULL JOIN. Закрывает #20497. #20622 (Vladimir). - Исправлена очень редкая ошибка, из-за которой вставка с кворумом при
quorum_parallel=1на самом деле не была “кворумной” из-за дедупликации. #18215 (filimonov — сообщил, alesapin — исправил).
Улучшения сборки/тестирования/упаковки
- Запуск тестов без сохранения состояния в 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). - В CI добавлен тест Jepsen для ClickHouse Keeper. #22373 (alesapin).
jemallocтеперь собирается с поддержкой профилирования кучи. #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 должны увеличиваться от одного retention к другому. Теперь это проверяется, и некорректная конфигурация вызывает исключение. #21496 (Mikhail f. Shiryaev).- Исправлена ошибка, из-за которой
cutToFirstSignificantSubdomainCustom()/firstSignificantSubdomainCustom()возвращали неверный результат для доменов с 3+ уровнями, присутствующих в пользовательском списке доменов верхнего уровня. Для входных доменов, соответствующих этим пользовательским доменам верхнего уровня, домен третьего уровня считался первым значимым. Теперь это исправлено. Это изменение может привести к несовместимости, если функция используется, например, в ключе сегментирования. #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 (Maksim Kita). - Добавлена поддержка функции
dictHasдляRangeHashedDictionary. Исправлена проблема #6680. #19816 (Maksim Kita). - Добавлена функция
timezoneOf, которая возвращает имя часового пояса для типов данныхDateTimeиDateTime64. Это не закрывает #9959. Исправлены несоответствия в названиях функций: добавлены псевдонимыtimezoneиtimeZone, а такжеtoTimezoneиtoTimeZone,timezoneOfиtimeZoneOf. #22001 (alexey-milovidov). - Добавлена новая необязательная секция
GRANTEESдля командCREATE/ALTER USER. Она задаёт пользователей или роли, которым этот пользователь может выдавать привилегии, при условии, что ему самому предоставлены все необходимые права доступа с grant option. По умолчанию используетсяGRANTEES ANY, то есть пользователь с grant option может выдавать привилегии кому угодно. Синтаксис:CREATE USER ... GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]. #21641 (Vitaly Baranov). - Добавлен новый столбец
slowdowns_countвsystem.clusters. При использовании hedged requests он показывает, сколько раз происходило переключение на другую реплику из-за того, что текущая реплика отвечала медленно. Также вsystem.clustersтеперь отображается фактическое значениеerrors_count. #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). - Репликация без копирования данных для
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 и связанных с ними page fault. Обратите внимание, что mmap IO имеет серьезные недостатки, из-за которых он менее надежен в production (например, зависание или 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, движка базы данных PostgreSQL и источника словаря. Это должно исправить #21444. #21839 (Kseniia Sumarokova).
- Поддержка схемы таблицы, отличной от схемы по умолчанию, для postgres storage/table-function. Закрывает #21701. #21711 (Kseniia Sumarokova).
- Добавлена поддержка приоритета реплик для postgres-источника словаря. #21710 (Kseniia Sumarokova).
- Добавлена новая настройка MergeTree
min_bytes_to_rebalance_partition_over_jbod, которая позволяет равномерно распределять новые части по разным дискам JBOD-тома. #16481 (Amos Bird). - В столбец
query_kindтаблицыsystem.query_logдля соответствующих запросов добавлены значенияGrant,RevokeиSystem. #21102 (Vasily Nemkov). - Добавлена возможность отдельно настраивать тайм-ауты для HTTP-соединений, используемых для репликации, независимо от других HTTP-тайм-аутов. #20088 (nvartolomei).
- Улучшено сообщение об исключении на клиенте в случае ошибки во время записи блоков сервером. В предыдущих версиях клиент мог получать вводящее в заблуждение сообщение, например
Data compressed with different methods. #22427 (alexey-milovidov). - Исправлена ошибка
Directory tmp_fetch_XXX already exists, которая могла возникнуть после неудачной операции fetch части. Если временный каталог fetch уже существует, он удаляется. Исправление #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). - В функцию
windowFunnelдобавлена опцияstrict_increase, чтобы учитывать каждое событие только один раз (исправляет #21835). #22025 (Vladimir). - Если ключ партиционирования таблицы
MergeTreeне включает столбцыDateилиDateTime, но включает ровно один столбецDateTime64, значения этого столбца отображаются в столбцахmin_timeиmax_timeтаблицsystem.partsиsystem.parts_columns. В таблицуsystem.parts_columnsдобавлены столбцыmin_timeиmax_time(это устраняет несоответствие с таблицей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 (экспериментальная возможность в стадии разработки). Исправлена ошибка, из-за которой не удавалось переместить каталог, если пункт назначения не пуст и используется диск cache. #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, ни числом, кратным 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).
Исправления ошибок
- Перед отменой приёмника пакетов в
HedgedConnectionssocketудалён из epoll, чтобы предотвратить возможное состояние гонки. Исправляет #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). - Исправлен entrypoint 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).
- Предотвращено наложение hedged-соединений (ошибка
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 (Azat 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). Закрывает #14614, #19288 (дубликат), #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после полного 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, связанная с тем, что внутренняя переменная CMakeCMAKE_ASM_COMPILE_OBJECTне задана наppc64le. #22469 (Kfir Itzhak). Исправлена проблема в Fedora/RHEL/CentOS, из-за которой наppc64leне находилсяlibclang_rt.builtins. #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добавлены 2 аргумента:deb_locationиsingle_binary_location. #21977 (filimonov). - Разрешено использовать clang-tidy с релизными сборками, если при его использовании включены assertions. #21914 (alexey-milovidov).
- В скрипты CMake добавлен поиск бинарных файлов llvm-12. Добавлены неявные преобразования констант для подавления предупреждений clang. Обновлены подмодули для сборки с CMake 3.19. Подавлена рекурсия при раскрытии макросов в библиотеке
readpassphrase. Устаревший параметр-fuse-ldдля clang заменён на--ld-path. #21597 (Ilya Yatsishin). - Обновлён
docker/test/testflows/runner/dockerd-entrypoint.shдля использования Yandex dockerhub-proxy, поскольку Docker Hub ввёл очень жёсткие ограничения на частоту запросов #21551 (vzakaznikov). - Исправлена сборка разделяемой библиотеки для macOS. #20184 (nvartolomei).
- В
zookeeper-dump-treeдобавлена опцияctime. Она позволяет выводить время создания узла. #21842 (Ilya).
Релиз ClickHouse 21.3 (LTS)
Релиз ClickHouse v21.3, 2021-03-12
Обратно несовместимое изменение
- Теперь нельзя создавать таблицы MergeTree в старом синтаксисе с TTL таблицы, поскольку он просто игнорируется. Attach старых таблиц по-прежнему возможен. #20282 (alesapin).
- Теперь все регистронезависимые имена функций будут приводиться к их каноническому виду. Это необходимо для маршрутизации запросов к проекциям (будущая возможность). #20174 (Amos Bird).
- Исправлено создание
TTLв случаях, когда его выражение является функцией и совпадает с ключомORDER BY. Теперь вTTLсGROUP BYразрешено задавать пользовательскую агрегацию для столбцов первичного ключа. Обратно несовместимо: для столбцов первичного ключа, которые не входят вGROUP BYи теперь не заданы явно, при истеченииTTLприменяется функцияanyвместоmax. Также, если вы используетеTTLсWHEREилиGROUP BY, во время rolling update при слияниях могут возникать исключения. #15450 (Anton Popov).
Новая возможность
- Добавлены настройки движка File:
engine_file_empty_if_not_existsиengine_file_truncate_on_insert. #20620 (M0r64n). - Добавлена агрегатная функция
deltaSumдля суммирования разностей между соседними строками. #20057 (Russ Frank). - В таблице
system.part_logпоявился новый столбецevent_time_microseconds. #20027 (Bharat Nallan). - Добавлена функция
timezoneOffset(datetime), которая возвращает смещение относительно UTC в секундах. Это закрывает #issue:19850. #19962 (keenwolf). - Добавлена настройка
insert_shard_id, позволяющая поддерживать вставку данных в конкретный сегмент из таблицы Distributed. #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. Это предварительная альфа-реализация, не подходящая для использования в production, и в будущих релизах будет изменяться с нарушением обратной совместимости. Список поддерживаемых возможностей см. в документации. #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(и включена соответствующая оптимизация) для таблиц, в которых заданы выражения безопасности на уровне строк. #19576 (Denis Glazachev). - Параметр
distributed_aggregation_memory_efficientвключён по умолчанию. Это снизит расход памяти и повысит производительность распределённых запросов. #20599 (alexey-milovidov). - Улучшена производительность GROUP BY с несколькими ключами фиксированного размера. #20472 (alexey-milovidov).
- Повышена производительность агрегатных функций за счёт более строгого алиасинга. #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).
- Запрещено удалять столбец, если на него ссылается materialized view. Закрывает #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 теперь будет случайным образом перемешивать список реплик с одинаковым приоритетом, чтобы обеспечить циклический выбор конечной точки mysql. Это закрывает #20629. #20632 (Alexander Kazakov).
- Функция ‘reinterpretAs(x, Type)’ была переименована в ‘reinterpret(x, Type)’. #20611 (Maksim Kita).
- Добавлена поддержка vhost для движка RabbitMQ #20576. #20596 (Kseniia Sumarokova).
- Улучшена сериализация для типов данных, представляющих собой комбинации Array и Tuple. Улучшено сопоставление типов данных enum с типом enum в protobuf. Исправлена сериализация типа данных
Map. Пропущенным значениям теперь назначаются значения по умолчанию. #20506 (Vitaly Baranov). - Исправлено состояние гонки между выполнением задач distributed 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).
- Добавлена поддержка всех нативных целочисленных типов в функциях битмапа. #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). - Исправлено состояние гонки в словаре executable, которое было возможно только при некорректном использовании (когда скрипт возвращает данные, игнорируя входные данные). #20045 (alexey-milovidov).
- Значением опции MYSQL_OPT_RECONNECT теперь можно управлять с помощью параметра “opt_reconnect” в разделе config MySQL-реплики. #19998 (Alexander Kazakov).
- Если пользователь вызывает функцию
JSONExtractс запрошенным типомFloat32, теперь допускается неточное преобразование в результирующий тип. Например, число0.1в JSON имеет двойную точность и не может быть точно представлено вFloat32, но пользователь всё равно хочет его получить. В предыдущих версиях возвращалось 0 для типа, отличного отNullable, иNULLдля типаNullable, чтобы показать, что преобразование неточное. Логика была на 100% корректной, но это удивляло пользователей и вызывало вопросы. Это закрывает #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). - Перемещены в предложение WHERE условия, не относящиеся к JOIN. #18720. #19685 (hexiaoting).
- Добавлена возможность замедлять INSERT в Distributed в зависимости от объёма байтов, ожидающих асинхронной отправки (для движка
Distributedдобавлены настройкиbytes_to_delay_insert/max_delay_to_insertиbytes_to_throw_insert). #19673 (Azat Khuzhin). - Исправлены некоторые редкие случаи, при которых ошибки записи могли игнорироваться в деструкторах. #19451 (Azat Khuzhin).
- Вывод инлайн-фреймов в трассировках стека при фатальных ошибках. #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и JOINTOTALSиз подзапросов. Это закрывает #19362 и #21137. #21248 (vdimir). - Устранено падение в
EXPLAINдля запроса сUNION. Исправлены #20876, #21170. #21246 (flynn). - Теперь мутации разрешены только для движков таблиц, которые их поддерживают (семейство MergeTree, Memory, MaterializedView). Для остальных движков будет выводиться более понятная ошибка. Исправление #21168. #21183 (alesapin).
- Исправление #21112. Исправлена ошибка, которая могла приводить к дубликатам при выполнении запроса вставки (если один из обратных вызовов срабатывал чуть позже, чем нужно). #21138 (Kseniia Sumarokova).
- Исправлено применение
input_format_null_as_default, когда используются типы Nullable. Это исправляет #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 обновлён до последней версии, чтобы включить исправление “редкого доступа к неинициализированным данным в ring-buffer”. #20991 (Kseniia Sumarokova).
- Исправлена ошибка ‘Пустая задача была возвращена из асинхронной очереди задач’ при отмене запроса. #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).
- Исправлен сбой, который мог возникать при получении неизвестного пакета от remove query (добавлено в #17868). #20547 (Azat Khuzhin).
- Добавлены необходимые проверки при разборе имён каталогов для асинхронной вставки (исправляет 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).- Исправлен segfault в функции
fromModifiedJulianDay, возникавший, когда тип аргумента —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. Не рекомендуется для production и пока не будет поддерживаться в качестве официальной сборки. #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,"world"!')#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. #19012 (sundyli).
- Добавлены три функции для типа данных Map: 1.
mapContains(map, key)для проверки, содержит лиmap.keysключ, переданный вторым параметром. 2.mapKeys(map)возвращает все ключи в формате Array 3.mapValues(map)возвращает все значения в формате Array. #18788 (hexiaoting). - Добавлена настройка
log_commentв связи с #18494. #18549 (Zijie Lu). - Добавлена поддержка аргумента типа
Tupleдля функций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 для тривиальных запросовcountв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). - Добавлена поддержка опции zstd long для лучшего сжатия строковых столбцов и экономии места. #17184 (ygrek).
- Незначительно снижена задержка сервера за счёт отказа от обращения к конфигурации при каждом соединении. #19863 (alexey-milovidov).
- Снижено состязание за блокировки для нескольких слоёв движка
Buffer. #19379 (Azat Khuzhin). - Добавлена поддержка разделения шага
Filterв плане запроса на паруExpression + Filter. Вместе с оптимизацией слиянияExpression + Expression(#17458) это может отложить вычисление некоторых выражений до шага послеFilter. #19253 (Nikolai Kochetov).
Улучшение
SELECT count() FROM tableтеперь можно выполнить, если изtableможно выбрать хотя бы один столбец. Это изменение исправляет #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). - Словарь: улучшено сообщение об ошибке при разборе атрибута. #19678 (Maksim Kita).
- Добавлена возможность отключить проверку контрольных сумм при чтении. Никогда не следует использовать это в production. Пожалуйста, не рассчитывайте на какие-либо преимущества от отключения этой проверки. Это может использоваться только для экспериментов и бенчмарков. Настройка применима только к таблицам семейства 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разбирает адреса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-образ: несколько улучшений в entrypoint
clickhouse-server. #18954 (filimonov). - Добавлены
normalizeQueryKeepNamesиnormalizedQueryHashKeepNamesдля нормализации запросов без маскировки длинных имён символом?. Это упрощает анализ сложных запросов в журнале запросов. #18910 (Amos Bird). - Проверка контрольной суммы каждого блока распределённого батча на отправителе перед отправкой (без повторного чтения файла: контрольные суммы проверяются в процессе чтения) позволяет избежать зависания INSERT на приёмнике (если на отправителе .bin-файл оказался усечённым). Исключено повторное чтение .bin-файлов для пакетного INSERT (оно требовалось для вычисления числа строк/байт с учётом squashing; теперь эта информация включена в заголовок, при этом обратная совместимость сохранена). #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 (общих табличных выражений). CSE (устранение общих подвыражений) теперь распространяется на подзапросы того же уровня при
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).
- При возникновении непредвиденных исключений автоматически перезапускается фоновый поток, отвечающий за выполнение запросов distributed 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).
Исправление ошибок
- Исправлен анализ индексов для бинарных функций с константным argument, из-за которого запросы возвращали неверные результаты. Это исправляет #18364. #18373 (Amos Bird).
- Исправлен запуск сервера с таблицами, у которых выражения по умолчанию содержат
dictGet(). Теперь можно получать возвращаемый типdictGet()без загрузки словаря. #19805 (Vitaly Baranov). - Исправлено падение сервера после запроса с функцией
if, где результат ветвей then/else имел типTuple. При этом тип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). - Исправлена редкая ошибка, из-за которой некоторые реплицируемые операции (например, мутации) не могли обрабатывать отдельные части после повреждения данных. Исправлено в #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).
- Исправлена утечка файлового дескриптора канала для
async_socket_for_remote. #19153 (Azat Khuzhin). - Исправлено бесконечное чтение из файла в формате
ORC(ошибка появилась в #10580). Исправлено #19095. #19134 (Nikolai Kochetov). - Исправлена проблема в модуле записи данных MergeTree, из-за которой размер marks мог превышать размер, заданный фиксированной granularity. Исправляет #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: 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, которая может приводить к разыменованиюnullptr. Закрывает #18911. #18912 (sundyli). - Исправлена ошибка
Attempt to read after eof, возникавшая при попытке выполнитьCASTзначенияNULLизNullable(String)вNullable(Decimal(P, S)). Теперь функцияCASTвозвращаетNULL, если не удаётся разобрать десятичное число из nullable-строки. Исправлено в #7690. #18718 (Winter Zhang). - Исправлена проблема с преобразованием типов данных в движке MySQL. #18124 (bo zeng).
- Исправлено исключение abort в
clickhouse-clientпри выполнении одного толькоselect. #19790 (taiyang-li).
Улучшения сборки/тестирования/упаковки
- Запуск SQLancer (логического 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вызывала срабатывание address sanitizer. #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). - Некоторые функции с большими целыми числами могут вызывать ошибку сегментации. Поддержка больших целых чисел — экспериментальная возможность. Это исправление закрывает #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).
- Исправлен столбец _state в system.parts (LOGICAL_ERROR при обращении к этому столбцу из-за неверного порядка). #19346 (Azat Khuzhin).
- Исправлены возможные неверные результаты или segfault при агрегации, когда materialized view и её целевая таблица имеют разную структуру. Исправление #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). - Теперь проверяются ограничения для настроек профиля из config. Server не запустится, если users.xml содержит настройки, не удовлетворяющие соответствующим ограничениям. #18486 (tavplubix).
- Через
ALTER MODIFY SETTINGбольше нельзя изменять настройки хранения, влияющие на части данных (write_final_markиenable_mixed_granularity_parts). #18306 (Amos Bird). - По умолчанию
insert_quorum_parallelустановлена в 1. Это существенно удобнее, чем «последовательные» quorum-вставки. Но если вы полагаетесь на последовательную согласованность, следует вернуть значение этой настройки к нулю. #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. Также разрешено использовать разные типы (целочисленные,Decimal, с плавающей точкой) для значения и веса в функцииavgWeighted. Это обратно несовместимое изменение: теперь функцииavgиavgWeightedвсегда возвращаютFloat64(как и задокументировано). До этого изменения для аргументовDecimalвозвращаемым типом тоже былDecimal. #15419 (Mike). - Выражение
toUUID(N)больше не работает. Замените его наtoUUID('00000000-0000-0000-0000-000000000000'). Это изменение вызвано неочевидными результатамиtoUUID(N), когда N не равен нулю. - SSL-сертификаты с некорректным значением “key usage” теперь отклоняются. В предыдущих версиях они работали. См. #19262.
- Ссылки
inclна файл substitutions (/etc/metrika.xml) были удалены из конфигурации по умолчанию (<remote_servers>,<zookeeper>,<macros>,<compression>,<networks>). Если вы использовали файл substitutions и полагались на эти неявные ссылки, перед обновлением их нужно вернуть вручную и явно, добавив соответствующие секции с атрибутамиincl="...". См. #18740 (alexey-milovidov).
Новая возможность
- В ClickHouse реализован протокол gRPC. #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. Когда она включена, к блоку данных, вставляемому через INSERT, применяется то же преобразование, как если бы для этого блока было выполнено слияние (например, Replacing, Collapsing, Aggregating…). Эта настройка включена по умолчанию. Это может влиять на поведение materialized view и 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, позволяющая выполнять вставку в distributed таблицу с несколькими сегментами без ключа распределения. #18294 (Amos Bird). - В MergeTreeSettings добавлены настройки
min_compress_block_sizeиmax_compress_block_size, которые имеют более высокий приоритет, чем глобальные настройки, и вступают в силу при их установке. Закрывает 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: в конфигурацию подключения к LDAP-серверу добавлен параметр
verification_cooldown, позволяющий включить кэширование успешных попыток “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).
- Используется алгоритм Dragonbox вместо ryu для преобразования чисел с плавающей точкой в строки. Это значительно повышает производительность такого преобразования. #17831 (Maksim Kita).
- Ускорена реализация функции
IPv6CIDRToRange. #17569 (vdimir). - Добавлена настройка
remerge_sort_lowered_memory_bytes_ratio(если использование памяти после remerge уменьшилось меньше чем на это значение, remerge будет отключён). #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). - Улучшен минималистичный веб-интерфейс: добавлена история; добавлена поддержка общего доступа; устранена гонка при обработке разных запросов; добавлены индикаторы выполнения запроса и готовности; добавлен favicon; добавлено распознавание Ctrl+Enter, если
textareaне в фокусе. #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). - Подстановка макросов в пути zk при выполнении
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). - В настройки хранилища Set и Join добавлен
disk. #18112 (Grigory Pervakov). - Управление доступом: теперь table function
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). - Не игнорируйте ограничения памяти сервера при сбросе Buffer. #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, его следует ставить перед ними. #16935 (flynn). - Поддержка HTTP-прокси и настройки конечной точки S3 по HTTPS. #16861 (Pavel Kovalenko).
- Добавлена корректная аутентификация клиента S3 через переменные окружения,
~/.awsиAssumeRole. #16856 (Vladimir Chebotarev). - Добавлены дополнительные спаны OpenTelemetry. Добавлен пример экспорта данных спана в Zipkin. #16535 (Alexander Kuzmenkov).
- Словари cache: полностью устранены обратные вызовы и блокировки при доступе к ним. Ключи не разделяются на “не найденные” и “истёкшие”, а хранятся в одной map в ходе запроса. #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).
- Ограничены слияния из wide в compact части. В случае Вертикального слияния это приводило к повреждению результирующей части. #18381 (Anton Popov).
- Исправлен возможный неполный результат запроса при чтении из
MergeTree*в случае задержки при чтении (сообщение<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, из-за которой размер marks мог превышать фиксированный размер гранулярности. Исправляет #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 партиции мутация должна сбрасываться. #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при попытке выполнитьCASTNULLизNullable(String)вNullable(Decimal(P, S)). Теперь функцияCASTвозвращаетNULL, если не удаётся разобрать десятичное число из nullable-строки. Исправлено в #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илиFULLJOIN. #18550 (Nikolai Kochetov). - Исправлена ошибка, которая могла приводить к зависанию запросов
ALTERпосле принудительного завершения соответствующей мутации. Обнаружено с помощью 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).
- Исправлен возможный segfault в агрегатной функции
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 Subsystem for Linux. Исправление #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). - Исправлена инвалидация индекса Set при наличии константных столбцов в подзапросе. Это исправляет #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при использовании JOIN и включенной настройкеoptimize_aggregators_of_group_by_keys. Исправляет #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, в оптимизированном тривиальном запросе подсчета и системных таблицах. #16309 (Hao Chen). - Генерировать ошибку, если преобразователь столбцов
REPLACEприменяется к несуществующему столбцу. #16183 (hexiaoting). - Генерировать исключение, если выражение ON в RIGH|FULL JOIN не является эквисоединением. #15162 (Artem Zuikov).
Улучшения сборки/тестирования/упаковки
- Добавлена простая проверка целостности бинарного файла ClickHouse. Она позволяет выявлять повреждения, вызванные неисправным оборудованием (например, порчей данных на носителях или случайным изменением битов в оперативной памяти). #18811 (alexey-milovidov).
- Заменён
OpenSSLнаBoringSSL. Это позволяет избежать проблем с санитайзерами. Исправлены #12490, #17502 и #12952. #18129 (alexey-milovidov). - Упростили скрипт инициализации
Sys/V. Он не работал в Ubuntu 12.04 и более ранних версиях. #17428 (alexey-milovidov). - Несколько улучшений в скрипте
./clickhouse install. #17421 (alexey-milovidov). - Теперь ClickHouse может выступать в роли псевдо-ZooKeeper. Сейчас реализация хранилища — это просто хеш-таблица в памяти, а server частично поддерживает протокол ZooKeeper. #16877 (alesapin).
- Исправлено удаление устаревших наблюдений списка в TestKeeperStorage (мок-объекте для ZooKeeper). #18065 (alesapin).
- Добавлена команда
SYSTEM SUSPENDдля моделирования сбоев. Её можно использовать для упрощения тестов переключения при отказе. Это закрывает #15979. #18850 (alexey-milovidov). - Генерировать build id при компоновке ClickHouse с
lld. Оказалось, чтоlldне генерирует его по умолчанию на моей машине. Build id используется для отчётов о сбоях и диагностики. #18808 (alexey-milovidov). - Исправлены ошибки ShellCheck при проверке стиля. #18566 (Ilya Yatsishin).
- Информация о часовых поясах обновлена до версии 2020e. #18531 (alesapin).
- Исправлены предупреждения codespell. Проверки стиля разбиты на отдельные части. Обновлён Docker-образ для проверок стиля. #18463 (Ilya Yatsishin).
- Автоматическая проверка на наличие в документации оставшихся маркеров конфликта. #18332 (alexey-milovidov).
- Для проверки тестов без сохранения состояния на нестабильность включён Thread Fuzzer. #18299 (alesapin).
- Не используйте функцию
strerror, не являющуюся потокобезопасной. #18204 (alexey-milovidov). - Обновлено действие workflow
anchore/scan-action@main(перенесено сmasterнаmain). #18192 (Stig Bakken). - Теперь
clickhouse-testвыполняет операции DROP/CREATE баз данных с тайм-аутом. #18098 (alesapin). - Добавлена экспериментальная поддержка фреймворка Pytest для тестов без сохранения состояния. #17902 (Ivan).
- Теперь в интеграционных тестах используется новая версия демона Docker. #17671 (alesapin).
- Отправлять сведения об официальной сборке, объёме памяти, CPU и свободном месте на диске в 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).