Журнал изменений за 2024 год
Оглавление
Релиз ClickHouse v24.12, 2024-12-19
Релиз ClickHouse v24.11, 2024-11-26
Релиз ClickHouse v24.10, 2024-10-31
Релиз ClickHouse v24.9, 2024-09-26
Релиз ClickHouse v24.8 LTS, 2024-08-20
Релиз ClickHouse v24.7, 2024-07-30
Релиз ClickHouse v24.6, 2024-07-01
Релиз ClickHouse v24.5, 2024-05-30
Релиз ClickHouse v24.4, 2024-04-30
Релиз ClickHouse v24.3 LTS, 2024-03-26
Релиз ClickHouse v24.2, 2024-02-29
Релиз ClickHouse v24.1, 2024-01-30
Журнал изменений за 2023 год
Релиз ClickHouse 24.12, 2024-12-19
Изменения, нарушающие обратную совместимость
- Функции
greatestиleastтеперь игнорируют входные значения NULL, тогда как ранее они возвращали NULL, если один из аргументов был NULL. Например, теперьSELECT greatest(1, 2, NULL)возвращает 2. Это делает поведение совместимым с PostgreSQL, но при этом нарушает совместимость с MySQL, который возвращает NULL. Чтобы сохранить предыдущее поведение, установите настройкуleast_greatest_legacy_null_behavior(по умолчанию:false) в значениеtrue. #65519 #73344 (kevinyhzou). - Новая интеграция с MongoDB теперь используется по умолчанию. Пользователи, которые предпочитают использовать устаревший драйвер MongoDB (на основе драйвера Poco), могут включить серверную настройку
use_legacy_mongodb_integration. #73359 (Kirill Nikiforov.
Новая возможность
- Типы
JSON/Dynamic/Variantпереведены из экспериментальных в бета-стадию. #72294 (Pavel Kruglov). Мы также перенесли все исправления, включая это изменение, в версию 24.11. - Эволюция схемы для формата хранения данных Iceberg предоставляет пользователю широкие возможности по изменению схемы таблицы. Порядок столбцов, их имена и простые расширения типов могут изменяться на уровне реализации. #69445 (Daniil Ivanik).
- Интеграция с REST-каталогом Iceberg: новый движок базы данных Iceberg, подключающий весь каталог к ClickHouse. #71542 (Kseniia Sumarokova).
- Добавлен кэш для первичного индекса таблиц
MergeTree(может быть включён настройкой таблицыuse_primary_key_cache). Если для первичного индекса включены ленивая загрузка и кэш, он будет загружаться в кэш по требованию (аналогично кэшу меток), вместо того чтобы постоянно находиться в памяти. Добавлен предварительный прогрев (prewarm) первичного индекса при вставках/слияниях/загрузках частей данных и при перезапуске таблицы (может быть включён настройкойprewarm_primary_key_cache). Это позволяет снизить потребление памяти для очень больших таблиц на разделяемом хранилище; мы протестировали это на таблицах с более чем квадриллионом записей. #72102 (Anton Popov). #72750 (Alexander Gololobov). - Реализована команда
SYSTEM LOAD PRIMARY KEYдля загрузки первичных индексов для всех частей указанной таблицы или для всех таблиц, если таблица не указана. Это полезно для бенчмаркинга и для предотвращения дополнительной задержки при выполнении запросов. #66252 #67733 (ZAWA_ll). - Добавлен запрос, который позволяет подключать таблицы
MergeTreeв видеReplicatedMergeTreeи наоборот:ATTACH TABLE ... AS REPLICATEDиATTACH TABLE ... AS NOT REPLICATED. #65401 (Kirill). - Новая настройка
http_response_headers, позволяющая настраивать заголовки HTTP-ответа. Например, вы можете указать браузеру отобразить изображение, хранящееся в базе данных. Это закрывает #59620. #72656 (Alexey Milovidov). - Добавлена функция
toUnixTimestamp64Second, которая преобразуетDateTime64в значение типаInt64с фиксированной точностью до секунды, чтобы можно было возвращать отрицательное значение, если дата раньше эпохи Unix. #70597 (zhanglistar). #73146 (Robert Schulze). - Добавлена новая настройка
enforce_index_structure_match_on_partition_manipulation, позволяющая выполнять операцию ATTACH, если набор проекций и вторичных индексов исходной таблицы является подмножеством набора проекций и вторичных индексов целевой таблицы. Закрывает #70602. #70603 (zwy991114). - Добавлен синтаксис ALTER USER
{ADD|MODIFY|DROP SETTING}, ALTER USER{ADD|DROP PROFILE}, а также для ALTER ROLE и ALTER PROFILE. Теперь вместо замены всего набора настроек можно просто изменять его. #72050 (pufit). - Добавлена функция
arrayPRAUC, которая вычисляет AUC (Area Under the Curve) для кривой Precision–Recall. #72073 (Emmanuel). - Добавлена функция
indexOfAssumeSortedдля массивов. Оптимизирует поиск в случае массива, отсортированного в неубывающем порядке. Эффект заметен на очень больших массивах (более 100 000 элементов). #72517 (Eric Kurbanov). - Добавлена возможность использовать разделитель в качестве необязательного второго аргумента агрегатной функции
groupConcat. #72540 (Yarik Briukhovetskyi). - Функция
translateтеперь поддерживает удаление символов, если в аргументеfromбольше символов, чем в аргументеto. Пример:SELECT translate('clickhouse', 'clickhouse', 'CLICK')теперь возвращаетCLICK. #71441 (shuai.xu).
Экспериментальные возможности
- Новый параметр движка MergeTree
allow_experimental_reverse_key, который включает поддержку сортировки по убыванию в ключах сортировки MergeTree. Это полезно для анализа временных рядов, особенно для TopN-запросов. Пример использования:ENGINE = MergeTree ORDER BY (time DESC, key)— сортировка по убыванию для поляtime. #71095 (Amos Bird).
Повышение производительности
- Переупорядочивание JOIN. Добавлен параметр для выбора стороны соединения, которая будет использоваться как внутренняя (build) таблица в плане запроса. Это контролируется параметром
query_plan_join_swap_table, который может быть установлен в значениеauto. В этом режиме ClickHouse попытается выбрать таблицу с наименьшим количеством строк. #71577 (Vladimir Cherkasov). - Теперь алгоритм
parallel_hashбудет использоваться (если применимо), когда настройкаjoin_algorithmимеет значениеdefault. Две предыдущие альтернативы (directиhash) по-прежнему будут использоваться, еслиparallel_hashне может быть применён. #70788 (Nikita Taranov). - Добавлена опция для извлечения общих выражений из выражений
WHEREиONс целью уменьшения количества хеш-таблиц, используемых при соединениях. Это имеет смысл, когда условие JOIN ON содержит общие части внутри операторов AND в разных ветках OR. Можно включить с помощьюoptimize_extract_common_expressions = 1. #71537 (János Benjamin Antal). - Позволяет использовать индексы в запросах
SELECT, когда индексируемый столбец приводится к типуLowCardinality(String), что может происходить при выполнении запроса по таблице Merge, где в одних таблицах столбец имеет типString, а в других —LowCardinality(String). #71598 (Yarik Briukhovetskyi). - Во время выполнения запроса с параллельными репликами и включённым локальным планом не выполняется анализ индексов на рабочих узлах. Координатор выберет диапазоны для чтения рабочими узлами на основе анализа индексов на своей стороне (на инициаторе запроса). Это позволяет коротким запросам с параллельными репликами иметь такую же низкую задержку, как и односерверные запросы. #72109 (Igor Nikonov).
- Потребление памяти при выполнении команды
clickhouse disks remove --recursiveуменьшено для дисков объектного хранилища. #67323 (Kirill). - Вернули оптимизацию для чтения подколонок одного столбца в compact‑частях из #57631. Она была удалена по ошибке. #72285 (Pavel Kruglov).
- Ускорена сортировка столбцов
LowCardinality(String)за счёт девиртуализации вызовов в компараторе. #72337 (Alexander Gololobov). - Оптимизированы функции
argMinиargMaxдля некоторых простых типов данных. #72350 (alesapin). - Оптимизировано использование разделяемых блокировок в трекере памяти для уменьшения конкуренции за блокировки, что улучшает производительность на системах с очень большим числом CPU. #72375 (Jiebin Sun).
- Добавлен новый параметр
use_async_executor_for_materialized_views. Используется асинхронное и потенциально многопоточное выполнение запроса материализованного представления, что может ускорить обработку представлений во время INSERT, но при этом требует больше памяти. #72497 (alesapin). - Улучшена производительность десериализации состояний агрегатных функций (в типе данных
AggregateFunctionи в распределённых запросах). Незначительно улучшена производительность разбора форматаRowBinary. #72818 (Anton Popov). - Разделяйте диапазоны при чтении с использованием параллельных реплик в порядке ключа таблицы, чтобы использовать меньше памяти при чтении. #72173 (JIaQi).
- Ускорены вставки в таблицы семейства MergeTree в случае единственного значения ключа партиционирования во вставляемом батче. #72348 (alesapin).
- Реализовано параллельное создание таблиц при восстановлении из резервной копии. До этого PR команда
RESTOREвсегда создавала таблицы в одном потоке, что могло значительно замедлять восстановление для резервных копий, содержащих множество таблиц. #72427 (Vitaly Baranov). - Сброс кэша меток может занять заметное время, если он большой. Если на это время мы удерживаем мьютекс контекста, это блокирует множество других операций — даже новые клиентские подключения не могут быть установлены, пока он не будет освобождён. При этом удерживать этот мьютекс на самом деле не требуется для синхронизации, достаточно иметь локальную ссылку на кэш через
shared_ptr. #72749 (Alexander Gololobov).
Улучшение
- Удалена настройка
allow_experimental_join_condition, что по умолчанию разрешает условия JOIN не по равенству. #69910 (Vladimir Cherkasov). - Настройки из конфигурации сервера (users.xml) теперь применяются и на клиенте. Это полезно для параметров формата, например
date_time_output_format. #71178 (Michael Kolupaev). - Автоматическая выгрузка
GROUP BY/ORDER BYна диск в зависимости от использования памяти сервером/пользователем. Управляется настройками запросаmax_bytes_ratio_before_external_group_by/max_bytes_ratio_before_external_sort. #71406 (Azat Khuzhin). - Добавлена новая логика отмены запросов:
CancellationCheckerпроверяет тайм-ауты для каждого запущенного запроса и останавливает их, как только время ожидания истекает. #69880 (Yarik Briukhovetskyi). - Добавлена поддержка
ALTERизObjectвJSON, что позволяет легко мигрировать с устаревшего типаObject. #71784 (Pavel Kruglov). - Разрешить наличие в наборе неизвестных значений, отсутствующих в Enum. Исправление #72662. #72686 (zhanglistar).
- Добавлена поддержка строкового оператора поиска (например, LIKE) для типа данных
Enum, что реализует #72661. #72732 (zhanglistar). - Некоторые бессмысленные запросы ALTER USER успешно выполнялись. Исправлена проблема #71227. #71286 (Arthur Passos).
- При построении плана для распределённого запроса
INSERT ... SELECTучитыватьprefer_locahost_replica. #72190 (filimonov). - Azure нарушила спецификацию Iceberg, по ошибке пометив Iceberg v1 как Iceberg v2. Проблема описана здесь. Azure Iceberg Writer создает файлы метаданных Iceberg (а также manifest-файлы), которые нарушают спецификацию. В результате мы пытаемся читать метаданные формата Iceberg v1 с помощью ридера формата v2 (так как они записываются именно в таком виде) и добавили генерацию ошибки, если в manifest-файле не созданы соответствующие поля. #72277 (Daniil Ivanik).
- Теперь разрешено использовать
CREATE MATERIALIZED VIEWсUNION [ALL]в запросе. Поведение такое же, как для материализованного представления сJOIN: только первая таблица в выраженииSELECTбудет работать как триггер для вставки, все остальные таблицы будут игнорироваться. Однако, если есть несколько обращений к первой таблице (например,UNIONс самой собой), все они будут обработаны как единый вставленный блок данных. #72347 (alesapin). - Добавлена проверка исходного запроса при использовании ClickHouse в качестве источника для словаря. #72548 (Alexey Katsman).
- Убедитесь, что ClickHouse будет учитывать изменения в ZooKeeper при перезагрузке конфигурации. #72593 (Azat Khuzhin).
- Улучшено приближённое вычисление объёма памяти, занимаемой кэшированными метками, для снижения общего потребления памяти кэшем. #72630 (Antonio Andelic).
- Добавлена новая метрика
StartupScriptsExecutionState. Она может принимать три значения: 0 = скрипты инициализации ещё не завершили выполнение, 1 = скрипты инициализации выполнены успешно, 2 = выполнение скриптов инициализации завершилось с ошибкой. Эта метрика нужна, потому что нам необходимо знать, успешно ли выполняются скрипты инициализации в облаке, особенно после выпусков базовых конфигураций. #72637 (Miсhael Stetsyuk). - Добавьте новую метрику
MergeTreeIndexGranularityInternalArraysTotalSizeвsystem.metrics. Эта метрика нужна для поиска экземпляров с очень большими наборами данных, подверженных высокой - Добавлены повторные попытки при создании реплицируемых таблиц. #72682 (Vitaly Baranov).
- Добавлен
total_bytes_with_inactiveвsystem.tablesдля подсчёта суммарного объёма неактивных частей в байтах. #72690 (Kai Zhu). - Добавлены настройки MergeTree в
system.settings_changes. #72694 (Raúl Marín). - Добавлена поддержка типа JSON в функции
notEmpty. #72741 (Pavel Kruglov). - Добавлена поддержка разбора ошибки GCS S3
AuthenticationRequired. #72753 (Vitaly Baranov). - Добавлена поддержка типа
Dynamicв функцияхifNullиcoalesce. #72772 (Pavel Kruglov). - Добавлена поддержка
Dynamicв функцияхtoFloat64/touInt32/и т. д. #72989 (Pavel Kruglov). - Добавлены настройки запросов к S3
http_max_fields,http_max_field_name_size,http_max_field_value_size, которые используются при разборе ответов API S3 во время создания или восстановления бэкапа. #72778 (Vitaly Baranov). - Удалять метаданные таблицы в Keeper для Storage S3(Azure)Queue только после удаления последней таблицы, использующей эти метаданные. #72810 (Kseniia Sumarokova).
- Добавлены события профилирования
JoinBuildTableRowCount/JoinProbeTableRowCount/JoinResultRowCount. #72842 (Vladimir Cherkasov). - Поддержка подстолбцов в сортировочном ключе и пропускающих индексах MergeTree. #72644 (Pavel Kruglov).
Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе)
- Исправлена возможная проблема пересечения партов для MergeTree (после неудачной операции перемещения парта в каталог detached, возможно из‑за операции с объектным хранилищем). #70476 (Azat Khuzhin).
- Исправлено определение ошибки, возникающей при слишком длинном имени таблицы. Добавлен диагностический вывод с указанием максимально допустимой длины. Добавлена новая функция
getMaxTableNameLengthForDatabase. #70810 (Yarik Briukhovetskyi). - Исправлены зомби-процессы после аварийного завершения работы программы
clickhouse-library-bridge(эта программа позволяет запускать небезопасные библиотеки). #71301 (MikhailBurdukov). - Исправлена ошибка
NoSuchKeyпри откате транзакции, возникавшая, когда не удавалось создать каталог для дискаplain_rewritable. #71439 (Julia Kartseva). - Исправлена сериализация значений
Dynamicв форматах JSONPretty. #71923 (Pavel Kruglov). - Добавлено сохранение автоматически определённого имени формата в запрос
CREATEв движкахFile/S3/URL/HDFS/Azure. Ранее имя формата определялось заново при каждом перезапуске сервера, и если указанные файлы с данными были удалены, это приводило к ошибкам при запуске сервера. #72108 (Pavel Kruglov). - Исправлены ошибки при использовании UDF в выражении JOIN ON со старым анализатором. #72179 (Raúl Marín).
- Исправляет несколько мелких ошибок в
StorageObjectStorage. Необходимо включить параметрuse_hive_partitioningпо умолчанию. #72185 (Yarik Briukhovetskyi). - Исправлена ошибка, из-за которой
min_age_to_force_merge_on_partition_onlyзастревал, многократно пытаясь объединить один и тот же раздел, который уже был слит в одну часть, и при этом не объединял разделы, содержащие несколько частей. #72209 (Christoph Wurm). - Исправлена ошибка в
SimpleSquashingChunksTransform, которая в редких случаях приводила к сбою при обработке разреженных столбцов. #72226 (Vladimir Cherkasov). - Исправлена гонка данных в
GraceHashJoin, вследствие которой некоторые строки могли отсутствовать в результате операции JOIN. #72233 (Nikita Taranov). - Исправлены запросы
ALTER DELETEс материализованным столбцом_block_number(если включена настройкаenable_block_number_column). #72261 (Anton Popov). - Исправлена гонка данных при параллельных вызовах
ColumnDynamic::dumpStructure(), например из конструктораConcurrentHashJoin. #72278 (Nikita Taranov). - Исправлена возможная ошибка
LOGICAL_ERRORпри наличии повторяющихся столбцов вORDER BY ... WITH FILL. #72387 (Vladimir Cherkasov). - Исправлены несоответствия типов в нескольких случаях после применения
optimize_functions_to_subcolumns. #72394 (Anton Popov). - Используйте
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILEвместоAWS_CONTAINER_AUTHORIZATION_TOKEN_PATH. Исправлена проблема #71074. #72397 (Konstantin Bogdanov). - Исправлена ошибка при разборе запросов
BACKUP DATABASE db EXCEPT TABLES db.table. #72429 (Konstantin Bogdanov). - Запрещено создавать пустой тип
Variant. #72454 (Pavel Kruglov). - Исправлено некорректное форматирование
result_part_pathвsystem.merges. #72567 (Konstantin Bogdanov). - Исправлен разбор glob-шаблона с одним элементом (например,
{file}). #72572 (Konstantin Bogdanov). - Исправлена генерация запроса для ведомого сервера в случае распределённого запроса с
ARRAY JOIN. Исправляет #69276. #72608 (Dmitry Novik). - Исправлена ошибка, из-за которой выражение DateTime64 IN DateTime64 не возвращало результатов. #72640 (Yarik Briukhovetskyi).
- Исправлены неконсистентные метаданные при добавлении новой реплики в реплицируемую базу данных, содержащую таблицу, созданную с параметром
flatten_nested=0. #72685 (Alexander Tokmakov). - Исправлена расширенная конфигурация SSL для внутреннего обмена данными в Keeper. #72730 (Antonio Andelic).
- Исправлена ошибка «No such key» в режиме unordered для S3Queue при значении настройки
tracked_files_limit, меньшем скорости появления файлов в S3. #72738 (Kseniia Sumarokova). - Исправлено исключение, возникающее в
RemoteQueryExecutorпри отсутствии локального пользователя. #72759 (Andrey Zvonov). - Исправлены мутации с материализованным столбцом
_block_number(если включена настройкаenable_block_number_column). #72854 (Anton Popov). - Исправлено резервное копирование и восстановление с использованием перезаписываемого диска Plain в случае, если в резервной копии есть пустые файлы. #72858 (Kseniia Sumarokova).
- Корректная отмена вставок в DistributedAsyncInsertDirectoryQueue. #72885 (Antonio Andelic).
- Исправлено падение при разборе некорректных данных в разрежённые столбцы (может происходить при включённой настройке
enable_parsing_to_custom_serialization). #72891 (Anton Popov). - Исправлен потенциальный сбой при восстановлении резервной копии. #72947 (Kseniia Sumarokova).
- Исправлена ошибка в методе JOIN
parallel_hash, которая могла проявляться при выполнении запроса со сложным условием в предложенииONс фильтрами по неравенству. #72993 (Nikita Taranov). - Используйте настройки формата по умолчанию при разборе JSON, чтобы избежать ошибок десериализации. #73043 (Pavel Kruglov).
- Исправлен сбой в транзакциях при использовании неподдерживаемого хранилища. #73045 (Raúl Marín).
- Исправлена возможная переоценка потребления памяти (когда разница между
MemoryTrackingиMemoryResidentпродолжала расти). #73081 (Azat Khuzhin). - Добавлена проверка наличия дублирующихся ключей JSON при разборе Tuple. Ранее это могло приводить к возникновению логической ошибки
Invalid number of rows in Chunkпри разборе. #73082 (Pavel Kruglov).
Улучшения сборки/тестирования/упаковки
- Все небольшие утилиты, ранее хранившиеся в каталоге
/utilsи требовавшие ручной компиляции из исходников, теперь являются частью основного дистрибутива ClickHouse. Это закрывает #72404. #72426 (Nikita Mikhaylov). - Отменено удаление
/etc/systemd/system/clickhouse-server.service, добавленное в 22.3. #39323. #72259 (Mikhail f. Shiryaev). - Разделены крупные единицы трансляции для предотвращения сбоев компиляции из-за ограничений по памяти/CPU. #72352 (Yakov Olkhovskiy).
- OSX: Сборка с поддержкой ICU, что включает коллации, конвертацию наборов символов и другие возможности локализации. #73083 (Raúl Marín).
Релиз ClickHouse 24.11, 2024-11-26
Изменения, нарушающие обратную совместимость
- Удалены системные таблицы
generate_seriesиgenerateSeries. Они были добавлены по ошибке здесь: #59390. #71091 (Alexey Milovidov). - Удалён
StorageExternalDistributed. Закрывает #70600. #71176 (flynn). - Движки таблиц Kafka, NATS и RabbitMQ теперь покрываются собственными правами в иерархии
SOURCES. Добавьте соответствующие привилегии всем пользователям баз данных, отличных от базы данных по умолчанию, которые создают таблицы с этими типами движков. #71250 (Christoph Wurm). - Полный запрос мутации теперь проверяется перед выполнением (включая подзапросы). Это предотвращает случайный запуск некорректного запроса и накопление «мёртвых» мутаций, блокирующих корректные мутации. #71300 (Christoph Wurm).
- Переименована настройка кеша файловой системы
skip_download_if_exceeds_query_cacheвfilesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit. #71578 (Kseniia Sumarokova). - Удалена поддержка аргументов типов
Enum, а такжеUInt128иUInt256вdeltaSumTimestamp. Удалена поддержка типовInt8,UInt8,Int16иUInt16для второго («timestamp») аргументаdeltaSumTimestamp. #71790 (Alexey Milovidov). - При получении данных непосредственно из словаря с использованием хранилища Dictionary, табличной функции словаря или прямого SELECT по самому словарю теперь достаточно иметь привилегию
SELECTилиdictGetдля этого словаря. Это согласуется с предыдущими попытками предотвратить обход ACL: https://github.com/ClickHouse/ClickHouse/pull/57362 и https://github.com/ClickHouse/ClickHouse/pull/65359. Это также делает второе из них обратно совместимым. #72051 (Nikita Mikhaylov).
Экспериментальная функция
- Реализован
allow_feature_tierкак глобальный переключатель для отключения всех экспериментальных / бета‑функций. #71841 #71145 (Raúl Marín). - Исправлена возможная ошибка
No such file or directory, возникающая из‑за неэкранированных специальных символов в файлах для подстолбцов JSON. #71182 (Pavel Kruglov). - Добавлена поддержка ALTER типа с String на JSON. Этот PR также изменяет сериализацию типов JSON и Dynamic на новую версию V2. Старая версия V1 по‑прежнему может использоваться при включении настройки
merge_tree_use_v1_object_and_dynamic_serialization(её можно использовать во время обновления, чтобы при необходимости откатить версию без проблем). #70442 (Pavel Kruglov). - Реализован простой CAST из Map/Tuple/Object в новый JSON через сериализацию/десериализацию из JSON‑строки. #71320 (Pavel Kruglov).
- По умолчанию запрещено использовать типы Variant/Dynamic в ORDER BY/GROUP BY/PARTITION BY/PRIMARY KEY, так как это может приводить к неожиданным результатам. #69731 (Pavel Kruglov).
- Запрещено использовать типы Dynamic/Variant в функциях min/max во избежание путаницы. #71761 (Pavel Kruglov).
Новая функциональность
- Добавлен SQL‑синтаксис для описания управления нагрузкой и ресурсами. https://clickhouse.com/docs/operations/workload-scheduling. #69187 (Sergei Trifonov).
- Новый тип данных
BFloat16представляет 16‑разрядные числа с плавающей запятой с 8‑битным показателем степени, знаком и 7‑битной мантиссой. Это закрывает #44206. Это закрывает #49937. #64712 (Alexey Milovidov). - Добавлен запрос
CHECK GRANTдля проверки, были ли текущему пользователю/роли выданы конкретные привилегии и существует ли соответствующая таблица/столбец в памяти. #68885 (Unalian). - Добавлены табличные функции
iceberg[S3;HDFS;Azure]Cluster,deltaLakeCluster,hudiCluster. #72045 (Mikhail Artemenko). - Добавлена возможность задавать имя пользователя/пароль в http_handlers (для
dynamic_query_handler/predefined_query_handler). #70725 (Azat Khuzhin). - Добавлена поддержка клаузы STALENESS в операторе ORDER BY WITH FILL. #71151 (Mikhail Artemenko).
- Разрешено задавать для каждого метода аутентификации собственный срок действия; при этом срок действия удалён из сущности пользователя. #70090 (Arthur Passos).
- Добавлены новые функции
parseDateTime64,parseDateTime64OrNullиparseDateTime64OrZero. По сравнению с существующей функциейparseDateTime(и её вариантами) они возвращают значение типаDateTime64вместоDateTime. #71581 (kevinyhzou).
Повышение производительности
- Оптимизировано использование памяти для значений гранулярности индекса, если гранулярность постоянна для парта. Добавлена возможность всегда выбирать постоянную гранулярность для парта (настройка
use_const_adaptive_granularity), что помогает гарантировать, что она всегда оптимально используется в памяти. Это помогает при больших нагрузках (триллионы строк в общем хранилище) избежать постоянного роста расхода памяти на метаданные (значения гранулярности индекса) партов данных. #71786 (Anton Popov). - Теперь мы не копируем столбцы входных блоков для
join_algorithm = 'parallel_hash'при распределении их между потоками для параллельной обработки. #67782 (Nikita Taranov). - Оптимизирован алгоритм слияния
Replacingдля непересекающихся частей данных. #70977 (Anton Popov). - Не перечислять отсоединённые части с дисков
readonlyиwrite-onceв метриках и вsystem.detached_parts. #71086 (Alexey Milovidov). - По умолчанию не вычислять тяжелые асинхронные метрики. Функция была добавлена в #40332, но нецелесообразно держать ресурсоемкую фоновую задачу, которая требуется только одному клиенту. #71087 (Alexey Milovidov).
- Для дисков
plain_rewritableне вызывайте API объектного хранилища при перечислении каталогов, так как это может быть неэффективно по затратам. Вместо этого храните список имён файлов в памяти. Компромисс — увеличенное время начальной загрузки и больший объём памяти, необходимый для хранения имён файлов. #70823 (Julia Kartseva). - Улучшены производительность и точность интервала сбора данных в
system.query_metric_logпутём уменьшения критической области. #71473 (Pablo Marcos). - Оптимизация последовательного чтения с помощью генерации виртуальных строк, что позволяет при сортировке слиянием считывать меньше данных; особенно полезно при наличии нескольких частей. #62125 (Shichao Jin).
- Добавлена настройка сервера
async_load_system_database, которая позволяет запускать сервер при неполностью загруженной системной базе данных. Это помогает запускать ClickHouse быстрее, если в системе много системных таблиц. #69847 (Sergei Trifonov). - Добавлен параметр
--threadsдляclickhouse-compressor, позволяющий выполнять сжатие данных в параллельном режиме. #70860 (Alexey Milovidov). - Добавлена настройка
prewarm_mark_cache, которая включает предварительную загрузку меток в кэш меток при вставках, слияниях, загрузках частей и при запуске таблицы. #71053 (Anton Popov). - Сокращён размер размещаемого в памяти массива index_granularity, чтобы уменьшить потребление памяти семейством движков таблиц MergeTree. #71595 (alesapin).
- Отключена настройка файлового кеша
boundary_alignmentдля операций чтения, не выполняемых с диска, что улучшает производительность чтения отдельных удалённых файлов с кешированием. #71827 (Kseniia Sumarokova). - Запросы вида
SELECT * FROM table LIMIT ...приводили к загрузке индексов частей, хотя они при этом не использовались. #71866 (Alexander Gololobov). parallel_replicas_local_planвключён по умолчанию. Построение полноценного локального плана на инициаторе запроса улучшает производительность параллельных реплик при меньшем расходе ресурсов и даёт больше возможностей для оптимизации запросов. #70171 (Igor Nikonov).
Улучшение
- Добавлена возможность использовать clickhouse с файловым аргументом, например
ch queries.sql. #71589 (Raúl Marín). - Формат
Vertical(который также активируется, если завершить запрос на\G) получает возможности форматов Pretty, такие как: - подсветка групп разрядов в числах; - вывод удобочитаемой подсказки по числу. #71630 (Alexey Milovidov). - Передавать внешние пользовательские роли от инициатора запроса на другие узлы кластера. Это полезно, когда только инициатор имеет доступ к внешнему аутентификатору (например, LDAP). #70332 (Andrey Zvonov).
- Добавлены псевдонимы
anyRespectNulls,firstValueRespectNullsиanyValueRespectNullsдля агрегатной функцииany. Также добавлены псевдонимыanyLastRespectNullsиlastValueRespectNullsдля агрегатной функцииanyLast. Это позволяет использовать более естественный синтаксис в стиле camelCase вместо смешанного camelCase/underscore, например:SELECT anyLastRespectNullsStateIfвместоanyLast_respect_nullsStateIf. #71403 (Peter Nguyen). - Добавлен параметр конфигурации
date_time_utc, который позволяет формату JSON-логов использовать дату и время в UTC в формате RFC 3339/ISO8601. #71560 (Ali). - Добавлен новый тип заголовка для S3-эндпоинтов для аутентификации пользователей (
access_header). Это позволяет задать заголовок доступа с наименьшим приоритетом, который будет переопределён значениемaccess_key_idиз любого другого источника (например, схемы таблицы или именованной коллекции). #71011 (MikhailBurdukov). - Функции высшего порядка с константными массивами и константными захваченными аргументами будут возвращать константные значения. #58400 (Alexey Milovidov).
- Имена шагов плана запроса (
EXPLAIN PLAN json=1) и имена процессоров конвейера (EXPLAIN PIPELINE compact=0,graph=1) теперь имеют уникальный идентификатор в качестве суффикса. Это позволяет сопоставлять вывод профилировщика процессоров и трассы OpenTelemetry с выводом команды EXPLAIN. #63518 (qhsong). - Добавлена возможность проверки наличия объекта после записи его в Azure Blob Storage; это настраивается с помощью параметра
check_objects_after_upload. #64847 (Smita Kulkarni). - По умолчанию использовать базу данных
Atomicвclickhouse-local. Решает пункты 1 и 5 из #50647. Закрывает #44817. #68024 (Alexey Milovidov). - Исключения нарушают протокол HTTP для уведомления клиента об ошибке. #68800 (Sema Checherinda).
- Сообщать о хостах, выполняющих распределённые DDL-запросы, создавая replica_dir и помечая реплики активными в DDLWorker. #69658 (tuanpach).
- Ожидать выполнения только на активных репликах для запросов к базе данных с директивой ON CLUSTER, если distributed_ddl_output_mode установлен в значение *_only_active. #69660 (tuanpach).
- Улучшена обработка ошибок и отмена
ON CLUSTERдля бэкапов и восстановлений: - Если бэкап или восстановление завершается с ошибкой на одном хосте, эта операция будет автоматически отменена на других хостах - Не должно возникать странных ошибок из‑за того, что некоторые хосты завершились ошибкой, пока другие продолжали работу - Если бэкап или восстановление отменяется на одном хосте, эта операция будет автоматически отменена на других хостах - Исправлены проблемы сtest_disallow_concurrency— теперь запрет параллельного выполнения должен работать лучше - Бэкапы и восстановления теперь гораздо более устойчивы к отключениям ZooKeeper. #70027 (Vitaly Baranov). - Добавлена поддержка
ALTER TABLE ... MODIFY/RESET SETTING ...для некоторых настроек в хранилище S3Queue. #70811 (Kseniia Sumarokova). - Добавлена возможность перезагружать клиентские сертификаты по аналогии с процедурой перезагрузки серверных сертификатов. #70997 (Roman Antonov).
- Сделать настраиваемым размер истории клиента и увеличить его значение по умолчанию. #71014 (Jiří Kozlovský).
- Поддержка булевых типов для нативного считывателя формата Parquet. #71055 (Arthur Passos).
- Повторять запросы при большем числе ошибок при работе с S3, например «Malformed message». #71088 (Alexey Milovidov).
- Снижен уровень логирования для некоторых сообщений о S3. #71090 (Alexey Milovidov).
- Добавлена поддержка записи файлов HDFS, имена которых содержат пробелы. #71105 (exmy).
- Добавлены настройки, ограничивающие количество реплицируемых таблиц, словарей и представлений. #71179 (Kirill).
- Используйте
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILEвместоAWS_CONTAINER_AUTHORIZATION_TOKEN, если он доступен. Исправляет #71074. #71269 (Konstantin Bogdanov). - Удалить логику создания узла ZooKeeper
metadata_versionиз потока перезапуска ReplicatedMergeTree. Единственный сценарий, когда нам нужно создавать этот узел, — если пользователь обновился с версии более ранней, чем 20.4, сразу на версию позже 24.10. ClickHouse не поддерживает обновления, между которыми проходит более года, поэтому вместо создания узла следует выбросить исключение и попросить пользователя обновляться поэтапно. #71385 (Miсhael Stetsyuk). - Добавлены дашборды для каждого хоста
Overview (host)иCloud overview (host)в расширенный дашборд. #71422 (alesapin). clickhouse-localпо умолчанию использует неявный SELECT, что позволяет использовать его как калькулятор. Улучшена подсветка синтаксиса для режима неявного SELECT. #71620 (Alexey Milovidov).- Приложения командной строки будут подсвечивать синтаксис даже для запросов с несколькими операторами. #71622 (Alexey Milovidov).
- Консольные приложения будут завершаться с ненулевым кодом выхода при ошибках. В предыдущих версиях приложение
disksзавершалось с нулевым кодом при ошибках, а другие приложения возвращали нулевой код для ошибок 256 (PARTITION_ALREADY_EXISTS) и 512 (SET_NON_GRANTED_ROLE). #71623 (Alexey Milovidov). - Если пользователь/группа указываются по ID,
clickhouse suзавершается с ошибкой. Этот патч исправляет это и позволяет также принимать значения видаUID:GID. #71626 (Mikhail f. Shiryaev). - Добавлена возможность отключать увеличение буфера памяти для файлового кэша с помощью настройки
filesystem_cache_prefer_bigger_buffer_size. #71640 (Kseniia Sumarokova). - Добавлена отдельная настройка
background_download_max_file_segment_sizeдля задания максимального размера сегмента файла при фоновой загрузке в файловый кэш. #71648 (Kseniia Sumarokova). - Немного улучшен разбор типов JSON: если текущий блок для JSON-пути содержит значения нескольких типов, пытаемся выбрать наиболее подходящий тип, перебирая типы в специальном эвристическом порядке. #71785 (Pavel Kruglov).
- Ранее чтение из
system.asynchronous_metricsожидало завершения параллельного обновления. Это может занимать много времени, если система находится под высокой нагрузкой. Благодаря этому изменению ранее собранные значения теперь всегда можно прочитать. #71798 (Alexander Gololobov). - S3Queue и AzureQueue: установите значение
polling_max_timeout_msравным 10 минутам, аpolling_backoff_ms— 30 секундам. #71817 (Kseniia Sumarokova). - Обновлять
HostResolverтри раза в течение периодаhistory. #71863 (Sema Checherinda). - На HTML-страницу расширенного дашборда добавлен выпадающий список для выбора дашборда из таблицы
system.dashboards. #72081 (Sergei Trifonov). - Проверяется наличие базы данных по умолчанию после авторизации. Исправляет #71097. #71140 (Konstantin Bogdanov).
Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе)
- Части, дедуплицированные при выполнении запроса
ATTACH PART, больше не остаются с префиксомattaching_. #65636 (Kirill). - Исправлена ошибка, из-за которой тип
DateTime64терял точность в функцииIN. #67230 (Yarik Briukhovetskyi). - Исправлена потенциальная логическая ошибка при использовании функций с
IGNORE/RESPECT NULLSвORDER BY ... WITH FILL, закрыт #57609. #68234 (Vladimir Cherkasov). - Исправлены редкие логические ошибки в асинхронных вставках с форматом
Nativeпри превышении лимита памяти. #68965 (Anton Popov). - Исправлен COMMENT в CREATE TABLE для столбца EPHEMERAL. #70458 (Yakov Olkhovskiy).
- Исправлена логическая ошибка в функции JSONExtract с LowCardinality(Nullable). #70549 (Pavel Kruglov).
- Разрешить выполнение команды system drop replica zkpath, если существует другая реплика с тем же zk path. #70642 (MikhailBurdukov).
- Исправлены падение и утечка памяти в AggregateFunctionGroupArraySorted. #70820 (Michael Kolupaev).
- Добавлена возможность переопределять Content-Type с помощью пользовательских заголовков в движке URL. #70859 (Artem Iurin).
- Исправлена логическая ошибка в
StorageS3Queue(«Cannot create a persistent node in /processed since it already exists»). #70984 (Kseniia Sumarokova). - Исправлена проблема, из-за которой именованные сессии в некоторых случаях не закрывались и зависали. #70998 (Márcio Martins).
- Исправлена ошибка, из-за которой столбец _row_exists не учитывался в параметре rebuild операции lightweight delete для проекций. #71089 (Shichao Jin).
- Исправлена ошибка
AT_* is out of rangeпри запуске на Oracle Linux UEK 6.10. #71109 (Örjan Fors). - Исправлено неверное значение в system.query_metric_log из-за неожиданного состояния гонки. #71124 (Pablo Marcos).
- Исправлено несоответствие в имени агрегатной функции quantileExactWeightedInterpolated. Ошибка появилась в https://github.com/ClickHouse/ClickHouse/pull/69619. cc @Algunenano. #71168 (李扬).
- Исправлена ошибка bad_weak_ptr при использовании Dynamic при сравнении функций. #71183 (Pavel Kruglov).
- Проверки чтения файла 7z выполняются на локальной машине. #71184 (Daniil Ivanik).
- Исправлено игнорирование настроек формата при использовании формата Native по HTTP и при Async Inserts. #71193 (Pavel Kruglov).
- Запросы SELECT с настройкой
use_query_cache = 1больше не отклоняются, если имя системной таблицы указано как литерал, напримерSELECT * FROM users WHERE name = 'system.metrics' SETTINGS use_query_cache = true;теперь выполняется. #71254 (Robert Schulze). - Исправлена ошибка увеличения потребления памяти при включённом
enable_filesystem_cache=1, если диск в конфигурации хранилища не имел настроек кэша. #71261 (Kseniia Sumarokova). - Исправлена возможная ошибка «Cannot read all data» при десериализации словаря LowCardinality из колонки типа Dynamic. #71299 (Pavel Kruglov).
- Исправлена неполная очистка формата параллельного вывода в клиенте. #71304 (Raúl Marín).
- Добавлена недостающая операция обратного экранирования в именованных коллекциях. Без этого исправления clickhouse-server не может запуститься. #71308 (MikhailBurdukov).
- Исправлена проблема с асинхронными вставками с пустыми блоками через нативный протокол. #71312 (Anton Popov).
- Исправлено непоследовательное форматирование AST при выдаче некорректных грантов с подстановочными символами #71309. #71332 (pufit).
- Добавлены блоки try/catch в деструкторы частей данных для предотвращения вызова std::terminate. #71364 (alesapin).
- Проверять подозрительные и экспериментальные типы в подсказках типов JSON. #71369 (Pavel Kruglov).
- Запускать рабочий поток управления памятью и на операционных системах, отличных от Linux (исправляет #71051). #71384 (Alexandre Snarskii).
- Исправлена ошибка: «Invalid number of rows in Chunk with the Variant column». #71388 (Pavel Kruglov).
- Исправлена ошибка «column "attgenerated" does not exist» в старых версиях PostgreSQL, исправление для #60651. #71396 (0xMihalich).
- Чтобы не засорять логи сервера, неудачные попытки аутентификации теперь логируются с уровнем
DEBUGвместоERROR. #71405 (Robert Schulze). - Исправлена ошибка, приводившая к аварийному завершению работы табличной функции
mongodbпри передаче некорректных аргументов (например,NULL). #71426 (Vladimir Cherkasov). - Исправлен сбой, связанный с optimize_rewrite_array_exists_to_has. #71432 (Raúl Marín).
- Исправлено использование настройки
max_insert_delayed_streams_for_parallel_writeво вставках. Ранее она работала некорректно, что могло приводить к высокому потреблению памяти при вставках, записывающих данные в несколько партиций. #71474 (Anton Popov). - Исправлена возможная ошибка
Argument for function must be constant(в старом анализаторе) в случае, когда arrayJoin может появляться в условииWHERE. Регрессия, появившаяся после https://github.com/ClickHouse/ClickHouse/pull/65414. #71476 (Nikolai Kochetov). - Предотвращено аварийное завершение SortCursor при нулевом числе столбцов (старый анализатор). #71494 (Raúl Marín).
- Исправлена ошибка выхода значения Date32 за допустимый диапазон, вызванная неинициализированными данными ORC. Для получения дополнительной информации см. https://github.com/apache/incubator-gluten/issues/7823. #71500 (李扬).
- Исправлен расчет размера столбца в широких партах для типов Dynamic и JSON. #71526 (Pavel Kruglov).
- Исправление работы анализатора для случая, когда запрос внутри материализованного представления использует оператор IN с CTE. Закрывает #65598. #71538 (Maksim Kita).
- Исправлено падение при использовании UDF в ограничении. #71541 (Raúl Marín).
- Функции bitShift при выходе за пределы возвращают 0 или символ по умолчанию вместо выбрасывания ошибки. #71580 (Pablo Marcos).
- Исправлены сбои сервера при использовании материализованного представления с отдельными движками. #71593 (Pervakov Grigorii).
- Операция ARRAY JOIN с вложенной структурой данных, содержащей алиас на константный массив, приводила к разыменованию нулевого указателя. Это закрывает #71677. #71678 (Alexey Milovidov).
- Исправлена LOGICAL_ERROR при выполнении операции ALTER с пустым кортежем. Это устраняет #71647. #71679 (Amos Bird).
- Не преобразовывать множество констант в предикатах по столбцам партиционирования при использовании оператора NOT IN. #71695 (Eduard Karacharov).
- Исправлено сообщение в журнале при сбое init-скрипта Docker, чтобы оно было более понятным. #71734 (Андрей).
- Исправлена операция CAST из LowCardinality(Nullable) в Dynamic. Ранее это могло приводить к ошибке
Bad cast from type DB::ColumnVector<int> to DB::ColumnNullable. #71742 (Pavel Kruglov). - Исправлено исключение, возникавшее при использовании
toDayOfWeekв условии WHERE для первичного ключа типаDateTime64. #71849 (Yakov Olkhovskiy). - Исправлено заполнение значений по умолчанию после парсинга в разрежённые столбцы. #71854 (Anton Popov).
- Исправлена ошибка функции GROUPING при использовании ALIAS в качестве входного выражения в распределённой таблице, закрыт #68602. #71855 (Vladimir Cherkasov).
- Устранён возможный сбой при использовании
allow_experimental_join_condition, закрыт #71693. #71857 (Vladimir Cherkasov). - Исправлены операторы SELECT с предложением
WITH TIES, которые могли возвращать недостаточное число строк. #71886 (wxybear). - Исправлено исключение TOO_LARGE_ARRAY_SIZE, возникавшее, когда при вычислении столбца arrayWithConstant ошибочно считалось, что превышен предел размера массива. #71894 (Udi).
clickhouse-benchmarkпоказывал некорректные метрики для запросов, выполнение которых занимало более одной секунды. #71898 (Alexey Milovidov).- Устранена гонка данных между индикатором прогресса и таблицей прогресса в clickhouse-client. Эта проблема проявляется при использовании FROM INFILE. Теперь во время запросов INSERT перехватываются нажатия клавиш для переключения отображения таблицы прогресса. #71901 (Julia Kartseva).
- Используйте вспомогательные Keeper‑узлы для автоматического обнаружения кластера. #71911 (Anton Ivashkin).
- Исправлен столбец rows_processed в system.s3/azure_queue_log, который был сломан в 24.6. Закрывает #69975. #71946 (Kseniia Sumarokova).
- Исправлена ситуация, когда функции
s3/s3Clusterмогли возвращать неполный результат или выбрасывать исключение. Она возникала при использовании glob‑шаблона в URI S3 (например,pattern/*), когда должен существовать пустой объект с ключомpattern/(такие объекты автоматически создаются в консоли S3). Также значение по умолчанию для настройкиs3_skip_empty_filesизменено сfalseнаtrue. #71947 (Nikita Taranov). - Исправлен сбой подсветки синтаксиса в clickhouse-client. Закрывает #71864. #71949 (Nikolay Degterinsky).
- Исправлена ошибка
Illegal typeдля таблицMergeTreeс бинарной монотонной функцией в выраженииORDER BY, если первый аргумент — константа. Исправляет #71941. #71966 (Nikolai Kochetov). - Допускать только запросы SELECT в EXPLAIN AST, используемом внутри подзапроса. Другие типы запросов приводят к логической ошибке: 'Bad cast from type DB::ASTCreateQuery to DB::ASTSelectWithUnionQuery' или
Inconsistent AST formatting. #71982 (Pavel Kruglov). - При вставке записи с помощью
clickhouse-clientклиент считывает описания столбцов с сервера. Однако была ошибка: мы записывали эти описания в неверном порядке; правильный порядок — [statistics, ttl, settings]. #71991 (Han Fei). - Исправлено форматирование команд
ALTER MOVE PARTITION ... TO TABLE ...при включённом параметреformat_alter_commands_with_parentheses. #72080 (János Benjamin Antal). - Исправляет RIGHT / FULL JOIN в запросах с параллельными репликами. Теперь RIGHT JOIN может выполняться с использованием параллельных реплик (чтение правой таблицы распределяется). FULL JOIN не может быть распараллелен по узлам и выполняется локально. #71162 (Igor Nikonov).
- Исправлена проблема, при которой ClickHouse в Docker-контейнерах выводил в stderr сообщение «get_mempolicy: Operation not permitted» из-за ограничений на системные вызовы. #70900 (filimonov).
- Теперь запись
metadata_versionв ZooKeeper исправляется в потоке перезапуска, а не в потоке подключения. #70297 (Miсhael Stetsyuk). - Это исправление для репликации "zero-copy", которая не поддерживается и будет полностью удалена. Не удаляйте blob, если им пользуются узлы в ReplicatedMergeTree с репликацией zero-copy. #71186 (Antonio Andelic).
- Это исправление для репликации «zero-copy», которая не поддерживается и будет полностью удалена. Перед перемещением парта на zero-copy-диск теперь берётся общий разделяемый блокирующий замок zero-copy, чтобы предотвратить возможную потерю данных при недоступности Keeper. #71845 (Aleksei Filatov).
Релиз ClickHouse 24.10, 2024-10-31
Обратное несовместимое изменение
- Разрешена запись
SETTINGSпередFORMATв цепочке запросов сUNION, когда подзапросы заключены в круглые скобки. Это закрывает #39712. Изменено поведение для случая, когда в запросе предложение SETTINGS указано дважды подряд. Ближайшее предложение SETTINGS будет иметь приоритет для соответствующего подзапроса. В предыдущих версиях внешнее предложение SETTINGS могло иметь приоритет над внутренним. #68614 (Alexey Milovidov). - Перестановка условий фильтрации в секции
[PRE]WHEREтеперь по умолчанию разрешена. Это можно отключить, установив параметрallow_reorder_prewhere_conditionsвfalse. #70657 (Nikita Taranov). - Удалена библиотека
idxd-config, которая имеет несовместимую лицензию. Это также удаляет экспериментальный кодек Intel DeflateQPL. #70987 (Alexey Milovidov).
Новая возможность
- Добавлена возможность выдавать доступ к шаблонам с подстановочными символами.
GRANT SELECT ON db.table_pefix_* TO user. #65311 (pufit). - Если во время выполнения запроса нажать пробел, клиент отобразит таблицу в реальном времени с детальными метриками. Вы можете включить её глобально с помощью нового параметра
--progress-tableв clickhouse-client; новый параметр--enable-progress-table-toggleсвязан с параметром--progress-tableи переключает отображение таблицы прогресса при нажатии клавиш Ctrl+Пробел. #63689 (Maria Khristenko), #70423 (Julia Kartseva). - Разрешено кэширование файлов при чтении для табличных движков объектного хранилища и озёр данных, с использованием хеша, вычисленного по ETag и пути к файлу, в качестве ключа кэша. #70135 (Kseniia Sumarokova).
- Поддерживается создание таблицы с помощью запроса
CREATE TABLE ... CLONE AS .... Этот запрос клонирует схему исходной таблицы, а затем присоединяет все партиции к вновь созданной таблице. Эта возможность доступна только для таблиц семействаMergeTree. Закрывает #65015. #69091 (tuanpach). - Добавлена новая системная таблица
system.query_metric_log, которая содержит историю значений использования памяти и метрик из таблицыsystem.eventsдля отдельных запросов и периодически сбрасывается на диск. #66532 (Pablo Marcos). - Простой запрос SELECT можно записать с использованием неявного SELECT, чтобы поддерживать вычисления в стиле калькулятора, например
ch "1 + 2". Это управляется новым параметромimplicit_select. #68502 (Alexey Milovidov). - Добавлена поддержка режима
--copyдля clickhouse local для упрощённой конвертации форматов #68503. #68583 (Denis Hananein). - Добавлена встроенная HTML-страница для визуализации слияний, доступная по пути
/merges. #70821 (Alexey Milovidov). - Добавлена поддержка функции
arrayUnion. #68989 (Peter Nguyen). - Добавлена поддержка параметризованных псевдонимов SQL. #50665 (Anton Kozlov).
- Новая агрегатная функция
quantileExactWeightedInterpolated, представляющая собой интерполированную версию, основанную наquantileExactWeighted. Некоторые могут задаться вопросом, зачем нужна новаяquantileExactWeightedInterpolated, если уже существуетquantileExactInterpolatedWeighted. Дело в том, что новая функция более точна, чем старая. Это сделано для совместимости со Spark. #69619 (李扬). - Новая функция
arrayElementOrNull. Она возвращаетNULL, если индекс массива выходит за допустимые пределы или если ключ в Map не найден. #69646 (李扬). - Позволяет задавать регулярные выражения в новых полях
message_regexpиmessage_regexp_negativeв файлеconfig.xmlдля фильтрации логов. Логирование применяется к отформатированному тексту без цветового оформления для максимально удобной работы разработчика. #69657 (Peter Nguyen). - Добавлена функция
RIPEMD160, которая вычисляет криптографический хеш RIPEMD-160 для строки. Пример:SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'))возвращает37F332F68DB77BD9D7EDD4969571AD671CF9DD3B. #70087 (Dergousov Maxim). - Добавлена поддержка чтения таблиц
IcebergнаHDFS. #70268 (flynn). - Поддержка CTE в виде
WITH ... INSERT, так как ранее поддерживался только синтаксисINSERT ... WITH .... #70593 (Shichao Jin). - Интеграция с MongoDB: поддержка всех типов MongoDB, поддержка операторов WHERE и ORDER BY на стороне MongoDB, ограничение на выражения, не поддерживаемые MongoDB. Обратите внимание, что новая интеграция по умолчанию отключена; чтобы её использовать, установите параметр
<use_legacy_mongodb_integration>в значениеfalseв конфигурации сервера. #63279 (Kirill Nikiforov). - Добавлена новая функция
getSettingOrDefault, которая возвращает значение по умолчанию и предотвращает выброс исключения, если пользовательская настройка отсутствует в текущем профиле. #69917 (Shankar).
Экспериментальная функция
- Обновляемые материализованные представления готовы для промышленной эксплуатации. #70550 (Michael Kolupaev). Обновляемые материализованные представления теперь поддерживаются в реплицируемых базах данных. #60669 (Michael Kolupaev).
- Параллельные реплики переведены из экспериментального статуса в бета. Переработаны настройки, которые управляют поведением алгоритмов параллельных реплик. Краткое напоминание: в ClickHouse есть четыре различных алгоритма параллельного чтения с участием нескольких реплик, что отражено в настройке
parallel_replicas_mode, значение по умолчанию для неё —read_tasks. Дополнительно была добавлена переключаемая настройкаenable_parallel_replicas. #63151 (Alexey Milovidov), (Nikita Mikhaylov). - Добавлена поддержка типа
Dynamicв большинстве функций за счёт выполнения их над внутренними типами внутриDynamic. #69691 (Pavel Kruglov). - Разрешено читать/писать тип
JSONкак бинарную строку в форматеRowBinaryпри использовании настроекinput_format_binary_read_json_as_string/output_format_binary_write_json_as_string. #70288 (Pavel Kruglov). - Разрешена сериализация/десериализация столбца
JSONкак одного столбца типа String в формате Native. Для вывода используйте настройкуoutput_format_native_write_json_as_string. Для ввода используйте версию сериализации1перед данными столбца. #70312 (Pavel Kruglov). - Введён специальный (экспериментальный) режим селектора слияний для таблиц MergeTree, который делает его более агрессивным для разделов, находящихся близко к лимиту по количеству кусков. Он управляется настройкой уровня MergeTree
merge_selector_use_blurry_base. #70645 (Nikita Mikhaylov). - Реализована обобщённая сериализация/десериализация между типом
Unionв Avro и типомVariantв ClickHouse. Решает проблему #69713. #69712 (Jiří Kozlovský).
Повышение производительности
- Рефакторинг
IDiskиIObjectStorageдля повышения производительности. Таблицы в объектных хранилищахplainиplain_rewritableбудут инициализироваться быстрее. #68146 (Alexey Milovidov, Julia Kartseva). Не вызывать API LIST объектного хранилища при определении, существует ли файл или каталог на диске plain rewritable, так как это может быть экономически неэффективно. #70852 (Julia Kartseva). Сокращено количество запросов HEAD к API объектного хранилища на диске plain_rewritable. #70915 (Julia Kartseva). - Добавлена возможность парсить данные напрямую в разреженные столбцы. #69828 (Anton Popov).
- Улучшена производительность разбора форматов с большим числом пропущенных значений (например,
JSONEachRow). #69875 (Anton Popov). - Поддерживается параллельное чтение групп строк Parquet и их предварительная подзагрузка в однопоточном режиме. #69862 (LiuNeng).
- Добавлена поддержка индекса minmax для функции
pointInPolygon. #62085 (JackyWoo). - Используйте фильтры Блума при чтении файлов Parquet. #62966 (Arthur Passos).
- Безблокировочное переименование частей данных, чтобы избежать влияния операций INSERT на SELECT (из‑за блокировки частей) (в обычных условиях с
fsync_part_directoryQPS запросов SELECT при параллельных INSERT увеличился в 2 раза, под высокой нагрузкой эффект ещё заметнее). Учтите, что пока это касается толькоReplicatedMergeTree. #64955 (Azat Khuzhin). - Учитывать
ttl_only_drop_partsпри выполненииmaterialize ttl; считывать только необходимые столбцы для перерасчёта TTL и удалять части, заменяя их пустыми. #65488 (Andrey Zvonov). - Оптимизировано создание потоков в
ThreadPoolдля минимизации конфликтов при блокировках. Создание потоков теперь выполняется вне критической секции, чтобы избежать задержек при планировании задач и управлении потоками в условиях высокой нагрузки. Это делает ClickHouse значительно более отзывчивым при высокой параллельной нагрузке. #68694 (filimonov). - Добавлена поддержка чтения строковых столбцов
LowCardinalityизORC. #69481 (李扬). - Используйте
LowCardinalityдляProfileEventsв системных логах, таких какpart_log,query_views_log,filesystem_cache_log. #70152 (Alexey Milovidov). - Повышена производительность функций
fromUnixTimestamp/toUnixTimestamp. #71042 (kevinyhzou). - Не отключайте неблокирующее чтение из кэша страниц для всего сервера при выполнении блокирующего ввода-вывода. Это приводило к снижению производительности, когда одна файловая система (например, tmpfs) не поддерживала системный вызов
preadv2, а другие — поддерживали. #70299 (Antonio Andelic). ALTER TABLE .. REPLACE PARTITIONбольше не ожидает завершения мутаций/слияний, происходящих в других партициях. #59138 (Vasily Nemkov).- Не выполнять валидацию при синхронизации ACL из Keeper. Валидация выполняется во время создания. Это не должно играть большой роли, но существуют установки с десятками тысяч и даже большим числом созданных пользователей, и ненужная проверка хеша может занимать много времени при запуске сервера (так как при этом синхронизируется всё из Keeper). #70644 (Raúl Marín).
Улучшение
CREATE TABLE ASкопируетPRIMARY KEY,ORDER BYи аналогичные конструкции (для таблицMergeTree). #69739 (sakulali).- Добавлена поддержка 64-битного XID в Keeper. Ее можно включить параметром конфигурации
use_xid_64. #69908 (Antonio Andelic). - Аргументы командной строки для логических настроек устанавливаются в значение true, если для аргумента не указано значение (например,
clickhouse-client --optimize_aggregation_in_order --query "SELECT 1"). #70459 (davidtsuk). - Добавлены пользовательские настройки
min_free_disk_bytes_to_perform_insertиmin_free_disk_perform_to_throw_insertдля предотвращения выполнения операций INSERT на почти заполненных дисках. #69755 (Marco Vilas Boas). - Встроенная документация по настройкам будет заведомо более подробной и полной, чем документация на сайте. Это первый шаг на пути к тому, чтобы документация на сайте всегда автоматически генерировалась из исходного кода. Это имеет долгосрочные последствия: - будет гарантировано наличие каждой настройки; - не будет риска, что значения по умолчанию устареют; - мы сможем генерировать эту документацию для каждой версии ClickHouse; - документацию можно будет отображать самим сервером даже без доступа к Интернету. Генерировать документацию на сайте из исходного кода. #70289 (Alexey Milovidov).
- Добавлена поддержка пустой подстроки в функции
replace; поведение соответствует PostgreSQL. #69918 (zhanglistar). - Разрешено использовать пустую строку-шаблон в функциях
replaceRegexp*. #70053 (zhanglistar). - Символические ссылки для таблиц в каталоге
data/database_name/создаются как ссылки на фактические пути к данным таблицы в соответствии с политикой хранения, а не на каталогstore/...на диске по умолчанию. #61777 (Kirill). - При разборе поля типа
EnumизJSONстрока, содержащая целое число, будет интерпретироваться как соответствующий элементEnum. Тем самым закрывается #65119. #66801 (scanhex12). - Разрешено применение
TRIMсLEADINGилиTRAILINGк пустой строке как операции, не выполняющей никаких изменений. Закрывает #67792. #68455 (Peter Nguyen). - Улучшена совместимость
cast(timestamp as String)со Spark. #69179 (Wenzheng Liu). - Всегда используется новый анализатор для вычисления константных выражений, когда
enable_analyzerустановлен вtrue. Поддерживается вычисление аргументов табличной функцииexecutableбез использования запросаSELECTдля константных выражений. #69292 (Dmitry Novik). - Добавлена настройка
enable_secure_identifiersдля запрета использования идентификаторов со специальными символами. #69411 (tuanpach). - Добавлен параметр
show_create_query_identifier_quoting_ruleдля определения поведения заключения идентификаторов в кавычки в результате запросаSHOW CREATE TABLE. Возможные значения: -user_display: когда идентификатор является ключевым словом. -when_necessary: когда идентификатор является одним из{"distinct", "all", "table"}и это может привести к неоднозначности, например для имён столбцов или атрибутов словаря. -always: всегда заключать идентификаторы в кавычки. #69448 (tuanpach). - Улучшено восстановление зависимостей сущностей доступа #69563 (Vitaly Baranov).
- Если вы запускаете
clickhouse-clientили другое CLI-приложение, и оно из-за перегруженного сервера запускается медленно, а вы уже начинаете вводить запрос, напримерSELECT, то в предыдущих версиях перед выводом приветственного сообщения отображалось оставшееся эхо терминала, так что вы видели, например,SELECTClickHouse local version 24.10.1.1.вместоClickHouse local version 24.10.1.1.. Теперь это исправлено. Это закрывает #31696. #69856 (Alexey Milovidov). - Добавлен новый столбец
readonly_durationв таблицуsystem.replicas. Он нужен, чтобы в оповещениях различать реальные реплики в режиме только для чтения и сторожевые (sentinel). #69871 (Miсhael Stetsyuk). - Изменен тип параметра
join_output_by_rowlist_perkey_rows_thresholdна беззнаковое целое число. #69886 (kevinyhzou). - Улучшено логирование спанов OpenTelemetry: добавлены настройки запроса. #70011 (sharathks118).
- Добавлена диагностическая информация для функций высшего порядка над массивами, если тип результата лямбда-выражения отличается от ожидаемого. #70093 (ttanay).
- Улучшение Keeper: меньше блокировок при изменениях в кластере. #70275 (Antonio Andelic).
- Добавлены ключевые слова
WITH IMPLICITиFINALв командуSHOW GRANTS. Исправлена небольшая ошибка с неявными правами: #70094. #70293 (pufit). - Учитывается значение
compatibilityдля настроек MergeTree. Значениеcompatibilityберётся из профиляdefaultпри запуске сервера, и соответствующим образом изменяются настройки MergeTree по умолчанию. Дальнейшие изменения настройкиcompatibilityне влияют на настройки MergeTree. #70322 (Nikolai Kochetov). - Избегайте заспамливания логов большими телами HTTP‑ответов в случае ошибок при межсерверном взаимодействии. #70487 (Vladimir Cherkasov).
- Добавлена новая настройка
max_parts_to_moveдля управления максимальным количеством частей, которые могут быть перемещены за один раз. #70520 (Vladimir Cherkasov). - Ограничена частота вывода отдельных сообщений журнала. #70601 (Alexey Milovidov).
CHECK TABLEс модификаторомPARTнекорректно форматировалась в клиенте. #70660 (Alexey Milovidov).- Добавлена поддержка записи индекса столбца и индекса смещений с использованием нативного средства записи Parquet. #70669 (LiuNeng).
- Добавлена поддержка разбора
DateTime64с микросекундной точностью и учетом часового пояса в синтаксисе joda ("joda" — это популярная Java-библиотека для работы с датой и временем, а "синтаксис joda" — это стиль этой библиотеки). #70737 (kevinyhzou). - Изменён подход к определению того, поддерживает ли облачное хранилище пакетное удаление. #70786 (Vitaly Baranov).
- Поддержка Parquet page v2 в нативном ридере. #70807 (Arthur Passos).
- Добавлена проверка наличия в таблице одновременно параметров
storage_policyиdisk. Добавлена проверка совместимости новой политики хранения со старой при использовании настройкиdisk. #70839 (Kirill). - Добавлены
system.s3_queue_settingsиsystem.azure_queue_settings. #70841 (Kseniia Sumarokova). - Функции
base58Encodeиbase58Decodeтеперь принимают аргументы типаFixedString. Пример:SELECT base58Encode(toFixedString('plaintext', 9));. #70846 (Faizan Patel). - Добавлен столбец
partitionдля каждого типа записи в журнале частей. Ранее он задавался только для некоторых записей. Это исправляет #70819. #70848 (Alexey Milovidov). - Добавлены события
MergeStartиMutateStartвsystem.part_log, что упрощает анализ и визуализацию слияний. #70850 (Alexey Milovidov). - Добавлено профильное событие, отражающее количество слитых исходных частей. Оно позволяет отслеживать степень ветвления дерева слияний MergeTree в продакшене. #70908 (Alexey Milovidov).
- Фоновые загрузки в кэш файловой системы снова включены. #70929 (Nikita Taranov).
- Добавлен новый алгоритм выбора слияний
Trivial, предназначенный только для профессионального использования. Он хуже, чем алгоритм выбора слиянийSimple. #70969 (Alexey Milovidov). - Поддержка атомарного
CREATE OR REPLACE VIEW. #70536 (tuanpach) - Добавлен режим
strict_onceдля агрегатной функцииwindowFunnel, что позволяет избежать многократного учета одного и того же события, если оно удовлетворяет нескольким условиям, закрывает #21835. #69738 (Vladimir Cherkasov).
Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе)
- Применять обновления конфигурации к глобальному объекту контекста. Это исправляет проблемы, такие как #62308. #62944 (Amos Bird).
- Исправлена проблема, из‑за которой
ReadSettingsне использовал значения, заданные пользователем, а применял только значения по умолчанию. #65625 (Kseniia Sumarokova). - Исправлена проблема несоответствия типов данных в
sumMapFilteredпри использовании знаковых аргументов. #58408 (Chen768959). - Исправлена монотонность функций преобразования вида toHour при передаче необязательного аргумента часового пояса. #60264 (Amos Bird).
- Ослаблена проверка
supportsPrewhereдля таблицMerge. Это исправляет #61064. Эта проверка была ужесточена без необходимости в #60082. #61091 (Amos Bird). - Исправлена обработка настройки
use_concurrency_controlдля корректного применения ограниченияconcurrent_threads_soft_limit_num. В результате управление параллелизмом теперь включено по умолчанию, так как ранее оно работало некорректно. #61473 (Sergei Trifonov). - Исправлена некорректная оптимизация условия
JOIN ONв случае проверкиIS NULL, находящейся внутри другой функции (например,NOT), что могло приводить к неверным результатам. Закрывает #67915. #68049 (Vladimir Cherkasov). - Предотвращены запросы
ALTER, которые могли бы сделать запросCREATEдля таблиц некорректным. #68574 (János Benjamin Antal). - Исправлено несогласованное форматирование AST для функций
negate(-) иNOTс кортежами и массивами. #68600 (Vladimir Cherkasov). - Исправлена вставка неполного типа в
Dynamicво время десериализации. Это могло приводить к возникновению ошибокParameter out of bound. #69291 (Pavel Kruglov). - Репликация с нулевым копированием — экспериментальная функция, её не следует использовать в продуктивной среде: исправлен бесконечный цикл после выполнения
restore replicaв ReplicatedMergeTree с нулевым копированием. #69293 (MikhailBurdukov). - Вернуть значение по умолчанию параметра
processing_threads_num— количество ядер CPU — для хранилищаS3Queue. #69384 (Kseniia Sumarokova). - Обойти использование конструкции try/catch при сериализации/десериализации вложенного повторяющегося protobuf во вложенные столбцы (исправляет #41971). #69556 (Eliot Hautefeuille).
- Исправлена ошибка, приводившая к сбою при вставке в столбец FixedString в движке PostgreSQL. #69584 (Pavel Kruglov).
- Исправлено падение при выполнении запроса
create view t as (with recursive 42 as ttt select ttt);. #69676 (Han Fei). - Исправлена ошибка, из-за которой
maxMapStateвыбрасывал 'Bad get', если тип значения — DateTime64. #69787 (Michael Kolupaev). - Исправлена работа
getSubcolumnдля столбцовLowCardinalityпутём переопределенияuseDefaultImplementationForLowCardinalityColumnsтак, чтобы он возвращалtrue. #69831 (Miсhael Stetsyuk). - Исправлена ошибка, из-за которой распределённые отправки могли навсегда блокироваться, если операция DROP распределённой таблицы завершалась неудачно. #69843 (Azat Khuzhin).
- Исправлена ошибка, из-за которой запросы с предложением WITH FILL и ключами NaN нельзя было отменить. Это закрывает #69261. #69845 (Alexey Milovidov).
- Приведено значение по умолчанию анализатора в соответствие со старым режимом совместимости. #69895 (Raúl Marín).
- Не проверять зависимости при выполнении CREATE OR REPLACE VIEW на этапе DROP старой таблицы. Ранее запрос CREATE OR REPLACE VIEW завершался ошибкой, если существовали зависимые таблицы пересоздаваемого представления. #69907 (Pavel Kruglov).
- Исправления для Decimal. Устраняет #69730. #69978 (Arthur Passos).
- Теперь механизмы DEFINER/INVOKER будут работать с параметризованными представлениями. #69984 (pufit).
- Исправлен разбор определяющих пользователей представлений. #69985 (pufit).
- Исправлена ошибка, из-за которой часовой пояс мог влиять на результат запроса с аргументами
DateилиDate32. #70036 (Yarik Briukhovetskyi). - Исправляет ошибку
Block structure mismatchдля запросов с вложенными представлениями и условиемWHERE. Исправляет #66209. #70054 (Nikolai Kochetov). - Избегайте повторного использования одних и тех же столбцов в разных именованных кортежах при вычислении функций
tuple. Это исправляет #70022. #70103 (Amos Bird). - Исправлен ошибочный LOGICAL_ERROR при замене литералов в диапазонах. #70122 (Pablo Marcos).
- Теперь при выполнении ALTER TABLE MODIFY COLUMN/QUERY выполняется проверка на наличие типа Nullable(Nothing), чтобы предотвращать создание таблиц с таким типом данных. #70123 (Pavel Kruglov).
- Корректное сообщение об ошибке для недопустимого запроса
JOIN ... ON *, закрыт #68650. #70124 (Vladimir Cherkasov). - Исправлен неверный результат при использовании пропускающего индекса. #70127 (Raúl Marín).
- Исправлена гонка данных в методе распаковки ColumnObject/ColumnTuple, которая могла приводить к обращению к памяти кучи после её освобождения. #70137 (Pavel Kruglov).
- Исправлено потенциальное зависание в
ALTER COLUMNс типомDynamic. #70144 (Pavel Kruglov). - Теперь ClickHouse будет считать больше ошибок повторяемыми и не будет помечать части данных как повреждённые при возникновении таких ошибок. #70145 (alesapin).
- Используется корректный параметр
max_typesпри создании динамического типа для подстолбца JSON. #70147 (Pavel Kruglov). - Исправлена проблема с отображением пароля в
system.query_logдля пользователей с методом аутентификации bcrypt. #70148 (Nikolay Degterinsky). - Исправлен счетчик событий для нативного интерфейса (InterfaceNativeSendBytes). #70153 (Yakov Olkhovskiy).
- Исправлено возможное аварийное завершение работы, связанное с JSON-столбцами. #70172 (Pavel Kruglov).
- Исправлено несколько ошибок в arrayMin и arrayMax. #70207 (Raúl Marín).
- Учитывать параметр allow_simdjson в парсере типа JSON. #70218 (Pavel Kruglov).
- Исправлено разыменование нулевого указателя при создании материализованного представления с двумя операторами
SELECTи операторомINTERSECT, например:CREATE MATERIALIZED VIEW v0 AS (SELECT 1) INTERSECT (SELECT 1);. #70264 (Konstantin Bogdanov). - Не изменяйте глобальные настройки с помощью стартовых скриптов. Ранее изменение настройки в стартовом скрипте приводило к её глобальному изменению. #70310 (Antonio Andelic).
- Исправлена операция ALTER для типа
Dynamicс уменьшением параметра max_types, которая могла приводить к аварийному завершению работы сервера. #70328 (Pavel Kruglov). - Исправлена ошибка, приводившая к сбою при неправильном использовании WITH FILL. #70338 (Raúl Marín).
- Исправлена возможная ошибка use-after-free в
SYSTEM DROP FORMAT SCHEMA CACHE FOR Protobuf. #70358 (Azat Khuzhin). - Исправлено аварийное завершение при выполнении GROUP BY по подстолбцу JSON-подобъекта. #70374 (Pavel Kruglov).
- Не подгружать части заранее при вертикальных слияниях, если часть не содержит строк. #70452 (Antonio Andelic).
- Исправлено падение в WHERE при использовании лямбда‑функций. #70464 (Raúl Marín).
- Исправлено создание таблицы с помощью
CREATE ... AS table_function(...)для базы данныхReplicatedпри недоступном источнике табличной функции на вторичной реплике. #70511 (Kseniia Sumarokova). - Игнорируется весь вывод при асинхронной вставке с
wait_for_async_insert=1. Закрывает #62644. #70530 (Konstantin Bogdanov). - Игнорировать frozen_metadata.txt при обходе теневого каталога в system.remote_data_paths. #70590 (Aleksei Filatov).
- Исправлено создание оконных функций с сохранением состояния при неправильно выровненной памяти. #70631 (Raúl Marín).
- Исправлены редкие аварийные завершения
SELECT-запросов и операций слияния после добавления столбца типаArrayс непустым выражением значения по умолчанию. #70695 (Anton Popov). - Вставка в табличную функцию S3 теперь учитывает настройки запроса. #70696 (Vladimir Cherkasov).
- Исправлена бесконечная рекурсия при выводе protobuf-схемы при включённом режиме пропуска неподдерживаемых полей. #70697 (Raúl Marín).
- По умолчанию параметр
enable_named_columns_in_function_tupleотключен. #70833 (Raúl Marín). - Исправлена работа настройки движка таблицы S3Queue
processing_threads_num, которая не действовала, когда её значение определялось по количеству ядер CPU на сервере. #70837 (Kseniia Sumarokova). - Нормализованы аргументы именованных кортежей в агрегатных состояниях. Это исправляет #69732. #70853 (Amos Bird).
- Исправлена логическая ошибка, вызванная отрицательными нулями в двухуровневой хеш-таблице. Исправляет проблему из #70973. #70979 (Alexey Milovidov).
- Исправлена работа операторов
LIMIT BYиLIMIT WITH TIESдля распределённых и параллельных реплик. #70880 (Nikita Taranov).
Релиз ClickHouse 24.9, 2024-09-26
Изменение, нарушающее обратную совместимость
- Выражения вида
a[b].cподдерживаются для именованных кортежей, а также обращение к полям по имени из произвольных выражений, например,expr().name. Это полезно для обработки JSON. Закрывает #54965. В предыдущих версиях выражение видаexpr().nameразбиралось какtupleElement(expr(), name), и анализатор запросов искал столбецname, а не соответствующий элемент кортежа; в новой версии оно разбирается какtupleElement(expr(), 'name'). В большинстве случаев предыдущие версии не работали, но можно представить себе крайне необычный сценарий, при котором это изменение может привести к несовместимости: если вы хранили имена элементов кортежа в столбце или алиасе, имя которого отличалось от имени элемента кортежа:SELECT 'b' AS a, CAST([tuple(123)] AS 'Array(Tuple(b UInt8))') AS t, t[1].a. Маловероятно, что вы использовали такие запросы, но мы всё равно должны пометить это изменение как потенциально нарушающее обратную совместимость. #68435 (Alexey Milovidov). - При включённой настройке
print_pretty_type_namesтип данныхTupleбудет выводиться в наглядной форме в операторахSHOW CREATE TABLE, в функцииformatQuery, а также в интерактивном режиме вclickhouse-clientиclickhouse-local. В предыдущих версиях эта настройка применялась только к запросамDESCRIBEиtoTypeName. Это закрывает #65753. #68492 (Alexey Milovidov). - Запрещено явно указывать UUID при создании таблицы в базах данных
Replicated. Также запрещено явно указывать путь в Keeper и имя реплики для таблиц *MergeTree в базах данныхReplicated. Вводится новая настройкаdatabase_replicated_allow_explicit_uuidи изменяется типdatabase_replicated_allow_replicated_engine_argumentsс Bool на UInt64. #66104 (Alexander Tokmakov).
Новая возможность
- Разрешает пользователю иметь несколько методов аутентификации вместо одного. Позволяет сбрасывать методы аутентификации к последнему добавленному. Если вы хотите какое‑то время запускать экземпляры на версии 24.8 и один на 24.9, лучше на этот период задать
max_authentication_methods_per_user= 1, чтобы избежать потенциальных несовместимостей. #65277 (Arthur Passos). - Добавлена поддержка
ATTACH PARTITION ALL FROM. #61987 (Kirill Nikiforov). - Добавлена настройка
input_format_json_empty_as_default, которая при включении рассматривает пустые поля во входных данных JSON как значения по умолчанию. Закрывает #59339. #66782 (Alexis Arnaud). - Добавлены функции
overlayиoverlayUTF8, которые заменяют части строки другой строкой. Пример:SELECT overlay('Hello New York', 'Jersey', 11)возвращаетHello New Jersey. #66933 (李扬). - Добавлена поддержка облегчённых удалений для партиционного варианта запроса
DELETE FROM [db.]table [ON CLUSTER cluster] [IN PARTITION partition_expr] WHERE expr;#67805 (sunny). - Реализовано сравнение значений типа данных
Intervalиз разных доменов (например, секунд и минут), при котором они теперь приводятся к наименьшему общему супертиру. #68057 (Yarik Briukhovetskyi). - Добавлена настройка
create_if_not_exists, которая по умолчанию включает поведениеIF NOT EXISTSдля операторов CREATE. #68164 (Peter Nguyen). - Позволяет читать таблицы
Icebergв Azure и локально. #68210 (Daniil Ivanik). - Теперь записи кэша запросов можно удалять по тегу. Например, запись кэша запросов, созданная запросом
SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc', может быть удалена командойSYSTEM DROP QUERY CACHE TAG 'abc'. #68477 (Michał Tabaszewski). - Добавлено шифрование данных для именованных коллекций. #68615 (Pablo Marcos).
- Добавлен виртуальный столбец
_headersдля движка таблицыURL. Закрывает #65026. #68867 (flynn). - Добавлена таблица
system.projectionsдля отслеживания доступных проекций. #68901 (Jordi Villar). - Добавлена новая функция
arrayZipUnalignedдля совместимости со Spark (в Spark она называетсяarrays_zip), которая на основе исходной функцииarrayZipподдерживает работу с невыравненными массивами. #69030 (李扬). - Добавлены команды
cp/mvдля клиентского приложения keeper командной строки, которые атомарно копируют/перемещают узел. #69034 (Mikhail Artemenko). - Добавлен аргумент
scale(по умолчанию:true) для функцииarrayAUC, позволяющий пропустить шаг нормализации (issue #69609). #69717 (gabrielmcg44).
Экспериментальная функция
- Добавлена настройка
input_format_try_infer_variants, которая позволяет определять типVariantпри определении схемы для текстовых форматов, когда для элементов столбца/массива существует более одного возможного типа. #63798 (Shaun Struwig). - Добавлены агрегатные функции
distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypesдля более удобного анализа содержимого типов в JSON-столбцах. #68463 (Kruglov Pavel). - Новый алгоритм определения единицы распределения меток между параллельными репликами при помощи согласованного хеша. Разное количество меток выбирается для разных сценариев чтения для повышения производительности. #68424 (Nikita Taranov).
- Ранее алгоритмическая сложность логики дедупликации частей при обработке объявлений параллельных реплик была O(n^2), что могло занимать заметное время для таблиц с большим числом частей (или партиций). Это изменение снижает сложность до O(n*log(n)). #69596 (Alexander Gololobov).
- Улучшения обновляемых материализованных представлений: режим добавления (
... REFRESH EVERY 1 MINUTE APPEND ...) для добавления строк в существующую таблицу вместо полной её перезаписи, повторные попытки (по умолчанию отключены, настраиваются в секции SETTINGS запроса), запросSYSTEM WAIT VIEW <name>, который ждёт завершения текущего обновления, некоторые исправления. #58934 (Michael Kolupaev). - Добавлен
min_maxкак новый тип (экспериментальной) статистики. Он поддерживает оценку диапазонных предикатов над числовыми столбцами, напримерx < 100. #67013 (JackyWoo). - Улучшен
castOrDefaultдля столбцов Variant/Dynamic, чтобы он работал, когда внутренние типы вообще не преобразуемы. #67150 (Kruglov Pavel). - Репликация подмножества столбцов теперь доступна через MaterializedPostgreSQL. Закрывает #33748. #69092 (Kruglov Kirill).
Улучшение производительности
- Реализовано чтение только необходимых файлов для секционирования Hive. #68963 (Yarik Briukhovetskyi).
- Улучшена производительность
JOINза счет перестановки правой таблицы по ключам, когда ключи таблицы плотные вLEFTилиINNERхеш-объединениях. #60341 (kevinyhzou). - Улучшена производительность
ALL JOINза счет отложенного добавления списка строк. #63677 (kevinyhzou). - Реализована асинхронная загрузка метаданных файлового кэша во время процесса запуска для ускорения перезапуска (управляется настройкой
load_metadata_asynchronously). #65736 (Daniel Pozo Escalona). - Функции
arrayиmapоптимизированы для значительно более быстрого выполнения некоторых распространенных сценариев. #67707 (李扬). - Небольшая оптимизация чтения строк в формате ORC, особенно когда столбец не содержит значений
NULL. #67794 (李扬). - Улучшена общая производительность слияний за счет уменьшения накладных расходов на планирование шагов слияний. #68016 (Anton Popov).
- Ускорены запросы к S3, когда профиль не задан, учетные данные не заданы и IMDS недоступен (например, при запросе публичного бакета с машины вне облака). Закрывает задачу #52771. #68082 (Alexey Milovidov).
- Убран виртуальный вызов читателя формата в
RowInputFormatWithNamesAndTypesдля повышения производительности. #68437 (李扬). - Добавлено параллельное слияние для агрегатной функции
uniqпри агрегации с ключомGROUP BYдля максимальной загрузки CPU. #68441 (Jiebin Sun). - Добавлена настройка
output_format_orc_dictionary_key_size_threshold, позволяющая пользователю включить кодирование словарём (dictionary encoding) для строкового столбца в выходном форматеORC. Это помогает существенно уменьшить размер выходного файлаORCи значительно улучшить производительность чтения. #68591 (李扬). - Добавлен новый запрос Keeper
RemoveRecursive, который удаляет узел со всем его поддеревом. #69332 (Mikhail Artemenko). - Ускорена вставка в таблицу с индексом векторного сходства за счет параллельного добавления данных во векторный индекс. #69493 (flynn).
- Снижено потребление памяти при вставках в столбец JSON за счет адаптивного размера буфера записи. Многие файлы, создаваемые JSON‑столбцом в широкой части, содержат небольшое количество данных, и нет смысла выделять для них буфер размером 1 МБ. #69272 (Kruglov Pavel).
- Исключён возврат потока в пул потоков concurrent hash join, чтобы предотвратить чрезмерное создание потоков запросом. #69406 (Duc Canh Le).
Улучшение
- CREATE TABLE AS теперь копирует PRIMARY KEY, ORDER BY и аналогичные конструкции. Сейчас это поддерживается только для семейства движков таблиц MergeTree. #69076 (sakulali).
- Усилены части кодовой базы, связанные с парсингом небольших сущностей. Были найдены и исправлены следующие (незначительные) ошибки: - если таблица
DeltaLakeпартиционирована по типу Bool, значение партиции всегда интерпретируется как false; - таблицаExternalDistributedиспользовала только один шард из переданных адресов; значение настройкиmax_threadsи подобных выводилось как'auto(N)'вместоauto(N). #52503 (Alexey Milovidov). - Используйте метрики cgroup для учета загрузки CPU вместо системных метрик. #62003 (Nikita Taranov).
- Планирование операций ввода-вывода для удалённых дисков S3 теперь выполняется на уровне потоков HTTP-сокетов (вместо целых запросов S3), чтобы устранить проблемы с ограничением пропускной способности (
bandwidth_limit). #65182 (Sergei Trifonov). - Функции
upperUTF8иlowerUTF8ранее могли изменять регистр только кириллических символов. Это ограничение снято: теперь они работают с символами на любом языке. Пример:SELECT upperUTF8('Süden')возвращаетSÜDEN. #65761 (李扬). - При выполнении lightweight delete в таблице с проекциями, помимо уже существующих вариантов — по умолчанию выбросить исключение или удалить проекцию при выполнении lightweight delete — теперь доступен третий вариант: все же выполнить lightweight delete, а затем перестроить проекции. #66169 (jsc0218).
- Добавлены два параметра (
dns_allow_resolve_names_to_ipv4иdns_allow_resolve_names_to_ipv6), позволяющие блокировать подключения для определённых семейств IP-адресов. #66895 (MikhailBurdukov). - Добавлена возможность настраивать игнорирование Ctrl-Z (ignore_shell_suspend) в clickhouse-client. #67134 (Azat Khuzhin).
- Улучшена проверка UTF-8 в форматах вывода JSON. Это гарантирует генерацию корректного JSON при наличии некоторых последовательностей байт в результирующих данных. #67938 (mwoenker).
- Добавлены события профилирования для слияний и мутаций для более детального анализа. #68015 (Anton Popov).
- ODBC: получать значение http_max_tries из конфигурации сервера. #68128 (Rodolphe Dugé de Bernonville).
- Добавлена поддержка подстановочных символов (wildcard) для идентификации пользователей в расширении X.509 SubjectAltName. #68236 (Marco Vilas Boas).
- Улучшено определение схемы для дат и времени. Теперь
DateTime64используется только тогда, когда значение даты и времени имеет дробную часть, в противном случае используется обычный DateTime. Определение типов Date/DateTime стало более строгим, особенно приdate_time_input_format='best_effort', чтобы избежать интерпретации строк как значений даты и времени в пограничных случаях. #68382 (Kruglov Pavel). - Удалён старый код поддержки именованных коллекций в словарях и заменён новым, который позволяет использовать в словарях именованные коллекции, созданные с помощью DDL. Закрыты #60936, #36890. #68412 (Kseniia Sumarokova).
- Используйте HTTP/1.1 вместо HTTP/1.0 (по умолчанию используется HTTP/1.0) для внешних HTTP-аутентификаторов. #68456 (Aleksei Filatov).
- Добавлен новый набор метрик для анализа работы пула потоков, обеспечивающий более глубокое понимание его производительности и поведения. #68674 (filimonov).
- Добавлена поддержка параметров запроса в асинхронных вставках в формате
Values. #68741 (Anton Popov). - Добавлена поддержка типа
Date32в функцияхdateTruncиtoStartOfInterval. #68874 (LiuNeng). - Добавлены столбцы
plan_step_nameиplan_step_descriptionв таблицуsystem.processors_profile_log. #68954 (Alexander Gololobov). - Поддержка испанского языка во встроенных словарях. #69035 (Vasily Okunev).
- Добавлено указание архитектуры CPU в краткое сообщение об ошибке. #69037 (Konstantин Bogданов).
- Запросы будут быстрее завершаться с ошибкой, если при повторных попытках не удаётся установить новое соединение с Keeper. #69148 (Raúl Marín).
- Обновлена
DatabaseFactory, чтобы пользовательские движки баз данных поддерживали аргументы, настройки и переопределения таблиц (аналогичноStorageFactory). #69201 (NikBarykin). - Режим восстановления, в котором все внешние движки таблиц и табличные функции заменяются на движок
Null(настройкиrestore_replace_external_engines_to_null,restore_replace_external_table_functions_to_null), завершался с ошибкой, если у таблицы были SETTINGS. Теперь в этом случае из определения таблицы удаляются настройки, и такие таблицы можно восстановить. #69253 (Ilya Yatsishin). - CLICKHOUSE_PASSWORD корректно экранируется для XML в entrypoint-скрипте образа ClickHouse. #69301 (aohoyd).
- Разрешить пустые аргументы для
arrayZip/arrayZipUnaligned, аналогично тому, как это было сделано дляconcatв https://github.com/ClickHouse/ClickHouse/pull/65887. Это сделано для совместимости со Spark в Gluten CH Backend. #69576 (李扬). - Расширена поддержка более сложных параметров SSL для внутреннего взаимодействия Keeper (например, закрытых ключей с паролем). #69582 (Antonio Andelic).
- Анализ индексов может занимать заметное время для больших таблиц с множеством частей или партиций. Это изменение позволяет прерывать тяжёлый запрос на этом этапе. #69606 (Alexander Gololobov).
- Маскирование чувствительной информации в табличной функции
gcs. #69611 (Vitaly Baranov). - Перестроена проекция для слияний, уменьшающих число строк. #62364 (cangyin).
Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе)
- Исправлено подключение таблицы, когда имя базы данных PostgreSQL (pg dbname) содержит «-», в экспериментальном, неподдерживаемом движке MaterializedPostgreSQL. #62730 (takakawa).
- Исправлена ошибка в сгенерированных столбцах в экспериментальном и полностью неподдерживаемом движке MaterializedPostgreSQL при нарушении порядка adnum #63161. Исправлена ошибка в столбце id с выражением nextval в качестве значения по умолчанию в экспериментальном и полностью неподдерживаемом движке MaterializedPostgreSQL при наличии сгенерированных столбцов в таблице. Исправлена ошибка при удалении публикации, имя которой содержало символы, отличные от [a-z1-9-]. #67664 (Kruglov Kirill).
- Storage Join: поддержка столбцов Nullable в левой таблице, закрыт #61247. #66926 (vdimir).
- Некорректный результат запроса с параллельными репликами (а также при распределении запросов), когда оператор
INсодержит приведение к Decimal(). Баг появился с новым анализатором. #67234 (Igor Nikonov). - Исправлена проблема, при которой
ALTER MODIFY ORDER BYприводил к несогласованным метаданным. #67436 (iceFireser). - Исправлена верхняя граница допустимого диапазона функции
fromModifiedJulianDay. Она должна была быть9999-12-31, но по ошибке была установлена как9999-01-01. #67583 (PHO). - Исправлена ошибка, возникавшая, если индекс находился не в начале кортежа в запросе с
IN. #67626 (Yarik Briukhovetskyi). - Исправлена логика истечения срока действия записей в
RoleCache. #67748 (Vitaly Baranov). - Исправлена проблема, из-за которой в window view отсутствовали блоки при медленном сбросе (flush) данных в представление. #67983 (Raúl Marín).
- Исправлена ошибка MSan, вызванная некорректным форматом даты. #68105 (JackyWoo).
- Исправлено аварийное завершение при фильтрации Parquet, которое происходило, когда типы данных в файле существенно отличались от запрошенных типов (например,
... FROM file('a.parquet', Parquet, 'x String'), но в файлеx Int64). Без этого исправления используйтеinput_format_parquet_filter_push_down = 0как временное решение. #68131 (Michael Kolupaev). - Исправлен сбой в
lag/lead, вызванный изменениями из #67091. #68262 (lgbo). - Попытка исправить сбой Postgres при отмене запроса. #68288 (Kseniia Sumarokova).
- После изменений из https://github.com/ClickHouse/ClickHouse/pull/61984 параметр
schema_inference_make_columns_nullable=0всё ещё мог делать столбцыNullableв форматах Parquet/Arrow. Это изменение было несовместимо с предыдущим поведением, и пользователи заметили разницу. Этот PR возвращает параметрschema_inference_make_columns_nullable=0к прежнему поведению (столбцыNullableбольше не будут выводиться) и вводит новое значениеautoдля этого параметра, при котором столбцы будут становитьсяNullableтолько если в данных есть информация о возможности хранения значений NULL. #68298 (Kruglov Pavel). - Исправляет #50868. Небольшие константные значения типа DateTime64, возвращаемые вложенным подзапросом внутри распределённого запроса, ошибочно преобразовывались в Null, что приводило к ошибкам и потенциально некорректным результатам запроса. #68323 (Shankar).
- Исправлен пропущенный режим синхронизации реплики в запросе
SYSTEM SYNC REPLICA. #68326 (Duc Canh Le). - Исправлена ошибка в ключевом условии. #68354 (Han Fei).
- Исправлен сбой при удалении или переименовании роли, используемой во внешнем пользовательском каталоге LDAP. #68355 (Andrey Zvonov).
- Исправлено значение столбца Progress в system.view_refreshes, которое могло быть больше 1 #68377. #68378 (megao).
- Корректно обрабатывать флаги регулярных выражений. #68389 (Han Fei).
- Оператор приведения типов в стиле PostgreSQL (
::) корректно работает в том числе для строковых литералов в шестнадцатеричном и двоичном формате в стиле SQL (например,SELECT x'414243'::String). Это закрывает #68324. #68482 (Alexey Milovidov). - Небольшое исправление для https://github.com/ClickHouse/ClickHouse/pull/68131. #68494 (Chang Chen).
- Исправлена ошибка #68239 в SAMPLE n, где n — целое число. #68499 (Denis Hananein).
- Исправлена ошибка в mann-whitney-utest при разных размерах двух распределений. #68556 (Han Fei).
- После непредвиденной перезагрузки не удаётся запустить репликацию ReplicatedMergeTree из-за некорректной обработки части, перекрытой повреждённой частью. #68584 (baolin).
- Исправлены ошибки типа
LOGICAL_ERRORпри применении функцийsipHash64Keyed,sipHash128KeyedилиsipHash128ReferenceKeyedк пустым массивам или кортежам. #68630 (Robert Schulze). - Полнотекстовый индекс мог некорректно отфильтровывать столбцы при индексировании нескольких столбцов:
row_idне сбрасывался между разными столбцами. Процедура воспроизведения приведена в tests/queries/0_stateless/03228_full_text_with_multi_col.sql. Исправлено в #68644 (siyuan). - Исправлена ошибка обработки недопустимых символов '\t' и '\n' в replica_name при создании Replicated-таблицы, из-за которой происходил неверный разбор 'source replica' в LogEntry. Упомянуто в issue #68640. #68645 (Zhigao Hong).
- Возвращены виртуальные столбцы
_tableи_databaseв распределённых таблицах. Они были доступны до версии 24.3. #68672 (Anton Popov). - Исправлена возможная ошибка
Size of permutation (0) is less than required (...)при перестановке столбца типа Variant. #68681 (Kruglov Pavel). - Исправлена потенциальная ошибка
DB::Exception: Block structure mismatch in joined block stream: different columns:при использовании нового столбца JSON. #68686 (Kruglov Pavel). - Исправлена проблема с материализованными константными ключами при хешировании значений типа Map с массивами в качестве ключей в функциях
sipHash(64/128)Keyed. #68731 (Salvatore Mesoraca). - Сделать так, чтобы
ColumnsDescription::toStringформатировал каждый столбец, используя один и тот же объектIAST::FormatState. В результате на диск и в ZooKeeper записываются единообразные метаданные столбцов. #68733 (Miсhael Stetsyuk). - Исправлено объединение агрегированных данных для
GROUPING SETS. #68744 (Nikolai Kochetov). - Исправлена логическая ошибка, возникавшая при создании реплицированного MergeTree, изменении столбца и последующем выполнении MODIFY STATISTICS. #68820 (Han Fei).
- Исправлено разрешение динамических подколонок в подзапросах анализатором. #68824 (Kruglov Pavel).
- Исправлен разбор метаданных составных типов данных в Delta Lake. Закрывает #68739. #68836 (Kseniia Sumarokova).
- Исправлены асинхронные вставки в случае, если метаданные таблицы изменяются (запросами
ALTER ADD/MODIFY COLUMN) после вставки, но до сброса в таблицу. #68837 (Anton Popov). - Исправлена неожиданная ошибка при передаче пустого кортежа в массив, что устраняет #68618. #68848 (Amos Bird).
- Исправлен разбор команд мутаций, затрагивающих только метаданные. #68935 (János Benjamin Antal).
- Исправлен возможный некорректный результат при слиянии состояния anyHeavy. #68950 (Raúl Marín).
- Исправлена запись в материализованные представления при включённой настройке
optimize_functions_to_subcolumns. #68951 (Anton Popov). - Не используйте кэш сериализаций в const-методах столбца Dynamic. Это может привести к использованию неинициализированного значения или даже к гонке условий во время агрегаций. #68953 (Kruglov Pavel).
- Исправлена ошибка разбора, при которой в некоторых случаях при разборе типа JSON в качестве значения по умолчанию следовало вставлять
null. #68955 (Kruglov Pavel). - Исправлена проблема, из-за которой
Content-Encodingне отправлялся в некоторых сжатых ответах. #64802. #68975 (Konstantin Bogdanov). - Были случаи, когда путь формировался некорректно и содержал подстроку
//; эта проблема решена с помощью нормализации пути. #69066 (Yarik Briukhovetskyi). - Исправлена логическая ошибка, возникающая при пустой асинхронной вставке. #69080 (Han Fei).
- Исправлена гонка данных при обновлении индикатора прогресса в clickhouse-client во время отмены запроса. #69081 (Sergei Trifonov).
- Исправлена ошибка, из-за которой индекс векторного сходства (в данный момент экспериментальный) не использовался при использовании косинусного расстояния как функции расстояния. #69090 (flynn).
- Это изменение устраняет проблему, при которой попытка повторно создать базу данных Replicated после сбоя сервера во время ее первоначального создания могла приводить к ошибке. #69102 (Miсhael Stetsyuk).
- Не выводите тип Bool из строкового значения String в CSV, когда
input_format_csv_try_infer_numbers_from_strings = 1, так как чтение логических значений из строк не поддерживается. #69109 (Kruglov Pavel). - Исправлены ошибки разбора запросов
EXPLAIN AST INSERTна клиенте при включённом флаге--multiquery. #69123 (wxybear). - Оператор
UNIONв подзапросах обрабатывался некорректно в запросах с параллельными репликами, что приводило к LOGICAL_ERRORDuplicate announcement received for replica. #69146 (Igor Nikonov). - Исправлена передача аргумента
structureв s3Cluster. Ранее выражениеDEFAULTстолбца могло теряться при отправке запроса на реплики в s3Cluster. #69147 (Kruglov Pavel). - Учитывать настройки формата Values при преобразовании выражения в целевой тип. #69149 (Kruglov Pavel).
- Исправлена работа
clickhouse-client --queries-fileдля пользователей с правами только на чтение (ранее приводило к ошибкеCannot modify 'log_comment' setting in readonly mode). #69175 (Azat Khuzhin). - Исправлена гонка данных в clickhouse-client при передаче его вывода по конвейеру в процесс, который завершился преждевременно. #69186 (vdimir).
- Исправлены некорректные результаты функции uniq и GROUP BY для типов JSON и Dynamic. #69203 (Kruglov Pavel).
- Исправлена логика определения формата INFILE для асинхронных вставок. Если формат явно не задан в предложении FORMAT, он может быть определён по расширению файла INFILE. #69237 (Julia Kartseva).
- После этой проблемы в production-среде появилось довольно много реплик таблиц, у которых значение узла
metadata_versionодновременно равно0и отличается от версии узлаmetadataсоответствующей таблицы. Это приводит к сбоямalter-запросов на таких репликах. #69274 (Miсhael Stetsyuk). - Тип Dynamic помечен как небезопасный тип первичного ключа, чтобы избежать проблем с Fields. #69311 (Kruglov Pavel).
- Улучшено восстановление зависимостей объектов доступа. #69346 (Vitaly Baranov).
- Исправлено неопределённое поведение при неудаче всех попыток установить соединение для вставок. #69390 (Pablo Marcos).
- Закрыть #69135. Если попытаться переиспользовать соединённые данные для
CROSS JOIN, то в текущей версии ClickHouse это сделать нельзя. Лучше сохранитьhave_compressedвreuseJoinedData. #69404 (lgbo). - Сделать так, чтобы функция
materialize()возвращала полный столбец, если параметр — разреженный столбец. #69429 (Alexander Gololobov). - Исправлено исключение
LOGICAL_ERRORв функцииsqidDecode(#69450). #69451 (Robert Schulze). - Быстрое исправление проблемы s3queue в версии 24.6 при выполнении запроса CREATE с реплицируемой базой данных. #69454 (Kseniia Sumarokova).
- Исправлена ситуация, когда потребление памяти становилось слишком высоким из‑за слияния в запросах
INSERT INTO ... SELECTилиCREATE TABLE AS SELECT. #69469 (Yarik Briukhovetskyi). - Операторы
SHOW COLUMNSиSHOW INDEXтеперь корректно работают с таблицами, имена которых содержат точки. #69514 (Salvatore Mesoraca). - Использование кэша запросов для запросов с режимом переполнения, отличным от 'throw', теперь не допускается. Это предотвращает ситуации, когда потенциально усечённые и некорректные результаты запросов могли бы быть сохранены в кэше запросов. (issue #67476). #69549 (Robert Schulze).
- Сохранять исходный порядок условий при переносе в секцию PREWHERE. Ранее порядок мог изменяться, что приводило к ошибкам выполнения запросов, когда порядок важен. #69560 (Kruglov Pavel).
- Исправлена предварительная обработка многозапросных операций Keeper после ошибки ZNOAUTH. #69627 (Antonio Andelic).
- Исправлена ошибка METADATA_MISMATCH, которая могла возникать при создании новой реплики в DatabaseReplicated из-за TTL с условием WHERE. #69736 (Nikolay Degterinsky).
- Исправлена настройка
tracked_file_ttl_secдляStorageS3(Azure)Queue. Мы записывали её в Keeper с ключомtracked_file_ttl_sec, но читали какtracked_files_ttl_sec, что было опечаткой. #69742 (Kseniia Sumarokova). - Использовать функцию tryconvertfieldtotype в gethyperrectangleforrowgroup. #69745 (Miсhael Stetsyuk).
- Откат исправления «Fix prewhere without columns and without adaptive index granularity (almost w/o anything)». В результате отката этих изменений возможны ошибки при чтении частей данных, созданных старыми релизами ClickHouse (предположительно 2021 года или более ранними). #68897 (Alexander Gololobov).
Релиз ClickHouse 24.8 LTS, 2024-08-20
Обратное несовместимое изменение
clickhouse-clientиclickhouse-localтеперь по умолчанию работают в режиме multi-query (вместо single-query). Например,clickhouse-client -q "SELECT 1; SELECT 2"теперь работает, тогда как ранее пользователям нужно было добавлять--multiquery(или-n). Переключатель--multiquery/-nобъявлен устаревшим. INSERT‑запросы в multi-query‑режиме обрабатываются особым образом в зависимости от их предложения FORMAT: если FORMAT —VALUES(наиболее распространённый случай), конец оператора INSERT задаётся завершающей точкой с запятой;в конце запроса. Для всех остальных FORMAT (например,CSVилиJSONEachRow) конец оператора INSERT задаётся двумя переводами строки\n\nв конце запроса. #63898 (FFish).- В предыдущих версиях было возможно использовать альтернативный синтаксис для типов данных
LowCardinality, добавляяWithDictionaryк имени типа данных. Это была первоначальная рабочая реализация, она никогда не документировалась и не была доступна публично. Теперь она объявлена устаревшей. Если вы использовали этот синтаксис, вам необходимо выполнить ALTER для ваших таблиц и переименовать типы данных вLowCardinality. #66842 (Alexey Milovidov). - Исправлены логические ошибки при использовании хранилища
Bufferс распределённой конечной таблицей. Это обратное несовместимое изменение: запросы, использующиеBufferс распределённой конечной таблицей, могут перестать работать, если таблица встречается в запросе более одного раза (например, в самосоединении, self-join). #67015 (vdimir). - В предыдущих версиях вызов функций для случайных распределений, основанных на гамма‑функции (таких как хи‑квадрат, Стьюдента, Фишера), с отрицательными аргументами, близкими к нулю, приводил к длительным вычислениям или к бесконечному циклу. В новой версии вызов этих функций с нулевыми или отрицательными аргументами приводит к генерации исключения. Это решает проблему #67297. #67326 (Alexey Milovidov).
- Системная таблица
text_logтеперь включена по умолчанию. Это полностью совместимо с предыдущими версиями, но вы можете заметить немного возросшее использование локального диска (эта системная таблица занимает очень небольшой объём дискового пространства). #67428 (Alexey Milovidov). - В предыдущих версиях
arrayWithConstantмогла работать медленно при генерации очень больших массивов. В новой версии она ограничена 1 ГБ на массив. Это решает проблему #32754. #67741 (Alexey Milovidov). - Исправлено форматирование модификатора REPLACE (запрещено опускать скобки). #67774 (Azat Khuzhin).
- Бэкпортировано в #68349: заново реализован тип
Dynamic. Теперь, когда достигается лимит динамических типов данных, новые типы не приводятся к String, а сохраняются в специальной структуре данных в бинарном формате с двоичным кодированием типа данных. Теперь любой тип, когда‑либо вставленный в столбецDynamic, может быть считан из него как подстолбец. #68132 (Kruglov Pavel).
Новая возможность
- Добавлена новая настройка движка
MergeTreededuplicate_merge_projection_modeдля управления проекциями во время слияний (для определённых движков) и запросаOPTIMIZE DEDUPLICATE. Поддерживаемые варианты:throw(выбрасывать исключение, если проекция не полностью поддерживается для движка MergeTree),drop(удалять проекцию во время слияния, если её нельзя корректно слить) иrebuild(полностью перестраивать проекцию с нуля, что является ресурсоёмкой операцией). #66672 (jsc0218). - Добавлен виртуальный столбец
_etagдля движка таблиц S3. Исправлена проблема #65312. #65386 (skyoct). - Добавлен механизм тегирования (пространства имён) для кэша запросов. Одинаковые запросы с разными тегами считаются различными для кэша запросов. Пример:
SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'abc'иSELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'def'теперь создают разные записи в кэше запросов. #68235 (sakulali). - Добавлена поддержка большего числа вариантов строгости JOIN (
LEFT/RIGHT SEMI/ANTI/ANY JOIN) с условиями неравенства, которые ссылаются на столбцы как левой, так и правой таблиц, напримерt1.y < t2.y(см. настройкуallow_experimental_join_condition). #64281 (lgbo). - Поддерживается секционирование в стиле Hive для различных движков (
File,URL,S3,AzureBlobStorage,HDFS). Секционирование в стиле Hive организует данные в секционированные подкаталоги, что обеспечивает эффективное выполнение запросов и управление большими наборами данных. В настоящее время оно только создаёт виртуальные столбцы с соответствующими именами и данными. В следующем PR будет добавлена соответствующая фильтрация данных (для повышения производительности). #65997 (Yarik Briukhovetskyi). - Добавлена функция
printfдля совместимости со Spark (однако по-прежнему можно использовать существующую функциюformat). #66257 (李扬). - Добавлены параметры
restore_replace_external_engines_to_nullиrestore_replace_external_table_functions_to_nullдля замены внешних движков и табличных функций на движокNull, что может быть полезно для тестирования. Они работают как при RESTORE, так и при явном создании таблиц. #66536 (Ilya Yatsishin). - Добавлена поддержка чтения геометрии
MULTILINESTRINGв форматеWKTс помощью функцииreadWKTLineString. #67647 (Jacob Reckhard). - Добавлена новая табличная функция
fuzzQuery. Эта функция позволяет модифицировать заданную строку запроса, внося в неё случайные изменения. Пример:SELECT query FROM fuzzQuery('SELECT 1') LIMIT 5;. #67655 (pufit). - Добавлен запрос
ALTER TABLE ... DROP DETACHED PARTITION ALLдля удаления всех отсоединённых партиций. #67885 (Duc Canh Le). - Добавлена статистика
rows_before_aggregation_at_leastв ответ на запрос при включении новой настройкиrows_before_aggregation. Эта статистика отражает количество строк, прочитанных до агрегации. В контексте распределённого запроса, при использовании операцииgroup byили агрегатной функцииmaxбезlimit,rows_before_aggregation_at_leastможет отражать количество строк, обработанных запросом. #66084 (morning-color). - Добавлена поддержка запроса
OPTIMIZEдля таблицJoin, что позволяет уменьшить их потребление памяти. #67883 (Duc Canh Le). - Добавлена возможность мгновенно выполнять запрос в Play при добавлении
&run=1в URL #66457 (Aleksandr Musorin).
Экспериментальная функция
- Реализован новый тип данных
JSON. #66444 (Kruglov Pavel). - Добавлен новый движок таблиц
TimeSeries. #64183 (Vitaly Baranov). - Добавлен новый экспериментальный движок хранилища
Kafkaдля сохранения смещений в Keeper вместо фиксации их в Kafka. Это делает фиксацию в таблицы ClickHouse атомарной относительно чтения из очереди. #57625 (János Benjamin Antal). - Используется адаптивный метод вычисления размера задач чтения (адаптивный означает, что он зависит от размеров читаемых столбцов) для параллельных реплик. #60377 (Nikita Taranov).
- Добавлен тип статистики
count_min(скизы count-min), который предоставляет оценки селективности для предикатов равенства, таких какcol = 'val'. Поддерживаемые типы данных — строковый, дата, дата-время и числовые типы. #65521 (JackyWoo).
Улучшение производительности
- Настройка
optimize_functions_to_subcolumnsтеперь включена по умолчанию. #68053 (Anton Popov). - Метаданные каталога диска
plain_rewritableхранятся в структуре__metaотдельно от данных MergeTree в объектном хранилище. Дискplain_rewritableпереведен на плоскую структуру каталогов. #65751 (Julia Kartseva). - Улучшено склеивание столбцов (операция, выполняемая в запросах INSERT) для типов
String/Array/Map/Variant/Dynamicза счет предварительного резервирования требуемой памяти для всех подстолбцов. #67043 (Kruglov Pavel). - Ускорена операция
SYSTEM FLUSH LOGSи выполнен сброс логов при завершении работы. #67472 (Sema Checherinda). - Улучшена общая производительность слияний за счет снижения накладных расходов на этапах планирования слияний. #68016 (Anton Popov).
- Ускорено удаление таблиц при выполнении запроса
DROP DATABASE, значение по умолчанию дляdatabase_catalog_drop_table_concurrencyувеличено до 16. #67228 (Nikita Mikhaylov). - Исключено выделение избыточной емкости для столбца-массива при записи ORC. Производительность для столбца типа Array увеличена на 15%. #67879 (李扬).
- Существенно ускорены мутации для нереплицируемого движка MergeTree. #66911 #66909 (Alexey Milovidov).
Улучшение
- Настройка
allow_experimental_analyzerпереименована вenable_analyzer. Старое имя сохранено как псевдоним. Это означает, что Analyzer больше не является бета-функциональностью и полностью готов к использованию в продуктивной среде. #66438 (Nikita Mikhaylov). - Улучшено определение схемы для значений даты и времени. Теперь DateTime64 используется только в том случае, если значение даты и времени имеет дробную часть, иначе используется обычный DateTime. Определение типов Date/DateTime теперь более строгие, особенно при
date_time_input_format='best_effort', чтобы избежать вывода дат и времени из строк в пограничных случаях. #68382 (Kruglov Pavel). - Сервер ClickHouse теперь поддерживает новый параметр настройки
max_keep_alive_requests. Для HTTP‑подключений с keep-alive к серверу он работает в связке сkeep_alive_timeout: если время простоя ещё не истекло, но по данному подключению уже выполнено болееmax_keep_alive_requestsзапросов, подключение будет закрыто сервером. #61793 (Nikita Taranov). - Различные улучшения расширенной панели мониторинга. Закрывает #67697. Закрывает #63407. Закрывает #51129. Закрывает #61204. #67701 (Alexey Milovidov).
- Не нужно выдавать привилегию на REMOTE при создании распределённой таблицы: достаточно привилегии для движка Distributed. #65419 (jsc0218).
- Не передавать логи keeper явно в образ Docker, чтобы их можно было переопределить. #65564 (Azat Khuzhin).
- Добавлен параметр
use_same_password_for_base_backupдля запросовBACKUPиRESTORE, позволяющий создавать и восстанавливать инкрементные бэкапы в/из архивов, защищённых паролем. #66214 (Samuele). - Игнорируется
async_load_databasesдля запросаATTACH(ранееATTACHмог завершиться до того, как таблицы были подключены). #66240 (Azat Khuzhin). - Добавлены логи и метрики для отклонённых подключений (при недостатке ресурсов). #66410 (Alexander Tokmakov).
- Поддержка корректного типа
UUIDдля движка MongoDB. #66671 (Azat Khuzhin). - Добавлены метрики отставания репликации и времени восстановления. #66703 (Miсhael Stetsyuk).
- Добавлена метрика
DiskS3NoSuchKeyErrors. #66704 (Miсhael Stetsyuk). - Обеспечена корректная работа предложения
COMMENTдля всех движков таблиц. #66832 (Joe Lynch). - Функция
mapFromArraysтеперь принимаетMap(K, V)в качестве первого аргумента, например:SELECT mapFromArrays(map('a', 4, 'b', 4), ['aa', 'bb'])теперь работает и возвращает{('a',4):'aa',('b',4):'bb'}. Кроме того, если первый аргумент — массив, он теперь может иметь типArray(Nullable(T))илиArray(LowCardinality(Nullable(T)))при условии, что реальные значения массива не равныNULL. #67103 (李扬). - Читать конфигурацию
clickhouse-localиз~/.clickhouse-local. #67135 (Azat Khuzhin). - Переименована настройка
input_format_orc_read_use_writer_time_zoneвinput_format_orc_reader_timezoneи добавлена возможность задавать часовой пояс чтения пользователем. #67175 (kevinyhzou). - Понижен уровень логирования ошибки
Socket is not connected, возникающей при немедленном сбросе HTTP-соединения удалённой стороной сразу после установления подключения, закрыта задача #34218. #67177 (vdimir). - Добавлена возможность загружать дашборды для
system.dashboardsиз конфигурации (после задания они переопределяют набор дашбордов по умолчанию). #67232 (Azat Khuzhin). - Оконные функции в SQL традиционно именуются в стиле
snake_case. ClickHouse используетcamelCase, поэтому были созданы новые псевдонимыdenseRank()иpercentRank(). Эти новые функции можно вызывать так же, как и исходные функцииdense_rank()иpercent_rank(). Оба варианта синтаксиса — иsnake_case, иcamelCase— остаются доступными. Также был добавлен новый тест для каждой из функций. Это закрывает #67042. #67334 (Peter Nguyen). - Автоматическое определение формата файла конфигурации, если его расширение не
.xml,.ymlили.yaml. Если файл начинается с символа <, предполагается формат XML, в противном случае — YAML. Это полезно при передаче файла конфигурации через конвейер (pipe):clickhouse-server --config-file <(echo "hello: world"). #67391 (sakulali). - Функции
formatDateTimeиformatDateTimeInJodaSyntaxтеперь рассматривают свой параметр формата как необязательный. Если он не задан, по умолчанию используются строковые форматы%Y-%m-%d %H:%i:%sиyyyy-MM-dd HH:mm:ss. Пример:SELECT parseDateTime('2021-01-04 23:12:34')теперь возвращает значение DateTime2021-01-04 23:12:34(ранее это вызывало исключение). #67399 (Robert Schulze). - Автоматически повторять запросы Keeper в KeeperMap, если они завершаются сбоем из‑за тайм‑аута или потери соединения. #67448 (Antonio Andelic).
- Добавлен флаг
-no-pieдля сборок Linux на Aarch64, чтобы обеспечить корректный анализ и символизацию стек‑трейсов после перезапуска ClickHouse. #67916 (filimonov). - Добавлены события профилирования для слияний и мутаций для более удобного анализа. #68015 (Anton Popov).
- Удалены лишние логи для нереплицируемого
MergeTree. #68238 (Daniil Ivanik).
Улучшения сборки/тестирования/упаковки
- Проверка нестабильности интеграционных тестов теперь запускает каждый тестовый кейс несколько раз, чтобы найти больше проблем в тестах и сделать их более надёжными. Для этого используется библиотека
pytest-repeat, позволяющая запускать тестовый кейс несколько раз в одном и том же окружении. Важно очищать таблицы и другие сущности в конце тестового кейса, чтобы он проходил. Повторные прогоны работают гораздо быстрее, чем несколько запусков pytest, так как необходимые контейнеры стартуют только один раз. #66986 (Ilya Yatsishin). - Снято ограничение на использование CLion с ClickHouse. В предыдущих версиях CLion подвисал на минуту при каждом нажатии клавиши. Это закрывает #66994. #66995 (Alexey Milovidov).
- getauxval: предотвращён сбой при повторном запуске под санитайзером из‑за высокой энтропии ASLR в новых ядрах Linux. #67081 (Raúl Marín).
- Часть клиентского кода вынесена в отдельный файл, и к ней применяется максимально возможный уровень оптимизации даже для debug-сборок. Это закрывает: #65745. #67215 (Nikita Mikhaylov).
Исправление ошибки
- Актуально только для экспериментального типа данных Variant. Исправлено аварийное завершение при использовании типов Variant и AggregateFunction. #67122 (Kruglov Pavel).
- Исправлен сбой DistributedAsyncInsert при пустом соединении. #67219 (Pablo Marcos).
- Исправлен сбой
uniqиuniqThetaпри использовании аргументаtuple(). Закрывает #67303. #67306 (flynn). - Исправляет #66026. Избегает обхода неразрешённых аргументов табличной функции в
ReplaceTableNodeToDummyVisitor. #67522 (Dmitry Novik). - Исправлено возможное переполнение стека в функции
JSONMergePatch. Эта функция была переименована изjsonMergePatchвJSONMergePatch, так как прежнее имя было некорректным. Предыдущее имя по-прежнему поддерживается для совместимости. Улучшена диагностика ошибок в функции. Это закрывает #67304. #67756 (Alexey Milovidov). - Исправлена ошибка разыменования нулевого указателя, вызываемая специально сконструированным запросом, которая приводила к падению сервера при использовании hopEnd, hopStart, tumbleEnd и tumbleStart. #68098 (Salvatore Mesoraca).
- Исправлено состояние
Not-ready Setв некоторых системных таблицах при фильтрации с использованием подзапросов. #66018 (Michael Kolupaev). - Исправлено чтение подстолбцов после выполнения запроса
ALTER ADD COLUMN. #66243 (Anton Popov). - Исправлены булевы литералы в запросе, отправляемом во внешнюю базу данных (для движков вроде
PostgreSQL). #66282 (vdimir). - Исправлено форматирование запроса с выражением JOIN ON, в котором используется псевдоним, например,
... JOIN t2 ON (x = y) AS e ORDER BY xдолжно форматироваться как... JOIN t2 ON ((x = y) AS e) ORDER BY x. #66312 (vdimir). - Исправлена работа
cluster()для межсерверного секрета (как и раньше, сохраняется исходный пользователь). #66364 (Azat Khuzhin). - Исправлена возможная ошибка времени выполнения при преобразовании поля типа Array, содержащего значения null, в Array(Variant). #66727 (Kruglov Pavel).
- Исправлена периодическая взаимоблокировка в Context::getDDLWorker. #66843 (Alexander Gololobov).
- Исправлена ошибка при создании таблицы KeeperMap после неполного удаления. #66865 (Antonio Andelic).
- Исправлена ошибка «broken part» при восстановлении на диск
s3_plain_rewritable. #66881 (Vitaly Baranov). - В редких случаях ClickHouse мог считать части повреждёнными из‑за неожиданных проекций на диске. Теперь это исправлено. #66898 (alesapin).
- Исправлено некорректное определение формата при выводе схемы, из-за которого могла возникать логическая ошибка Format doesn't support schema inference. #66899 (Kruglov Pavel).
- Исправлена возможная взаимоблокировка при отмене запроса при использовании параллельных реплик. #66905 (Nikita Taranov).
- Запретить CREATE AS SELECT даже когда параметр database_replicated_allow_heavy_create включён. Эта операция была безусловно запрещена в 23.12 и случайно разрешена при включении этого параметра в невыпущенной версии 24.7. #66980 (vdimir).
- Чтение из
numbersмогло ошибочно приводить к выбрасыванию исключения, когда был установлен лимитmax_rows_to_read. Это закрывает #66992. #66996 (Alexey Milovidov). - Добавлено корректное приведение типов для оконных функций lagInFrame и leadInFrame — исправлен msan‑тест. #67091 (Yakov Olkhovskiy).
- TRUNCATE DATABASE приводила к остановке репликации так, как будто это был запрос DROP DATABASE; теперь это исправлено. #67129 (Alexander Tokmakov).
- Использование отдельного клиентского контекста в
clickhouse-local. #67133 (Vitaly Baranov). - Исправлена ошибка
Cannot convert column because it is non constant in source stream but must be constant in result.для запроса, который читает из таблицыMergeпо таблицеDistriburtedс одним шардом. #67146 (Nikolai Kochetov). - Корректная работа
ORDER BY allпри отключённомenable_order_by_allи использовании параллельных реплик (а также распределённых запросов). #67153 (Igor Nikonov). - Исправлено некорректное использование input_format_max_bytes_to_read_for_schema_inference в кэше схем. #67157 (Kruglov Pavel).
- Исправлена утечка памяти для
count distinct, возникавшая при выбросе исключения во время выполненияGROUP BYпо одному ключу типаNullable. #67171 (Jet He). - Исправлена ошибка оптимизации, из-за которой OUTER JOIN преобразовывался в INNER JOIN. Закрывает #67156. Закрывает #66447. Ошибка была внесена в https://github.com/ClickHouse/ClickHouse/pull/62907. #67178 (Maksim Kita).
- Исправлена ошибка
Conversion from AggregateFunction(name, Type) to AggregateFunction(name, Nullable(Type)) is not supported. Она была вызвана оптимизациейoptimize_rewrite_aggregate_function_with_if. Устраняет #67112. #67229 (Nikolai Kochetov). - Исправлено зависание запроса при использовании пустого кортежа в качестве левого операнда функции IN. #67295 (Duc Canh Le).
- Можно было создать очень глубоко вложенные JSON‑данные, которые приводили к переполнению стека при пропуске неизвестных полей. Это закрывает #67292. #67324 (Alexey Milovidov).
- Исправлена ошибка подключения таблицы ReplicatedMergeTree после возникновения исключения при запуске. #67360 (Antonio Andelic).
- Исправлен segfault, возникавший из-за некорректного отсоединения от группы потоков в
Aggregator. #67385 (Antonio Andelic). - Исправлен ещё один случай, когда в первичном ключе (PK) была указана недетерминированная функция. #67395 (Nikolai Kochetov).
- Исправлен индекс
bloom_filter, который приводил к ошибкам в запросах с не вполне обычными условиями вроде(k=2)=(k=2)илиhas([1,2,3], k). #67423 (Michael Kolupaev). - Корректно разбирать имя файла или URI с
::, если это не архив. #67433 (Antonio Andelic). - Исправлено ожидание задач в ~WriteBufferFromS3 в случае отмены WriteBuffer. #67459 (Kseniia Sumarokova).
- Предотвращено удаление временных директорий частей во время RESTORE. #67491 (Vitaly Baranov).
- Исправлена обработка вложенных функций с коротким замыканием. #67520 (Kruglov Pavel).
- Исправлена ошибка
Logical error: Expected the argument №N of type T to have X rows, but it has 0. Ошибка могла возникать в удалённом запросе с константным выражением вGROUP BYпри использовании нового анализатора. #67536 (Nikolai Kochetov). - Исправлено соединение по кортежу с NULL: некоторые запросы с новым анализатором и
NULLвнутри кортежа в условииJOIN ONвозвращали некорректные результаты. #67538 (vdimir). - Исправлено избыточное повторное планирование FileCache::freeSpaceRatioKeepingThreadFunc() в случае полностью невыгружаемого кэша. #67540 (Kseniia Sumarokova).
- Исправлена вставка данных в движки потокового типа (Kafka, RabbitMQ, NATS) через HTTP-интерфейс. #67554 (János Benjamin Antal).
- Исправлена функция
toStartOfWeek, которая возвращала неверный результат для малых значенийDateTime64. #67558 (Yarik Briukhovetskyi). - Исправлена ошибка при создании представления с рекурсивным CTE. #67587 (Yakov Olkhovskiy).
- Исправлена логическая ошибка
Logical error: 'file_offset_of_buffer_end <= read_until_position'в кэше файловой системы. Закрывает #57508. #67623 (Kseniia Sumarokova). - Исправляет #62282. Удалён вызов
convertFieldToString()и добавлен типо-специфичный код сериализации. Параметризованная подстановка представления некорректно работала для нескольких типов данных, когда значение параметра было функцией или выражением, возвращающим экземпляр типа данных. #67654 (Shankar). - Исправлено падение при работе с
percent_rank. Тип кадра по умолчанию дляpercent_rankизменён наrange unbounded preceding and unbounded following. Теперь учитывается кадр окна по умолчанию дляIWindowFunction, и оконные функции без определения кадра окна в SQL могут корректно размещаться в разныхWindowTransformer. #67661 (lgbo). - Исправлена перезагрузка SQL UDF с UNION. Ранее перезапуск сервера мог сделать UDF некорректной. #67665 (Antonio Andelic).
- Исправлена возможная логическая ошибка «Unexpected return type from if» при использовании экспериментального типа Variant и включённой настройки
use_variant_as_common_typeв функции if с Tuples и Maps. #67687 (Kruglov Pavel). - Из-за ошибки в ядре Linux запрос может зависать в
TimerDescriptor::drain, что закрывает #37686. #67702 (Alexey Milovidov). - Исправлено автодополнение команды
RESTORE ON CLUSTER. #67720 (Vitaly Baranov). - Исправлено зависание словаря в случае CANNOT_SCHEDULE_TASK во время загрузки. #67751 (Azat Khuzhin).
- Запросы вида
SELECT count() FROM t WHERE cast(c = 1 or c = 9999 AS Bool) SETTINGS use_skip_indexes=1с индексами Bloom-фильтра поcтеперь работают корректно. #67781 (jsc0218). - Исправлен неверный результат агрегации в некоторых запросах, использующих агрегацию без ключей и фильтра, закрыта #67419. #67804 (vdimir).
- Проверять экспериментальные и сомнительные типы данных в ALTER ADD/MODIFY COLUMN. #67911 (Kruglov Pavel).
- Исправлен парсинг DateTime64 после свёртки констант в распределённых запросах, закрыт #66773. #67920 (vdimir).
- Исправлен неверный результат
count()при наличии недетерминированной функции в предикате. #67922 (János Benjamin Antal). - Исправлен расчет максимального мягкого лимита на число потоков в контейнеризованных средах, где доступное количество CPU ограничено. #67963 (Robert Schulze).
- Теперь ClickHouse не считает кусок повреждённым, если проекция отсутствует на диске, но присутствует в
checksums.txt. #68003 (alesapin). - Исправлен пропуск нетронутых партиций в мутациях с новым анализатором. Ранее при включённом анализаторе данные в партиции могли быть перезаписаны мутацией, даже если, согласно предикату, мутация не должна была затрагивать эту партицию. #68052 (Anton Popov).
- Отменяет некорректную оптимизацию, которая удаляла сортировку в подзапросах, использующих
OFFSET. Исправляет #67906. #68099 (Graham Campbell). - Попытка исправить ошибку
Block structure mismatch in AggregatingStep stream: different typesпри оптимизации агрегатных проекций. #68107 (Nikolai Kochetov). - Попытка исправить сбой Postgres при отмене запроса. #68288 (Kseniia Sumarokova).
- Исправлено отсутствие режима синхронизации реплики в запросе
SYSTEM SYNC REPLICA. #68326 (Duc Canh Le).
Релиз ClickHouse 24.7, 2024-07-30
Обратные несовместимые изменения
- Запрещён
CRATE MATERIALIZED VIEW ... ENGINE Replicated*MergeTree POPULATE AS SELECT ...с реплицируемыми базами данных. #63963 (vdimir). clickhouse-keeper-clientтеперь принимает пути только в строковых литералах, таких какls '/hello/world', а не в виде строк без кавычек, таких какls /hello/world. #65494 (Alexey Milovidov).- Метрика
KeeperOutstandingRequetsбыла переименована вKeeperOutstandingRequests. #66206 (Robert Schulze). - Поле
is_deterministicудалено из таблицыsystem.functions. #66630 (Alexey Milovidov). - Функция
tupleтеперь пытается конструировать именованные кортежи в запросе (управляется настройкойenable_named_columns_in_function_tuple). Добавлена функцияtupleNamesдля извлечения имён из кортежей. #54881 (Amos Bird). - Изменён принцип работы дедупликации для материализованных представлений. Исправлено множество случаев, таких как: - в целевой таблице: данные разбиваются на 2 или более блоков, и эти блоки считаются дубликатами, когда блок вставляется параллельно; - в целевой таблице MV: одинаковые блоки дедуплицируются, это происходит, когда MV часто производит одинаковые данные как результат для различных входных данных из-за выполнения агрегации; - в целевой таблице MV: одинаковые блоки, поступающие из разных MV, дедуплицируются. #61601 (Sema Checherinda).
- Функции
bitShiftLeftиbitShitfRightвозвращают ошибку при выходе позиции сдвига за допустимый диапазон. #65838 (Pablo Marcos).
Новая функция
- Добавлена поддержка
ASOF JOINдля алгоритмаfull_sorting_join. #55051 (vdimir). - Добавлена поддержка аутентификации по JWT в
clickhouse-client(будет доступна только в ClickHouse Cloud). #62829 (Konstantin Bogdanov). - Добавлены SQL-функции
changeYear,changeMonth,changeDay,changeHour,changeMinute,changeSecond. Например,SELECT changeMonth(toDate('2024-06-14'), 7)возвращает дату2024-07-14. #63186 (cucumber95). - Введены скрипты инициализации, которые позволяют выполнять преднастроенные запросы на этапе запуска. #64889 (pufit).
- Добавлена поддержка параметра
accept_invalid_certificateв конфигурации клиента, чтобы разрешить клиенту подключаться по защищённому TCP к серверу с самоподписанным сертификатом — может использоваться как сокращение для соответствующих настроек клиентаopenSSL:verificationMode=none+invalidCertificateHandler.name=AcceptCertificateHandler. #65238 (peacewalker122). - Добавлена таблица
system.error_log, которая содержит историю значений ошибок из таблицыsystem.errorsи периодически сбрасывается на диск. #65381 (Pablo Marcos). - Добавлена агрегатная функция
groupConcat. Почти то же самое, чтоarrayStringConcat(groupArray(column), ','). Может принимать два параметра: строковый разделитель и количество обрабатываемых элементов. #65451 (Yarik Briukhovetskyi). - Добавлен движок хранилища AzureQueue. #65458 (Kseniia Sumarokova).
- Добавлена новая настройка для отключения/включения записи индекса страниц (page index) в файлы Parquet. #65475 (lgbo).
- Добавлен параметр конфигурации сервера
logger.console_log_levelдля управления уровнем логирования в консоль (если включено). #65559 (Azat Khuzhin). - Автоматически добавляется подстановочный символ
*в конец пути к директории для табличной функцииfile. #66019 (Zhidong (David) Guo). - Добавлен параметр
--memory-usageдля клиента в неинтерактивном режиме. #66393 (vdimir). - Добавлен интерактивный клиент для clickhouse-disks, позволяющий добавлять локальный диск на основе локального каталога. #64446 (Daniil Ivanik).
- При выполнении лёгкого удаления (lightweight delete) в таблице с одной или несколькими проекциями пользователи могут выбрать: выбросить исключение (по умолчанию) или удалить проекцию. #65594 (jsc0218).
- Добавлены системные таблицы с основной информацией обо всех отсоединённых таблицах. #65400 (Konstantin Morozov).
Экспериментальная возможность
- Изменена двоичная сериализация типа данных
Variant: добавлен режимcompact, позволяющий избежать записи одного и того же дискриминатора несколько раз для гранул с единственным вариантом или только со значениями NULL. Добавлена настройка MergeTreeuse_compact_variant_discriminators_serialization, которая включена по умолчанию. Обратите внимание, что типVariantпо-прежнему является экспериментальным, и обратно несовместимое изменение формата сериализации допустимо. #62774 (Kruglov Pavel). - Добавлена поддержка дискового backend-хранилища для clickhouse-keeper. #56626 (Han Fei).
- Рефакторинг функций JSONExtract, добавлена поддержка большего числа типов, включая экспериментальный тип
Dynamic. #66046 (Kruglov Pavel). - Добавлена поддержка подстолбца null map для подстолбцов
VariantиDynamic. #66178 (Kruglov Pavel). - Исправлено чтение подстолбцов
Dynamicиз изменённой таблицыMemory. Ранее, если параметрmax_typesтипаDynamicбыл изменён в таблицеMemoryчерез ALTER, последующее чтение подстолбцов могло возвращать неверный результат. #66066 (Kruglov Pavel). - Добавлена поддержка
cluster_for_parallel_replicasпри использовании параллельных реплик с пользовательским ключом. Это позволяет использовать параллельные реплики с пользовательским ключом для таблиц MergeTree. #65453 (Antonio Andelic).
Повышение производительности
- Заменён алгоритм преобразования int в строку на более быстрый (с модифицированного amdn/itoa на модифицированный jeaiii/itoa). #61661 (Raúl Marín).
- Теперь размеры хеш-таблиц, создаваемых оператором
join(алгоритмparallel_hash), собираются и кэшируются. Эта информация используется для предварительного выделения места в хеш-таблицах при последующих выполнениях запросов и экономии времени на изменение их размера. #64553 (Nikita Taranov). - Оптимизированы запросы с
ORDER BYпо первичному ключу иWHEREс условием с высокой селективностью за счёт использования буферизации. Управляется настройкойread_in_order_use_buffering(включена по умолчанию) и может увеличивать потребление памяти запросом. #64607 (Anton Popov). - Улучшена производительность загрузки метаданных
plain_rewritable. #65634 (Alexey Milovidov). - Подключение таблиц на дисках только для чтения теперь использует меньше ресурсов за счёт пропуска загрузки устаревших кусков. #65635 (Alexey Milovidov).
- Добавлена поддержка minmax-гиперпрямоугольника для индексов типа Set. #65676 (AntiTopQuark).
- Выгружается первичный индекс устаревших кусков, чтобы снизить общее потребление памяти. #65852 (Anton Popov).
- Функции
replaceRegexpAllиreplaceRegexpOneтеперь значительно быстрее, если шаблон тривиален, то есть не содержит метасимволов, классов символов, флагов, группирующих символов и т. п. (Спасибо Taiyang Li). #66185 (Robert Schulze). - s3 requests: Reduce retry time for queries, increase retries count for backups. 8.5 minutes and 100 retires for queries, 1.2 hours and 1000 retries for backup restore. #65232 (Sema Checherinda).
- Добавлена оптимизация плана запроса для LIMIT. Добавлено проталкивание LIMIT (pushdown) для хранилища PostgreSQL и табличной функции. #65454 (Maksim Kita).
- Улучшено балансирование нагрузки ZooKeeper. Текущая сессия не истекает до тех пор, пока не станут доступны оптимальные узлы, несмотря на
fallback_session_lifetime. Добавлена поддержка AZ-aware балансировки. #65570 (Alexander Tokmakov). - DatabaseCatalog удаляет таблицы быстрее за счёт использования до database_catalog_drop_table_concurrency потоков. #66065 (Sema Checherinda).
Улучшение
- Улучшена балансировка нагрузки в ZooKeeper. Текущая сессия не истекает до тех пор, пока оптимальные узлы не станут доступными, несмотря на значение
fallback_session_lifetime. Добавлена поддержка балансировки с учётом зон доступности (AZ-aware). #65570 (Alexander Tokmakov). - Параметр
optimize_trivial_insert_selectпо умолчанию отключён. В большинстве случаев его использование полезно. Однако, если вы замечаете более медленное выполнение INSERT SELECT или повышенное потребление памяти, вы можете включить его обратно или выполнитьSET compatibility = '24.6'. #58970 (Alexey Milovidov). - Выводить стек вызовов и диагностическую информацию при аварийном завершении работы
clickhouse-clientилиclickhouse-local. #61109 (Alexander Tokmakov). - Результат выполнения
SHOW INDEX | INDEXES | INDICES | KEYSранее сортировался по именам столбцов первичного ключа. Поскольку это было неинтуитивно, теперь результат сортируется по позициям столбцов в определении первичного ключа. #61131 (Robert Schulze). - Изменён принцип работы дедупликации для материализованных представлений. Исправлено множество случаев, таких как: - в целевой таблице: данные разбиваются на 2 или более блока и эти блоки считаются дубликатами при параллельной вставке; - в целевой таблице MV: одинаковые блоки дедуплицируются, это происходит, когда MV часто формирует одинаковые данные в результате для разных входных данных из‑за агрегации; - в целевой таблице MV: одинаковые блоки, поступающие из разных MV, дедуплицируются. #61601 (Sema Checherinda).
- Поддержка чтения секционированных данных DeltaLake. Схема DeltaLake теперь определяется по метаданным, а не по самим данным. #63201 (Kseniia Sumarokova).
- В протоколах composable слой TLS принимал только параметры
certificateFileиprivateKeyFile. https://clickhouse.com/docs/operations/settings/composable-protocols. #63985 (Anton Ivashkin). - Добавлено профильное событие
SelectQueriesWithPrimaryKeyUsage, которое показывает количество запросов SELECT, использующих первичный ключ для вычисления условия WHERE. #64492 (0x01f). - Исправления и улучшения, связанные с
StorageS3Queue. Теперь значение по умолчанию дляs3queue_processing_threads_numвычисляется в соответствии с количеством физических ядер CPU на сервере (вместо прежнего значения по умолчанию 1). Значение по умолчанию дляs3queue_loading_retriesустановлено равным 10. Исправлено возможное расплывчатое сообщение «Uncaught exception» в столбце исключения таблицыsystem.s3queue. Счётчик повторных попыток не увеличивается при исключенииMEMORY_LIMIT_EXCEEDED. Коммит файлов перенесён на этап после полного завершения вставки в таблицу, чтобы избежать ситуации, когда файлы помечаются как закоммиченные до фактической вставки. Добавлены настройкиs3queue_max_processed_files_before_commit,s3queue_max_processed_rows_before_commit,s3queue_max_processed_bytes_before_commit,s3queue_max_processing_time_sec_before_commitдля более точного контроля момента коммита и сброса данных. #65046 (Kseniia Sumarokova). - Поддержка псевдонимов в параметризованной функции представления (только новый анализатор). #65190 (Kseniia Sumarokova).
- Обновлено: теперь ключ учетной записи маскируется в логах Azure Blob Storage. #65273 (SmitaRKulkarni).
- Отсечение партиций для предикатов
IN, когда фильтрующее выражение является частью выраженияPARTITION BY. #65335 (Eduard Karacharov). arrayMin/arrayMaxмогут применяться ко всем сравнимым типам данных. #65455 (pn).- Улучшен учет памяти для cgroups v2 за счет исключения объема памяти, занятого кэшем страниц. #65470 (Nikita Taranov).
- Не создавать настройки формата для каждой строки при сериализации чанков при вставке в таблицу EmbeddedRocksDB. #65474 (Duc Canh Le).
- Сократить приглашение в
clickhouse-localдо просто:). ФункцияgetFQDNOrHostName()на macOS выполняется слишком долго, и мы в любом случае не хотим видеть имя хоста в приглашенииclickhouse-local. #65510 (Konstantин Bogdanov). - Не выводить сообщение jemalloc о per-CPU аренах на маломощных виртуальных машинах. #65532 (Alexey Milovidov).
- По умолчанию отключена фоновая загрузка файлового кеша. Она будет снова включена, когда мы исправим проблему с возможной ошибкой "Memory limit exceeded", которая может возникать из‑за того, что память освобождается вне контекста запроса (в то время как буфер выделяется внутри контекста запроса) при использовании фоновых потоков загрузки. Кроме того, нам нужно добавить отдельную настройку для определения максимального размера данных, загружаемых фоновыми рабочими потоками (сейчас он ограничен параметром max_file_segment_size, который может быть слишком большим). #65534 (Kseniia Sumarokova).
- Добавлен новый параметр конфигурации
<config_reload_interval_ms>, который позволяет задать, как часто ClickHouse будет перезагружать конфигурацию. #65545 (alesapin). - Реализовать двоичное кодирование типов данных ClickHouse и добавить его спецификацию в документацию. Использовать его в Dynamic binary serialization и добавить возможность его использования в форматах RowBinaryWithNamesAndTypes и Native через настройки. #65546 (Kruglov Pavel).
- Настройки сервера
compiled_expression_cache_sizeиcompiled_expression_cache_elements_sizeтеперь отображаются в таблицеsystem.server_settings. #65584 (Robert Schulze). - Добавлена поддержка идентификации пользователей на основе расширения SubjectAltName сертификата X.509. #65626 (Anton Kozlov).
clickhouse-localбудет учитывать значенияmax_server_memory_usageиmax_server_memory_usage_to_ram_ratioиз файла конфигурации. По умолчанию он также установит максимально допустимое использование памяти на уровне 90% от объёма памяти системы, как иclickhouse-server. #65697 (Alexey Milovidov).- Добавлен скрипт для резервного копирования файлов в ClickHouse. #65699 (Alexey Milovidov).
- Источник PostgreSQL теперь поддерживает отмену запросов. #65722 (Maksim Kita).
- Параметр
allow_experimental_analyzerдля распределённых запросов теперь управляется инициатором. Это обеспечивает совместимость и корректность работы в кластерах со смешанными версиями. #65777 (Nikita Mikhaylov). - Keeper теперь учитывает ограничение cgroup по CPU. #65819 (Antonio Andelic).
- Добавлена возможность использовать функцию
concatс пустыми аргументами:) select concat();. #65887 (李扬). - Добавлена возможность управления именованными коллекциями в
clickhouse-local. #65973 (Alexey Milovidov). - Улучшены события профилирования, связанные с Azure. #65999 (alesapin).
- Добавлена поддержка чтения файлов ORC с учетом часового пояса записывающей стороны. #66025 (kevinyhzou).
- Добавлены настройки для управления подключениями к PostgreSQL. Настройка
postgresql_connection_attempt_timeoutзадаёт значение, передаваемое параметруconnect_timeoutв URL-адресе подключения. Настройкаpostgresql_connection_pool_retriesзадаёт количество попыток установить соединение с конечной точкой PostgreSQL. #66232 (Dmitry Novik). - Снижена неточность
input_wait_elapsed_us/elapsed_usвsystem.processors_profile_log. #66239 (Azat Khuzhin). - Улучшены ProfileEvents для кэша файловой системы. #66249 (zhukai).
- Добавлены настройки, позволяющие игнорировать предложение
ON CLUSTERв запросах при управлении именованными коллекциями с реплицируемым хранилищем. #66288 (MikhailBurdukov). - Функция
generateSnowflakeIDтеперь позволяет указывать идентификатор узла в качестве параметра для предотвращения коллизий в больших кластерах. #66374 (ZAWA_ll). - Отключено приостановление по
Ctrl+Zв интерактивном режиме. Это распространённая ловушка и не является ожидаемым поведением почти для всех пользователей. Полагаю, лишь немногие крайне продвинутые пользователи могли бы оценить приостановку терминальных приложений и их перевод в фоновый режим, но я таких не знаю. #66511 (Alexey Milovidov). - Добавлена опция проверки типа первичного ключа в Dictionaries. Без этой опции для простых макетов словарей любой тип столбца будет неявно преобразован в UInt64. #66595 (MikhailBurdukov).
Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе)
- Теперь проверяются циклические зависимости в запросах CREATE/REPLACE/RENAME/EXCHANGE и при их наличии выбрасывается исключение. Ранее такие циклические зависимости могли приводить к взаимоблокировке (deadlock) во время запуска сервера. Также исправлены некоторые ошибки в логике создания зависимостей. #65405 (Kruglov Pavel).
- Исправлена проблема с неожиданными размерами столбцов
LowCardinalityв вызовах функций. #65298 (Raúl Marín). - Исправлена ошибка, приводившая к сбою в maxIntersections. #65689 (Raúl Marín).
- Исправлено поведение, при котором условие
VALID UNTILв определении пользователя сбрасывалось после перезапуска. #66409 (Nikolay Degterinsky). - Исправлен столбец с оставшимся временем в
SHOW MERGES. #66735 (Alexey Milovidov). - Сообщение
Query was cancelledмогло выводиться дважды в clickhouse-client. Это поведение исправлено. #66005 (Nikita Mikhaylov). - Исправлен сбой при использовании
MaterializedMySQL(неподдерживаемой экспериментальной функциональности) с TABLE OVERRIDE, сопоставляющим поле MySQL со значением NULL с полем ClickHouse с ограничением NOT NULL. #54649 (Filipp Ozinov). - Исправлена логическая ошибка, возникавшая, когда выражение
PREWHEREне читало ни одного столбца, а таблица не имела адаптивной гранулярности индекса (для очень старых таблиц). #59173 (Alexander Gololobov). - Исправлена ошибка, связанная с буфером отмены при отмене запроса. #64478 (Sema Checherinda).
- Исправлено заполнение столбцов частей из метаданных (когда файл
columns.txtотсутствует). #64757 (Azat Khuzhin). - Исправлена ошибка, приводившая к падению при выполнении
ALTER TABLE ... ON CLUSTER ... MODIFY SQL SECURITY. #64957 (pufit). - Исправлен сбой при уничтожении AccessControl: добавлено явное завершение. #64993 (Vitaly Baranov).
- Рекурсивно удалять инъективную функцию из аргумента функций
uniq*. Ранее это работало корректно, но было нарушено в новом анализаторе. #65140 (Duc Canh Le). - Исправлено неожиданное имя проекции в запросе с CTE. #65267 (wudidapaopao).
- Теперь для доступа к словарям посредством прямого запроса или движка таблицы
Dictionaryтребуется привилегияdictGet. #65359 (Joe Lynch). - Исправлена проблема с пользовательской аутентификацией в S3 при использовании инкрементных резервных копий. #65481 (Antonio Andelic).
- Отключите оптимизацию
non-intersecting-partsдля запросов сFINALв случае включённой оптимизацииread-in-order. Это могло приводить к некорректному результату запроса. В качестве временного решения отключитеdo_not_merge_across_partitions_select_finalиsplit_parts_ranges_into_intersecting_and_non_intersecting_finalдо тех пор, пока это исправление не будет включено. #65505 (Nikolai Kochetov). - Исправлено исключение
Index out of bound for blob metadataв случае, если все файлы из пакетного списка были отфильтрованы. #65523 (Kseniia Sumarokova). - Исправлена ошибка NOT_FOUND_COLUMN_IN_BLOCK при слиянии проекции с дедупликацией. #65573 (Yakov Olkhovskiy).
- Исправлена ошибка в MergeJoin. Столбец в разреженной сериализации мог быть интерпретирован как столбец вложенного типа, хотя необходимое преобразование не было выполнено. #65632 (Nikita Taranov).
- Исправлена ошибка, из-за которой уровень совместимости '23.4' применялся некорректно. #65737 (cw5121).
- Исправлена работа таблицы ODBC с Nullable-полями. #65738 (Rodolphe Dugé de Bernonville).
- Исправлена гонка данных в
TCPHandler, которая могла возникать при фатальной ошибке. #65744 (Kseniia Sumarokova). - Исправлены некорректные исключения в функции
parseDateTimeпри использовании спецификаторов формата%Fи%D. #65768 (Antonio Andelic). - Для запросов, читающих из
PostgreSQL, отменять внутренний запросPostgreSQL, если запросClickHouseуже завершён. В противном случае запросClickHouseне может быть отменён, пока не завершится внутренний запросPostgreSQL. #65771 (Maksim Kita). - Исправлена ошибка в логике укороченного вычисления при использовании старого анализатора и dictGetOrDefault. #65802 (jsc0218).
- Исправлена ошибка, из-за которой EmbeddedRocksDB с TTL записывала повреждённые файлы SST. #65816 (Duc Canh Le).
- Функции
bitTest,bitTestAllиbitTestAnyтеперь возвращают ошибку, если указанный индекс бита выходит за границы допустимого диапазона #65818 (Pablo Marcos). - Параметр
join_any_take_last_rowподдерживается в любом запросе, использующем hash join. #65820 (vdimir). - Улучшена обработка условий соединения, включающих проверки
IS NULL(например, выражениеON (a = b AND (a IS NOT NULL) AND (b IS NOT NULL) ) OR ( (a IS NULL) AND (b IS NULL) )переписывается вON a <=> b), исправлена некорректная оптимизация при наличии дополнительных условий помимоIS NULL. #65835 (vdimir). - Исправлено растущее потребление памяти в S3Queue. #65839 (Kseniia Sumarokova).
- Исправлена обработка равных значений в
arrayAUCдля соответствия поведению sklearn. #65840 (gabrielmcg44). - Исправлены возможные проблемы с TLS-подключениями в протоколе сервера MySQL. #65917 (Azat Khuzhin).
- Исправлены возможные проблемы с TLS-соединениями клиентского протокола MySQL. #65938 (Azat Khuzhin).
- Исправлена обработка
SSL_ERROR_WANT_READ/SSL_ERROR_WANT_WRITEпри нулевом таймауте. #65941 (Azat Khuzhin). - Добавлены отсутствующие настройки
input_format_csv_skip_first_lines/input_format_tsv_skip_first_lines/input_format_csv_try_infer_numbers_from_strings/input_format_csv_try_infer_strings_from_quoted_tuplesв кэш автоопределения схемы, поскольку они могут изменять результирующую схему. Это предотвращает некорректные результаты автоопределения схемы при изменении этих настроек. #65980 (Kruglov Pavel). - Столбец _size в движке S3 и табличной функции S3 указывает на размер файла внутри архива, а не на размер самого архива. #65993 (Daniil Ivanik).
- Исправлена обработка динамических подстолбцов в анализаторе, чтобы избежать чтения всего столбца при обращении к динамическому подстолбцу. #66004 (Kruglov Pavel).
- Исправлено объединение конфигураций в from_env при использовании переопределений replace. #66034 (Azat Khuzhin).
- Исправлено возможное зависание
GRPCServerпри завершении работы. #66061 (Vitaly Baranov). - Исправлены несколько случаев работы функции
hasс неконстантными аргументами типаLowCardinality. #66088 (Anton Popov). - Исправлен
groupArrayIntersect. Функция работала некорректно вmerge(). Также исправлено поведение вdeserialise()для числовых и произвольных данных. #66103 (Yarik Briukhovetskyi). - Исправлена ошибка переполнения буфера в реализации
unbin/unhex. #66106 (Nikita Taranov). - Отключите оптимизацию
merge-filters, представленную в #64760. Она может привести к исключению, если при объединении двух выражений фильтра не используется вычисление с коротким замыканием. #66126 (Nikolai Kochetov). - Исправлена проблема, при которой сервер не мог разобрать файлы Avro с массивами, закодированными с отрицательным размером блока, что теперь допускается спецификацией Avro. #66130 (Serge Klochkov).
- Исправлена ошибка в клиенте ZooKeeper: сессия могла зависать в нерабочем состоянии после получения аппаратной ошибки от ZooKeeper. Например, это могло произойти из‑за "soft memory limit" в ClickHouse Keeper. #66140 (Alexander Tokmakov).
- Исправлена ошибка в SumIfToCountIfVisitor и при работе со знаковыми целыми числами. #66146 (Raúl Marín).
- Исправлен редкий случай, когда в результате распределённого запроса отсутствовали данные. #66174 (vdimir).
- Исправлен порядок разбора полей метаданных в StorageDeltaLake. #66211 (Kseniia Sumarokova).
- Не генерировать исключение
TIMEOUT_EXCEEDEDдля режимаnone_only_activeпараметраdistributed_ddl_output_mode. #66218 (Alexander Tokmakov). - Исправлена обработка лимита для
system.numbers_mt, когда использование индекса невозможно. #66231 (János Benjamin Antal). - Исправлено определение сервером ClickHouse максимального числа доступных ядер CPU в соответствии с ограничениями cgroups v2, если сервер запущен в контейнере, таком как Docker. Подробнее: контейнеры часто запускают свой процесс в корневой cgroup с пустым именем. В этом случае ClickHouse игнорировал лимиты CPU, установленные cgroups v2. #66237 (filimonov).
- Исправлена ошибка
Not-ready set, возникающая при использовании подзапроса сINв условии ограничения. #66261 (Nikolai Kochetov). - Исправлено формирование сообщений об ошибках при копировании в S3 или AzureBlobStorage. #66295 (Vitaly Baranov).
- Предотвратить удержание watchdog дескрипторов удалённых (ротированных) файлов журналов. #66334 (Aleksei Filatov).
- Исправлена ошибка, из-за которой в logicalexpressionoptimizerpass утрачивался логический тип константы. #66344 (pn).
- Исправлена ошибка
Column identifier is already registered, возникавшая при использованииgroup_by_use_nulls=trueи нового анализатора. #66400 (Nikolai Kochetov). - Исправлено возможное получение некорректных результатов запросов с объединением и фильтрацией таблиц внешних движков (например, PostgreSQL) из‑за слишком агрессивного проталкивания фильтров. С этого момента условия из предложения WHERE не будут отправляться во внешнюю базу данных в случае OUTER JOIN с внешней таблицей. #66402 (vdimir).
- Добавлена недостающая материализация столбца для CROSS JOIN. #66413 (lgbo).
- Исправлена ошибка
Cannot find columnдля запросов с константным выражением в ключеGROUP BYпри включённом новом анализаторе запросов. #66433 (Nikolai Kochetov). - Предотвращена возможная логическая ошибка при импорте из формата Npy в случае некорректного уровня вложенности массивов, исправлено тестирование других типов ошибок. #66461 (Yarik Briukhovetskyi).
- Исправлена ошибка, из-за которой при наличии недетерминированной функции в предикате возвращался неверный результат count(). #66510 (Duc Canh Le).
- Исправлено отслеживание памяти в
Allocator::realloc. #66548 (Antonio Andelic). - Исправлено чтение неинициализированной памяти при хешировании пустых кортежей. #66562 (Alexey Milovidov).
- Исправлена ошибка, приводившая к неверным результатам для запросов с
WINDOW. Она могла возникать, когда столбцыPARTITIONимели разреженную сериализацию, а оконные функции выполнялись параллельно. #66579 (Nikolai Kochetov). - Исправлена ошибка удаления именованных коллекций в локальном хранилище. #66599 (János Benjamin Antal).
- Исправлена проблема, из-за которой
column_lengthне обновлялся вColumnTuple::insertManyFrom. #66626 (lgbo). - Исправлены ошибки
Unknown identifierиColumn is not under aggregate functionдля запросов с выражением(column IS NULL). Ошибка была спровоцирована изменением #65088 и проявлялась только с отключённым анализатором. #66654 (Nikolai Kochetov). - Исправлена ошибка
Method getResultType is not supported for QUERY query node, возникавшая при использовании скалярного подзапроса в качестве первого аргумента оператора IN (с новым анализатором запросов). #66655 (Nikolai Kochetov). - Исправлена потенциальная ошибка PARAMETER_OUT_OF_BOUND при чтении подколонки типа Variant. #66659 (Kruglov Pavel).
- Исправлена редкая ситуация, когда слияние могло зависнуть после удаления столбца. #66707 (Raúl Marín).
- Исправлена ассерция
isUniqTypesпри выполненииINSERT SELECTиз удалённых источников. #66722 (Sema Checherinda). - Исправлена логическая ошибка в PrometheusRequestHandler. #66621 (Vitaly Baranov).
- Исправлен граничный случай в функции
indexHint, обнаруженный фаззером. #66286 (Anton Popov). - Исправлено форматирование AST для выражения 'create table b empty as a'. #64951 (Michael Kolupaev).
Релиз ClickHouse 24.6, 2024-07-01
Обратно несовместимые изменения
- Асинхронная загрузка баз данных и таблиц включена по умолчанию. См.
async_load_databasesв config.xml. Хотя это изменение полностью совместимо, оно может привести к изменению поведения. Когдаasync_load_databasesравно false, как в предыдущих версиях, сервер не будет принимать подключения, пока не загрузятся все таблицы. Когдаasync_load_databasesравно true, как в новой версии, сервер может принимать подключения до загрузки всех таблиц. Если выполняется запрос к таблице, которая ещё не загружена, он будет ждать завершения загрузки таблицы, что может занять значительное время. Это может изменить поведение сервера, если он является частью крупной распределённой системы за балансировщиком нагрузки. В первом случае балансировщик может получить отказ в установлении соединения и быстро переключиться на другой сервер. Во втором случае балансировщик может подключиться к серверу, который всё ещё загружает таблицы, и задержка выполнения запроса будет выше. Более того, если много запросов накопится в состоянии ожидания, это может привести к проблеме «thundering herd», когда они начнут обрабатываться одновременно. Это может иметь значение только для сильно нагруженных распределённых бэкендов. Чтобы избежать этой проблемы, вы можете установить значениеasync_load_databasesв false. #57695 (Alexey Milovidov). - Настройка
replace_long_file_name_to_hashпо умолчанию включена для таблицMergeTree. #64457 (Anton Popov). Эта настройка полностью совместима, никаких действий при обновлении не требуется. Новый формат данных поддерживается во всех версиях, начиная с 23.9. После включения этой настройки вы больше не сможете откатиться на версию 23.8 или более раннюю. - Некоторые некорректные запросы теперь будут завершаться с ошибкой на этапе парсинга. Примечание: отключена поддержка inline‑выражений KQL (экспериментальный язык Kusto), когда они передаются в табличную функцию
kqlбез строкового литерала, напримерkql(garbage | trash)вместоkql('garbage | trash')илиkql($$garbage | trash$$). Эта возможность была добавлена по ошибке и не должна существовать. #61500 (Alexey Milovidov). - Переделана параллельная обработка в режиме
OrderedхранилищаS3Queue. Этот PR обратно несовместим для режима Ordered, если вы использовали настройкиs3queue_processing_threads_numилиs3queue_total_shards_num. Настройкаs3queue_total_shards_numудалена; ранее её было разрешено использовать только вместе сs3queue_allow_experimental_sharded_mode, который теперь помечен как устаревший. Добавлена новая настройка —s3queue_buckets. #64349 (Kseniia Sumarokova). - Добавлены новые функции
snowflakeIDToDateTime,snowflakeIDToDateTime64,dateTimeToSnowflakeIDиdateTime64ToSnowflakeID. В отличие от существующих функцийsnowflakeToDateTime,snowflakeToDateTime64,dateTimeToSnowflakeиdateTime64ToSnowflake, новые функции совместимы с функциейgenerateSnowflakeID, т.е. они принимают snowflake‑ID, сгенерированныеgenerateSnowflakeID, и выдают snowflake‑ID того же типа, что иgenerateSnowflakeID(т.е.UInt64). Кроме того, новые функции по умолчанию используют эпоху UNIX (т.е. 1970-01-01), так же какgenerateSnowflakeID. При необходимости можно передать другую эпоху, например эпоху Twitter/X от 2010-11-04, т.е. 1288834974657 мс от эпохи UNIX. Старые функции конвертации объявлены устаревшими и будут удалены после переходного периода: чтобы продолжать использовать их, включите настройкуallow_deprecated_snowflake_conversion_functions. #64948 (Robert Schulze).
Новая возможность
- Добавлена возможность хранить именованные коллекции в ClickHouse Keeper. #64574 (Kseniia Sumarokova).
- Добавлена поддержка пустых кортежей. #55061 (Amos Bird).
- Добавлены функции для кодирования и декодирования по кривой Гильберта. #60156 (Artem Mustafin).
- Добавлена поддержка анализа индексов с использованием
hilbertEncode. #64662 (Artem Mustafin). - Добавлена поддержка чтения геометрии типа
LINESTRINGв формате WKT с помощью функцииreadWKTLineString. #62519 (Nikita Mikhaylov). - Добавлена возможность присоединять части с другого диска. #63087 (Unalian).
- Добавлена новая SQL-функция
generateSnowflakeIDдля генерации идентификаторов Snowflake в стиле Twitter. #63577 (Danila Puzov). - Добавлены настройки
merge_workloadиmutation_workloadдля регулирования использования ресурсов и их распределения между слияниями, мутациями и другими нагрузками. #64061 (Sergei Trifonov). - Добавлена поддержка сравнения типов данных
IPv4иIPv6с использованием оператора=. #64292 (Francisco J. Jurado Moreno). - Добавлена поддержка десятичных аргументов в бинарных математических функциях (pow, atan2, max2, min2, hypot). #64582 (Mikhail Gorshkov).
- Добавлены SQL-функции
parseReadableSize(вместе с вариантамиOrNullиOrZero). #64742 (Francisco J. Jurado Moreno). - Добавлены серверные настройки
max_table_num_to_throwиmax_database_num_to_throwдля ограничения количества создаваемых баз данных или таблиц в запросахCREATE. #64781 (Xu Jia). - Добавлен виртуальный столбец
_timeв хранилища файлового типа (s3/file/hdfs/url/azureBlobStorage). #64947 (Ilya Golshtein). - Добавлены новые функции
base64URLEncode,base64URLDecodeиtryBase64URLDecode. #64991 (Mikhail Gorshkov). - Добавлена новая функция
editDistanceUTF8, которая вычисляет расстояние редактирования между двумя строками в кодировке UTF-8. #65269 (LiuNeng). - Добавлена конфигурация
http_response_headersдля поддержки пользовательских заголовков ответа в пользовательских HTTP-обработчиках. #63562 (Grigorii). - Добавлена новая табличная функция
loopдля возврата результатов запроса в бесконечном цикле. #63452 (Sariel). Это полезно для тестирования. - Добавлены два дополнительных столбца в
system.query_log:used_privilegesиmissing_privileges.used_privilegesзаполняется привилегиями, которые были проверены при выполнении запроса, аmissing_privilegesсодержит необходимые, но отсутствующие привилегии. #64597 (Alexey Katsman). - Добавлена настройка
output_format_pretty_display_footer_column_names, которая при включении отображает имена столбцов в конце таблицы для длинных таблиц (по умолчанию — от 50 строк). Пороговое значение минимального числа строк задаётся параметромoutput_format_pretty_display_footer_column_names_min_rows. #65144 (Shaun Struwig).
Экспериментальная функция
- Добавлена статистика типа «число различных значений». #59357 (Han Fei).
- Добавлена поддержка статистики с ReplicatedMergeTree. #64934 (Han Fei).
- Если для базы данных
Replicatedнастроена «группа реплик» (replica group), автоматически создаётся кластер, включающий реплики из всех групп. #64312 (Alexander Tokmakov). - Добавлены настройки
parallel_replicas_custom_key_range_lowerиparallel_replicas_custom_key_range_upperдля управления тем, как параллельные реплики с динамическими шардами распараллеливают запросы при использовании фильтра по диапазону. #64604 (josh-hildred).
Повышение производительности
- Добавлена возможность перераспределять строки при вставке для оптимизации размера без нарушения порядка, заданного
PRIMARY KEY. Управляется настройкойoptimize_row_order(по умолчанию выключена). #63578 (Igor Markelov). - Добавлен встроенный ридер формата Parquet, который считывает бинарные данные Parquet напрямую в столбцы ClickHouse. Его работу регулирует настройка
input_format_parquet_use_native_reader(по умолчанию выключена). #60361 (ZhiHong Zhang). - Реализована частичная тривиальная оптимизация COUNT, когда фильтр запроса может выбирать точные диапазоны из таблиц MergeTree. #60463 (Amos Bird).
- Снижено максимальное потребление памяти при многопоточных
INSERTза счёт сбора чанков из нескольких потоков в одном преобразовании. #61047 (Yarik Briukhovetskyi). - Снижено потребление памяти при использовании объектного хранилища Azure за счёт фиксированного распределения памяти, что позволяет избежать выделения дополнительного буфера. #63160 (SmitaRKulkarni).
- Уменьшено количество виртуальных вызовов функций в
ColumnNullable::size. #60556 (HappenLee). - Ускорена работа функции
splitByRegexp, если аргумент регулярного выражения — одиночный символ. #62696 (Robert Schulze). - Ускорена агрегация по 8-битным и 16-битным ключам за счёт отслеживания минимального и максимального значений ключей. Это позволяет сократить количество ячеек, которые требуется проверять. #62746 (Jiebin Sun).
- Оптимизировать оператор
IN, когда слева типLowCardinality, а справа — набор констант. #64060 (Zhiguo Zhou). - Теперь для инициализации и уничтожения хеш-таблиц внутри
ConcurrentHashJoinиспользуется пул потоков. #64241 (Nikita Taranov). - Оптимизированы вертикальные слияния в таблицах с разреженными столбцами. #64311 (Anton Popov).
- Включена предварительная подгрузка данных из удалённой файловой системы при вертикальных слияниях. Это снижает задержку вертикальных слияний в таблицах с данными, хранящимися на удалённой файловой системе. #64314 (Anton Popov).
- Сокращено количество избыточных вызовов функции
isDefaultвColumnSparse::filterдля улучшения производительности. #64426 (Jiebin Sun). - Ускорены команды keeper-client
find_super_nodesиfind_big_familyза счёт выполнения нескольких асинхронных запросов getChildren. #64628 (Alexander Gololobov). - Улучшена работа функций
least/greatestдля аргументов с типами данных Nullable числового типа. #64668 (KevinyhZou). - Разрешено объединение двух последовательных шагов фильтрации в плане запроса. Это улучшает оптимизацию проталкивания фильтра (filter push-down), если условие фильтрации может быть протолкнуто вниз из родительского шага. #64760 (Nikolai Kochetov).
- Удалена некорректная оптимизация в финальной вертикальной реализации и по умолчанию снова включён вертикальный финальный алгоритм. #64783 (Duc Canh Le).
- Из фильтрующего выражения удалены узлы ALIAS. Это слегка повышает производительность запросов с
PREWHERE(с новым анализатором). #64793 (Nikolai Kochetov). - Повторно включено кэширование сеансов OpenSSL. #65111 (Robert Schulze).
- Добавлены настройки для отключения материализации skip-индексов и статистики при вставке данных (
materialize_skip_indexes_on_insertиmaterialize_statistics_on_insert). #64391 (Anton Popov). - Теперь для вычисления размера группы строк и уменьшения пикового потребления памяти писателем Parquet в однопоточном режиме используется выделенный объем памяти. #64424 (LiuNeng).
- Улучшен итератор разреженного столбца, чтобы сократить количество вызовов
size. #64497 (Jiebin Sun). - Обновлено условие для использования серверного копирования данных при создании резервных копий в Azure Blob Storage. #64518 (SmitaRKulkarni).
- Оптимизировано использование памяти вертикальных слияний для таблиц с большим количеством skip-индексов. #64580 (Anton Popov).
Улучшение
SHOW CREATE TABLE, выполненный для системных таблиц, теперь выводит уникальный, весьма полезный комментарий для каждой таблицы, объясняющий её назначение. #63788 (Nikita Mikhaylov).- Второй аргумент (scale) функций
round(),roundBankers(),floor(),ceil()иtrunc()теперь может быть неконстантой. #64798 (Mikhail Gorshkov). - Горячая перезагрузка политики хранения для таблиц типа
Distributedпри добавлении нового диска. #58285 (Duc Canh Le). - Устранена возможная взаимоблокировка при анализе индексов MergeTree при планировании потоков в перегруженном сервисе. #59427 (Sean Haynes).
- Несколько незначительных исправлений обработки краевых случаев в поддержке S3-прокси и туннелировании. #63427 (Arthur Passos).
- Улучшена наблюдаемость повторных отправок в io_uring. Событие профилирования
IOUringSQEsResubmitsпереименовано вIOUringSQEsResubmitsAsyncи добавлено новое событиеIOUringSQEsResubmitsSync. #63699 (Tomer Shafir). - Добавлена новая настройка
metadata_keep_free_space_bytesдля резервирования свободного места на диске хранилища метаданных. #64128 (MikhailBurdukov). - Добавлены метрики для отслеживания количества директорий, создаваемых и удаляемых хранилищем метаданных
plain_rewritable, а также количества записей в отображении local-to-remote в памяти. #64175 (Julia Kartseva). - Кэш запросов теперь рассматривает идентичные запросы с разными настройками как разные запросы. Это повышает надёжность в случаях, когда различные настройки (например,
limitилиadditional_table_filters) могут повлиять на результат запроса. #64205 (Robert Schulze). - Добавить поддержку нестандартного кода ошибки
QpsLimitExceededв объектном хранилище как ошибки, допускающей повтор запроса. #64225 (Sema Checherinda). - Запрещено преобразование таблицы MergeTree в реплицируемую, если путь ZooKeeper для этой таблицы уже существует. #64244 (Kirill).
- Добавлена новая настройка
input_format_parquet_prefer_block_bytesдля управления средним размером выходного блока (в байтах) и изменено значение по умолчанию параметраinput_format_parquet_max_block_sizeна 65409. #64427 (LiuNeng). - Разрешён обход прокси для хостов, указанных в переменной окружения
no_proxyи в конфигурации прокси ClickHouse. #63314 (Arthur Passos). - Всегда запускайте Keeper с достаточным числом потоков в глобальном пуле потоков. #64444 (Duc Canh Le).
- Настройки из пользовательского конфига не влияют на слияния и мутации для
MergeTreeпри работе с объектным хранилищем. #64456 (alesapin). - Добавлена поддержка нестандартного кода ошибки
TotalQpsLimitExceededв объектном хранилище как ошибки, подлежащей повторной попытке. #64520 (Sema Checherinda). - Обновлена расширенная панель мониторинга как в open-source-версии, так и в ClickHouse Cloud, добавлен график «Maximum concurrent network connections» (максимальное число одновременных сетевых подключений). #64610 (Thom O'Connor).
- Улучшен отчет о ходе выполнения для
zeros_mtиgenerateRandom. #64804 (Raúl Marín). - Добавлена асинхронная метрика
jemalloc.profile.active, показывающая, активно ли в данный момент семплирование. Это механизм активации в дополнение кprof.active; оба параметра должны быть активны, чтобы вызывающий поток выполнял семплирование. #64842 (Unalian). - С настройки
allow_experimental_join_conditionснята пометка о важности. Эта пометка могла препятствовать успешному выполнению распределённых запросов в кластере со смешанными версиями. #65008 (Nikita Mikhaylov). - Добавлены асинхронные серверные метрики
DiskGetObjectThrottler*иDiskGetObjectThrottler*, отражающие лимит на количество запросов в секунду, задаваемый настройками дискаs3_max_get_rpsиs3_max_put_rps, а также текущее доступное число запросов, которые могут быть отправлены без достижения предела троттлинга на диске. Метрики определяются для каждого диска, для которого настроен лимит. #65050 (Sergei Trifonov). - Инициализирован глобальный сборщик трасс для
Poco::ThreadPool(необходим для Keeper и т. д.). #65239 (Kseniia Sumarokova). - Добавлена проверка при создании пользователя с использованием
bcrypt_hash. #65242 (Raúl Marín). - Добавлены события профилирования о количестве строк, прочитанных во время выполнения и после выполнения
PREWHERE. #64198 (Nikita Taranov). - Вывод запроса в
EXPLAIN PLANпри работе с параллельными репликами. #64298 (vdimir). - Переименовать
allow_deprecated_functionsвallow_deprecated_error_prone_window_functions. #64358 (Raúl Marín). - Учитывать настройку
max_read_buffer_sizeи для файловых дескрипторов в табличной функцииfile. #64532 (Azat Khuzhin). - Отключены транзакции для неподдерживаемых хранилищ, в том числе для материализованных представлений. #64918 (alesapin).
- Запрещено использование конструкции
QUALIFYв старом анализаторе. Старый анализатор игнорировалQUALIFY, поэтому это могло приводить к неожиданному удалению данных при мутациях. #65356 (Dmitry Novik).
Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе)
- Исправлена ошибка в библиотеке Apache ORC: скорректирован расчёт статистики ORC при записи данных для беззнаковых типов на всех платформах и типа Int8 на ARM. #64563 (Michael Kolupaev).
- Вернули прежнее поведение ClickHouse при работе и интерпретации
Tupleв формате CSV. Это изменение по сути откатывает https://github.com/ClickHouse/ClickHouse/pull/60994 и делает его доступным только при использовании нескольких настроек:output_format_csv_serialize_tuple_into_separate_columns,input_format_csv_deserialize_separate_columns_into_tupleиinput_format_csv_try_infer_strings_from_quoted_tuples. #65170 (Nikita Mikhaylov). - Исправлена ошибка проверки прав, при которой пользователь в определённых условиях мог повысить свои привилегии в базе данных по умолчанию без необходимых грантов. #64769 (pufit).
- Исправлено падение при использовании UniqInjectiveFunctionsEliminationPass и uniqCombined. #65188 (Raúl Marín).
- Исправлена ошибка в ClickHouse Keeper, приводившая к несовпадению дайджеста при закрытии сессии. #65198 (Aleksei Filatov).
- Теперь используется корректное выравнивание памяти для комбинатора Distinct. Ранее мог происходить сбой из-за некорректного выделения памяти при использовании этого комбинатора. #65379 (Antonio Andelic).
- Исправлен сбой при использовании
DISTINCTи оконных функций. #64767 (Igor Nikonov). - Исправлена проблема, из-за которой skip-индекс 'set' не работал с IN и indexHint(). #62083 (Michael Kolupaev).
- Добавлена поддержка выполнения функции при присвоении значения параметризованного представления. #63502 (SmitaRKulkarni).
- Исправлено отслеживание потребления памяти в Parquet. #63584 (Michael Kolupaev).
- Исправлено чтение столбцов типа
Tuple(Map(LowCardinality(String), String), ...). #63956 (Anton Popov). - Исправлена ошибка
Cyclic aliases, возникавшая при использовании циклических псевдонимов разных типов (выражения и функции). #63993 (Nikolai Kochetov). - Это исправление будет использовать корректно переопределённый контекст с корректным пользователем-определителем для каждого отдельного представления в конвейере обработки запросов. #64079 (pufit).
- Исправлен анализатор: при использовании INTERPOLATE устранена ошибка "Not found column". #64096 (Yakov Olkhovskiy).
- Исправлена ошибка при создании резервных копий в S3-бакеты с учетными данными, отличающимися от учетных данных диска, содержащего файл. #64153 (Antonio Andelic).
- Кэш запросов теперь рассматривает два идентичных запроса к разным базам данных как разные запросы. Предыдущее поведение могло использоваться для обхода ограничения прав на чтение таблицы. #64199 (Robert Schulze).
- Исправлено возможное аварийное завершение процесса при необработанном исключении в деструкторе ~WriteBufferFromFileDescriptor в StatusFile. #64206 (Kruglov Pavel).
- Исправлена ошибка
duplicate aliasв распределённых запросах сARRAY JOIN. #64226 (Nikolai Kochetov). - Исправлено неожиданное поведение accurateCast при преобразовании строки в целое число. #64255 (wudidapaopao).
- Исправлено упрощение CNF для случая, когда какая-либо группа OR содержит взаимоисключающие атомы. #64256 (Eduard Karacharov).
- Исправлена проверка размера дерева запроса. #64377 (Dmitry Novik).
- Исправлена ошибка
Logical error: Bad castдля таблицыBufferпри использованииPREWHERE. #64388 (Nikolai Kochetov). - Предотвращено рекурсивное логирование в
blob_storage_logпри размещении в объектном хранилище. #64393 (vdimir). - Исправлены запросы
CREATE TABLE ASдля таблиц с выражениями по умолчанию. #64455 (Anton Popov). - Исправлено поведение
optimize_read_in_orderдля ORDER BY ... NULLS FIRST / LAST в таблицах с ключами, допускающими NULL. #64483 (Eduard Karacharov). - Исправлены ошибки
Expression nodes list expected 1 projection namesиUnknown expression or identifierдля запросов, использующих псевдонимы дляGLOBAL IN. #64517 (Nikolai Kochetov). - Исправлена ошибка
Cannot find columnв распределённых запросах с константным CTE в ключеGROUP BY. #64519 (Nikolai Kochetov). - Исправлен цикл сбоев, возникавший, если восстановление из резервной копии блокировалось созданием материализованного представления (MV) с definer'ом (определяющим пользователем), который ещё не был восстановлен. #64595 (pufit).
- Исправлен результат работы функции
formatDateTimeInJodaSyntax, когда форматтер генерирует нечётное количество символов и последний символ —0. Например, теперьSELECT formatDateTimeInJodaSyntax(toDate('2012-05-29'), 'D')корректно возвращает150вместо прежнего значения15. #64614 (LiuNeng). - Не переписывать агрегацию, если комбинатор
-Ifуже используется. #64638 (Dmitry Novik). - Исправлено определение типа для
float(в случае маленького буфера, т.е.--max_read_buffer_size 1). #64641 (Azat Khuzhin). - Исправлена ошибка, которая могла приводить к некорректной работе TTL с выражениями. #64694 (alesapin).
- Исправлено удаление выражений
WHEREиPREWHERE, если они всегда истинны (для нового анализатора). #64695 (Nikolai Kochetov). - Исправлено чрезмерное отсечение партиций текстовыми индексами на основе токенов (
ngrambf,full_text) при фильтрации с использованиемstartsWith,endsWith,match,multiSearchAny. #64720 (Eduard Karacharov). - Исправляет некорректное поведение обработки управляющих последовательностей ANSI CSI в функции
UTF8::computeWidth. #64756 (Shaun Struwig). - Исправлен случай некорректного удаления
ORDER BY/LIMIT BYв нескольких подзапросах. #64766 (Raúl Marín). - Исправлен (экспериментальный) неравенственный JOIN с подзапросами для множеств, которые используются в смешанных условиях соединения. #64775 (lgbo).
- Исправлена ошибка, приводившая к аварийному завершению работы локального кэша на диске
plain_rewritable. #64778 (Julia Kartseva). - Исправление в Keeper: теперь в команде
mntrвозвращается корректное значениеzk_latest_snapshot_size. #64784 (Antonio Andelic). - Исправлена ошибка
Cannot find columnв распределённом запросе, использующемARRAY JOINпо столбцу типаNested. Исправляет #64755. #64801 (Nikolai Kochetov). - Исправлена утечка памяти в политике кэширования SLRU. #64803 (Kseniia Sumarokova).
- Исправлено возможное некорректное отслеживание памяти в нескольких видах запросов: запросах, читающих любые данные из S3, запросах по протоколу HTTP, асинхронных вставках. #64844 (Anton Popov).
- Исправлена ошибка
Block structure mismatchдля запросов, использующихPREWHEREпри чтении из материализованного представления, когда материализованное представление содержит столбцы с типами, отличающимися от типов в исходной таблице. Устраняет #64611. #64855 (Nikolai Kochetov). - Исправлено редкое аварийное завершение при наличии у таблицы TTL с подзапросом + реплицируемой базы данных + параллельных реплик + analyzer. Это действительно редкий случай, но, пожалуйста, не используйте TTL с подзапросами. #64858 (alesapin).
- Исправлено дублирование событий
Deleteвblob_storage_logпри удалении большого пакета. #64924 (vdimir). - Исправлена ошибка
Session moved to another serverот [Zoo]Keeper, которая могла возникать после запуска сервера, если конфигурация содержала включения из [Zoo]Keeper. #64986 (Alexander Tokmakov). - Исправлен запрос
ALTER MODIFY COMMENT, который некорректно работал для параметризованных представлений (VIEW) в https://github.com/ClickHouse/ClickHouse/pull/54211. #65031 (Nikolay Degterinsky). - Исправлен
host_idв DatabaseReplicated при включённом параметреcluster_secure_connection. Ранее все подключения внутри кластера, создаваемые DatabaseReplicated, оставались незащищёнными, даже если параметр был включён. #65054 (Nikolay Degterinsky). - Исправлена ошибка
Not-ready Setпосле оптимизацииPREWHEREдля StorageMerge. #65057 (Nikolai Kochetov). - Не выполняйте запись в финализированный буфер в файлоподобных хранилищах. #65063 (Kruglov Pavel).
- Исправлена потенциальная бесконечная длительность выполнения запроса при циклических псевдонимах. Исправляет #64849. #65081 (Nikolai Kochetov).
- Исправлена ошибка
Unknown expression identifierв удалённых запросах сINTERPOLATE (alias)(новый анализатор). Исправляет #64636. #65090 (Nikolai Kochetov). - Исправлена оптимизация выноса арифметических операций из агрегации. В новом анализаторе эта оптимизация выполнялась только один раз. #65104 (Dmitry Novik).
- Исправлена перезапись имени агрегатной функции в новом анализаторе. #65110 (Dmitry Novik).
- Отвечать кодом ответа 5xx вместо 200 OK в случае тайм‑аута при чтении (частей) тела запроса из клиентского сокета. #65118 (Julian Maicher).
- Исправлен потенциальный сбой при выполнении hedged-запросов. #65206 (Azat Khuzhin).
- Исправлена ошибка в механизме короткого замыкания при вычислении словарей Hashed и Hashed_Array, из-за которой могло происходить чтение неинициализированного числа, приводящее к различным ошибкам. #65256 (jsc0218).
- Этот PR гарантирует, что тип константы (второго параметра оператора IN) всегда учитывается во время процесса приведения типов для оператора IN. В противном случае потеря информации о типе может привести к тому, что некоторые преобразования будут завершаться с ошибкой, например преобразование из DateTime в Date. Тем самым исправляется (#64487). #65315 (pn).
Улучшения сборки/тестирования/упаковки
- Добавлена поддержка LLVM XRay. #64592 #64837 (Tomer Shafir).
- Объединены реализации хранилищ s3/hdfs/azure в один класс, работающий с IObjectStorage. То же самое сделано для *Cluster, озёр данных и хранилищ Queue. #59767 (Kseniia Sumarokova).
- Проведён рефакторинг компонента записи частей данных для удаления зависимостей от MergeTreeData и DataPart. #63620 (Alexander Gololobov).
- Проведён рефакторинг
KeyConditionи анализа ключей для улучшения PartitionPruner и оптимизации тривиального подсчёта. Это выделено отдельно от #60463. #61459 (Amos Bird). - Добавлены утверждения (assertions) для проверки, что все функции вызываются с колонками корректного размера. #63723 (Raúl Marín).
- Сделан обязательным сервис
networkпри использовании init-скриптаrcдля запуска демона сервера ClickHouse. #60650 (Chun-Sheng, Li). - Уменьшен размер некоторых медленных тестов. #64387 #64452 (Raúl Marín).
- Реализовано воспроизведение журналов ZooKeeper с использованием keeper-bench. #62481 (Antonio Andelic).
Релиз ClickHouse 24.5, 2024-05-30
Несовместимые изменения
- «Инвертированные индексы» переименованы в «полнотекстовые индексы», что является менее техническим и более удобным для пользователей названием. Это также изменяет внутренние метаданные таблиц и ломает таблицы с существующими (экспериментальными) инвертированными индексами. Перед обновлением обязательно удалите такие индексы и пересоздайте их после обновления. #62884 (Robert Schulze).
- Использование функций
neighbor,runningAccumulate,runningDifferenceStartingWithFirstValue,runningDifferenceобъявлено устаревшим (так как они легко приводят к ошибкам). Вместо них следует использовать корректные оконные функции. Чтобы включить их обратно, установитеallow_deprecated_error_prone_window_functions = 1или установитеcompatibility = '24.4'или ниже. #63132 (Nikita Taranov). - Запросы к
system.columnsбудут работать быстрее, если имеется большое количество колонок, но при этом для многих баз данных или таблиц не выданы праваSHOW TABLES. Обратите внимание, что в предыдущих версиях, если вы выдаётеSHOW COLUMNSдля отдельных колонок, не выдаваяSHOW TABLESдля соответствующих таблиц, таблицаsystem.columnsбудет показывать эти колонки, но в новой версии такая таблица будет полностью пропущена. Удалены сообщения трассировки в логах "Access granted" и "Access denied", которые замедляли запросы. #63439 (Alexey Milovidov).
Новая возможность
- Добавляет формат
Formдля чтения и записи одной записи в форматеapplication/x-www-form-urlencoded. #60199 (Shaun Struwig). - Добавлена возможность сжатия в операторе CROSS JOIN. #60459 (p1rattttt).
- Добавлена возможность выполнять
CROSS JOINс использованием временных файлов, если размер превышает лимиты. #63432 (p1rattttt). - Поддержка
JOINс условиями неравенства, которые задействуют столбцы из обеих таблиц (левой и правой), напримерt1.y < t2.y. Чтобы включить эту возможность, выполнитеSET allow_experimental_join_condition = 1. #60920 (lgbo). - Карты теперь поддерживают использование
Float32,Float64,Array(T),Map(K, V)иTuple(T1, T2, ...)в качестве ключей. Закрыта задача #54537. #59318 (李扬). - Добавлена массовая загрузка в
EmbeddedRocksDBпутём создания и приёма SST-файла вместо использования встроенной в RocksDB memtable. Это позволяет повысить скорость импорта, особенно для длительных запросов INSERT в таблицыStorageEmbeddedRocksDB. Также добавлены настройки таблицEmbeddedRocksDB. #59163 #63324 (Duc Canh Le). - Теперь пользователь может разбирать формат TSV с окончаниями строк CRLF с помощью настройки
input_format_tsv_crlf_end_of_line. Закрывает #56257. #59747 (Shaun Struwig). - Новая настройка
input_format_force_null_for_omitted_fieldsпринудительно устанавливает значения NULL для пропущенных полей. #60887 (Constantine Peresypkin). - Ранее наше хранилище S3 и табличная функция s3 не поддерживали выборку данных из файлов в архивных контейнерах, таких как tarball, zip, 7z. Теперь они позволяют перебирать файлы внутри таких архивов в S3. #62259 (Daniil Ivanik).
- Добавлена поддержка условной функции
clamp. #62377 (skyoct). - Добавлен формат вывода
NPy. #62430 (豪肥肥). - Формат
Rawтеперь является синонимомTSVRaw. #63394 (Unalian). - Добавлена новая SQL-функция
generateUUIDv7для создания UUID версии 7, то есть UUID на основе метки времени со случайным компонентом. Также добавлена новая функцияUUIDToNumдля извлечения байтового представления UUID и новая функцияUUIDv7ToDateTimeдля извлечения компонента метки времени из UUID версии 7. #62852 (Alexey Petrunyaka). - В Linux и MacOS, если stdout программы перенаправлен в файл с расширением, обозначающим сжатие, используется соответствующий метод сжатия вместо отсутствия сжатия (что делает поведение аналогичным
INTO OUTFILE). #63662 (v01dXYZ). - Изменено предупреждение, отображаемое при большом количестве подключённых таблиц, чтобы различать таблицы, представления и словари. #64180 (Francisco J. Jurado Moreno).
- Добавлена поддержка функции
azureBlobStorageв сервере ClickHouse для использования Azure Workload Identity при аутентификации в Azure Blob Storage. Если в конфигурации установлен параметрuse_workload_identity, для аутентификации используется Workload Identity. #57881 (Vinay Suryadevara). - Добавлена информация о TTL в таблицу
system.parts_columns. #63200 (litlig).
Экспериментальные возможности
- Реализован тип данных
Dynamic, который позволяет хранить значения любого типа без необходимости заранее знать все возможные типы. ТипDynamicдоступен при включённой настройкеallow_experimental_dynamic_type. См.: #54864. #63058 (Kruglov Pavel). - Разрешено создавать базу данных
MaterializedMySQLбез подключения к MySQL. #63397 (Kirill). - Автоматически помечать реплику реплицируемой базы данных как потерянную и запускать восстановление, если некоторая DDL-задача более
max_retries_before_automatic_recoveryраз подряд (по умолчанию 100) завершается сбоем с одной и той же ошибкой. Также исправлена ошибка, из-за которой могли пропускаться записи DDL при возникновении исключения на ранней стадии выполнения записи. #63549 (Alexander Tokmakov). - Учитывать файлы, обработка которых завершилась сбоем, в
s3queue_tracked_file_ttl_secиs3queue_traked_files_limitдляStorageS3Queue. #63638 (Kseniia Sumarokova).
Улучшение производительности
- Меньше конкуренции за файловый кэш (часть 4). Позволяет не заполнять файловый кэш до предела за счёт дополнительного вытеснения в фоне (управляется параметром
keep_free_space_size(elements)_ratio). Это позволяет снизить нагрузку на резервирование места для запросов (в методеtryReserve). Также это реализовано по возможности без блокировок, то есть не должно блокировать обычное использование кэша. #61250 (Kseniia Sumarokova). - Пропуск слияния заново созданных блоков проекций во время
INSERT-ов. #59405 (Nikita Taranov). - Обработка строковых функций
...UTF8в ASCII-режиме, если входные строки содержат только ASCII-символы. Вдохновлено https://github.com/apache/doris/pull/29799. Общее ускорение составляет 1.07x~1.62x. Обратите внимание, что пиковое потребление памяти в некоторых случаях уменьшилось. #61632 (李扬). - Улучшена производительность glob-шаблонов выбора (
{}) в StorageS3. #62120 (Andrey Zvonov). - HostResolver содержит каждый IP-адрес несколько раз. Если удалённый хост имеет несколько IP, и по какой-то причине (например, правила файрвола) доступ по некоторым IP разрешён, а по другим запрещён, то только первая запись с запрещённым IP помечается как неуспешная, и при каждой попытке у этих IP остаётся шанс быть выбранными (и снова завершиться с ошибкой). Даже если это исправить, каждые 120 секунд DNS-кэш сбрасывается, и IP-адреса могут быть выбраны снова. #62652 (Anton Ivashkin).
- Добавлен новый параметр конфигурации
prefer_merge_sort_block_bytesдля управления использованием памяти и двукратного ускорения сортировки при слиянии при большом количестве столбцов. #62904 (LiuNeng). clickhouse-localтеперь будет запускаться быстрее. В предыдущих версиях он по ошибке не удалял временные директории. Теперь будет удалять. Это закрывает задачу #62941. #63074 (Alexey Milovidov).- Микрооптимизации для нового анализатора. #63429 (Raúl Marín).
- Анализ индексов будет работать, если
DateTimeсравнивается сDateTime64. Это закрывает задачу #63441. #63443 #63532 (Alexey Milovidov). - Незначительное ускорение индексов типа
set(примерно в 1.5 раза) за счёт удаления «мусора». #64098 (Alexey Milovidov). - Удалено копирование данных при записи в файловый кэш. #63401 (Kseniia Sumarokova).
- Теперь резервные копии с использованием Azure Blob Storage будут использовать многократное копирование (multicopy). #64116 (alesapin).
- Разрешено использовать native copy для Azure даже при разных контейнерах. #64154 (alesapin).
- Наконец включён native copy для Azure. #64182 (alesapin).
Улучшение
- Теперь можно использовать
clickhouse-localи его сокращенияclickhouseиchс запросом или файлом с запросами в качестве позиционного аргумента. Примеры:ch "SELECT 1",ch --param_test Hello "SELECT {test:String}",ch query.sql. Тем самым закрыта задача #62361. #63081 (Alexey Milovidov). - Включена поддержка метаданных plain_rewritable для локальных и Azure (azure_blob_storage) объектных хранилищ. #63365 (Julia Kartseva).
- Поддержка английских Unicode-кавычек, например “Hello”, 'world'. В целом это спорное решение, но полезно, когда вы набираете запрос в текстовом редакторе, например в Google Docs. Это закрывает #58634. #63381 (Alexey Milovidov).
- Разрешено использовать завершающие запятые в списке столбцов в запросе INSERT. Например,
INSERT INTO test (a, b, c, ) VALUES .... #63803 (Alexey Milovidov). - Улучшены сообщения об исключениях для формата
Regexp. #63804 (Alexey Milovidov). - Разрешены завершающие запятые в формате
Values. Например, этот запрос допустим:INSERT INTO test (a, b, c) VALUES (4, 5, 6,);. #63810 (Alexey Milovidov). - RabbitMQ теперь отправляет nack для повреждённых сообщений. Закрывает #45350. #60312 (Kseniia Sumarokova).
- Исправлена ошибка при асинхронном раскручивании стека (например, при использовании профилировщика запросов с выборкой), приводившая к аварийному завершению работы во время интерпретации отладочной информации. Это закрывает #60460. #60468 (Alexey Milovidov).
- Разные сообщения об ошибке S3 'no key' для диска и для хранилища. #61108 (Sema Checherinda).
- Индикатор прогресса теперь будет работать для простых запросов с LIMIT из
system.zeros,system.zeros_mt(он уже работает дляsystem.numbersиsystem.numbers_mt), а также с табличной функциейgenerateRandom. В качестве бонуса, если общее количество записей больше лимитаmax_rows_to_read, исключение будет выброшено раньше. Это закрывает #58183. #61823 (Alexey Milovidov). - Поддержка «Merge Key» в конфигурациях YAML (это странная особенность YAML, можете не обращать на неё внимания). #62685 (Azat Khuzhin).
- Улучшено сообщение об ошибке при использовании недетерминированной функции в источнике Replicated. #62896 (Grégoire Pineau).
- Исправлен межсерверный секрет для схемы Distributed поверх Distributed при использовании
remote. #63013 (Azat Khuzhin). - Добавлена поддержка
include_fromдля файлов YAML. Однако лучше использоватьconfig.d#63106 (Eduard Karacharov). - Сохранять предыдущий ввод в терминале после выбора варианта из подсказок skim. #63261 (FlameFactory).
- Ширина полей (в форматах Pretty или при использовании функции
visibleWidth) теперь корректно игнорирует escape-последовательности ANSI. #63270 (Shaun Struwig). - Использование кода ошибки
NUMBER_OF_ARGUMENTS_DOESNT_MATCHзаменено на более точные коды ошибок, где это уместно. #63406 (Yohann Jardin). os_userиclient_hostnameтеперь корректно устанавливаются для запросов, используемых для подсказок командной строки в clickhouse-client. Это закрывает #63430. #63433 (Alexey Milovidov).- Автоматически устанавливать
max_block_sizeв значение по умолчанию, если он равен нулю. #63587 (Antonio Andelic). - Добавить в trace_log столбец ALIAS build_id, чтобы упростить автоматическое переименование при обнаружении изменений бинарного файла. Это необходимо для решения #52086. #63656 (Zimu Li).
- Добавлена поддержка операции truncate для дисков объектного хранилища. #63693 (MikhailBurdukov).
- Загрузка списка ключевых слов теперь зависит от ревизии сервера и будет отключена для старых версий сервера ClickHouse. CC @azat. #63786 (Nikita Mikhaylov).
- Диски ClickHouse должны прочитать настройку сервера, чтобы получить текущую версию формата метаданных. #63831 (Sema Checherinda).
- Отключены ограничения красивого формата (
output_format_pretty_max_rows/output_format_pretty_max_value_width), если стандартный вывод (stdout) не является TTY. #63942 (Azat Khuzhin). - Теперь обработка исключений работает при использовании ClickHouse внутри AWS Lambda. Автор: Alexey Coolnev. #64014 (Alexey Milovidov).
- Выбрасывать исключение
CANNOT_DECOMPRESSвместоCORRUPTED_DATAпри некорректных сжатых данных, полученных по HTTP. #64036 (vdimir). - Всплывающая подсказка для отдельного большого числа в форматах Pretty теперь работает для Nullable и LowCardinality. Это закрывает #61993. #64084 (Alexey Milovidov).
- Добавлены метрики, логи и имена потоков при фильтрации частей по индексам. #64130 (Alexey Milovidov).
- Игнорировать параметр
allow_suspicious_primary_keyприATTACHи проверять приALTER. #64202 (Azat Khuzhin).
Улучшения сборки/тестирования/упаковки
- ClickHouse теперь собирается с использованием clang-18. Включено множество новых проверок из clang-tidy-18. #60469 (Alexey Milovidov).
- Экспериментально добавлена поддержка loongarch64 в качестве новой платформы для ClickHouse. #63733 (qiangxuhui).
- Dockerfile был проверен официальной библиотекой Docker: https://github.com/docker-library/official-images/pull/15846. #63400 (Mikhail f. Shiryaev).
- Информация о каждом символе в каждой единице трансляции будет собираться в базе данных CI для каждой сборки. Это закрывает #63494. #63495 (Alexey Milovidov).
- Обновлена библиотека Apache Datasketches. Это устраняет #63858. #63923 (Alexey Milovidov).
- Включена поддержка gRPC для aarch64 Linux при кросс-компиляции бинарного файла. #64072 (alesapin).
- Исправлена раскрутка стека (unwind) при обработке SIGSEGV на aarch64 (из-за малого стека для сигнала). #64058 (Azat Khuzhin).
Исправление ошибки
- По умолчанию отключена настройка
enable_vertical_final. Эту возможность не следует использовать, потому что в ней есть ошибка: #64543. #64544 (Alexander Tokmakov). - Исправлено создание резервной копии при использовании нескольких шардов #57684 (Vitaly Baranov).
- Исправлена передача проекций/индексов/первичного ключа из списка столбцов запроса CREATE во внутреннюю таблицу MV #59183 (Azat Khuzhin).
- Исправлено некорректное объединение boundRatio #60532 (Tao Wang).
- Исправлено падение при вызове некоторых функций для константных столбцов с низкой кардинальностью #61966 (Michael Kolupaev).
- Исправлены запросы с модификатором FINAL, которые возвращали неверный результат, если таблица не использовала адаптивную гранулярность #62432 (Duc Canh Le).
- Улучшено обнаружение поддержки cgroups v2 для контроллеров памяти #62903 (Robert Schulze).
- Исправлено последующее использование внешних таблиц в клиенте #62964 (Azat Khuzhin).
- Исправлен сбой (краш), возникавший при использовании untuple и неразрешённой лямбда-функции #63131 (Raúl Marín).
- Исправлена проблема преждевременного начала сервером прослушивания соединений #63181 (alesapin).
- Исправлена обработка пересекающихся частей при перезапуске после выполнения команды DROP PART #63202 (Han Fei).
- Корректная загрузка настроек безопасности SQL по умолчанию при запуске #63209 (pufit).
- Исправлена оптимизация проталкивания фильтра в JOIN #63234 (Maksim Kita).
- Исправлен бесконечный цикл в AzureObjectStorage::listObjects #63257 (Julia Kartseva).
- Оператор CROSS JOIN игнорирует настройку join_algorithm #63273 (vdimir).
- Исправлены finalize WriteBufferToFileSegment и StatusFile #63346 (vdimir).
- Исправлена логическая ошибка при выполнении запроса SELECT после ALTER в редких случаях #63353 (alesapin).
- Исправлена обработка заголовка
X-ClickHouse-Timezoneс учетомsession_timezone#63377 (Andrey Zvonov). - Исправлено срабатывание отладочного assert при использовании группировки WITH ROLLUP и типов LowCardinality #63398 (Raúl Marín).
- Небольшие исправления настройки group_by_use_nulls #63405 (vdimir).
- Исправлено резервное копирование и восстановление части проекции в случае, когда проекция была удалена из метаданных таблицы, но часть всё ещё содержит эту проекцию #63426 (Kseniia Sumarokova).
- Исправлен источник словаря MySQL #63481 (vdimir).
- Добавить QueryFinish при AsyncInsertFlush без данных #63483 (Raúl Marín).
- Исправлено: пустое поле used_dictionaries в system.query_log #63487 (Eduard Karacharov).
- Повышена безопасность
MergeTreePrefetchedReadPool#63513 (Antonio Andelic). - Исправлено аварийное завершение при выходе с включённым Sentry (из-за того, что OpenSSL уничтожался раньше Sentry) #63548 (Azat Khuzhin).
- Исправлена поддержка типов Array и Map при хешировании по ключу #63628 (Salvatore Mesoraca).
- Исправить проталкивание фильтров для Parquet и, возможно, для StorageMerge #63642 (Michael Kolupaev).
- Предотвратить преобразование в Replicated, если путь в ZooKeeper уже существует #63670 (Kirill).
- Анализатор: представления читают только необходимые столбцы #63688 (Maksim Kita).
- Analyzer: запрет переопределения WINDOW #63694 (Dmitry Novik).
- flatten_nested не работал с экспериментальной базой данных Replicated. #63695 (Nikolai Kochetov).
- Исправлены #63653, #63722 (Nikolai Kochetov).
- Разрешено приведение типа Array(Nothing) к типу Map(Nothing, Nothing) #63753 (Nikolai Kochetov).
- Исправлена ошибка ILLEGAL_COLUMN в partial_merge join #63755 (vdimir).
- Исправление: удалён избыточный
distinctпри работе с оконными функциями #63776 (Igor Nikonov). - Исправлен потенциальный сбой при выполнении SYSTEM UNLOAD PRIMARY KEY #63778 (Raúl Marín).
- Исправлен запрос с дублирующимся циклическим алиасом. #63791 (Nikolai Kochetov).
- Сделан
TokenIteratorленивым, как и должно быть #63801 (Alexey Milovidov). - Добавлена настройка
endpoint_subpathдля S3 URI #63806 (Julia Kartseva). - Исправлена взаимоблокировка в
ParallelReadBuffer#63814 (Antonio Andelic). - Исправлено проталкивание фильтра в JOIN по эквивалентным столбцам #63819 (Maksim Kita).
- При использовании базы данных Lazy удалять данные со всех дисков после DROP. #63848 (MikhailBurdukov).
- Исправлен некорректный результат при чтении из MV с параллельными репликами и использованием нового анализатора #63861 (Nikita Taranov).
- Исправления в командах
find_super_nodesиfind_big_familyутилиты keeper-client #63862 (Alexander Gololobov). - Обновлено имя выполняемой функции lambda #63864 (Nikolai Kochetov).
- Исправлена ошибка сегментации (SIGSEGV), вызванная профилировщиком CPU/Real #63865 (Azat Khuzhin).
- Исправлен запрос
EXPLAIN CURRENT TRANSACTION#63926 (Anton Popov). - Исправлен анализатор: это черепахи до самого низа... #63930 (Yakov Olkhovskiy).
- Разрешено использование отдельных команд ALTER TABLE для диска
plain_rewritable#63933 (Julia Kartseva). - Исправлена работа распределённого рекурсивного CTE #63939 (Maksim Kita).
- Analyzer: исправлено разрешение конструкции COLUMNS #63962 (Dmitry Novik).
- LIMIT BY и skip_unused_shards в анализаторе #63983 (Nikolai Kochetov).
- Исправление некоторых ошибок (experimental Kusto) #63992 (Yong Wang).
- Более безопасная десериализация недоверенных двоичных данных #64024 (Robert Schulze).
- Исправлен анализ запросов с настройкой
final= 1 для Distributed-таблиц над таблицами, не относящимися к семейству MergeTree. #64037 (Nikolai Kochetov). - Добавлены недостающие настройки для recoverLostReplica #64040 (Raúl Marín).
- Исправлены проверки прав доступа в SQL с помощью анализатора #64079 (pufit).
- Исправлен анализатор: для DAG теперь используются только выражения интерполяции #64096 (Yakov Olkhovskiy).
- Исправлена работа резервного копирования в Azure, при которой формировались multipart-блоки размером 1 MiB (размер буфера чтения) вместо
max_upload_part_size(в случае ненативного копирования) #64117 (Kseniia Sumarokova). - Корректный переход на запасной вариант при копировании резервной копии #64153 (Antonio Andelic).
- Предотвращён LOGICAL_ERROR при выполнении CREATE TABLE AS MATERIALIZED VIEW #64174 (Raúl Marín).
- Кэш запросов: рассматривать идентичные запросы к разным базам данных как разные #64199 (Robert Schulze).
- Игнорирование
text_logдля Keeper #64218 (Antonio Andelic). - Исправлена логическая ошибка: некорректное приведение типов для таблицы движка Buffer с PREWHERE. #64388 (Nikolai Kochetov).
Релиз ClickHouse 24.4, 2024-04-30
Заметки по обновлению
clickhouse-odbc-bridgeиclickhouse-library-bridgeтеперь поставляются как отдельные пакеты. Это закрывает #61677. #62114 (Alexey Milovidov).- Больше нельзя устанавливать max_parallel_replicas (для экспериментального параллельного чтения с реплик) в значение
0, так как это не имеет смысла. Закрывает #60140. #61201 (Kruglov Pavel). - Удалена поддержка запроса
INSERT WATCH(часть устаревшей функциональностиLIVE VIEW). #62382 (Alexey Milovidov). - Удалена настройка
optimize_monotonous_functions_in_order_by. #63004 (Raúl Marín). - С движка базы данных
Replicatedснят экспериментальный статус. Теперь он находится на стадии beta. #62937 (Justin de Guzman).
Новая функция
- Поддержка рекурсивных CTE. #62074 (Maksim Kita).
- Поддержка предложения
QUALIFY. Закрывает #47819. #62619 (Maksim Kita). - Движки таблиц теперь можно назначать через
GRANT, и это не влияет на поведение существующих пользователей. #60117 (jsc0218). - Добавлен перезаписываемый диск S3, который поддерживает операции INSERT и не требует локально хранимых метаданных. #61116 (Julia Kartseva). Основной сценарий использования — для системных таблиц.
- Подсветка синтаксиса при вводе в клиенте теперь будет работать на уровне синтаксического анализа (ранее она работала на уровне лексера). #62123 (Alexey Milovidov).
- Поддерживается удаление нескольких таблиц одновременно, как в
DROP TABLE a, b, c;. #58705 (zhongyuankai). - Теперь поддерживается изменение настроек таблиц с движком Memory через
ALTER MODIFY SETTING. Пример:ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 1000;. #62039 (zhongyuankai). - Добавлен параметр запроса
roleв HTTP-интерфейс. Он работает аналогичноSET ROLE x, применяя роль до выполнения оператора. Это позволяет обойти ограничение HTTP-интерфейса, при котором не допускается несколько операторов и, соответственно, нельзя отправить иSET ROLE x, и сам оператор одновременно. Можно задать несколько ролей таким образом, например,?role=x&role=y, что будет эквивалентноSET ROLE x, y. #62669 (Serge Klochkov). - Добавлена команда
SYSTEM UNLOAD PRIMARY KEYдля освобождения памяти, занимаемой первичным ключом таблицы. #62738 (Pablo Marcos). - В
system.text_logдобавлены столбцыvalue1,value2, ...,value10. Эти столбцы содержат значения, которые были использованы для форматирования сообщения. #59619 (Alexey Katsman). - Добавлен постоянный виртуальный столбец
_block_offset, который хранит исходный номер строки в блоке, присвоенный при вставке. Сохранение столбца_block_offsetна диске может быть включено настройкой MergeTreeenable_block_offset_column. Добавлен виртуальный столбец_part_data_version, который содержит либо минимальный номер блока, либо версию мутации части. Постоянный виртуальный столбец_block_numberбольше не считается экспериментальным. #60676 (Anton Popov). - Добавлена настройка
input_format_json_throw_on_bad_escape_sequence; её отключение позволяет сохранять некорректные escape-последовательности во входных форматах JSON. #61889 (Kruglov Pavel).
Повышение производительности
- Улучшения проталкивания фильтров в JOIN с использованием множеств эквивалентности. #61216 (Maksim Kita).
- Добавлена оптимизация, которая преобразует OUTER JOIN в INNER JOIN, если фильтр после JOIN всегда отбрасывает значения по умолчанию. Оптимизацией можно управлять с помощью настройки
query_plan_convert_outer_join_to_inner_join, которая включена по умолчанию. #62907 (Maksim Kita). - Улучшение для AWS S3. Клиент должен отправлять заголовок 'Keep-Alive: timeout=X' на сервер. Если клиент получает от сервера ответ с этим заголовком, он должен использовать значение, указанное сервером. Также клиенту предпочтительно не использовать соединение, срок жизни которого почти истёк, чтобы избежать гонки закрытия соединения. #62249 (Sema Checherinda).
- Сокращение накладных расходов мутаций для запросов SELECT (v2). #60856 (Azat Khuzhin).
- Наиболее часто вызываемые функции в PODArray теперь принудительно встраиваются (force-inlined). #61144 (李扬).
- Ускорен разбор JSON за счёт пропуска оставшейся части объекта после чтения всех необходимых столбцов. #62210 (lgbo).
- Улучшена обработка простых запросов INSERT SELECT из файлов в табличных функциях file/s3/hdfs/url/.... Добавлена отдельная настройка max_parsing_threads для управления количеством потоков, используемых при параллельном разборе. #62404 (Kruglov Pavel).
- Функции
to_utc_timestampиfrom_utc_timestampтеперь примерно в 2 раза быстрее. #62583 (KevinyhZou). - Функции
parseDateTimeOrNull,parseDateTimeOrZero,parseDateTimeInJodaSyntaxOrNullиparseDateTimeInJodaSyntaxOrZeroтеперь работают значительно быстрее (в 10–1000 раз), когда входные данные преимущественно содержат значения, которые не удаётся разобрать. #62634 (LiuNeng). - SELECT-запросы к
system.query_cacheтеперь выполняются заметно быстрее, когда кэш запросов содержит большое количество записей (например, более 100 000). #62671 (Robert Schulze). - Меньше конфликтов в файловом кэше (часть 3): выполнять удаление из файловой системы без блокировки при попытке зарезервировать место на диске. #61163 (Kseniia Sumarokova).
- Ускорено динамическое изменение размера кэша файловой системы. #61723 (Kseniia Sumarokova).
- Источник словаря с
INVALIDATE_QUERYпри запуске больше не перезагружается дважды. #62050 (vdimir). - Исправлена ошибка, из-за которой при добавлении избыточного
= 1или= 0после логического выражения с участием первичного ключа не использовался первичный индекс. Например, иSELECT * FROM <table> WHERE <primary-key> IN (<value>) = 1, иSELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0приводили к полному сканированию таблицы, хотя мог быть использован первичный индекс. #62142 (josh-hildred). - Возвращать поток чанков из
system.remote_data_pathsвместо накопления всего результата в одном большом чанке. Это позволяет расходовать меньше памяти, отображать промежуточный прогресс и отменять запрос. #62613 (Alexander Gololobov).
Экспериментальная функция
- Добавлена поддержка параллельного буфера записи для Azure Blob Storage, управляемая настройкой
azure_allow_parallel_part_upload. #62534 (SmitaRKulkarni). - Кэш страниц в пространстве пользователя (userspace page cache) теперь работает со статическим веб-хранилищем (
disk(type = web)). Для включения используйте клиентскую настройкуuse_page_cache_for_disks_without_file_cache=1. #61911 (Michael Kolupaev). - Типы Bool и числовые варианты больше не считаются подозрительными в типе
Variant. #61999 (Kruglov Pavel). - Реализовано улучшенное преобразование из типа String в
Variantс использованием парсинга. #62005 (Kruglov Pavel). - Добавлена поддержка
Variantв функциях JSONExtract. #62014 (Kruglov Pavel). - Тип
Variantпомечен как сравнимый, поэтому его можно использовать в первичном ключе. #62693 (Kruglov Pavel).
Улучшение
- Для удобства
SELECT * FROM numbers()будет работать так же, какSELECT * FROM system.numbers— без лимита. #61969 (YenchangChan). - Введены отдельные теги consumer/producer для конфигурации Kafka. Это позволяет избежать предупреждений от librdkafka (неудачной библиотеки на C с множеством ошибок) о том, что свойства consumer были указаны для экземпляров producer и наоборот (например, предупреждение
Configuration property session.timeout.ms is a consumer property and will be ignored by this producer instance). Закрывает: #58983. #58956 (Aleksandr Musorin). - Функции
date_diffиageтеперь вычисляют результат с наносекундной точностью вместо микросекундной. Они также поддерживают значениеnanosecond(илиnanoseconds, илиns) в качестве значения параметраunit. #61409 (Austin Kothig). - Добавлены единицы измерения нано-, микро- и миллисекунд для
date_trunc. #62335 (Misz606). - Перезагружать цепочку сертификатов вместе с сертификатом. #61671 (Pervakov Grigorii).
- Попытка предотвратить ошибку #60432 путём запрета присоединения таблицы, если уже существует активная реплика для данного пути реплики. #61876 (Arthur Passos).
- Реализована поддержка
inputдляclickhouse-local. #61923 (Azat Khuzhin). - Движок таблицы
Joinсо строгостьюANYведет себя детерминированно после перезагрузки. Когда вставляется несколько строк с одинаковым ключом, первая из них имеет более высокий приоритет (ранее строка выбиралась случайным образом при загрузке таблицы). Закрыта задача #51027. #61972 (vdimir). - Автоматически определять типы столбцов Nullable на основе схемы Apache Arrow. #61984 (Maksim Kita).
- Добавлена возможность отмены параллельного слияния агрегатных состояний в процессе агрегации. Пример:
uniqExact. #61992 (Maksim Kita). - Используйте
system.keywordsдля заполнения подсказок, а также для внутреннего использования повсеместно. #62000 (Nikita Mikhaylov). OPTIMIZE FINALдляReplicatedMergeTreeтеперь будет ждать завершения текущих активных слияний, а затем повторно попытается запланировать финальное слияние. Тем самым его поведение станет ближе к поведению обычногоMergeTree. #62067 (Nikita Taranov).- При чтении данных из текстового файла Hive первая строка файла используется для переопределения количества входных полей, и иногда количество полей в первой строке не совпадает с определением таблицы Hive. Например, таблица Hive определена с 3 столбцами, как
test_tbl(a Int32, b Int32, c Int32), но первая строка текстового файла содержит только 2 поля. В этой ситуации количество входных полей будет изменено на 2, и если следующая строка текстового файла содержит 3 поля, третье поле не будет прочитано, а будет установлено в значение по умолчанию 0, что является некорректным поведением. #62086 (KevinyhZou). - Оператор
CREATE ASтеперь копирует комментарий таблицы. #62117 (Pablo Marcos). - Добавлен прогресс выполнения запросов в таблицу zookeeper. #62152 (JackyWoo).
- Добавлена возможность включать сборщик трассировок (Real и CPU) на уровне сервера. #62189 (alesapin).
- Добавлена настройка
lightweight_deletes_sync(значение по умолчанию: 2 — синхронное ожидание всех реплик). Она похожа на настройкуmutations_sync, но влияет только на поведение облегчённых удалений. #62195 (Anton Popov). - Различать логические и целочисленные значения при разборе значений пользовательских настроек:
SET custom_a = true; SET custom_b = 1;. #62206 (Vitaly Baranov). - Реализована поддержка доступа к S3 через интерфейсные конечные точки AWS PrivateLink. Закрывает #60021, #31074 и #53761. #62208 (Arthur Passos).
- Не создавать в clickhouse-client каталог для UDF, если он не существует. Это закрывает #59597. #62366 (Alexey Milovidov).
- Теперь кэш запросов больше не кэширует результаты запросов к системным таблицам (
system.*,information_schema.*,INFORMATION_SCHEMA.*). #62376 (Robert Schulze). - Запрос
MOVE PARTITION TO TABLEможет быть отложен или завершиться исключениемTOO_MANY_PARTS, чтобы не превысить ограничения на количество частей. Применяются те же настройки и лимиты, что и для запросаINSERT(см. настройкиmax_parts_in_total,parts_to_delay_insert,parts_to_throw_insert,inactive_parts_to_throw_insert,inactive_parts_to_delay_insert,max_avg_part_size_for_too_many_parts,min_delay_to_insert_msиmax_delay_to_insert). #62420 (Sergei Trifonov). - Каталог установки по умолчанию в macOS изменён с
/usr/binна/usr/local/bin. Это необходимо, потому что механизм System Integrity Protection от Apple, введённый в macOS El Capitan (2015), запрещает запись в/usr/bin, даже при использованииsudo. #62489 (haohang). - Сделали так, что функция transform всегда возвращает первое совпадение. #62518 (Raúl Marín).
- В системную таблицу
blob_storage_logдобавлен отсутствовавший столбецhostname. #62456 (Jayme Bird). - Для единообразия с другими системными таблицами в
system.backup_logтеперь имеется столбецevent_time. #62541 (Jayme Bird). - Таблица
system.backup_logтеперь имеет ключ сортировки по умолчаниюevent_date, event_time, такой же, как у других таблиц движка_log. #62667 (Nikita Mikhaylov). - Избегайте вычисления выражений DEFAULT для столбцов таблицы при выполнении
RESTORE. #62601 (Vitaly Baranov). - Хранилищу S3 и резервным копиям также нужны те же параметры keep-alive по умолчанию, что и для диска S3. #62648 (Sema Checherinda).
- Добавлен идентификатор клиента библиотеки librdkafka (той самой печально известной библиотеки на C с множеством багов) в сообщения журнала, чтобы можно было различать сообщения журнала от разных потребителей одной таблицы. #62813 (János Benjamin Antal).
- Разрешено использование специальных макросов
{uuid}и{database}в пути ZooKeeper реплицируемой базы данных. #62818 (Vitaly Baranov). - Разрешено использование ключа квоты с иной схемой аутентификации в HTTP‑запросах. #62842 (Kseniia Sumarokova).
- Уменьшена детализация вывода справки для аргумента командной строки
--helpвclickhouse clientиclickhouse local. Предыдущий вариант вывода теперь генерируется с помощью--help --verbose. #62973 (Yarik Briukhovetskyi). log_bin_use_v1_row_eventsбыл удалён в MySQL 8.3, и мы соответственно доработали экспериментальный движокMaterializedMySQL#60479. #63101 (Eugene Klimov). Автор: Nikolay Yankin.
Улучшение сборки/тестирования/упаковки
- Завендорить зависимости Rust, чтобы код на Rust (который мы используем для мелких фич ради хайпа и лулзов) можно было собирать нормальным образом, аналогично C++. #62297 (Raúl Marín).
- ClickHouse теперь использует OpenSSL 3.2 вместо BoringSSL. #59870 (Robert Schulze). Обратите внимание, что у OpenSSL в целом хуже инженерные практики (например, ненулевое количество отчётов от инструментов sanitizer, которые нам пришлось исправлять, сложная система сборки с генерируемыми файлами и т. д.), но при этом обеспечивается лучшая совместимость.
- Игнорировать запросы DROP во время стресс‑теста с вероятностью 1/2, использовать TRUNCATE вместо игнорирования DROP при проверке обновления для таблиц Memory/JOIN. #61476 (Kruglov Pavel).
- Удалены тома
/etc/clickhouse-keeperи/var/log/clickhouse-keeperиз Docker-образа Keeper. #61683 (Tristan). - Добавлены тесты для всех задач, которые больше не актуальны при включении анализатора по умолчанию. Закрывает: #55794 Закрывает: #49472 Закрывает: #44414 Закрывает: #13843 Закрывает: #55803 Закрывает: #48308 Закрывает: #45535 Закрывает: #44365 Закрывает: #44153 Закрывает: #42399 Закрывает: #27115 Закрывает: #23162 Закрывает: #15395 Закрывает: #15411 Закрывает: #14978 Закрывает: #17319 Закрывает: #11813 Закрывает: #13210 Закрывает: #23053 Закрывает: #37729 Закрывает: #32639 Закрывает: #9954 Закрывает: #41964 Закрывает: #54317 Закрывает: #7520 Закрывает: #36973 Закрывает: #40955 Закрывает: #19687 Закрывает: #23104 Закрывает: #21584 Закрывает: #23344 Закрывает: #22627 Закрывает: #10276 Закрывает: #19687 Закрывает: #4567 Закрывает: #17710 Закрывает: #11068 Закрывает: #24395 Закрывает: #23416 Закрывает: #23162 Закрывает: #25655 Закрывает: #11757 Закрывает: #6571 Закрывает: #4432 Закрывает: #8259 Закрывает: #9233 Закрывает: #14699 Закрывает: #27068 Закрывает: #28687 Закрывает: #28777 Закрывает: #29734 Закрывает: #61238 Закрывает: #33825 Закрывает: #35608 Закрывает: #29838 Закрывает: #35652 Закрывает: #36189 Закрывает: #39634 Закрывает: #47432 Закрывает: #54910 Закрывает: #57321 Закрывает: #59154 Закрывает: #61014 Закрывает: #61950 Закрывает: #55647 Закрывает: #61947. #62185 (Nikita Mikhaylov).
- Добавлены дополнительные тесты из задач, которые больше не актуальны или уже исправлены анализатором. Закрывает: #58985 Закрывает: #59549 Закрывает: #36963 Закрывает: #39453 Закрывает: #56521 Закрывает: #47552 Закрывает: #56503 Закрывает: #59101 Закрывает: #50271 Закрывает: #54954 Закрывает: #56466 Закрывает: #11000 Закрывает: #10894 Закрывает: https://github.com/ClickHouse/ClickHouse/issues/448 Закрывает: #8030 Закрывает: #32139 Закрывает: #47288 Закрывает: #50705 Закрывает: #54511 Закрывает: #55466 Закрывает: #58500 Закрывает: #39923 Закрывает: #39855 Закрывает: #4596 Закрывает: #47422 Закрывает: #33000 Закрывает: #14739 Закрывает: #44039 Закрывает: #8547 Закрывает: #22923 Закрывает: #23865 Закрывает: #29748 Закрывает: #4222. #62457 (Nikita Mikhaylov).
- Исправлены ошибки сборки при динамическом связывании с OpenSSL (примечание: это, как правило, не поддерживается и требуется только для платформ IBM s390x). #62888 (Harry Lee).
Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе)
- Исправлена логическая ошибка при откате транзакции кворумной вставки. #61953 (Han Fei).
- Исправлена ошибка парсера при использовании COUNT(*) с клаузой FILTER #61357 (Duc Canh Le).
- Исправлена логическая ошибка в
group_by_use_nulls+ grouping sets + analyzer + materialize/constant #61567 (Kruglov Pavel). - Отменять слияния перед удалением перемещённых частей #61610 (János Benjamin Antal).
- Исправлен аварийный сбой в Apache Arrow #61720 (Kruglov Pavel).
- Ищите флаг
convert_to_replicatedпо корректному пути, соответствующему конкретному диску #61769 (Kirill). - Исправлена возможная гонка данных в соединениях для distributed_foreground_insert/distributed_background_insert_batch #61867 (Azat Khuzhin).
- Пометить ошибку CANNOT_PARSE_ESCAPE_SEQUENCE как ошибку разбора, чтобы её можно было пропускать в форматах построчного ввода #61883 (Kruglov Pavel).
- Исправлена запись сообщения об исключении в HTTP-формате вывода при использовании http_wait_end_of_query #61951 (Kruglov Pavel).
- Корректное исправление работы LowCardinality совместно с функциями JSONExtract #61957 (Nikita Mikhaylov).
- Сбой в движке Merge, если политика строк не содержит выражения #61971 (Ilya Golshtein).
- Исправлено неперехваченное исключение в деструкторе WriteBufferAzureBlobStorage #61988 (SmitaRKulkarni).
- Исправлена работа CREATE TABLE без определения столбцов для ReplicatedMergeTree #62040 (Azat Khuzhin).
- Исправлена работа optimize_skip_unused_shards_rewrite_in для составного ключа шардинга #62047 (Azat Khuzhin).
- ReadWriteBufferFromHTTP теперь устанавливает корректный заголовок Host при перенаправлениях #62068 (Sema Checherinda).
- Исправлена ошибка, из-за которой внешней таблице не удавалось разобрать тип данных Bool #62115 (Duc Canh Le).
- Analyzer: Исправлено разрешение параметров запроса #62186 (Dmitry Novik).
- Исправлено восстановление частей в режиме только для чтения #62207 (Vitaly Baranov).
- Исправлен сбой при определении индекса, содержащего SQL UDF #62225 (vdimir).
- Исправлено использование seed со значением NULL в generateRandom при работе с analyzer. #62248 (Nikolai Kochetov).
- Корректная обработка константных столбцов в Distinct Transform #62250 (Antonio Andelic).
- Исправлен Parts Splitter для запросов с модификатором FINAL #62268 (Nikita Taranov).
- Analyzer: Исправлено разрешение алиаса на параметризованное представление #62274 (Dmitry Novik).
- Analyzer: исправлено разрешение имен из родительских областей видимости #62281 (Dmitry Novik).
- Исправлена работа argMax с nullable-столбцом числового ненативного типа #62285 (Raúl Marín).
- Исправлена работа BACKUP и RESTORE для материализованного представления в базе данных типа Ordinary #62295 (Vitaly Baranov).
- Исправлена гонка данных на скалярах в Context #62305 (Kruglov Pavel).
- Исправлен первичный ключ в материализованном представлении #62319 (Murat Khairulin).
- Не создавать многопоточный конвейер вставки для таблиц, которые его не поддерживают #62333 (vdimir).
- Исправлена работа анализатора с позиционными аргументами в распределённом запросе #62362 (flynn).
- Исправлено проталкивание фильтров из additional_table_filters в движке Merge в анализаторе #62398 (Kruglov Pavel).
- Исправлена обработка запросов GLOBAL IN к таблицам в анализаторе. #62409 (Nikolai Kochetov).
- Учитывать настройки truncate_on_insert/create_new_file_on_insert в движках s3/hdfs/azure при записи по партициям #62425 (Kruglov Pavel).
- Исправлен путь восстановления из резервной копии для AzureBlobStorage #62447 (SmitaRKulkarni).
- Исправлен трансформ SimpleSquashingChunksTransform #62451 (Nikita Taranov).
- Исправлен захват вложенной лямбда-функции. #62462 (Nikolai Kochetov).
- Предотвращён сбой при чтении protobuf с рекурсивными типами #62506 (Raúl Marín).
- Исправлена ошибка при попытке переместить один раздел сам в себя #62524 (helifu).
- Исправлен скалярный подзапрос в операторе LIMIT #62567 (Nikolai Kochetov).
- Исправлена ошибка сегментации (segfault) в экспериментальном и неподдерживаемом движке Hive, который нам всё равно не нравится #62578 (Nikolay Degterinsky).
- Устранена утечка памяти в groupArraySorted #62597 (Antonio Andelic).
- Исправлено падение в largestTriangleThreeBuckets #62646 (Raúl Marín).
- Исправлены tumble[Start,End] и hop[Start,End] для более крупных разрешений #62705 (Jordi Villar).
- Исправлено состояние комбинаторов argMin/argMax #62708 (Raúl Marín).
- Исправлен сбой работы с временными данными в кэше, вызванный оптимизацией конкуренции за блокировки кэша #62715 (Kseniia Sumarokova).
- Исправлено падение в функции
mergeTreeIndex#62762 (Anton Popov). - fix: update: вложенные материализованные столбцы: исправления проверки размера #62773 (Eliot Hautefeuille).
- Исправлена проблема, из-за которой модификатор FINAL не учитывался в CTE при использовании анализатора #62811 (Duc Canh Le).
- Исправлено аварийное завершение работы функции
formatRowпри использовании форматаJSONи HTTP‑интерфейса #62840 (Anton Popov). - Azure: исправлено построение конечного URL из объекта endpoint #62850 (Daniel Pozo Escalona).
- Исправлен кодек GCD #62853 (Nikita Taranov).
- Исправлен ключ типа LowCardinality(Nullable) в гиперпрямоугольнике #62866 (Amos Bird).
- Исправлена работа
fromUnixtimestampв синтаксисе Joda при входном значении, выходящем за пределы диапазона UInt32 #62901 (KevinyhZou). - Отключена настройка optimize_rewrite_aggregate_function_with_if для sum(nullable) #62912 (Raúl Marín).
- Исправлена обработка PREWHERE для StorageBuffer при разных типах столбцов в исходной таблице. #62916 (Nikolai Kochetov).
- Исправлена некорректная обработка временных данных в кэше при ошибке создания директории ключей кэша #62925 (Kseniia Sumarokova).
- gRPC: исправлено падение при подключении пира по IPv6 #62978 (Konstantin Bogdanov).
- Исправлена возможная ошибка CHECKSUM_DOESNT_MATCH (и другие) при выполнении реплицированных выборок #62987 (Azat Khuzhin).
- Исправлено аварийное завершение процесса из‑за неперехваченного исключения во временных данных кэша #62998 (Kseniia Sumarokova).
- Исправлена проблема с неявным приведением типов в optimize_rewrite_aggregate_function_with_if #62999 (Raúl Marín).
- Исправлено необработанное исключение в ~RestorerFromBackup #63040 (Vitaly Baranov).
- Не удалять серверные константы из ключа GROUP BY для вторичного запроса. #63047 (Nikolai Kochetov).
- Исправлена неверная оценка монотонности функции abs #63097 (Duc Canh Le).
- Установлено имя сервера для SSL-рукопожатия в движке MongoDB #63122 (Alexander Gololobov).
- Использовать указанную пользователем базу данных вместо "config" для проверки версии wire-протокола MongoDB #63126 (Alexander Gololobov).
Релиз ClickHouse 24.3 LTS от 2024-03-27
Примечания по обновлению
- Настройка
allow_experimental_analyzerвключена по умолчанию и переключает анализ запросов на новую реализацию, которая обеспечивает лучшую совместимость и более полный набор возможностей. Функция "analyzer" считается бета-версией, а не экспериментальной. Вы можете вернуть старое поведение, установив параметрcompatibilityв значение24.2или отключив настройкуallow_experimental_analyzer. Посмотрите видео на YouTube. - ClickHouse допускает произвольные бинарные данные в типе данных String, который обычно содержит UTF-8. Типы String в форматах Parquet/ORC/Arrow поддерживают только UTF-8. Поэтому вы можете выбрать, какой тип данных Arrow использовать для типа данных ClickHouse String — String или Binary. Это контролируется настройками
output_format_parquet_string_as_string,output_format_orc_string_as_string,output_format_arrow_string_as_string. Хотя Binary был бы более корректным и совместимым вариантом, использование String по умолчанию в большинстве случаев соответствует ожиданиям пользователей. Parquet/ORC/Arrow поддерживают множество методов сжатия, включая lz4 и zstd. ClickHouse поддерживает все эти методы сжатия. Некоторые менее продвинутые инструменты не поддерживают более быстрый метод сжатияlz4, поэтому по умолчанию мы используемzstd. Это контролируется настройкамиoutput_format_parquet_compression_method,output_format_orc_compression_methodиoutput_format_arrow_compression_method. Мы изменили значение по умолчанию наzstdдля Parquet и ORC, но не для Arrow (он предназначен для низкоуровневых сценариев использования). #61817 (Alexey Milovidov). - В новой версии ClickHouse функции
geoDistance,greatCircleDistanceиgreatCircleAngleбудут использовать 64-битный тип данных с плавающей запятой двойной точности для внутренних вычислений и в качестве типа возвращаемого значения, если все аргументы имеют тип Float64. Это закрывает #58476. В предыдущих версиях функция всегда использовала Float32. Вы можете переключиться на старое поведение, установив параметрgeo_distance_returns_float64_on_float64_argumentsв значениеfalseили параметрcompatibilityв значение24.2или более раннее. #61848 (Alexey Milovidov). Соавтор — Geet Patel. - Части данных в оперативной памяти были объявлены устаревшими начиная с версии 23.5 и перестали поддерживаться, начиная с версии 23.10. Теперь оставшийся код удалён. Продолжение #55186 и #45409. Маловероятно, что вы использовали части данных в оперативной памяти, поскольку они были доступны только до версии 23.5 и только при их ручном включении через указание соответствующих SETTINGS для таблицы MergeTree. Чтобы проверить, есть ли у вас части данных в оперативной памяти, выполните следующий запрос:
SELECT part_type, count() FROM system.parts GROUP BY part_type ORDER BY part_type. Чтобы отключить использование частей данных в оперативной памяти, выполнитеALTER TABLE ... MODIFY SETTING min_bytes_for_compact_part = DEFAULT, min_rows_for_compact_part = DEFAULT. Перед обновлением со старых релизов ClickHouse сначала убедитесь, что у вас нет частей данных в оперативной памяти. Если они есть, сначала отключите их, затем дождитесь, пока части данных в оперативной памяти исчезнут, и продолжайте обновление. #61127 (Alexey Milovidov). - Изменено имя столбца с
duration_msнаduration_microsecondsв таблицеsystem.zookeeper, чтобы отразить тот факт, что длительность измеряется с микросекундным разрешением. #60774 (Duc Canh Le). - Отклонять входящие запросы INSERT, если параметры уровня запроса
async_insertиdeduplicate_blocks_in_dependent_materialized_viewsодновременно включены. Это поведение управляется настройкойthrow_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert, которая по умолчанию включена. Это продолжение https://github.com/ClickHouse/ClickHouse/pull/59699, необходимое для разблокировки https://github.com/ClickHouse/ClickHouse/pull/59915. #60888 (Nikita Mikhaylov). - Утилита
clickhouse-copierперенесена в отдельный репозиторий на GitHub: https://github.com/ClickHouse/copier. Она больше не входит в основной дистрибутив, но по-прежнему доступна для отдельной загрузки. Закрывает: #60734 Закрывает: #60540 Закрывает: #60250 Закрывает: #52917 Закрывает: #51140 Закрывает: #47517 Закрывает: #47189 Закрывает: #46598 Закрывает: #40257 Закрывает: #36504 Закрывает: #35485 Закрывает: #33702 Закрывает: #26702. - Для повышения совместимости с MySQL совместимый псевдоним
locateтеперь по умолчанию принимает аргументы(needle, haystack[, start_pos]). Предыдущее поведение(haystack, needle[, start_pos])можно восстановить, задавfunction_locate_has_mysql_compatible_argument_order = 0. #61092 (Robert Schulze). - По умолчанию запретить использование
SimpleAggregateFunctionвORDER BYтаблицMergeTree(аналогично уже запрещённомуAggregateFunction; запрет связан с тем, что такие функции не являются сравнимыми). Для разрешения их использования применяйтеallow_suspicious_primary_key. #61399 (Azat Khuzhin). - Движок базы данных
Ordinaryобъявлен устаревшим. Вы получите предупреждение в clickhouse-client, если ваш сервер его использует. Это закрывает #52229. #56942 (shabroo).
Новые возможности
- Поддержка чтения и записи резервных копий в формате
tar(в дополнение кzip). #59535 (josh-hildred). - Реализована поддержка бакетов S3 Express. #59965 (Nikita Taranov).
- Разрешено присоединять парты с другого диска (используя копирование вместо жёсткой ссылки). #60112 (Unalian).
- Таблицы
Memoryс ограничением по размеру: управляются настройкамиmin_bytes_to_keep, max_bytes_to_keep, min_rows_to_keepиmax_rows_to_keep. #60612 (Jake Bamrah). - Раздельные лимиты на количество ожидающих и выполняющихся запросов. Добавлена новая серверная настройка
max_waiting_queries, которая ограничивает число запросов, ожидающих из‑заasync_load_databases. Существующие лимиты на количество выполняющихся запросов больше не учитывают ожидающие запросы. #61053 (Sergei Trifonov). - Добавлена таблица
system.keywords, которая содержит все ключевые слова парсера. В основном нужна и будет использоваться для улучшенного фаззинга и подсветки синтаксиса. #51808 (Nikita Mikhaylov). - Добавлена поддержка
ATTACH PARTITION ALL. #61107 (Kirill Nikiforov). - Добавлена новая функция
getClientHTTPHeader. Это закрывает задачу #54665. Соавтор — @lingtaolf. #61820 (Alexey Milovidov). - Добавлена
generate_seriesкак табличная функция (алиас совместимости с PostgreSQL для существующей функцииnumbers). Эта функция генерирует таблицу с арифметической прогрессией из натуральных чисел. #59390 (divanik). - Добавлен режим для
topK/topkWeighed, который возвращает количество значений и их погрешность. #54508 (UnamedRus). - Добавлена функция
toMillisecond, которая возвращает значение миллисекунд для значений типаDateTimeилиDateTime64. #60281 (Shaun Struwig). - Добавлена возможность настраивать обработчики HTTP‑редиректов для clickhouse-server. Например, можно сделать так, чтобы
/перенаправлял в Play UI. #60390 (Alexey Milovidov).
Повышение производительности
- Оптимизирована функция
dotProduct, чтобы избежать ненужных и дорогостоящих операций копирования памяти. #60928 (Robert Schulze). - Вывод 256-битных целых чисел стал в 30 раз быстрее. #61100 (Raúl Marín).
- Если первичный ключ таблицы содержит преимущественно бесполезные столбцы, не держите их в памяти. За это отвечает новый параметр настройки
primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columnsсо значением0.9по умолчанию, что означает следующее: для составного первичного ключа, если столбец меняет своё значение как минимум в 90 % случаев, следующие за ним столбцы не будут загружаться в память. #60255 (Alexey Milovidov). - Улучшена производительность сериализованных методов агрегации при работе с несколькими столбцами
Nullable. #55809 (Amos Bird). - Ленивое формирование JSON-вывода для повышения производительности ALL JOIN. #58278 (LiuNeng).
- Сделать HTTP/HTTPS‑подключения к внешним сервисам (например, AWS S3) повторно используемыми для всех сценариев, даже при ответах со статусом 3xx или 4xx. #58845 (Sema Checherinda).
- Улучшены агрегатные функции
argMin/argMax/any/anyLast/anyHeavy, а также запросы видаORDER BY {u8/u16/u32/u64/i8/i16/u32/i64) LIMIT 1. #58640 (Raúl Marín). - Тривиальная оптимизация фильтра по столбцу. В некоторых случаях пиковое потребление памяти может быть уменьшено до 44 % от исходного значения. #59698 (李扬).
- Выполнять функцию
multiIfв столбцовом режиме, когда базовый тип результирующего типа является числовым. #60384 (李扬). - Более быстрые мьютексы (почти в 2 раза). #60823 (Azat Khuzhin).
- Параллельно освобождать несколько соединений при завершении распределённого запроса. #60845 (lizhuoyu5).
- Оптимизировано перемещение данных между столбцами типа Nullable с числовыми или строковыми значениями, что улучшило результаты некоторых микробенчмарков. #60846 (李扬).
- Операции с файловым кэшем будут в меньшей степени страдать от конкуренции за блокировки. #61066 (Alexey Milovidov).
- Оптимизировать
ARRAY JOINи другиеJOIN, предотвратив некорректную оптимизацию компилятором. Закрыть #61074. #61075 (李扬). - Если запрос с синтаксической ошибкой содержал
COLUMNSс регулярным выражением, это регулярное выражение компилировалось каждый раз при бэктрекинге парсера вместо однократной компиляции. Это была принципиальная ошибка. Скомпилированное регулярное выражение помещалось в AST. Но буква A в AST означает "abstract" ("абстрактное"), что подразумевает отсутствие тяжеловесных объектов. Части AST могут создаваться и удаляться во время парсинга, в том числе при множественных шагах бэктрекинга. Это приводит к замедлению парсинга и, как следствие, позволяет осуществить DoS пользователю только с правами чтения. Но основная проблема в том, что это мешает прогрессу фаззеров. #61543 (Alexey Milovidov). - Добавлен новый проход анализатора для оптимизации оператора IN в случае одного значения. #61564 (LiuNeng).
- DNSResolver перемешивает набор разрешённых IP-адресов, что необходимо для равномерного распределения нагрузки между несколькими конечными точками AWS S3. #60965 (Sema Checherinda).
Экспериментальная функциональность
- Добавлена поддержка параллельного чтения из Azure Blob Storage. Это повышает производительность экспериментального объектного хранилища Azure. #61503 (SmitaRKulkarni).
- Добавлен асинхронный WriteBuffer для Azure Blob Storage, аналогичный S3. Это повышает производительность экспериментального объектного хранилища Azure. #59929 (SmitaRKulkarni).
- Добавлено использование managed identity для операций ввода-вывода резервных копий при работе с Azure Blob Storage. Добавлена настройка, предотвращающая попытки ClickHouse создать несуществующий контейнер, что требует прав на уровне учетной записи хранилища. #61785 (Daniel Pozo Escalona).
- Добавлена настройка
parallel_replicas_allow_in_with_subquery = 1, которая позволяет подзапросам в операторе IN работать с параллельными репликами. #60950 (Nikolai Kochetov). - Изменение для репликации «zero-copy»: все блокировки «zero-copy», относящиеся к таблице, должны быть сняты при удалении таблицы. Каталог, содержащий эти блокировки, также должен быть удален. #57575 (Sema Checherinda).
Улучшение
- Используйте
MergeTreeв качестве табличного движка по умолчанию. #60524 (Alexey Milovidov) - Включён
output_format_pretty_row_numbersпо умолчанию. Это улучшает удобство использования. #61791 (Alexey Milovidov). - В предыдущей версии некоторые числа в форматах Pretty отображались не слишком красиво. #61794 (Alexey Milovidov).
- Длинное значение в форматах Pretty не будет обрезано, если оно является единственным значением в результате, например в результате выполнения запроса
SHOW CREATE TABLE. #61795 (Alexey Milovidov). - Так же, как и
clickhouse-local,clickhouse-clientпринимает опцию--output-formatкак синоним опции--format. Это закрывает #59848. #61797 (Alexey Milovidov). - Если stdout является терминалом и формат вывода не указан,
clickhouse-clientи подобные инструменты по умолчанию будут использовать форматPrettyCompact, как и в интерактивном режиме.clickhouse-clientиclickhouse-localбудут единообразно обрабатывать аргументы командной строки, связанные с форматами ввода и вывода. Это закрывает #61272. #61800 (Alexey Milovidov). - Подчёркивание групп цифр в форматах Pretty для улучшения читаемости. Управляется новым параметром настройки
output_format_pretty_highlight_digit_groups. #61802 (Alexey Milovidov). - Добавлена возможность переопределять начальные настройки INSERT с помощью
SYSTEM FLUSH DISTRIBUTED. #61832 (Azat Khuzhin). - Включить по умолчанию профилирование процессоров (время выполнения, объём входящих и исходящих байт при сортировке, агрегации и т. д.). #61096 (Azat Khuzhin).
- Поддержка файлов без расширения в базе данных Filesystem. #60795 (Kruglov Pavel).
- Названия всех форматов сделали нечувствительными к регистру, например Tsv, TSV, tsv или даже rowbinary. #60420 (豪肥肥). Я буду признателен, если вы по-прежнему будете писать их правильно, например
JSON😇, а неJson🤮, но мы не возражаем, если вы будете писать так, как вам удобнее. - Добавлен режим
none_only_activeдля параметраdistributed_ddl_output_mode. #60340 (Alexander Tokmakov). - В расширенной панели мониторинга слегка улучшена цветовая схема многолинейных графиков. #60391 (Alexey Milovidov).
- Теперь на панели Advanced элементы управления всегда остаются видимыми при прокрутке. Это позволяет добавить новый график, не прокручивая страницу вверх. #60692 (Alexey Milovidov).
- При выполнении запроса
MODIFY COLUMNдля материализованных представлений проверьте структуру внутренней таблицы, чтобы убедиться, что все столбцы присутствуют. #47427 (sunny). - Типы String и Enum могут использоваться в одном и том же контексте, например в массивах, запросах UNION и условных выражениях. Это закрывает задачу #60726. #60727 (Alexey Milovidov).
- Добавлена возможность объявлять Enum в структуре внешних данных для обработки запросов (это временная таблица, создаваемая на лету, которую вы можете предоставить для своего запроса). #57857 (Duc Canh Le).
- При выборе частей для слияния учитывать строки легковесного удаления, чтобы точнее оценивать размер результирующей части на диске. #58223 (Zhuo Qiu).
- Добавлены комментарии к столбцам в дополнительных системных таблицах. Продолжение https://github.com/ClickHouse/ClickHouse/pull/58356. #59016 (Nikita Mikhaylov).
- Теперь можно использовать виртуальные столбцы в PREWHERE. Это особенно полезно для неконстантных виртуальных столбцов, таких как
_part_offset. #59033 (Amos Bird). Улучшено общее удобство использования виртуальных столбцов. Теперь разрешено использовать виртуальные столбцы вPREWHERE(это особенно полезно для неконстантных виртуальных столбцов, таких как_part_offset). Теперь для виртуальных столбцов доступна встроенная документация в виде комментария к столбцу в запросеDESCRIBEпри включённой настройкеdescribe_include_virtual_columns. #60205 (Anton Popov). - Вместо использования фиксированного ключа теперь объектное хранилище генерирует ключ для определения возможности удаления объектов. #59495 (Sema Checherinda).
- Добавлена возможность использовать "local" в качестве типа объектного хранилища вместо "local_blob_storage". #60165 (Kseniia Sumarokova).
- Параллельный сброс ожидающих блоков INSERT движка Distributed при
DETACH/остановке сервера иSYSTEM FLUSH DISTRIBUTED(параллелизм будет работать только в том случае, если для таблицы настроена политика хранения с несколькими дисками (как и для всего в движке Distributed сейчас)). #60225 (Azat Khuzhin). - Добавлена настройка, позволяющая принудительно использовать кэш read-through при слияниях. #60308 (Kseniia Sumarokova).
- Улучшение протокола совместимости с MySQL. В задаче #57598 описано отличающееся поведение при обработке транзакций: выполнение команды COMMIT/ROLLBACK при отсутствии активной транзакции приводит к сообщению об ошибке, в отличие от поведения MySQL. #60338 (PapaToemmsn).
- Функция
substringтеперь имеет новый псевдонимbyteSlice. #60494 (Robert Schulze). - Переименован параметр сервера
dns_cache_max_sizeвdns_cache_max_entries, чтобы снизить неоднозначность. #60500 (Kirill Nikiforov). SHOW INDEX | INDEXES | INDICES | KEYSбольше не сортирует по столбцам первичного ключа (что было неочевидным). #60514 (Robert Schulze).- Улучшение в Keeper: прерывать запуск при обнаружении недопустимого снапшота, чтобы избежать потери данных. #60537 (Antonio Andelic).
- Обновить tzdata до версии 2024a. #60768 (Raúl Marín).
- Улучшение Keeper: добавлена поддержка параметра
leadership_expiry_msв настройках Keeper. #60806 (Brokenice0415). - Числа в экспоненциальной форме в форматах JSON теперь всегда интерпретируются независимо от значения настройки
input_format_try_infer_exponent_floats. Добавлена настройкаinput_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects, которая позволяет использовать тип String для неоднозначных путей вместо генерации исключения при выводе именованных Tuple из JSON-объектов. #60808 (Kruglov Pavel). - Добавлена поддержка синтаксиса
START TRANSACTION, обычно используемого в MySQL, что закрывает обсуждение https://github.com/ClickHouse/ClickHouse/discussions/60865. #60886 (Zach Naimon). - Добавлен флаг для алгоритма full-sorting merge join, позволяющий трактовать значения NULL как наибольшее или наименьшее. Это позволяет сделать поведение совместимым с другими SQL‑системами, такими как Apache Spark. #60896 (loudongfeng).
- Добавлена поддержка определения формата вывода по расширению файла в
clickhouse-clientиclickhouse-local. #61036 (豪肥肥). - Обновлять лимит памяти во время работы при изменении значения cgroups в Linux. #61049 (Han Fei).
- Добавлена функция
toUInt128OrZero, которая ранее была пропущена по ошибке (ошибка связана с https://github.com/ClickHouse/ClickHouse/pull/945). Псевдонимы совместимостиFROM_UNIXTIMEиDATE_FORMAT(они не являются встроенными в ClickHouse и существуют только для совместимости с MySQL) сделаны регистронезависимыми, как и положено SQL-псевдонимам совместимости. #61114 (Alexey Milovidov). - Улучшены проверки доступа, теперь можно отзывать права, которыми пользователь не обладает, даже если у целевого пользователя также нет соответствующих прав с правом передачи. Пример:
GRANT SELECT ON *.* TO user1; REVOKE SELECT ON system.* FROM user1;. #61115 (pufit). - Исправлена функция
has()при работе со столбцомNullable(устраняет #60214). #61249 (Mikhail Koviazin). - Теперь можно указывать атрибут
merge="true"в подстановках конфигурации для поддеревьев<include from_zk="/path" merge="true">. Если этот атрибут указан, ClickHouse будет объединять поддерево с существующей конфигурацией, в противном случае используется поведение по умолчанию — к конфигурации добавляется новое содержимое. #61299 (alesapin). - Добавлены асинхронные метрики для отображений виртуальной памяти:
VMMaxMapCountиVMNumMaps. Закрывает #60662. #61354 (Tuan Pham Anh). - Используйте настройку
temporary_files_codecво всех местах, где создаются временные данные, например при сортировке с использованием внешней памяти и выполнении GROUP BY с использованием внешней памяти. Ранее она применялась только в алгоритме JOINpartial_merge. #61456 (Maksim Kita). - Добавлена новая настройка
max_parser_backtracks, которая позволяет ограничить сложность парсинга запросов. #61502 (Alexey Milovidov). - Меньше конфликтов при динамическом изменении размера кэша файловой системы. #61524 (Kseniia Sumarokova).
- Отключён шардированный режим очереди StorageS3, так как он будет переписан. #61537 (Kseniia Sumarokova).
- Исправлена опечатка: с
use_leagcy_max_levelнаuse_legacy_max_level. #61545 (William Schoeffel). - Удалены несколько дублирующихся записей в
system.blob_storage_log. #61622 (YenchangChan). - Добавлена функция
current_userв качестве псевдонима для совместимости с MySQL. #61770 (Yarik Briukhovetskyi). - Исправлены несогласованные состояния агрегатных функций с плавающей запятой в смешанных кластерах x86-64 / ARM #60610 (Harry Lee).
Улучшения сборки/тестирования/упаковки
- Профилировщик запросов в реальном времени теперь работает на AArch64. В предыдущих версиях он работал только если программа не находилась внутри системного вызова. #60807 (Alexey Milovidov).
- Версия ClickHouse добавлена в метки Docker. Закрывает #54224. #60949 (Nikolay Monkov).
- Компонент
prqlcобновлён до версии 0.11.3. #60616 (Maximilian Roos). - Добавлен универсальный фаззер текста запросов в
clickhouse-local. #61508 (Alexey Milovidov).
Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе)
- Исправлена настройка finished_mutations_to_keep=0 для MergeTree (в документации указано, что 0 означает «сохранять всё») #60031 (Azat Khuzhin).
- Что-то было не так с оптимизацией FINAL; автор описывает это так: "PartsSplitter invalid ranges for the same part". #60041 (Maksim Kita).
- Была проблема с Apache Hive, который является экспериментальной и не поддерживаемой функциональностью. #60262 (shanfengp).
- Улучшение для экспериментальных параллельных реплик: принудительный повторный анализ при изменении набора параллельных реплик #60362 (Raúl Marín).
- Исправлено использование простого типа метаданных с новым параметром конфигурации дисков #60396 (Kseniia Sumarokova).
- Попытка исправить логическую ошибку 'Cannot capture column because it has incompatible type' в функции mapContainsKeyLike #60451 (Kruglov Pavel).
- Исключено вычисление скалярных подзапросов при CREATE TABLE. #60464 (Nikolai Kochetov).
- Исправлена взаимоблокировка при параллельном парсинге, возникающая, когда из‑за ошибок пропускается большое число строк #60516 (Kruglov Pavel).
- Исправлена ошибка в экспериментальной поддержке KQL (Kusto): скорректирован параметр
max_query_size_for_kql_compound_operator: #60534 (Yong Wang). - Исправление в Keeper: добавлены тайм-ауты при ожидании журналов фиксации #60544 (Antonio Andelic).
- Не показывать числовые подсказки для датовых типов #60577 (Raúl Marín).
- Исправлено чтение из MergeTree с недетерминированными функциями в фильтре #60586 (Kruglov Pavel).
- Исправлена логическая ошибка при неподходящем типе значения настройки совместимости #60596 (Kruglov Pavel).
- fix(prql): Более надежный обработчик паники #60615 (Maximilian Roos).
- Исправлена работа функции
intDivдля аргументов типов Decimal и Date #60672 (Yarik Briukhovetskyi). - Исправление: разворачивать CTE в запросах ALTER MODIFY #60682 (Yakov Olkhovskiy).
- Исправлена таблица system.parts для движков баз данных, не являющихся Atomic/Ordinary (например, Memory) #60689 (Azat Khuzhin).
- Исправлена ошибка «Invalid storage definition in metadata file» для параметризованных представлений #60708 (Azat Khuzhin).
- Исправлено переполнение буфера в CompressionCodecMultiple #60731 (Alexey Milovidov).
- Удалить некорректные данные из SQL/JSON #60738 (Alexey Milovidov).
- Удалена некорректная проверка (assert) в агрегатной функции quantileGK #60740 (李扬).
- Исправлена ошибка insert-select + insert_deduplication_token путем установки параметра streams в значение 1 #60745 (Jordi Villar).
- Предотвращена установка пользовательских заголовков метаданных при неподдерживаемых операциях многокомпонентной загрузки #60748 (Francisco J. Jurado Moreno).
- Исправлена функция toStartOfInterval #60763 (Andrey Zvonov).
- Исправлено падение в arrayEnumerateRanked #60764 (Raúl Marín).
- Исправлено аварийное завершение при использовании input() в INSERT SELECT JOIN #60765 (Kruglov Pavel).
- Устранена ошибка, из-за которой происходило аварийное завершение работы при отличающемся значении параметра allow_experimental_analyzer в подзапросах #60770 (Dmitry Novik).
- Удалена рекурсия при чтении из S3 #60849 (Antonio Andelic).
- Исправлено возможное зависание при ошибке в HashedDictionaryParallelLoader #60926 (vdimir).
- Исправлена асинхронная операция RESTORE для базы данных Replicated (экспериментальная возможность) #60934 (Antonio Andelic).
- Исправлена взаимоблокировка при асинхронных вставках в таблицы
Logчерез нативный протокол #61055 (Anton Popov). - Исправлено отложенное вычисление аргумента по умолчанию в dictGetOrDefault для RangeHashedDictionary #61196 (Kruglov Pavel).
- Исправлено несколько ошибок в groupArraySorted #61203 (Raúl Marín).
- Исправлена переконфигурация Keeper для автономного бинарника #61233 (Antonio Andelic).
- Исправлено использование параметра session_token в движке S3 #61234 (Kruglov Pavel).
- Исправлена возможная некорректность результата работы агрегатной функции
uniqExact#61257 (Anton Popov). - Исправлены ошибки в команде SHOW DATABASE #61269 (Raúl Marín).
- Исправлена логическая ошибка в хранилище RabbitMQ при использовании колонок MATERIALIZED #61320 (vdimir).
- Исправлена команда CREATE OR REPLACE DICTIONARY #61356 (Vitaly Baranov).
- Исправлен запрос ATTACH с внешним предложением ON CLUSTER #61365 (Nikolay Degterinsky).
- Исправлена оптимизация последовательных ключей для ключей, допускающих NULL #61393 (Anton Popov).
- исправлена ошибка при разбиении DAG действий #61458 (Raúl Marín).
- Исправлена обработка завершения неудавшегося RESTORE #61466 (Vitaly Baranov).
- Исправлено корректное отключение параметра async_insert_use_adaptive_busy_timeout при использовании настроек совместимости #61468 (Raúl Marín).
- Разрешена постановка задач в очередь в пуле восстановления #61475 (Nikita Taranov).
- Исправлена несогласованность при чтении таблицы system.parts с использованием UUID. #61479 (Dan Wu).
- Исправлено ALTER QUERY MODIFY SQL SECURITY #61480 (pufit).
- Исправлен сбой в Window View (экспериментальная функция) #61526 (Alexey Milovidov).
- Исправлена работа функции
repeatс ненативными целыми числами #61527 (Antonio Andelic). - Исправлен аргумент
-sклиента #61530 (Mikhail f. Shiryaev). - Исправлена ошибка, приводившая к аварийному завершению работы arrayPartialReverseSort #61539 (Raúl Marín).
- Исправлен поиск строк с
const position#61547 (Antonio Andelic). - Исправлена ошибка, из-за которой
addDaysвызывала сбой при использовании с типом данныхDateTime64#61561 (Shuai li). - Запрещён тип аргумента LowCardinality для JSONExtract #61617 (Julia Kartseva).
- Исправлен
system.part_logдля асинхронных вставок с дедупликацией #61620 (Antonio Andelic). - Исправлена ошибка, приводившая к исключению
Non-ready setв system.parts. #61666 (Nikolai Kochetov). - Исправлено actual_part_name для REPLACE_RANGE (
Entry actual part isn't empty yet) #61675 (Alexander Tokmakov). - Исправлен отчёт санитайзера в
multiSearchAllPositionsCaseInsensitiveUTF8о некорректных данных UTF-8 #61749 (pufit). - Уточнено, что фрейм RANGE не поддерживается для столбцов типа Nullable. #61766 (YuanLiu).
Релиз ClickHouse 24.2, 2024-02-29
Обратное несовместимое изменение
- Проверка подозрительных/экспериментальных типов во вложенных типах. Ранее мы не проверяли такие типы (за исключением JSON) во вложенных типах, таких как Array/Tuple/Map. #59385 (Kruglov Pavel).
- Добавлена дополнительная проверка корректности (sanity check) для числа потоков и размеров блоков. #60138 (Raúl Marín).
- По умолчанию не выводить типы с плавающей запятой для чисел в экспоненциальной нотации. Добавлена настройка
input_format_try_infer_exponent_floats, которая восстанавливает предыдущее поведение (по умолчанию отключена). Закрывает #59476. #59500 (Kruglov Pavel). - Разрешить заключать операции ALTER в круглые скобки. Вывод скобок может управляться с помощью настройки
format_alter_operations_with_parentheses. По умолчанию в отформатированных запросах скобки выводятся, поскольку мы храним отформатированные операции ALTER в некоторых местах как метаданные (например, для мутаций). Новый синтаксис проясняет некоторые запросы, в которых операции ALTER заканчиваются списком. Например,ALTER TABLE x MODIFY TTL date GROUP BY a, b, DROP COLUMN cне может быть корректно разобран со старым синтаксисом. В новом синтаксисе запросALTER TABLE x (MODIFY TTL date GROUP BY a, b), (DROP COLUMN c)очевиден. Старые версии не могут прочитать новый синтаксис, поэтому использование нового синтаксиса может вызвать проблемы, если новые и старые версии ClickHouse используются в одном кластере. #59532 (János Benjamin Antal). - Исправление уязвимости безопасности в материализованном представлении, которая позволяла пользователю выполнять вставку в таблицу без необходимых привилегий. Исправление проверяет, что у пользователя есть права на вставку не только в материализованное представление, но и во все лежащие в его основе таблицы. Это означает, что некоторые запросы, которые работали раньше, теперь могут завершаться ошибкой
Not enough privileges. Для решения этой проблемы релиз вводит новый механизм SQL security для представлений https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security. #54901 #60439 (pufit).
Новая возможность
- Добавлен новый синтаксис, который позволяет указывать пользователя-определителя (definer) в представлении/материализованном представлении. Это позволяет выполнять операции SELECT/INSERT из представлений без явных привилегий на базовые таблицы. Таким образом, представление будет инкапсулировать права доступа. #54901 #60439 (pufit).
- Пытаться автоматически определять формат файла при выводе схемы, если он неизвестен, в движках
file/s3/hdfs/url/azureBlobStorage. Закрывает #50576. #59092 (Kruglov Pavel). - Реализована автоматическая настройка таймаутов асинхронных вставок. Добавлены следующие параметры: async_insert_poll_timeout_ms, async_insert_use_adaptive_busy_timeout, async_insert_busy_timeout_min_ms, async_insert_busy_timeout_max_ms, async_insert_busy_timeout_increase_rate, async_insert_busy_timeout_decrease_rate. #58486 (Julia Kartseva).
- Позволяет настроить ограничение на максимальное число последовательных неудачных попыток входа. #54737 (Alexey Gerasimchuck).
- Новая агрегатная функция
groupArrayIntersect. Продолжение для: #49862. #59598 (Yarik Briukhovetskyi). - Реализована поддержка резервного копирования и восстановления для
AzureBlobStorage. Решает #50747. #56988 (SmitaRKulkarni). - Теперь пользователь может указывать шаблонную строку непосредственно в запросе с помощью
format_schema_rows_templateкак альтернативыformat_template_row. Закрывает #31363. #59088 (Shaun Struwig). - Реализовано автоматическое преобразование таблиц семейства MergeTree различных типов в реплицированный движок. Создайте пустой файл
convert_to_replicatedв каталоге данных таблицы (/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/), и эта таблица будет автоматически преобразована при следующем запуске сервера. #57798 (Kirill). - Добавлен запрос
ALTER TABLE table FORGET PARTITION partition, который удаляет узлы ZooKeeper, связанные с пустым разделом. #59507 (Sergei Trifonov). Это функция экспертного уровня. - Поддержка файла учетных данных JWT для движка таблицы NATS. #59543 (Nickolaj Jepsen).
- Реализована таблица
system.dns_cache, которая может быть полезна для диагностики проблем с DNS. #59856 (Kirill Nikiforov). - Кодек
LZ4HCтеперь поддерживает новый уровень 2, который быстрее, чем предыдущий минимальный уровень 3, за счёт меньшей степени сжатия. В предыдущих версиях значенияLZ4HC(2)и ниже были эквивалентныLZ4HC(3). Автор: Cyan4973. #60090 (Alexey Milovidov). - Добавлена таблица
system.dns_cache, полезная для отладки проблем с DNS. Новая настройка сервера dns_cache_max_size. #60257 (Kirill Nikiforov). - Добавлена поддержка одноаргументного варианта табличной функции
merge:merge(['db_name', ] 'tables_regexp'). #60372 (豪肥肥). - Добавлена поддержка отрицательных позиционных аргументов. Закрывает #57736. #58292 (flynn).
- Добавлена поддержка указания набора разрешённых пользователей для отдельных настроек S3 в конфигурации с помощью ключа
user. #60144 (Antonio Andelic). - Добавлена табличная функция
mergeTreeIndex. Она представляет содержимое файлов индекса и меток таблицMergeTree. Её можно использовать для интроспекции. Синтаксис:mergeTreeIndex(database, table, [with_marks = true]), гдеdatabase.table— это существующая таблица с движкомMergeTree. #58140 (Anton Popov).
Экспериментальная функция
- Добавлена функция
seriesOutliersDetectTukeyдля обнаружения выбросов в данных временных рядов с использованием алгоритма ограждений Тьюки (Tukey's fences). #58632 (Bhavna Jindal). Имейте в виду, что поведение будет изменено в следующем патч-релизе. - Добавлена функция
variantType, которая возвращает Enum с именем варианта типа для каждой строки. #59398 (Kruglov Pavel). - Добавлена поддержка
LEFT JOIN,ALL INNER JOINи простых подзапросов для параллельных реплик (только с analyzer). Новый параметр настройкиparallel_replicas_prefer_local_joinвыбирает локальное выполнениеJOIN(по умолчанию) вместоGLOBAL JOIN. Все таблицы должны существовать на каждой реплике изcluster_for_parallel_replicas. Новые настройкиmin_external_table_block_size_rowsиmin_external_table_block_size_bytesиспользуются для укрупнения мелких блоков, которые отправляются для временных таблиц (только с analyzer). #58916 (Nikolai Kochetov). - Разрешено одновременное создание таблиц в базе данных
Replicatedпри добавлении или восстановлении новой реплики. #59277 (Konstantin Bogdanov). - Реализован оператор сравнения для значений
Variantи корректная вставка Field в столбецVariant. По умолчанию запрещено создавать типVariantсо схожими вариантами типов (разрешается при включении настройкиallow_suspicious_variant_types). Закрывает #59996. Закрывает #59850. #60198 (Kruglov Pavel). - Отключено выполнение
JOINс параллельными репликами для CTE (без analyzer'а). #59239 (Raúl Marín).
Повышение производительности
- Первичный ключ будет потреблять меньше памяти. #60049 (Alexey Milovidov).
- Оптимизировано использование памяти для первичного ключа и некоторых других операций. #60050 (Alexey Milovidov).
- Первичные ключи таблиц будут загружаться в память лениво при первом обращении. Это контролируется новой настройкой MergeTree
primary_key_lazy_load, которая включена по умолчанию. Это даёт несколько преимуществ: - первичный ключ не будет загружаться для таблиц, которые не используются; - если недостаточно памяти, исключение будет сгенерировано при первом использовании, а не при запуске сервера. Однако есть и несколько недостатков: - задержка при загрузке первичного ключа проявится при выполнении первого запроса, а не до принятия подключений; теоретически это может привести к проблеме «thundering herd». Это закрывает #11188. #60093 (Alexey Milovidov). - Векторизованные функции расстояния, используемые в векторном поиске. #58866 (Robert Schulze).
- Векторизованная функция
dotProduct, которая полезна для векторного поиска. #60202 (Robert Schulze). - Добавлена поддержка короткого замыкания для функции
dictGetOrDefault. Закрывает #52098. #57767 (jsc0218). - Улучшение Keeper: теперь в памяти кэшируется только ограниченное количество логов, задаваемое параметрами
latest_logs_cache_size_thresholdиcommit_logs_cache_size_threshold. #59460 (Antonio Andelic). - Улучшение Keeper: ещё больше уменьшен размер узла данных. #59592 (Antonio Andelic).
- Продолжена оптимизация промахов предсказания ветвлений функции
if, когда тип результата —Float*/Decimal*/*Int*, как продолжение работы из https://github.com/ClickHouse/ClickHouse/pull/57885. #59148 (李扬). - Оптимизирована функция
ifдля входного типаMap, ускорение — до ~10 раз. #59413 (李扬). - Улучшена производительность типа
Int8за счёт реализации строгого алиасинга (он уже реализован дляUInt8и всех остальных целочисленных типов). #59485 (Raúl Marín). - Оптимизировать производительность условных операций sum/avg для типов bigint и BigDecimal за счёт уменьшения количества промахов предсказателя ветвлений. #59504 (李扬).
- Повышена производительность запросов SELECT при активных мутациях. #59531 (Azat Khuzhin).
- Оптимизирована функция
isNotNullс использованием AVX2. #59621 (李扬). - Улучшена производительность ASOF JOIN для отсортированных или почти отсортированных данных. #59731 (Maksim Kita).
- Предыдущее значение по умолчанию, равное 1 МБ для
async_insert_max_data_size, оказалось слишком маленьким. Новым значением будет 10 МиБ. #59536 (Nikita Mikhaylov). - Использовать несколько потоков при чтении метаданных таблиц из резервной копии во время выполнения команды RESTORE. #60040 (Vitaly Baranov).
- Теперь, если в
StorageBufferбольше одного шарда (num_layers> 1), фоновый сброс будет выполняться параллельно для всех шардов в нескольких потоках. #60111 (alesapin).
Улучшение
- Когда формат вывода —
Pretty, и блок состоит из одного числового значения, которое превышает один миллион, читабельное число будет выведено в правой части таблицы. #60379 (rogeryk). - Добавлены настройки
split_parts_ranges_into_intersecting_and_non_intersecting_finalиsplit_intersecting_parts_ranges_into_layers_final. Эти настройки нужны для отключения оптимизаций для запросов сFINALи предназначены только для отладки. #59705 (Maksim Kita). На самом деле не только для этого — они также могут снизить потребление памяти за счёт снижения производительности. - Переименована настройка
extract_kvp_max_pairs_per_rowвextract_key_value_pairs_max_pairs_per_row. Проблема (неоправданное сокращение в имени настройки) появилась в https://github.com/ClickHouse/ClickHouse/pull/43606. Исправлена документация этой настройки. #59683 (Alexey Milovidov). #59960 (jsc0218). - Выполнение
ALTER COLUMN MATERIALIZEдля столбца с выражениемDEFAULTилиMATERIALIZEDтеперь точно соответствует их семантике. #58023 (Duc Canh Le). - Включена логика экспоненциального backoff при ошибках во время мутаций. Это снизит загрузку CPU, потребление памяти и размер файлов журналов. #58036 (MikhailBurdukov).
- Улучшен подсчёт события профилирования
InitialQuery. #58195 (Unalian). - Добавлена возможность указывать
volume_priorityвstorage_configuration. #58533 (Andrey Zvonov). - Добавлена поддержка типа данных
Date32в кодекеT64. #58738 (Hongbin Ma). - Добавлена поддержка завершающих запятых в типах с несколькими элементами. #59119 (Aleksandr Musorin).
- Параметры табличного движка Distributed теперь можно задавать в конфигурационном файле сервера (аналогично настройкам MergeTree), например:
<distributed> <flush_on_detach>false</flush_on_detach> </distributed>. #59291 (Azat Khuzhin). - Повторять операции чтения при разрывах соединения и истечении срока действия сессий при обращении к
system.zookeeper. Это полезно при чтении большого числа строк из таблицыsystem.zookeeper, особенно в условиях искусственно вызванных разрывов соединения. #59388 (Alexander Gololobov). - Не интерпретировать числа с ведущими нулями как числа в восьмеричной системе счисления при
input_format_values_interpret_expressions=0. #59403 (Joanna Hulboj). - При запуске и при каждом изменении конфигурационных файлов ClickHouse обновляет жёсткие ограничения памяти своего общего трекера памяти. Эти ограничения вычисляются на основе различных настроек сервера и лимитов cgroups (в Linux). Ранее путь
/sys/fs/cgroup/memory.max(для cgroups v2) был жёстко прописан. В результате лимиты памяти cgroup v2, настроенные для вложенных групп (иерархий), например/sys/fs/cgroup/my/nested/group/memory.max, игнорировались. Теперь это исправлено. Поведение лимитов памяти v1 осталось без изменений. #59435 (Robert Schulze). - Добавлены новые события профилирования для анализа времени, затраченного на вычисление PK/проекций/вторичных индексов при выполнении операций
INSERT. #59436 (Nikita Taranov). - Добавлена возможность задать начальную точку для S3Queue в режиме Ordered при создании с помощью настройки
s3queue_last_processed_path. #59446 (Kseniia Sumarokova). - Комментарии для системных таблиц теперь также доступны в
system.tablesвclickhouse-local. #59493 (Nikita Mikhaylov). - Таблица
system.zookeeper: ранее весь результат накапливался в памяти и возвращался одним большим блоком. Это изменение должно помочь снизить потребление памяти при чтении большого количества строк изsystem.zookeeper, позволит отображать промежуточный прогресс (сколько строк было прочитано на данный момент) и избежать тайм-аута соединения при большом объёме результирующего набора. #59545 (Alexander Gololobov). - Теперь дашборд поддерживает как сжатое, так и несжатое состояние #hash в URL (обратная совместимость). Продолжение #59124. #59548 (Amos Bird).
- Обновлена версия Intel QPL (используется кодеком
DEFLATE_QPL) с v1.3.1 до v1.4.0. Также исправлена ошибка в механизме опроса с тайм‑аутом: в некоторых случаях тайм‑аут мог работать некорректно, и при его срабатывании IAA и CPU могли обрабатывать буфер одновременно. На данный момент лучше дополнительно проверять, что состояние кодека IAA не равно QPL_STS_BEING_PROCESSED, а затем переходить на программный (SW) кодек. #59551 (jasperzhu). - Не показывать предупреждение о версии сервера в ClickHouse Cloud, поскольку ClickHouse Cloud автоматически выполняет прозрачные обновления. #59657 (Alexey Milovidov).
- После самоизвлечения временный бинарный файл перемещается, а не копируется. #59661 (Yakov Olkhovskiy).
- Исправлена раскрутка стека вызовов на Apple macOS. Это закрывает #53653. #59690 (Nikita Mikhaylov).
- Добавлена проверка на переполнение стека в парсерах даже в том случае, если пользователь настроил параметр
max_parser_depthна чрезмерно высокое значение. Это исправляет #59622. #59697 (Alexey Milovidov). #60434 - Унифицировано поведение именованных коллекций, создаваемых через XML и SQL, в хранилище Kafka. #59710 (Pervakov Grigorii).
- В случае, когда
merge_max_block_size_bytesдостаточно мал, а таблицы содержат широкие строки (со строками или кортежами), фоновые слияния могли застревать в бесконечном цикле. Это поведение исправлено. Продолжение к https://github.com/ClickHouse/ClickHouse/pull/59340. #59812 (Nikita Mikhaylov). - Разрешить использование uuid в replica_path, если он явно задан в CREATE TABLE. #59908 (Azat Khuzhin).
- Добавлен столбец
metadata_versionдля таблиц ReplicatedMergeTree в системную таблицуsystem.tables. #59942 (Maksim Kita). - Улучшение для Keeper: отправлять в Prometheus только метрики и события, относящиеся к Keeper. #59945 (Antonio Andelic).
- Панель мониторинга будет отображать метрики в разных версиях ClickHouse, даже если структура системных таблиц изменилась после обновления. #59967 (Alexey Milovidov).
- Разрешить загрузку информации о зонах доступности (AZ) из файла. #59976 (Konstantин Bogdanov).
- Улучшение в Keeper: добавлены повторные попытки при сбоях операций, связанных с Disk. #59980 (Antonio Andelic).
- Добавлен новый параметр конфигурации
backups.remove_backup_files_after_failure:<clickhouse> <backups> <remove_backup_files_after_failure>true</remove_backup_files_after_failure> </backups> </clickhouse>. #60002 (Vitaly Baranov). - Резервный сценарий при копировании файла S3 через GCP — копирование в буфер на случай, если GCP вернул
Internal Errorс HTTP‑кодомGATEWAY_TIMEOUT. #60164 (Maksim Kita). - Укороченное вычисление для
ULIDStringToDateTime. #60211 (Juan Madurga). - Для таблиц
system.backupsиsystem.backup_logдобавлен столбецquery_id. В столбецerrorдобавлен стек-трейс ошибки. #60220 (Maksim Kita). - Подключения через MySQL-порт теперь автоматически выполняются с настройкой
prefer_column_name_to_alias = 1, что позволяет поддерживать QuickSight «из коробки». Также настройкиmysql_map_string_to_text_in_show_columnsиmysql_map_fixed_string_to_text_in_show_columnsтеперь включены по умолчанию и, как и предыдущая, применяются только к подключениям по MySQL. Это повышает совместимость с большим числом BI-инструментов. #60365 (Robert Schulze). - Исправлено состояние гонки в коде JavaScript, из-за которого графики дублировались и накладывались друг на друга. #60392 (Alexey Milovidov).
Улучшения сборки/тестирования/упаковки
- Добавлены сборки и тесты с интроспективным сбором покрытия. Продолжение #56102. #58792 (Alexey Milovidov).
- Обновлён инструментарий Rust в
corrosion-cmake, когда задана переменная CMake для кросс-компиляции toolchain. #59309 (Aris Tritas). - Добавлен фаззинг для ASTLiterals. #59383 (Raúl Marín).
- Если вы хотите запускать initdb-скрипты каждый раз при старте контейнера ClickHouse, необходимо установить переменную окружения CLICKHOUSE_ALWAYS_RUN_INITDB_SCRIPTS. #59808 (Alexander Nikolaev).
- Удалена возможность отключать базовые компоненты ClickHouse (такие как server/client/...), но сохранены некоторые, которые требуют дополнительных библиотек (такие как ODBC или Keeper). #59857 (Azat Khuzhin).
- Query fuzzer теперь фаззит SETTINGS внутри запросов. #60087 (Alexey Milovidov).
- Добавлена поддержка сборки ClickHouse с clang-19 (master). #60448 (Alexey Milovidov).
Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе)
- Исправлена ошибка «Non-ready set» в TTL WHERE. #57430 (Nikolai Kochetov).
- Исправлена ошибка в функции
quantilesGK#58216 (李扬). - Исправлено некорректное поведение
intDivдля аргументов типа Decimal #59243 (Yarik Briukhovetskyi). - Исправлена работа функции
translateс аргументом типа FixedString #59356 (Raúl Marín). - Исправлен расчёт дайджеста в Keeper #59439 (Antonio Andelic).
- Исправлены трассировки стека для исполняемых файлов без отладочных символов #59444 (Azat Khuzhin).
- Исправлен
ASTAlterCommand::formatImplдля настроек, задаваемых для отдельных столбцов... #59445 (János Benjamin Antal). - Исправлена обработка запросов вида
SELECT * FROM [...] ORDER BY ALLанализатором (Analyzer) #59462 (zhongyuankai). - Исправлено возможное необработанное исключение при отмене распределённого запроса #59487 (Azat Khuzhin).
- Сделать так, чтобы функция MAX использовала те же правила, что и permutation, для работы со сложными типами данных #59498 (Raúl Marín).
- Исправлен граничный случай при передаче
update_insert_deduplication_token_in_dependent_materialized_views#59544 (Jordi Villar). - Исправлен некорректный результат функций arrayElement / map при пустом значении #59594 (Raúl Marín).
- Исправлено падение topK при слиянии пустых состояний #59603 (Raúl Marín).
- Исправлена работа распределённой таблицы с фиксированным ключом шардинга #59606 (Vitaly Baranov).
- Исправлена проблема в KQL, обнаруженная WingFuzz #59626 (Yong Wang).
- Исправлена ошибка "Read beyond last offset" для AsynchronousBoundedReadBuffer #59630 (Vitaly Baranov).
- Сохранить псевдоним функции в RewriteSumFunctionWithSumAndCountVisitor #59658 (Raúl Marín).
- Исправлено время начала для неинициирующих запросов #59662 (Raúl Marín).
- Добавлена проверка типов аргументов для индекса пропуска
minmax#59733 (Anton Popov). - Исправлена работа функций leftPad и rightPad с входными данными типа FixedString #59739 (Raúl Marín).
- Исправлена ошибка AST fuzzer'а в функции
countMatches#59752 (Robert Schulze). - RabbitMQ: исправлена ситуация, когда сообщения не подтверждались (ack) и не отклонялись (nack) #59775 (Kseniia Sumarokova).
- Исправлена проблема, из-за которой StorageURL выполнял часть обработки запроса в одном потоке #59833 (Michael Kolupaev).
- S3Queue: исправлена проблема с неинициализированным значением #59897 (Kseniia Sumarokova).
- Исправлен разбор выражений партиционирования, заключённых в скобки #59901 (János Benjamin Antal).
- Исправлена ошибка, вызывавшая сбой в формате JSONColumnsWithMetadata при работе по HTTP #59925 (Kruglov Pavel).
- Не переписывать sum на count в Analyzer, если возвращаемое значение отличается #59926 (Azat Khuzhin).
- Исправлен сбой при чтении UniqExactSet #59928 (Maksim Kita).
- Исправление некорректного значения metadata_version в ReplicatedMergeTree #59946 (Maksim Kita).
- Исправлена гонка данных в
StorageDistributed#59987 (Nikita Taranov). - Docker: запускать init-скрипты, когда опция включена, а не выключена #59991 (jktng).
- Исправлена операция INSERT в
SQLiteпри использовании одинарных кавычек (теперь одинарные кавычки экранируются самой кавычкой, а не обратной косой чертой) #60015 (Azat Khuzhin). - Исправлены несколько логических ошибок в
arrayFold#60022 (Raúl Marín). - Исправлено поведение optimize_uniq_to_count, при котором удалялся псевдоним столбца #60026 (Raúl Marín).
- Исправлено возможное исключение, которое могло возникнуть в таблице S3Queue при её удалении #60036 (Kseniia Sumarokova).
- Исправлено форматирование
NOTс отдельными литералами #60042 (Raúl Marín). - Использовать max_query_size из контекста в DDLLogEntry вместо жёстко заданного значения 4096 #60083 (Kruglov Pavel).
- Исправлено непоследовательное форматирование запросов, содержащих таблицы с именем
table. Исправлено неверное форматирование запросов сUNION ALL,INTERSECTиEXCEPT, когда их структура была нелинейной. Это закрывает #52349. Исправлено неверное форматирование запросовSYSTEM, включаяSYSTEM ... DROP FILESYSTEM CACHE,SYSTEM ... REFRESH/START/STOP/CANCEL/TEST VIEW,SYSTEM ENABLE/DISABLE FAILPOINT. Исправлено форматирование параметризованных DDL‑запросов. Исправлено форматирование запросаDESCRIBE FILESYSTEM CACHE. Исправлено некорректное форматированиеSET param_...(запроса, устанавливающего параметр). Исправлено некорректное форматирование запросовCREATE INDEX. Исправлено непоследовательное форматирование запросовCREATE USERи аналогичных. Исправлено непоследовательное форматированиеCREATE SETTINGS PROFILE. Исправлено некорректное форматированиеALTER ... MODIFY REFRESH. Исправлено непоследовательное форматирование оконных функций, если смещения фрейма были выражениями. Исправлено непоследовательное форматированиеRESPECT NULLSиIGNORE NULLS, если они использовались после функции, реализующей оператор (например,plus). Исправлено идиотское форматированиеSYSTEM SYNC REPLICA ... LIGHTWEIGHT FROM .... Исправлено непоследовательное форматирование некорректных запросов сGROUP BY GROUPING SETS ... WITH ROLLUP/CUBE/TOTALS. Исправлено непоследовательное форматированиеGRANT CURRENT GRANTS. Исправлено непоследовательное форматированиеCREATE TABLE (... COLLATE). Дополнительно исправлено некорректное форматированиеEXPLAINво вложенных запросах (#60102). Исправлено некорректное форматирование лямбда‑функций (#60012). Добавлена проверка, чтобы в будущем не было возможности пропустить подобные уродства. #60095 (Alexey Milovidov). - Исправлено несогласованное форматирование
EXPLAINв подзапросах #60102 (Alexey Milovidov). - Исправлен сбой функции cosineDistance при работе с Nullable #60150 (Raúl Marín).
- Разрешено приведение значений типа bool в строковом представлении к значениям типа bool #60160 (Robert Schulze).
- Исправлен
system.s3queue_log#60166 (Kseniia Sumarokova). - Исправлена работа arrayReduce при использовании допускающего NULL имени агрегатной функции #60188 (Raúl Marín).
- Скрытие чувствительной информации для
S3Queue#60233 (Kseniia Sumarokova). - Исправлены коды HTTP-исключений. #60252 (Austin Kothig).
- S3Queue: исправлена ошибка (также исправлен нестабильный тест test_storage_s3_queue/test.py::test_shards_distributed) #60282 (Kseniia Sumarokova).
- Исправлены ошибки использования неинициализированного значения и получения некорректного результата в хеширующих функциях для IPv6 #60359 (Kruglov Pavel).
- Исправлена проблема в
OptimizeDateOrDateTimeConverterWithPreimageVisitorпри работе с аргументамиnull#60453 (Raúl Marín). - Исправлена незначительная ошибка, из-за которой запросы к распределённым таблицам, отправленные клиентами, использующими диалекты KQL или PRQL, не выполнялись на репликах. #59674. #60470 (Alexey Milovidov) #59674 (Austin Kothig).
Релиз ClickHouse 24.1, 2024-01-30
Изменения, нарушающие обратную совместимость
- Настройка
print_pretty_type_namesтеперь включена по умолчанию. Вы можете отключить её, чтобы сохранить прежнее поведение, или выполнитьSET compatibility = '23.12'. #57726 (Alexey Milovidov). - Настройка MergeTree
clean_deleted_rowsобъявлена устаревшей, она больше ни на что не влияет. Ключевое словоCLEANUPдляOPTIMIZEтеперь запрещено по умолчанию (если только не включена настройкаallow_experimental_replacing_merge_with_cleanup). #58316 (Alexander Tokmakov). - Функция
reverseDNSQueryбольше недоступна. Это закрывает задачу #58368. #58369 (Alexey Milovidov). - Включены различные изменения для улучшения контроля доступа в конфигурационном файле. Эти изменения влияют на поведение системы, и вам следует проверить
config.xmlв разделеaccess_control_improvements. Если вы не уверены, сохраните значения в конфигурационном файле такими же, как в предыдущей версии. #58584 (Alexey Milovidov). - Улучшена работа
sumMapFilteredсо значениями NaN. Значения NaN теперь помещаются в конец (вместо случайного порядка) и считаются отличными от любых других значений.-0теперь также считается равным0; так как значения 0 отбрасываются, значения-0также отбрасываются. #58959 (Raúl Marín). - Функция
visibleWidthтеперь будет вести себя в соответствии с документацией. В предыдущих версиях она просто подсчитывала кодовые точки после сериализации строки, как функцияlengthUTF8, но не учитывала символы нулевой ширины и комбинирующие символы, полноширинные символы, табуляции и символы удаления. Теперь поведение изменено соответствующим образом. Если вы хотите сохранить старое поведение, установитеfunction_visible_width_behaviorв значение0или задайтеcompatibilityравным23.12или ниже. #59022 (Alexey Milovidov). - Диалект
Kustoотключён до тех пор, пока не будут исправлены следующие две ошибки: #59037 и #59036. #59305 (Alexey Milovidov). Любая попытка использоватьKustoприведёт к исключению. - Более эффективная реализация модификатора
FINALбольше не гарантирует сохранение порядка даже приmax_threads = 1. Если вы рассчитывали на предыдущее поведение, установитеenable_vertical_finalв значение 0 илиcompatibilityв23.12.
Новая возможность
- Реализован тип данных Variant, представляющий собой объединение других типов данных. Тип
Variant(T1, T2, ..., TN)означает, что каждая строка этого типа содержит значение одного из типовT1,T2, ...,TNлибо ни одного из них (значениеNULL). Тип Variant доступен при включённой настройкеallow_experimental_variant_type. Ссылка: #54864. #58047 (Kruglov Pavel). - Некоторые настройки (в настоящее время
min_compress_block_sizeиmax_compress_block_size) теперь можно задавать на уровне столбца; в этом случае они имеют приоритет над соответствующими настройками на уровне таблицы. Пример:CREATE TABLE tab (col String SETTINGS (min_compress_block_size = 81920, max_compress_block_size = 163840)) ENGINE = MergeTree ORDER BY tuple();. #55201 (Duc Canh Le). - Добавлена агрегатная функция
quantileDD, а также соответствующие функцииquantilesDDиmedianDD. Она основана на DDSketch https://www.vldb.org/pvldb/vol12/p2195-masson.pdf. ### Запись в документации для изменений, заметных пользователям. #56342 (Srikanth Chekuri). - Позволяет настроить любое объектное хранилище с любым типом метаданных. #58357 (Kseniia Sumarokova).
- Добавлены режимы
null_status_on_timeout_only_activeиthrow_only_activeдляdistributed_ddl_output_mode, позволяющие не дожидаться неактивных реплик. #58350 (Alexander Tokmakov). - Добавлена функция
arrayShingles, которая вычисляет подмассивы, например:arrayShingles([1, 2, 3, 4, 5], 3)возвращает[[1,2,3],[2,3,4],[3,4,5]]. #58396 (Zheng Miao). - Добавлены функции
punycodeEncode,punycodeDecode,idnaEncodeиidnaDecode, которые полезны для преобразования интернационализированных доменных имён (IDN) в ASCII-представление в соответствии со стандартом IDNA. #58454 (Robert Schulze). - Добавлены функции вычисления схожести строк
dramerauLevenshteinDistance,jaroSimilarityиjaroWinklerSimilarity. #58531 (Robert Schulze). - Добавлены два параметра настройки:
output_format_compression_levelдля изменения уровня сжатия вывода иoutput_format_compression_zstd_window_logдля явного задания размера окна сжатия и включения режима long-range для сжатия zstd, если в качестве метода сжатия вывода используетсяzstd. Применяется дляINTO OUTFILEи при записи в табличные функцииfile,url,hdfs,s3иazureBlobStorage. #58539 (Duc Canh Le). - Автоматически отключать управляющие последовательности ANSI в форматах Pretty, если вывод идет не в терминал. Добавлен новый режим
autoдля настройкиoutput_format_pretty_color. #58614 (Shaun Struwig). - Добавлена функция
sqidDecode, которая декодирует Sqids. #58544 (Robert Schulze). - Во входных форматах JSON теперь можно считывать значения типа Bool как строковый тип String. Это реализовано настройкой
input_format_json_read_bools_as_strings, которая включена по умолчанию. #58561 (Kruglov Pavel). - Добавлена функция
seriesDecomposeSTL, которая разлагает временной ряд на сезонную, трендовую и остаточную компоненты. #57078 (Bhavna Jindal). - Добавлен MySQL Binlog Client для MaterializedMySQL: одно подключение к binlog’у сразу для многих баз данных. #57323 (Val Doroshchuk).
- Технология Intel QuickAssist (QAT) обеспечивает аппаратно ускоренное сжатие и криптографические операции. В ClickHouse появился новый кодек сжатия
ZSTD_QAT, который использует QAT для сжатия с помощью zstd. Кодек использует QATlib от Intel и QAT ZSTD Plugin от Intel. В данный момент только сжатие может быть аппаратно ускорено (при невозможности инициализации QAT задействуется программная реализация), декомпрессия всегда выполняется программно. #57509 (jasperzhu). - Реализован новый способ формирования ключей объектного хранилища для дисков S3. Теперь формат можно задать в терминах синтаксиса регулярных выражений
re2с помощью опцииkey_templateв описании диска. #57663 (Sema Checherinda). - Таблица system.dropped_tables_parts содержит парты таблиц из system.dropped_tables (удалённые, но ещё не очищенные таблицы). #58038 (Yakov Olkhovskiy).
- Добавлена настройка
max_materialized_views_size_for_tableдля ограничения количества материализованных представлений, привязанных к таблице. #58068 (zhongyuankai). - Улучшения
clickhouse-format: поддержка запросов INSERT сVALUES; поддержка комментариев (используйте--commentsдля их вывода); поддержка опции--max_line_lengthдля форматирования только длинных запросов в несколько строк. #58246 (vdimir). - В
clickhouse-localподключаются все системные таблицы, включаяsystem.parts. Это закрывает #58312. #58359 (Alexey Milovidov). - Поддержка типов данных
Enumв функцииtransform. Это закрывает #58241. #58360 (Alexey Milovidov). - Добавлена таблица
system.database_engines. #58390 (Bharat Nallan). Добавлена возможность независимой регистрации движков баз данных в кодовой базе. #58365 (Bharat Nallan). Добавлена возможность независимой регистрации интерпретаторов. #58443 (Bharat Nallan). - Добавлен модификатор
FROM <Replicas>для запросаSYSTEM SYNC REPLICA LIGHTWEIGHT. МодификаторFROMгарантирует, что ожидание выборок и удаления диапазонов происходит только для указанных исходных реплик, а также для любых реплик, отсутствующих в ZooKeeper или с пустым полем source_replica. #58393 (Jayme Bird). - Добавлена настройка
update_insert_deduplication_token_in_dependent_materialized_views. Эта настройка позволяет при вставке в зависимые материализованные представления обновлять токен дедупликации вставок на основе идентификатора таблицы. Закрывает #59165. #59238 (Maksim Kita). - Добавлен оператор
SYSTEM RELOAD ASYNCHRONOUS METRICS, который обновляет асинхронные метрики. Прежде всего полезен для тестирования и разработки. #53710 (Robert Schulze).
Повышение производительности
- Координационный механизм для параллельных реплик переработан для улучшения параллелизма и локальности кэша. Он был протестирован и показал линейную масштабируемость на сотнях реплик. Также добавлена поддержка чтения в заданном порядке. #57968 (Nikita Taranov).
- Заменить буферизацию исходящих HTTP-запросов на встроенные буферы ClickHouse. Добавить метрики объёма переданных байт для интерфейсов. #56064 (Yakov Olkhovskiy).
- Большие агрегатные состояния функции
uniqExactбудут параллельно объединяться в распределённых запросах. #59009 (Nikita Taranov). - Снижено потребление памяти после чтения из таблиц
MergeTree. #59290 (Anton Popov). - Снижено потребление памяти при вертикальных слияниях. #59340 (Anton Popov).
- Для большего числа сценариев предотвращено чрезмерное потребление памяти при запуске Keeper. #58455 (Antonio Andelic).
- Оптимизация Keeper: снижено потребление памяти при хранении узлов. #59002 (Antonio Andelic).
- Окончательная реализация, более эффективная с точки зрения кэша. Замечание об изменении поведения: ранее запросы с модификатором
FINAL, выполняемые в одном потоке (например,max_threads = 1), выдавали отсортированный результат без явно указанного предложенияORDER BY. При включённой настройкеenable_vertical_final = true(а по умолчанию она включена) это больше не гарантируется. #54366 (Duc Canh Le). - Исключено дополнительное копирование в
ReadBufferFromIStream, который используется, например, при чтении из S3. #56961 (Nikita Taranov). - Оптимизирована функция работы с элементами массива, когда входными данными являются Array(Map)/Array(Array(Num))/Array(Array(String))/Array(BigInt)/Array(Decimal). Предыдущая реализация выполняла больше выделений памяти, чем было необходимо. Оптимизация даёт ускорение до ~6 раз, особенно когда тип входных данных — Array(Map). #56403 (李扬).
- Однократное чтение столбца при чтении нескольких его подстолбцов в компактных частях. #57631 (Kruglov Pavel).
- Переписать AST функции
sum(column + constant). Это доступно в виде этапа оптимизации в Analyzer #57853 (Jiebin Sun). - Выполнение функции
matchтеперь использует пропускающие индексыngrambf_v1иtokenbf_v1. #57882 (凌涛). - Теперь при вычислении функции
matchиспользуются инвертированные индексы. #58284 (凌涛). FINALв MergeTree не сравнивает строки из одной и той же части, не относящейся к уровню L0. #58142 (Duc Canh Le).- Ускорены вызовы функции iota (заполнение массива последовательными числами). #58271 (Raúl Marín).
- Ускорена работа функций MIN/MAX для нечисловых типов. #58334 (Raúl Marín).
- Оптимизирована комбинация фильтров (как в многошаговом PREWHERE) с использованием интринсиков BMI2/SSE #58800 (Zhiguo Zhou).
- В
clickhouse-localиспользуется на один поток меньше. #58968 (Alexey Milovidov). - Улучшена производительность функции
multiIfдля типов Nullable. #57745 (KevinyhZou). - Добавлена команда
SYSTEM JEMALLOC PURGEдля очистки неиспользуемых страниц jemalloc, а такжеSYSTEM JEMALLOC [ ENABLE | DISABLE | FLUSH ] PROFILEдля управления профилем jemalloc при включённом профилировщике. Добавлена команда 4LW в Keeper, связанная с jemalloc:jmstдля дампа статистики jemalloc,jmfp,jmep,jmdpдля управления профилем jemalloc при включённом профилировщике. #58665 (Antonio Andelic). - Снижено потребление памяти при создании резервных копий в S3. #58962 (Vitaly Baranov).
Улучшение
- Добавлены комментарии (краткие описания) ко всем столбцам системных таблиц. На это есть несколько причин: - Мы очень активно используем системные таблицы, и иногда разработчику бывает очень сложно понять назначение и смысл конкретного столбца. - Мы часто меняем системные таблицы (добавляем новые или модифицируем существующие), и документация по ним постоянно устаревает. Например, посмотрите на страницу документации для
system.parts. В ней отсутствует множество столбцов. - В перспективе мы хотим генерировать документацию напрямую из ClickHouse. #58356 (Nikita Mikhaylov). - Разрешены запросы без указания алиасов для подзапросов в
PASTE JOIN. #58654 (Yarik Briukhovetskyi). - Включена интеграция с
MySQL/MariaDBна macOS. Это закрывает #21191. #46316 (Alexey Milovidov) (Robert Schulze). - По умолчанию параметр
max_rows_in_set_to_optimize_joinтеперь отключён. #56396 (vdimir). - Добавлен параметр конфигурации
<host_name>, который позволяет избежать необходимости разрешать имена хостов в запросах ON CLUSTER DDL и в реплицируемых движках баз данных. Это уменьшает вероятность зависания очереди в случае изменения определения кластера. Закрывает #57573. #57603 (Nikolay Degterinsky). - Увеличьте
load_metadata_threadsдо 16 для кэша файловой системы. Это ускорит запуск сервера. #57732 (Alexey Milovidov). - Добавлена возможность ограничивать скорость слияний и мутаций (
max_mutations_bandwidth_for_server/max_merges_bandwidth_for_server). #57877 (Azat Khuzhin). - Недокументированный ранее столбец логического типа
is_hot_reloadableв системной таблицеsystem.server_settingsзаменён на столбец типа Enum8changeable_without_restartс возможными значениямиNo,Yes,IncreaseOnlyиDecreaseOnly. Столбец также задокументирован. #58029 (skyoct). - В механизме обнаружения кластера добавлена поддержка указания имени пользователя и пароля, закрыта задача #58063. #58123 (vdimir).
- Добавлена поддержка параметров запроса в
ALTER TABLE ... PART. #58297 (Azat Khuzhin). - Создавать консьюмеры для таблиц Kafka динамически (но сохранять их на некоторый период —
kafka_consumers_pool_ttl_msс момента последнего использования). Это должно исправить проблему со статистикой дляsystem.kafka_consumers(которая не обновлялась, когда никто не читал из таблицы Kafka, что приводило к утечке памяти и медленному отсоединению таблицы), а также этот PR снова включает статистику дляsystem.kafka_consumersпо умолчанию. #58310 (Azat Khuzhin). sparkBarв качестве псевдонима дляsparkbar. #58335 (凌涛).- Не отправляйте запросы
ComposeObjectпосле загрузки вGCS. #58343 (Azat Khuzhin). - Корректно обрабатываются ключи с точкой в названии в XML-конфигурациях. #58354 (Azat Khuzhin).
- Функция
formatтеперь возвращает константу при константных аргументах. Это закрывает #58355. #58358 (Alexey Milovidov). - Добавлена отдельная настройка
max_estimated_execution_time, отличная отmax_execution_time. #58402 (Zhang Yifan). - Теперь выводится подсказка при использовании недопустимого имени движка базы данных. #58444 (Bharat Nallan).
- Добавлены настройки для более точного контроля типа индексов в словаре Arrow. По умолчанию для индексов используется знаковый целочисленный тип в соответствии с рекомендациями Arrow. Закрывает #57401. #58519 (Kruglov Pavel).
- Реализована поддержка переменной окружения
CLICKHOUSE_PASSWORD_FILEпри запуске docker-образа (#58575). #58583 (Eyal Halpern Shalev). - При выполнении некоторых запросов, которым требуется много потоков для чтения данных, ранее возникала ошибка
"Paste JOIN requires sorted tables only". Теперь в таком случае количество потоков устанавливается равным 1. #58608 (Yarik Briukhovetskyi). - Улучшено сообщение об ошибке INVALID_IDENTIFIER. #58703 (Yakov Olkhovskiy).
- Улучшена обработка числовых литералов со знаком в normalizeQuery. #58710 (Salvatore Mesoraca).
- Добавлена поддержка типа данных Point в MySQL. #58721 (Kseniia Sumarokova).
- Теперь при сравнении столбца типа Float32 и строковой константы строка читается как Float32 (вместо Float64). #58724 (Raúl Marín).
- Улучшена совместимость с S3, добавлена поддержка хранилища ECloud EOS. #58786 (xleoken).
- Разрешить
KILL QUERYотменять операции резервного копирования и восстановления. Этот PR также делает выполняющиеся операции резервного копирования и восстановления видимыми вsystem.processes. Кроме того, в конфигурации сервера появился новый параметр —shutdown_wait_backups_and_restores(по умолчанию true), который при завершении работы сервера заставляет его либо ждать окончания всех выполняющихся операций резервного копирования и восстановления, либо просто отменять их. #58804 (Vitaly Baranov). - Формат Avro с поддержкой кодека ZSTD. Закрывает #58735. #58805 (flynn).
- Интерфейс MySQL получил поддержку настроек
net_write_timeoutиnet_read_timeout.net_write_timeoutтранслируется в соответствующую настройку ClickHousesend_timeout, аnet_read_timeout— вreceive_timeout. Исправлена проблема, из-за которой настройку MySQLsql_select_limitможно было задать только в том случае, если весь запрос был написан в верхнем регистре. #58835 (Serge Klochkov). - Более информативное сообщение об исключении при конфликте между словарём и таблицей с одинаковым именем. #58841 (Yarik Briukhovetskyi).
- Убедитесь, что для пользовательских дисков (созданных через SQL) в конфигурации сервера указано либо
filesystem_caches_path(общий префикс каталога для всех кэшей файловой системы), либоcustom_cached_disks_base_directory(общий префикс каталога только для кэшей файловой системы, созданных для пользовательских дисков).custom_cached_disks_base_directoryимеет более высокий приоритет для пользовательских дисков по сравнению сfilesystem_caches_path; в противном случае используетсяfilesystem_caches_path. Параметр кэша файловой системыpathдолжен указывать путь внутри этого каталога, в противном случае будет сгенерировано исключение, не позволяющее создать диск. Это не затронет диски, которые были созданы в более старой версии и затем сервер был обновлён — в этом случае исключение выброшено не будет, чтобы дать серверу возможность успешно запуститься.custom_cached_disks_base_directoryдобавлен в конфигурацию сервера по умолчанию в виде/var/lib/clickhouse/caches/. Закрывает #57825. #58869 (Kseniia Sumarokova). - Интерфейс MySQL получил поддержку запросов
SHOW WARNINGS/SHOW COUNT(*) WARNINGS, хотя возвращаемый результат всегда представляет собой пустой набор. #58929 (Serge Klochkov). - Пропускать недоступные реплики при выполнении параллельного распределённого
INSERT SELECT. #58931 (Alexander Tokmakov). - Отображать текстовое название уровня логирования при включённом структурированном формате логов в JSON. #58936 (Tim Liou).
- Интерфейс MySQL получил поддержку выражений
CAST(x AS SIGNED)иCAST(x AS UNSIGNED)посредством псевдонимов типов данных:SIGNEDдля Int64 иUNSIGNEDдля UInt64. Это повышает совместимость с инструментами BI, такими как Looker Studio. #58954 (Serge Klochkov). - Изменить рабочий каталог на путь к данным в контейнере Docker. #58975 (cangyin).
- Добавлен параметр для Azure Blob Storage
azure_max_unexpected_write_error_retries, который также можно задать в конфигурации в секцииazure. #59001 (SmitaRKulkarni). - Разрешён запуск сервера, даже если таблица data lake повреждена. Закрывает #58625. #59080 (Kseniia Sumarokova).
- Позволяет игнорировать эволюцию схемы в движке таблиц
Icebergи читать все данные, используя схему, указанную пользователем при создании таблицы, или последнюю схему, полученную из метаданных при создании таблицы. Это реализовано с помощью настройкиiceberg_engine_ignore_schema_evolution, которая по умолчанию отключена. Обратите внимание, что включение этой настройки может привести к некорректным результатам, так как при эволюции схемы все файлы данных будут читаться, используя одну и ту же схему. #59133 (Kruglov Pavel). - Запретить изменяющие операции (
INSERT/ALTER/OPTIMIZE/...) на хранилищах только для чтения/одноразовой записи с выдачей корректной ошибкиTABLE_IS_READ_ONLY(во избежание остатков данных). Не допускать появления остатков на дисках с одноразовой записью (format_version.txt) при выполненииCREATE/ATTACH. ИгнорироватьDROPдляReplicatedMergeTree(так же, как дляMergeTree). Исправить итерацию поs3_plain(MetadataStorageFromPlainObjectStorage::iterateDirectory). Учтите, что диск только для чтения — этоweb, а диск с одноразовой записью — этоs3_plain. #59170 (Azat Khuzhin). - Исправлена ошибка в экспериментальном столбце
_block_number, которая могла приводить к логической ошибке при сложной комбинации операцийALTERиMERGE. Исправляет #56202. Заменяет #58601. #59295 (alesapin). - Интерфейс Play UI теперь корректно обрабатывает случаи, когда исключение возвращается в формате JSON. Корректировка для #52853. #59303 (Alexey Milovidov).
- HTTP-обработчик
/binaryпозволяет указать пользователя, хост и, при необходимости, пароль в строке запроса. #59311 (Alexey Milovidov). - Реализована поддержка резервного копирования для сжатых таблиц в памяти. Это закрывает #57893. #59315 (Alexey Milovidov).
- Реализована поддержка предложения
FORMATв запросахBACKUPиRESTORE. #59338 (Vitaly Baranov). - Функция
concatWithSeparatorтеперь поддерживает аргументы произвольных типов (а не только аргументы типовStringиFixedString). Например, теперьSELECT concatWithSeparator('.', 'number', 1)возвращаетnumber.1. #59341 (Robert Schulze).
Улучшение сборки/тестирования/упаковки
- Улучшены алиасы для бинарника clickhouse (теперь
ch/clickhouse— этоclickhouse-localилиclickhouseв зависимости от аргументов) и добавлено автодополнение bash для новых алиасов. #58344 (Azat Khuzhin). - Добавлена проверка изменений настроек в CI, чтобы убедиться, что все изменения настроек отражены в истории изменений настроек. #58555 (Kruglov Pavel).
- Теперь в stateful-тестах используются таблицы, напрямую подключённые из S3. #58791 (Alexey Milovidov).
- Сохраняется весь
fuzzer.logкак архив вместо последних 100k строк.tail -n 100000часто удаляет строки с определениями таблиц. Например. #58821 (Dmitry Novik). - Включена поддержка Rust на macOS с Aarch64 (это добавит нечёткий поиск в клиенте с помощью skim и язык PRQL, хотя я не думаю, что есть люди, которые хостят ClickHouse на darwin, так что, по сути, это в основном для нечёткого поиска в клиенте). #59272 (Azat Khuzhin).
- Исправлена проблема агрегации в смешанных кластерах x86_64 и ARM. #59132 (Harry Lee).
Исправление ошибки (заметное пользователю некорректное поведение в официальном стабильном релизе)
- Добавлено преобразование ключей соединения для вложенных типов LowCardinality #51550 (vdimir).
- Разворачивать при flatten_nested=1 только собственно тип Nested, а не все Array(Tuple) #56132 (Kruglov Pavel).
- Исправлена ошибка с проекциями и настройкой
aggregate_functions_null_for_emptyпри вставке. #56944 (Amos Bird). - Исправлено потенциальное исключение из-за устаревшего UUID профиля #57263 (Vasily Nemkov).
- Исправлена обработка буферов чтения в StreamingFormatExecutor #57438 (Kruglov Pavel).
- Игнорировать материализованные представления (MV) с удалённой целевой таблицей при проталкивании в представления #57520 (Круглов Павел).
- Устранена возможная гонка между ALTER_METADATA и MERGE_PARTS #57755 (Azat Khuzhin).
- Исправлена ошибка порядка выражений в операторе
GROUP BYсROLLUP#57786 (Chen768959). - Исправление устаревшей функции репликации «zero-copy»: устранена потеря BLOB-объектов после удаления реплики с повреждёнными отсоединёнными частями #58333 (Alexander Tokmakov).
- Разрешить пользователям работать с символическими ссылками в user_files_path #58447 (Duc Canh Le).
- Исправлено падение при отсутствии функции агрегации у таблицы Graphite #58453 (Duc Canh Le).
- Добавлена задержка чтения из StorageKafka, чтобы разрешить многократное чтение в материализованных представлениях #58477 (János Benjamin Antal).
- Исправлен дурацкий случай пересечения частей #58482 (Alexander Tokmakov).
- Отключён MergeTreePrefetchedReadPool для запросов, содержащих только LIMIT #58505 (Maksim Kita).
- Добавлена возможность использования обычных баз данных во время восстановления #58520 (Jihyuk Bok).
- Исправлено чтение ORC/Parquet/... с использованием пула потоков Apache Hive #58537 (sunny).
- Скрыть учётные данные в столбце
base_backup_nameтаблицыsystem.backup_log#58550 (Daniel Pozo Escalona). toStartOfIntervalдля округления значений в миллисекундах и микросекундах #58557 (Yarik Briukhovetskyi).- Отключён параметр
max_joined_block_rowsв ConcurrentHashJoin #58595 (vdimir). - Исправлено соединение с использованием Nullable в старом анализаторе #58596 (vdimir).
makeDateTime64: Теперь допускается неконстантный аргумент дробной части #58597 (Robert Schulze).- Исправлена возможная разыменовка указателя NULL при символизации inline frames #58607 (Azat Khuzhin).
- Улучшена изоляция записей кэша запросов при пересоздании пользователей или смене ролей #58611 (Robert Schulze).
- Исправлен анализ некорректного ключа партиционирования при выполнении оптимизации проекций #58638 (Amos Bird).
- Кэш запросов: исправлена пользовательская квота #58731 (Robert Schulze).
- Исправлено разбиение потоков в параллельных оконных функциях #58739 (Dmitry Novik).
- Исправлен двойной вызов destroy при выбрасывании исключения в addBatchLookupTable8 #58745 (Raúl Marín).
- Не обрабатывать запросы в Keeper при завершении работы #58765 (Antonio Andelic).
- Исправлено разыменование нулевого указателя в
SlabsPolygonIndex::find#58771 (Yarik Briukhovetskyi). - Исправлена работа функции JSONExtract для столбцов LowCardinality(Nullable) #58808 (vdimir).
- Исправлено неожиданное накопление потребления памяти при создании и удалении очень большого числа таблиц командами CREATE и DROP. #58831 (Maksim Kita).
- Хранение журнала чтения нескольких файлов в mv #58877 (János Benjamin Antal).
- Ограничение на идентификатор ключа доступа (
access key id) для S3. #58900 (MikhailBurdukov). - Исправлена возможная ошибка, приводившая к аварийному завершению работы clickhouse-local при загрузке подсказок #58907 (Kruglov Pavel).
- Исправлена ошибка при использовании
indexHint#58911 (Dmitry Novik). - Исправлена ошибка, из-за которой StorageURL забывал заголовки при перезапуске сервера #58933 (Michael Kolupaev).
- Analyzer: исправлена замена хранилища на блок вставки #58958 (Yakov Olkhovskiy).
- Исправлен
seekв ReadBufferFromZipArchive #58966 (Michael Kolupaev). - Исправление для экспериментальных инвертированных индексов (не используйте в продакшене):
DROP INDEXдля инвертированного индекса теперь удаляет все соответствующие файлы из постоянного хранилища #59040 (mochi). - Устранена гонка данных в query_factories_info #59049 (Kseniia Sumarokova).
- Отключена повторная попытка запроса при ошибке "Too many redirects" #59099 (skyoct).
- Исправлена взаимоблокировка при завершении работы незапущенной базы данных #59137 (Sergei Trifonov).
- Исправление: LIMIT BY и LIMIT в распределённом запросе #59153 (Igor Nikonov).
- Исправлено падение при использовании nullable часового пояса в
toString#59190 (Yarik Briukhovetskyi). - Исправлен аварийный сбой в метаданных Iceberg при некорректных путях к файлам #59275 (Kruglov Pavel).
- Исправлено название архитектуры в списке выбора цели Rust #59307 (p1rattttt).
- Исправлена логическая ошибка, связанная с «not-ready set» при выполнении запроса к таблице
system.tablesс подзапросом в предложении IN. #59351 (Nikolai Kochetov).