Оглавление
Релиз 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. Чтобы сохранить прежнее поведение, установите значениеtrueдля настройкиleast_greatest_legacy_null_behavior(по умолчанию:false). #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).
- Интеграция с Iceberg REST Catalog: новый движок базы данных Iceberg, который подключает к ClickHouse весь каталог. #71542 (Kseniia Sumarokova).
- Добавлен кэш для первичного индекса таблиц
MergeTree(его можно включить с помощью настройки таблицыuse_primary_key_cache). Если для первичного индекса включены ленивая загрузка и кэширование, он будет загружаться в кэш по требованию (аналогичноmark cache), а не постоянно находиться в памяти. Добавлен прогрев первичного индекса при вставках/слияниях/загрузках частей данных и при перезапуске таблицы (можно включить с помощью настройки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 (площадь под кривой) для кривой 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. Добавлена возможность выбирать, какая сторона JOIN будет выступать внутренней (build) таблицей в плане запроса. Это управляется параметром
query_plan_join_swap_table, которому можно задать значениеauto. В этом режиме ClickHouse попытается выбрать таблицу с наименьшим количеством строк. #71577 (Vladimir Cherkasov). - Теперь при значении
defaultу настройкиjoin_algorithmбудет использоваться алгоритмparallel_hash(если применимо). Две предыдущие альтернативы (directиhash) по-прежнему используются, еслиparallel_hashприменить нельзя. #70788 (Nikita Taranov). - Добавлена возможность извлекать общие выражения из выражений
WHEREиON, чтобы сократить число хеш-таблиц, используемых при выполнении JOIN. Это имеет смысл, когда условиеJOIN ONсодержит общие части внутри AND в разных частях OR. Можно включить с помощьюoptimize_extract_common_expressions = 1. #71537 (János Benjamin Antal). - Позволяет использовать индексы в
SELECT, когда индексируемый столбец приводится кLowCardinality(String)с помощьюCAST, что может происходить при выполнении запроса к таблице Merge, если в одних таблицах используетсяString, а в других —LowCardinality(String). #71598 (Yarik Briukhovetskyi). - Во время выполнения запроса с параллельными репликами и включенным локальным планом анализ индексов на воркерах не выполняется. Координатор будет выбирать диапазоны чтения для воркеров на основе анализа индексов на своей стороне (на инициаторе запроса). Благодаря этому у коротких запросов с параллельными репликами задержка такая же низкая, как и у запросов на одном узле. #72109 (Igor Nikonov).
- Снижено использование памяти командой
clickhouse disks remove --recursiveдля дисков объектного хранилища. #67323 (Kirill). - Возвращена оптимизация чтения подстолбцов одного столбца в компактных частях из #57631. Она была случайно удалена. #72285 (Pavel Kruglov).
- Ускорена сортировка столбцов
LowCardinality(String)благодаря устранению виртуальных вызовов в компараторе. #72337 (Alexander Gololobov). - Оптимизирована функция
argMin/argMaxдля некоторых простых типов данных. #72350 (alesapin). - Оптимизирован механизм блокировок в трекере памяти за счёт разделяемых блокировок, что снижает конкуренцию за блокировки и повышает производительность на системах с очень большим количеством CPU. #72375 (Jiebin Sun).
- Добавлена новая настройка
use_async_executor_for_materialized_views. Позволяет использовать асинхронное и, возможно, многопоточное выполнение запроса materialized view, что может ускорить обработку представлений при INSERT, но также потребляет больше памяти. #72497 (alesapin). - Улучшена производительность десериализации состояний агрегатных функций (в типе данных
AggregateFunctionи в распределённых запросах). Также немного улучшена производительность парсинга форматаRowBinary. #72818 (Anton Popov). - Разделение диапазонов при чтении с параллельными репликами по порядку ключа таблицы позволяет снизить потребление памяти при чтении. #72173 (JIaQi).
- Ускорена вставка в MergeTree, если во вставляемом батче содержится только одно значение ключа партиционирования. #72348 (alesapin).
- Реализовано параллельное создание таблиц при восстановлении из резервной копии. До этого в команде
RESTOREтаблицы всегда создавались в одном потоке, что могло работать медленно в случае резервных копий с большим количеством таблиц. #72427 (Vitaly Baranov). - Очистка mark cache может занять заметное время, если он большой. Если в это время удерживать мьютекс контекста, это блокирует многие другие операции: даже новое клиентское соединение не сможет установиться, пока мьютекс не будет освобождён. При этом для синхронизации удерживать этот мьютекс на самом деле не нужно — достаточно иметь локальную ссылку на кэш через shared_ptr. #72749 (Alexander Gololobov).
Улучшения
- Удалена настройка
allow_experimental_join_condition, поэтому неэквивалентные условия теперь разрешены по умолчанию. #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). - Разрешены неизвестные значения в Set, которых нет в 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 file не созданы соответствующие поля. #72277 (Daniil Ivanik).
- Теперь разрешено
CREATE MATERIALIZED VIEWсUNION [ALL]в запросе. Поведение такое же, как у materialized view с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).
- В
system.tablesдобавленtotal_bytes_with_inactiveдля подсчёта общего числа байтов в неактивных частях. #72690 (Kai Zhu). - Добавлены настройки MergeTree в
system.settings_changes. #72694 (Raúl Marín). - Добавлена поддержка JSON type в функции
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в JSON-форматах Pretty. #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).
- Исправлена несогласованность метаданных при добавлении новой реплики в базу данных Replicated, содержащую таблицу, созданную с
flatten_nested=0. #72685 (Alexander Tokmakov). - Исправлена расширенная конфигурация SSL для внутреннего взаимодействия Keeper. #72730 (Antonio Andelic).
- Исправлена ошибка “No such key” в неупорядоченном режиме S3Queue, когда значение настройки
tracked_files_limitменьше скорости появления файлов в S3. #72738 (Kseniia Sumarokova). - Исправлено исключение в RemoteQueryExecutor, возникавшее, когда пользователь отсутствует локально. #72759 (Andrey Zvonov).
- Исправлена работа мутаций с материализованным столбцом
_block_number(если включена настройкаenable_block_number_column). #72854 (Anton Popov). - Исправлена ошибка резервного копирования и восстановления на обычном перезаписываемом диске в случае, если в резервной копии есть пустые файлы. #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, что включает поддержку collations, преобразование кодировок и другие возможности локализации. #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для проверки того, выдан ли текущему пользователю/роли указанный 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). - Не выводить в список отсоединённые части с дисков только для чтения и однократной записи в метриках и 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в configuration, который позволяет 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) теперь имеют уникальный идентификатор в качестве суффикса. Это позволяет сопоставлять вывод Profiler для процессоров и трассы OpenTelemetry с выводом EXPLAIN. #63518 (qhsong). - Добавлена возможность проверять, существует ли объект после записи в Azure Blob Storage; это поведение управляется настройкой
check_objects_after_upload. #64847 (Smita Kulkarni). - В
clickhouse-localбаза данныхAtomicтеперь используется по умолчанию. Решены пункты 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).
- В Advanced dashboard добавлены панели мониторинга для каждого хоста:
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 type: если текущий блок для JSON path содержит значения нескольких типов, система попытается выбрать наиболее подходящий тип, перебирая типы в специальном best-effort-порядке. #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).
- Исправлена ошибка, из-за которой в режиме rebuild для легковесного удаления в проекциях не учитывался столбец _row_exists. #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 format при использовании 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).
- Добавлено недостающее снятие экранирования в named collections. Без этого исправления clickhouse-server не может запуститься. #71308 (MikhailBurdukov).
- Исправлены async inserts с пустыми блоками через собственный протокол. #71312 (Anton Popov).
- Исправлено неконсистентное форматирование AST при выдаче некорректных привилегий с подстановочными знаками #71309. #71332 (pufit).
- В деструкторы частей данных добавлен try/catch, чтобы избежать
std::terminate. #71364 (alesapin). - Проверка подозрительных и экспериментальных типов в подсказках типов для JSON. #71369 (Pavel Kruglov).
- Воркер-поток Memory теперь запускается и на ОС, отличных от Linux (исправляет #71051). #71384 (Alexandre Snarskii).
- Исправлена ошибка «Invalid number of rows in Chunk» в столбце типа Variant. #71388 (Pavel Kruglov).
- Исправлена ошибка «столбец “attgenerated” не существует» для старых версий 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 при 0 столбцах (старый анализатор). #71494 (Raúl Marín).
- Исправлена ошибка выхода Date32 за допустимый диапазон, вызванная неинициализированными данными ORC. Подробнее см. https://github.com/apache/incubator-gluten/issues/7823. #71500 (李扬).
- Исправлен подсчёт размера столбца в wide part для типов Dynamic и JSON. #71526 (Pavel Kruglov).
- Исправлена ошибка анализатора, возникавшая, когда запрос внутри materialized view использовал IN с CTE. Закрывает #65598. #71538 (Maksim Kita).
- Устранён сбой при использовании UDF в ограничении. #71541 (Raúl Marín).
- Возвращать 0 или символ по умолчанию вместо выдачи ошибки в функциях bitShift при выходе за границы диапазона. #71580 (Pablo Marcos).
- Исправлены сбои сервера при использовании materialized view с некоторыми движками. #71593 (Pervakov Grigorii).
- ARRAY JOIN со вложенной структурой данных, содержащей алиас константного массива, приводил к разыменованию нулевого указателя. Это закрывает #71677. #71678 (Alexey Milovidov).
- Исправлена ошибка LOGICAL_ERROR при выполнении ALTER с пустым кортежем. Это устраняет #71647. #71679 (Amos Bird).
- Не преобразовывать константное множество в предикатах для столбцов партиции в случае оператора NOT IN. #71695 (Eduard Karacharov).
- Улучшено сообщение в журнале о сбое скрипта инициализации 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 в distributed таблице; закрыто #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). - Теперь в EXPLAIN AST, используемом внутри подзапроса, допускаются только запросы SELECT. Запросы других типов приводят к логической ошибке: ‘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: теперь оно выполняется в потоке перезапуска, а не в потоке attach. #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; с опцией--progress-tableсвязана новая опция--enable-progress-table-toggle, которая включает и выключает отображение таблицы Прогресса по нажатию клавиши управления (Space). #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).
Экспериментальные возможности
- Refreshable materialized views готовы к использованию в production. #70550 (Michael Kolupaev). Теперь refreshable materialized views поддерживаются и в базах данных Replicated. #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 format. Для вывода используйте настройку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). При определении существования файла или каталога на диске plain rewritable больше не вызывается API LIST Объектного хранилища, так как это может быть невыгодно по стоимости. #70852 (Julia Kartseva). Уменьшено количество запросов к API HEAD Объектного хранилища на диске plain_rewritable. #70915 (Julia Kartseva). - Добавлена возможность напрямую разбирать данные в разреженные столбцы. #69828 (Anton Popov).
- Повышена производительность при разборе форматов с большим количеством отсутствующих значений (например,
JSONEachRow). #69875 (Anton Popov). - Поддерживает параллельное чтение групп строк Parquet и предварительную загрузку групп строк в однопоточном режиме. #69862 (LiuNeng).
- Добавлена поддержка minmax-индекса для
pointInPolygon. #62085 (JackyWoo). - Используйте bloom-фильтры при чтении Parquet-файлов. #62966 (Arthur Passos).
- Безблокировочное переименование частей, чтобы
INSERTне влиял наSELECT(из-за блокировки частей) (в обычных условиях сfsync_part_directoryQPSSELECTпри параллельном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). - Аргументы командной строки для настроек Bool принимают значение 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, чтобы предотвратить вставку данных, если диск почти заполнен. #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как no-op. Закрывает #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). - В таблицу
system.replicasдобавлен новый столбецreadonly_duration. Это необходимо, чтобы в оповещениях можно было отличать реальные реплики в режиме только для чтения от sentinel-реплик. #69871 (Miсhael Stetsyuk). - Тип настройки
join_output_by_rowlist_perkey_rows_thresholdизменён на беззнаковое целое число. #69886 (kevinyhzou). - В логирование span OpenTelemetry добавлены настройки запроса. #70011 (sharathks118).
- Добавлена диагностическая информация о функциях для работы с массивами высшего порядка на случай, если тип результата лямбда-выражения оказывается неожиданным. #70093 (ttanay).
- Улучшение Keeper: меньше блокировок при изменении кластера. #70275 (Antonio Andelic).
- В команду
SHOW GRANTSдобавлены ключевые словаWITH IMPLICITиFINAL. Исправлена небольшая ошибка, связанная с неявными привилегиями: #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). - В
system.part_logдобавлены событияMergeStartиMutateStart, что помогает анализировать и визуализировать слияния. #70850 (Alexey Milovidov). - Добавлено событие profile о количестве слитых исходных частей. Это позволяет отслеживать ветвление дерева слияний в production. #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 bounds. #69291 (Pavel Kruglov). - Экспериментальная zero-copy-репликация, которую не следует использовать в продакшене: исправлен бесконечный цикл после
restore replicaв ReplicatedMergeTree с zero-copy. #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). - Исправлена необратимая блокировка отправки из distributed таблицы, если операция DROP для distributed таблицы завершалась ошибкой. #69843 (Azat Khuzhin).
- Исправлены запросы с предложением
WITH FILLи ключами NaN, которые нельзя было отменить. Это закрывает #69261. #69845 (Alexey Milovidov). - Исправлено значение по умолчанию анализатора для старого значения совместимости. #69895 (Raúl Marín).
- Не проверять зависимости при DROP старой таблицы во время CREATE OR REPLACE VIEW. Ранее запрос CREATE OR REPLACE завершался ошибкой, если у пересоздаваемого представления были зависимые таблицы. #69907 (Pavel Kruglov).
- Кое-что связанное с Decimal. Исправляет #69730. #69978 (Arthur Passos).
- Теперь DEFINER/INVOKER работают с параметризованными представлениями. #69984 (pufit).
- Исправлен парсинг DEFINER у представлений. #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).
- Проверка типа Nullable(Nothing) при выполнении ALTER TABLE MODIFY COLUMN/QUERY, чтобы предотвратить создание таблиц с таким типом данных. #70123 (Pavel Kruglov).
- Корректное сообщение об ошибке для некорректного запроса
JOIN ... ON *, закрывает #68650. #70124 (Vladimir Cherkasov). - Исправлен неверный результат при использовании индекса для пропуска данных. #70127 (Raúl Marín).
- Исправлено состояние гонки в методе decompress у ColumnObject/ColumnTuple, которое могло приводить к обращению к памяти после её освобождения. #70137 (Pavel Kruglov).
- Исправлено возможное зависание при ALTER COLUMN с типом Dynamic. #70144 (Pavel Kruglov).
- Теперь ClickHouse будет считать большее число ошибок допускающими повторную попытку и не будет помечать части данных как повреждённые при таких ошибках. #70145 (alesapin).
- Исправлено использование параметра
max_typesпри создании типа Dynamic для подстолбца JSON. #70147 (Pavel Kruglov). - Исправлена проблема, из-за которой пароль отображался в
system.query_logдля пользователей с методом аутентификации bcrypt. #70148 (Nikolay Degterinsky). - Исправлен счётчик событий для native-интерфейса (InterfaceNativeSendBytes). #70153 (Yakov Olkhovskiy).
- Исправлен возможный сбой, связанный с JSON-столбцами. #70172 (Pavel Kruglov).
- Исправлено несколько проблем с arrayMin и arrayMax. #70207 (Raúl Marín).
- Учтена настройка allow_simdjson в парсере типа JSON. #70218 (Pavel Kruglov).
- Исправлена ошибка разыменования нулевого указателя при создании materialized view с двумя
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). - Игнорировать любой вывод для async insert с
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).
- Исправлена ситуация, когда настройка processing_threads_num движка таблицы S3Queue не работала, если её значение выводилось из числа ядер CPU на сервере. #70837 (Kseniia Sumarokova).
- Нормализованы аргументы именованных кортежей в состояниях агрегации. Это исправляет ошибку #69732. #70853 (Amos Bird).
- Устранена логическая ошибка, вызванная отрицательными нулями в двухуровневой хеш-таблице. Это закрывает #70973. #70979 (Alexey Milovidov).
- Исправлены
limit byиlimit with tiesдля Distributed и параллельных реплик. #70880 (Nikita Taranov).
Релиз ClickHouse 24.9, 2024-09-26. Презентация, Видео
Обратно несовместимое изменение
- Выражения вида
a[b].cтеперь поддерживаются для именованных Tuple, как и именованный доступ к элементам произвольных выражений, например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, позволяющий пропустить этап нормализации (задача #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).
- Улучшения refreshable materialized view: режим добавления (
... 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 partitioning. #68963 (Yarik Briukhovetskyi).
- Улучшена производительность JOIN за счёт переупорядочивания правой таблицы по ключам, когда ключи таблицы плотно распределены в LEFT или INNER hash joins. #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 (李扬). - Добавлено параллельное слияние для aggregate function
uniqпри агрегации по ключу group by, чтобы максимально задействовать CPU. #68441 (Jiebin Sun). - Добавлена настройка
output_format_orc_dictionary_key_size_threshold, позволяющая включать словарное кодирование для строкового столбца в формате выводаORC. Это помогает уменьшить размер выходного файлаORCи значительно повысить производительность чтения. #68591 (李扬). - Добавлен новый запрос Keeper RemoveRecursive, который удаляет узел вместе со всем его поддеревом. #69332 (Mikhail Artemenko).
- Ускорена вставка в таблицу с индексом векторного сходства за счёт параллельного добавления данных в векторный индекс. #69493 (flynn).
- Снижено использование памяти при вставках в JSON за счёт адаптивного размера буфера записи. Многие файлы, создаваемые JSON-столбцом в wide part, содержат мало данных, поэтому выделять для них буфер размером 1 МБ не имеет смысла. #69272 (Kruglov Pavel).
- Исключён возврат потока в threadpool параллельного хеш-соединения, чтобы запрос не порождал избыточное количество потоков. #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 (李扬). - Когда легковесное удаление выполняется в таблице с проекцией(ями), у пользователей, помимо вариантов либо сгенерировать исключение (по умолчанию), либо удалить проекцию перед легковесным удалением, теперь есть и третий вариант: всё же выполнить легковесное удаление, а затем перестроить проекцию(и). #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).
- Добавлена поддержка подстановочных символов при идентификации пользователей в расширении SubjectAltName сертификата X.509. #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-аутентификаторов. #68456 (Aleksei Filatov).
- Добавлен новый набор метрик для диагностики пула потоков, позволяющий глубже понять его производительность и поведение. #68674 (filimonov).
- Добавлена поддержка параметров запроса в async inserts с форматом
Values. #68741 (Anton Popov). - Добавлена поддержка
Date32дляdateTruncиtoStartOfInterval. #68874 (LiuNeng). - В
system.processors_profile_logдобавлены столбцыplan_step_nameиplan_step_description. #68954 (Alexander Gololobov). - Поддержка испанского языка во встроенных словарях. #69035 (Vasily Okunev).
- В краткое сообщение о сбое добавлена архитектура CPU. #69037 (Konstantin Bogdanov).
- Запросы будут быстрее завершаться с ошибкой, если во время повторных попыток не удаётся установить новое соединение с Keeper. #69148 (Raúl Marín).
- Обновлена Database Factory: теперь определяемые пользователем движки баз данных могут иметь аргументы, настройки и переопределения таблиц (как в 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).
Исправление ошибки (заметное пользователю некорректное поведение в официальном стабильном релизе)
- Исправлено подключение таблицы, если имя pg-БД содержит ”-”, в экспериментальном и неподдерживаемом движке 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). - Исправлена проблема с отсутствием блоков в оконном представлении из-за медленного сброса данных в представление. #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).
- Исправлено отсутствие режима sync replica в запросе
SYSTEM SYNC REPLICA. #68326 (Duc Canh Le). - Исправлена ошибка в условии по ключу. #68354 (Han Fei).
- Устранён сбой при удалении или переименовании роли, используемой во внешнем LDAP-каталоге пользователей. #68355 (Andrey Zvonov).
- Исправлено значение столбца Прогресс в system.view_refreshes, если оно превышало 1 #68377. #68378 (megao).
- Исправлена обработка флагов regexp. #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, из-за которых в LogEntry некорректно разбиралась ‘исходная реплика’. Упомянуто в issue #68640. #68645 (Zhigao Hong).
- В distributed таблицы снова добавлены виртуальные столбцы
_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).
- Исправлен парсинг метаданных сложных типов в DeltaLake. Закрывает #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).
- Исправлена запись в materialized views при включенной настройке
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). - Исправлена логическая ошибка при пустой async insert. #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. Ранее при отправке запроса репликам в s3Cluster могло теряться выражение
DEFAULTдля столбца. #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. Если попытаться повторно использовать данные JOIN для
crossjoin, сейчас в ClickHouse это невозможно. Лучше оставитьhave_compressedвreuseJoinedData. #69404 (lgbo). - Функция
materialize()теперь возвращает полный столбец, когда параметр — разреженный столбец. #69429 (Alexander Gololobov). - Исправлена ошибка
LOGICAL_ERRORв функцииsqidDecode(#69450). #69451 (Robert Schulze). - Быстрое исправление проблемы с s3queue в 24.6 или CREATE-запроса для базы данных Replicated. #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, которая могла возникнуть из-за TTL с предложением WHERE в DatabaseReplicated при создании новой реплики. #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)”’. Из-за этого при чтении частей данных, созданных в старых выпусках CH (предположительно 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-запросы в многооператорных выражениях обрабатываются особым образом в зависимости от их предложения FORMAT: если FORMAT —VALUES(наиболее распространенный случай), конец оператора INSERT обозначается завершающей точкой с запятой;в конце запроса. Для всех остальных форматов (например,CSVилиJSONEachRow) конец оператора INSERT обозначается двумя символами новой строки\n\nв конце запроса. #63898 (FFish).- В предыдущих версиях можно было использовать альтернативный синтаксис для типов данных
LowCardinality, добавляяWithDictionaryк имени типа данных. Это была первоначальная рабочая реализация, и она никогда не документировалась и не предназначалась для публичного использования. Теперь этот синтаксис устарел. Если вы его использовали, вам нужно выполнить ALTER для своих таблиц и переименовать типы данных вLowCardinality. #66842 (Alexey Milovidov). - Исправлены логические ошибки в хранилище
Buffer, используемом с распределенной целевой таблицей. Это обратно несовместимое изменение: запросы, использующиеBufferс распределенной целевой таблицей, могут перестать работать, если таблица встречается в запросе более одного раза (например, в self-join). #67015 (vdimir). - В предыдущих версиях вызов функций случайных распределений на основе гамма-функции (таких как Chi-Squared, Student, Fisher) с отрицательными аргументами, близкими к нулю, приводил к долгим вычислениям или бесконечному циклу. В новой версии вызов этих функций с нулевыми или отрицательными аргументами будет приводить к исключению. Это закрывает #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). - Добавлена поддержка дополнительных вариантов strictness для 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для удаления всех партиций в состоянии detached. #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 sketches), который позволяет оценивать селективность для предикатов равенства, таких какcol = 'val'. Поддерживаются string, date, datatime и числовые типы данных. #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). - Исключено выделение избыточной емкости для столбца типа Array при записи в ORC. Это ускоряет обработку столбца типа Array на 15%. #67879 (李扬).
- Значительно ускорены мутации для нереплицируемых MergeTree #66911 #66909 (Alexey Milovidov).
Улучшения
- Настройка
allow_experimental_analyzerпереименована вenable_analyzer. Старое имя сохранено в виде алиаса. Это означает, что анализатор больше не имеет статуса бета и полностью переведён в production. #66438 (Nikita Mikhaylov). - Улучшено определение схемы для значений дата-время. Теперь DateTime64 используется только тогда, когда значение дата-время содержит дробную часть, в противном случае используется обычный DateTime. Определение типов Date/DateTime теперь стало строже, особенно при
date_time_input_format='best_effort', чтобы избежать определения значений дата-время по строкам в пограничных случаях. #68382 (Kruglov Pavel). - ClickHouse server теперь поддерживает новую настройку
max_keep_alive_requests. Для HTTP-соединений с keep-alive на сервере она работает вместе сkeep_alive_timeout: если тайм-аут бездействия ещё не истёк, но через данное соединение уже выполнено болееmax_keep_alive_requestsзапросов, сервер закроет его. #61793 (Nikita Taranov). - Улучшения в панели мониторинга Advanced. Это закрывает #67697. Это закрывает #63407. Это закрывает #51129. Это закрывает #61204. #67701 (Alexey Milovidov).
- Не требовать grant для REMOTE при создании distributed таблицы: достаточно grant для движка 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, теперь это также может быть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. Это полезно при передаче файла конфигурации через пайп: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).
- В Linux-сборки для Aarch64 добавлен
-no-pie, чтобы обеспечить корректную внутреннюю диагностику и символизацию трассировок стека после перезапуска ClickHouse. #67916 (filimonov). - Добавлены события профиля для слияний и мутаций, чтобы улучшить интроспекцию. #68015 (Anton Popov).
- Удалены ненужные записи в журнале для нереплицируемого
MergeTree. #68238 (Daniil Ivanik).
Улучшения сборки/тестирования/упаковки
- Нестабильная проверка integration tests теперь будет запускать каждый тестовый сценарий несколько раз, чтобы выявлять больше проблем в тестах и повышать их надежность. Для многократного запуска одного и того же тестового сценария в одном окружении используется библиотека
pytest-repeat. Для успешного прохождения важно очищать таблицы и другие сущности в конце тестового сценария. Повторные запуски работают значительно быстрее, чем несколько запусков pytest, так как необходимые контейнеры стартуют только один раз. #66986 (Ilya Yatsishin). - Сняты ограничения на использование CLion с ClickHouse. В предыдущих версиях CLion зависал на минуту при каждом нажатии клавиши. Это закрывает #66994. #66995 (Alexey Milovidov).
- getauxval: предотвращено аварийное завершение при повторном запуске под sanitizer из-за высокой энтропии ASLR в новых ядрах Linux. #67081 (Raúl Marín).
- Некоторые части клиентского кода вынесены в один файл, и к ним применяется максимально возможный уровень оптимизации даже в отладочных builds. Это закрывает: #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). - Исправлена ошибка разыменования NULL-указателя, которая вызывалась специально сформированным запросом и приводила к аварийному завершению сервера в 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).
- Исправлена ошибка повреждённой части при восстановлении данных на диск
s3_plain_rewritable. #66881 (Vitaly Baranov). - В редких случаях ClickHouse мог считать части повреждёнными из-за неожиданных проекций на диске. Теперь это исправлено. #66898 (alesapin).
- Исправлено некорректное определение формата при автоматическом определении схемы, которое могло приводить к логической ошибке: формат не поддерживает автоматическое определение схемы. #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).
- Исправлена ошибка сегментации, вызванная некорректным отсоединением от группы потоков в
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). - Исправлен JOIN по кортежу с
NULL: некоторые запросы с новым анализатором иNULLвнутри кортежа в условииJOIN ONвозвращали некорректные результаты. #67538 (vdimir). - Исправлено избыточное перепланирование
FileCache::freeSpaceRatioKeepingThreadFunc()в случае полностью заполненного невытесняемого кэша. #67540 (Kseniia Sumarokova). - Исправлена вставка через HTTP-интерфейс в потоковые движки (Kafka, RabbitMQ, NATS). #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()и добавлен код сериализации для конкретных типов данных. Подстановка в parameterized view работала некорректно для нескольких типов данных, когда значением parameter была функция или expression, возвращающая экземпляр типа данных. #67654 (Shankar). - Исправлено падение в
percent_rank. Тип рамки окна по умолчанию дляpercent_rankизменён наrange unbounded preceding and unbounded following. Теперь учитывается рамка окна по умолчанию дляIWindowFunction, и оконные функции без явного определения рамки окна в SQL теперь можно корректно помещать в разныеWindowTransfomer. #67661 (lgbo). - Исправлена проблема с повторной загрузкой SQL пользовательских функций (UDF) с UNION. Ранее после перезапуска сервера UDF могла становиться недействительной. #67665 (Antonio Andelic).
- Исправлена возможная логическая ошибка “Unexpected return type from if” при использовании экспериментального типа Variant и включенной настройки
use_variant_as_common_typeв функции if с типами Tuple и Map. #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 filter для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 не считает part повреждённым, если проекция отсутствует на диске, но присутствует в
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. Presentation, Video
Обратно несовместимое изменение
- Запрещено использовать
CRATE MATERIALIZED VIEW ... ENGINE Replicated*MergeTree POPULATE AS SELECT ...с базами данных Replicated. #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). - Изменён принцип работы дедупликации для materialized view. Исправлено множество случаев, таких как: - в целевой таблице: данные разбиваются на 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 к серверу с самоподписанным сертификатом; это можно использовать как сокращённую форму для соответствующих клиентских настроекopenSSLverificationMode=none+invalidCertificateHandler.name=AcceptCertificateHandler. #65238 (peacewalker122). - Добавлен system.error_log, который содержит историю значений ошибок из таблицы system.errors и периодически сбрасывается на диск. #65381 (Pablo Marcos).
- Добавлена агрегатная функция
groupConcat. Почти то же самое, что иarrayStringConcat( groupArray(column), ','). Может принимать 2 параметра: строковый разделитель и количество обрабатываемых элементов. #65451 (Yarik Briukhovetskyi). - Добавлено хранилище AzureQueue. #65458 (Kseniia Sumarokova).
- Добавлена новая настройка для отключения/включения записи индекса страниц в файлы Parquet. #65475 (lgbo).
- Добавлена серверная конфигурация
logger.console_log_levelдля управления уровнем логирования в консоль (если она включена). #65559 (Azat Khuzhin). - В конец пути к каталогу автоматически добавляется шаблон
*при использовании табличной функцииfile. #66019 (Zhidong (David) Guo). - В клиент добавлена опция
--memory-usageдля неинтерактивного режима. #66393 (vdimir). - Создан интерактивный клиент для clickhouse-disks, добавлена возможность подключать локальный диск из локального каталога. #64446 (Daniil Ivanik).
- Когда для таблицы с проекциями выполняется легковесное удаление, пользователи могут либо сгенерировать исключение (по умолчанию), либо удалить проекцию #65594 (jsc0218).
- Добавлены системные таблицы с основной информацией обо всех таблицах в состоянии detached. #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 в string заменен на более быстрый (с модифицированного 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). - При Attach таблиц на дисках в режиме только для чтения будет использоваться меньше ресурсов, поскольку устаревшие части не будут загружаться. #65635 (Alexey Milovidov).
- Добавлена поддержка minmax hyperrectangle для индексов Set. #65676 (AntiTopQuark).
- Первичный индекс устаревших частей теперь выгружается для уменьшения общего использования памяти. #65852 (Anton Popov).
- Функции
replaceRegexpAllиreplaceRegexpOneтеперь работают значительно быстрее, если шаблон регулярного выражения тривиален, то есть не содержит метасимволов, классов шаблонов, флагов, символов группировки и т. д. (Спасибо Taiyang Li). #66185 (Robert Schulze). - Запросы к S3: уменьшено время повторных попыток для запросов, увеличено количество повторных попыток для резервных копий. Для запросов — 8,5 минут и 100 повторных попыток, для восстановления из резервной копии — 1,2 часа и 1000 повторных попыток. #65232 (Sema Checherinda).
- Добавлена поддержка оптимизации LIMIT в плане запроса. Добавлена поддержка pushdown LIMIT для хранилища PostgreSQL и табличной функции. #65454 (Maksim Kita).
- Улучшена балансировка нагрузки в ZooKeeper. Текущий сеанс не истекает, пока оптимальные узлы не станут доступны, несмотря на
fallback_session_lifetime. Добавлена поддержка балансировки с учетом AZ. #65570 (Alexander Tokmakov). - DatabaseCatalog удаляет таблицы быстрее, используя до
database_catalog_drop_table_concurrencyпотоков. #66065 (Sema Checherinda).
Улучшение
- Улучшена балансировка нагрузки ZooKeeper. Текущий сеанс не истекает, пока не станут доступны оптимальные узлы, несмотря на параметр
fallback_session_lifetime. Добавлена поддержка балансировки с учетом зон доступности (AZ). #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). - Изменено поведение дедупликации для materialized view. Исправлено множество случаев, таких как: - в целевой таблице: данные разбиваются на 2 или более блоков, и эти блоки считаются дубликатами, когда такой блок вставляется параллельно. - в целевой таблице MV: выполняется дедупликация одинаковых блоков; это происходит, когда MV часто формирует одинаковые результирующие данные для разных входных данных из-за агрегации. - в целевой таблице MV: выполняется дедупликация одинаковых блоков, поступающих из разных MV. #61601 (Sema Checherinda).
- Добавлена поддержка чтения партиционированных данных DeltaLake. Схема DeltaLake теперь определяется по метаданным, а не на основе данных. #63201 (Kseniia Sumarokova).
- В composable protocols для слоя 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” в столбце 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).
- Обновлено: в azureBlobStorage ключ учетной записи теперь маскируется в журналах. #65273 (SmitaRKulkarni).
- Отсечение партиций для условий
IN, когда выражение фильтра входит в выражениеPARTITION BY. #65335 (Eduard Karacharov). arrayMin/arrayMaxприменимы ко всем сравнимым типам данных. #65455 (pn).- Улучшен учет памяти для cgroups v2: из него исключен объем, занимаемый page cache. #65470 (Nikita Taranov).
- Не создавайте настройки формата для каждой строки при сериализации фрагментов для вставки в таблицу EmbeddedRocksDB. #65474 (Duc Canh Le).
- Промпт
clickhouse-localсокращён до просто:).getFQDNOrHostName()на macOS выполняется слишком долго, а имя хоста в промптеclickhouse-localнам всё равно не нужно. #65510 (Konstantin 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 сертификата x509. #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 теперь учитывается ограничение CPU в cgroup. #65819 (Antonio Andelic).
- Разрешено использовать функцию
concatбез аргументов::) select concat();. #65887 (李扬). - Добавлена возможность управлять именованными коллекциями в
clickhouse-local. #65973 (Alexey Milovidov). - Улучшены события профилирования для Azure. #65999 (alesapin).
- Добавлена поддержка чтения ORC-файлов с учетом часового пояса при записи. #66025 (kevinyhzou).
- Добавлены настройки для управления подключениями к PostgreSQL. Настройка
postgresql_connection_attempt_timeoutзадаёт значение, передаваемое в параметрconnect_timeoutURL-адреса подключения. Настройка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теперь позволяет задавать ID машины как параметр, чтобы предотвратить коллизии в крупных кластерах. #66374 (ZAWA_ll). - Отключена приостановка по
Ctrl+Zв интерактивном режиме. Это распространённая ловушка, и почти все пользователи не ожидают такого поведения. Полагаю, лишь немногие особо продвинутые пользователи могли бы оценить возможность отправлять терминальные приложения в фоновый режим, но лично я таких не знаю. #66511 (Alexey Milovidov). - Добавлена опция проверки типа первичного ключа в Dictionaries. Без этой опции в простых структурах любой тип столбца будет неявно преобразован в UInt64. #66595 (MikhailBurdukov).
Исправление ошибки (заметное пользователю некорректное поведение в официальном стабильном релизе)
- Проверяются циклические зависимости в запросах CREATE/REPLACE/RENAME/EXCHANGE, и при их наличии генерируется исключение. Ранее такие циклические зависимости могли приводить к взаимной блокировке при запуске сервера. Также исправлены некоторые ошибки при создании зависимостей. #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).
- Требуется привилегия
dictGetпри доступе к словарям через прямой запрос или движок таблицыDictionary. #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). - Улучшена обработка условий JOIN с проверками
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). - Исправлена обработка LIMIT для
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).
- Предотвращено сохранение сторожевым процессом дескрипторов удалённых (ротированных) файлов журнала. #66334 (Aleksei Filatov).
- Исправлена ошибка, из-за которой в logicalexpressionoptimizerpass терялся логический тип константы. #66344 (pn).
- Исправлена ошибка
Column identifier is already registeredпри использованииgroup_by_use_nulls=trueи нового анализатора. #66400 (Nikolai Kochetov). - Исправлен возможный некорректный результат запросов с JOIN и фильтрацией таблицы на external engine (например, PostgreSQL) из-за слишком агрессивного pushdown фильтра. Теперь условия из секции WHERE не будут отправляться во внешнюю базу данных в случае внешнего JOIN с external table. #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). - Исправлено чтение из неинициализированной памяти при хешировании пустых Tuple. #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).
- Исправлен assert
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», когда они начнут обрабатываться одновременно. Это имеет значение только для сильно нагруженных распределенных backend-соединений. Чтобы избежать этой проблемы, можно установить значениеasync_load_databasesв false. #57695 (Alexey Milovidov). - Настройка
replace_long_file_name_to_hashпо умолчанию включена для таблицMergeTree. #64457 (Anton Popov). Эта настройка полностью совместима, и при обновлении никаких действий не требуется. Новый формат данных поддерживается всеми версиями, начиная с 23.9. После включения этой настройки вы больше не сможете откатиться до версии 23.8 или более ранней. - Некоторые недопустимые запросы будут завершаться ошибкой раньше, на этапе разбора. Примечание: отключена поддержка встроенных выражений 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 ID в формате 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). - В файловоподобные хранилища (s3/file/hdfs/url/azureBlobStorage) добавлен виртуальный столбец
_time. #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настроена «группа реплик», автоматически создается кластер, включающий реплики из всех групп. #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, встроенный в ClickHouse, который может напрямую считывать бинарные файлы Parquet в столбцы ClickHouse. Он управляется настройкой
input_format_parquet_use_native_reader(по умолчанию отключён). #60361 (ZhiHong Zhang). - Добавлена поддержка частичной тривиальной оптимизации подсчёта, когда фильтр запроса может точно выбирать диапазоны в таблицах 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). - Добавлена возможность объединять два последовательных шага фильтрации в плане запроса. Это улучшает оптимизацию проталкивания фильтра вниз, если условие фильтрации можно протолкнуть вниз из родительского шага. #64760 (Nikolai Kochetov).
- Удалена неудачная оптимизация в реализации vertical FINAL, и алгоритм vertical FINAL снова включён по умолчанию. #64783 (Duc Canh Le).
- Из выражения фильтра удалены узлы ALIAS. Это немного повышает производительность запросов с
PREWHERE(с новым анализатором). #64793 (Nikolai Kochetov). - Снова включено кэширование сеансов OpenSSL. #65111 (Robert Schulze).
- Добавлены настройки, отключающие материализацию индексов пропуска данных и статистики при вставке (
materialize_skip_indexes_on_insertandmaterialize_statistics_on_insert). #64391 (Anton Popov). - Используйте размер выделенной памяти для расчёта размера группы строк и снижения пикового потребления памяти при записи Parquet в однопоточном режиме. #64424 (LiuNeng).
- Улучшен итератор разреженного столбца для сокращения числа вызовов
size. #64497 (Jiebin Sun). - Обновлено условие использования серверного копирования для резервных копий в Azure Blob Storage. #64518 (SmitaRKulkarni).
- Оптимизировано использование памяти при вертикальном слиянии для таблиц с большим количеством индексов пропуска данных. #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). - Обновлена панель мониторинга Advanced Dashboard для версий с открытым исходным кодом и ClickHouse Cloud: добавлен график ‘Максимальное число одновременных сетевых подключений’. #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, а также текущее доступное количество запросов, которые можно отправить, не достигнув предела throttling для диска. Метрики определены для каждого диска, для которого настроено такое ограничение. #65050 (Sergei Trifonov). - Инициализирован глобальный сборщик трассировки для
Poco::ThreadPool(необходим для Keeper и т. д.). #65239 (Kseniia Sumarokova). - Добавлена проверка при создании пользователя с
bcrypt_hash. #65242 (Raúl Marín). - Добавлены profile events для количества строк, прочитанных во время и после
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). - Транзакции отключены для неподдерживаемых хранилищ, даже для materialized views. #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). - Исправлена ошибка, из-за которой индекс пропуска данных ‘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). - Это исправление будет использовать корректно переопределённый контекст и правильный DEFINER для каждого отдельного представления в конвейере выполнения запроса. #64079 (pufit).
- Исправление в анализаторе: устранена ошибка “Столбец не найден” при использовании INTERPOLATE. #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).
- Исправлена проверка размера Query Tree. #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 в таблицах с ключами типа Nullable. #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 (в случае небольшого buffer, то есть
--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 с подзапросами для множеств в смешанных условиях JOIN. #64775 (lgbo).
- Исправлено аварийное завершение при использовании локального кэша поверх диска
plain_rewritable. #64778 (Julia Kartseva). - Исправление в Keeper: возврат корректного значения для
zk_latest_snapshot_sizeв командеmntr. #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в запросах, читающих из materialized view сPREWHERE, если в materialized view есть столбцы с типами, отличающимися от типов в исходной таблице. Исправляет #64611. #64855 (Nikolai Kochetov). - Исправлено редкое падение в случае, когда у таблицы есть TTL с подзапросом + база данных Replicated + параллельные реплики + 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). - Предотвращена запись в финализированный буфер в хранилищах, подобных File. #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).
- Исправлено возможное аварийное завершение при хеджированных запросах. #65206 (Azat Khuzhin).
- Исправлена ошибка при сокращённом вычислении в словарях Hashed и Hashed_Array, из-за которой могло считываться неинициализированное числовое значение, что приводило к различным ошибкам. #65256 (jsc0218).
- Этот PR гарантирует, что тип constant(второго параметра оператора IN) всегда остается доступным в процессе преобразования типов оператором IN. В противном случае потеря информации о типе может приводить к сбоям некоторых преобразований, например преобразования из DateTime в Date. Это исправляет проблему (#64487). #65315 (pn).
Улучшения сборки/тестирования/пакетирования
- Добавлена поддержка LLVM XRay. #64592 #64837 (Tomer Shafir).
- Реализации хранилищ S3/hdfs/azure объединены в один класс, работающий с IObjectStorage. То же самое — для хранилищ *Cluster, озер данных и Queue. #59767 (Kseniia Sumarokova).
- Выполнен рефакторинг writer’а data part, чтобы убрать зависимости от MergeTreeData и DataPart. #63620 (Alexander Gololobov).
- Выполнен рефакторинг
KeyConditionи анализа ключей для улучшения PartitionPruner и оптимизации тривиального подсчета. Это изменение выделено из #60463. #61459 (Amos Bird). - Добавлены проверки, чтобы убедиться, что все функции вызываются со столбцами правильного размера. #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. Презентация, Видео
Обратно несовместимое изменение
- “inverted indexes” переименованы в “full-text indexes” — это менее техническое и более понятное пользователям название. Это также изменяет внутренние метаданные таблиц и нарушает работу таблиц с существующими (экспериментальными) inverted indexes. Обязательно удалите такие индексы перед обновлением и создайте их заново после обновления. #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показывает эти столбцы, но в новой версии она полностью пропускает такую таблицу. Удалены trace-сообщения лога “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). - У
Mapтеперь в качестве ключей могут использоватьсяFloat32,Float64,Array(T),Map(K, V)иTuple(T1, T2, ...). Закрывает #54537. #59318 (李扬). - Добавлена пакетная загрузка в
EmbeddedRocksDBпутём создания и загрузки SST-файла вместо использования встроенной в RocksDB memtable. Это помогает повысить скорость импорта, особенно для долго выполняющихся запросов вставки в таблицы StorageEmbeddedRocksDB. Также добавлены настройки таблицыEmbeddedRocksDB. #59163 #63324 (Duc Canh Le). - Теперь пользователь может разбирать CRLF в формате TSV с помощью настройки
input_format_tsv_crlf_end_of_line. Исправлено в #56257. #59747 (Shaun Struwig). - Новая настройка
input_format_force_null_for_omitted_fields, принудительно подставляющая значения NULL для пропущенных полей. #60887 (Constantine Peresypkin). - Ранее хранилище S3 и табличная функция s3 не поддерживали выборку данных из архивов, таких как tar, 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 server, позволяющая использовать Azure Workload Identity для аутентификации в Azure Blob Storage. Если в конфигурации задан параметрuse_workload_identity, для аутентификации используется Azure Workload Identity. #57881 (Vinay Suryadevara). - В таблицу
system.parts_columnsдобавлена информация о TTL. #63200 (litlig).
Экспериментальные возможности
- Реализован тип данных
Dynamic, который позволяет хранить значения любого типа, не зная заранее все возможные типы. ТипDynamicдоступен при включении настройкиallow_experimental_dynamic_type. Ссылка: #54864. #63058 (Kruglov Pavel). - Разрешено создавать базу данных
MaterializedMySQLбез подключения к MySQL. #63397 (Kirill). - Реплика базы данных Replicated теперь автоматически помечается как потерянная и запускается восстановление, если какая-либо DDL-задача завершается ошибкой более
max_retries_before_automatic_recovery(100 по умолчанию) раз подряд с одной и той же ошибкой. Также исправлена ошибка, из-за которой могли пропускаться DDL-записи, если на раннем этапе выполнения записи генерировалось исключение. #63549 (Alexander Tokmakov). - Для
StorageS3Queueдобавлен учет неудачных файлов вs3queue_tracked_file_ttl_secиs3queue_traked_files_limit. #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 (李扬). - Улучшена производительность глоб-шаблонов выбора (
{}) в StorageS3. #62120 (Andrey Zvonov). - HostResolver содержит каждый IP-адрес по нескольку раз. Если у удалённого хоста несколько IP-адресов и по какой-то причине (например, из-за правил firewall) доступ по одним 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).
- Исправлен межсерверный secret для Distributed поверх Distributed из
remote. #63013 (Azat Khuzhin). - Добавлена поддержка
include_fromдля YAML-файлов. Однако вместо этого лучше использоватьconfig.d#63106 (Eduard Karacharov). - Сохранять прежние данные в терминале после выбора из подсказок skim. #63261 (FlameFactory).
- Ширина полей (в форматах Pretty или в функции
visibleWidth) теперь корректно игнорирует 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). - Добавлен столбец build_id ALIAS в trace_log, чтобы упростить автоматическое переименование при обнаружении изменений в бинарном файле. Это сделано для исправления #52086. #63656 (Zimu Li).
- Добавлена поддержка операции TRUNCATE для дисков объектного хранилища. #63693 (MikhailBurdukov).
- Загрузка списка ключевых слов теперь зависит от ревизии сервера и будет отключена для старых версий сервера ClickHouse. CC @azat. #63786 (Nikita Mikhaylov).
- Диски ClickHouse должны считывать настройку сервера, чтобы определять фактическую версию формата метаданных. #63831 (Sema Checherinda).
- Ограничения формата Pretty (
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 в базе данных CI будет собираться информация о каждом символе в каждой единице трансляции. Это закрывает #63494. #63495 (Alexey Milovidov).
- Обновлена библиотека Apache Datasketches. Это устраняет #63858. #63923 (Alexey Milovidov).
- Включена поддержка GRPC для aarch64 Linux при кросс-компиляции бинарного файла. #64072 (alesapin).
- Исправлена раскрутка стека при SIGSEGV на aarch64 (из-за слишком маленького стека для сигнала) #64058 (Azat Khuzhin).
Исправление ошибок
- Настройка
enable_vertical_finalпо умолчанию отключена. Эту возможность не следует использовать, так как в ней есть ошибка: #64543. #64544 (Alexander Tokmakov). - Исправлено создание резервной копии при использовании нескольких сегментов #57684 (Vitaly Baranov).
- Исправлена передача проекций/индексов/первичного ключа из списка столбцов в запросе CREATE во внутреннюю таблицу MV #59183 (Azat Khuzhin).
- Исправлено некорректное слияние
boundRatio#60532 (Tao Wang). - Исправлен сбой при вызове некоторых функций на константных столбцах LowCardinality #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).
- Исправлено завершение работы 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).
- Вызов Insert 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).
- Исправлен pushdown фильтра для Parquet и, возможно, для StorageMerge #63642 (Michael Kolupaev).
- Предотвращено преобразование в Replicated, если путь ZooKeeper уже существует #63670 (Kirill).
- Анализатор: представления считывают только необходимые столбцы #63688 (Maksim Kita).
- Анализатор: запрещено переопределение 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для URI S3 #63806 (Julia Kartseva). - Исправлена deadlock в
ParallelReadBuffer#63814 (Antonio Andelic). - Исправлено проталкивание фильтра JOIN для эквивалентных столбцов #63819 (Maksim Kita).
- Удаление данных со всех дисков после DROP в базе данных Lazy. #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).
- Анализатор: исправлено разрешение COLUMNS #63962 (Dmitry Novik).
- LIMIT BY и skip_unused_shards в анализаторе #63983 (Nikolai Kochetov).
- Исправление кое-какого мусора (экспериментальный 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).
- Исправлена запись multipart-блоков в резервную копию Azure блоками по 1 MiB (размер буфера чтения) вместо
max_upload_part_size(в случае ненативного копирования) #64117 (Kseniia Sumarokova). - Корректное переключение на резервный вариант при копировании резервной копии #64153 (Antonio Andelic).
- Предотвращено возникновение LOGICAL_ERROR при CREATE TABLE для 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снята метка «экспериментальный». Теперь он находится на стадии бета. #62937 (Justin de Guzman).
Новая возможность
- Добавлена поддержка рекурсивных CTE. #62074 (Maksim Kita).
- Добавлена поддержка условия
QUALIFY. Закрывает #47819. #62619 (Maksim Kita). - Теперь для движков таблиц можно выдавать grant, и это не повлияет на поведение существующих пользователей. #60117 (jsc0218).
- Добавлен перезаписываемый диск S3, который поддерживает операции INSERT и не требует локально хранимых метаданных. #61116 (Julia Kartseva). Основной сценарий использования — system tables.
- Подсветка синтаксиса при вводе в клиенте теперь будет работать на уровне синтаксиса (ранее она работала на уровне лексера). #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). - В HTTP interface добавлен query parameter
role. Он работает аналогичноSET ROLE x, применяя роль до выполнения оператора. Это позволяет обойти ограничение HTTP interface, так как множественные команды не допускаются и невозможно одновременно отправить и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). - Добавлен persistent virtual column
_block_offset, который хранит исходный номер строки в block, присвоенный при вставке. Хранение столбца_block_offsetможно включить с помощью настройки MergeTreeenable_block_offset_column. Добавлен virtual column_part_data_version, который содержит либо минимальный номер блока, либо версию mutation части. Persistent virtual column_block_numberбольше не считается экспериментальным. #60676 (Anton Popov). - Добавлена настройка
input_format_json_throw_on_bad_escape_sequence; ее отключение позволяет сохранять некорректные escape-последовательности в JSON input formats. #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, теперь принудительно инлайнятся. #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). - Кэш страниц в пространстве пользователя теперь работает со статическим веб-хранилищем (
disk(type = web)). Для включения используйте клиентскую настройкуuse_page_cache_for_disks_without_file_cache=1. #61911 (Michael Kolupaev). - В типе
Variantварианты Bool и Number больше не считаются подозрительными. #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со strictnessANYработает согласованно после перезагрузки. При вставке нескольких строк с одинаковым ключом приоритет получает первая из них (раньше строка выбиралась случайным образом при загрузке таблицы). закрывает #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 Private Link. Закрывает #60021, #31074 и #53761. #62208 (Arthur Passos).
- Не создавать каталог для UDF в clickhouse-client, если он отсутствует. Это закрывает #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. Это необходимо, поскольку представленная в macOS El Capitan (2015) функция Apple’s System Integrity Protection запрещает запись в/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 для базы данных Replicated. #62818 (Vitaly Baranov). - Разрешено использовать ключ quota с другой схемой аутентификации в 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; в проверке обновления для таблиц Memory/JOIN использовать TRUNCATE вместо игнорирования DROP. #61476 (Kruglov Pavel).
- Из Docker-образа Keeper удалены тома /etc/clickhouse-keeper и /var/log/clickhouse-keeper. #61683 (Tristan).
- Добавлены тесты для всех задач, утративших актуальность после включения анализатора по умолчанию. Closes: #55794 Closes: #49472 Closes: #44414 Closes: #13843 Closes: #55803 Closes: #48308 Closes: #45535 Closes: #44365 Closes: #44153 Closes: #42399 Closes: #27115 Closes: #23162 Closes: #15395 Closes: #15411 Closes: #14978 Closes: #17319 Closes: #11813 Closes: #13210 Closes: #23053 Closes: #37729 Closes: #32639 Closes: #9954 Closes: #41964 Closes: #54317 Closes: #7520 Closes: #36973 Closes: #40955 Closes: #19687 Closes: #23104 Closes: #21584 Closes: #23344 Closes: #22627 Closes: #10276 Closes: #19687 Closes: #4567 Closes: #17710 Closes: #11068 Closes: #24395 Closes: #23416 Closes: #23162 Closes: #25655 Closes: #11757 Closes: #6571 Closes: #4432 Closes: #8259 Closes: #9233 Closes: #14699 Closes: #27068 Closes: #28687 Closes: #28777 Closes: #29734 Closes: #61238 Closes: #33825 Closes: #35608 Closes: #29838 Closes: #35652 Closes: #36189 Closes: #39634 Closes: #47432 Closes: #54910 Closes: #57321 Closes: #59154 Closes: #61014 Closes: #61950 Closes: #55647 Closes: #61947. #62185 (Nikita Mikhaylov).
- Добавлены дополнительные тесты по задачам, которые больше не актуальны или уже исправлены analyzer. Закрывает: #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 + анализаторе + 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 вместе с функциями JSONExtact #61957 (Nikita Mikhaylov).
- Сбой в движке Merge, если в Row Policy отсутствует выражение #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).
- Анализатор: исправлена ошибка разрешения параметров запроса #62186 (Dmitry Novik).
- Исправлено восстановление частей в режиме только для чтения #62207 (Vitaly Baranov).
- Исправлено падение в определении индекса, содержащем SQL UDF #62225 (vdimir).
- Исправлена ошибка с NULL в качестве начального значения генератора случайных чисел для generateRandom при использовании анализатора. #62248 (Nikolai Kochetov).
- Исправлена обработка константных столбцов в Distinct Transfom #62250 (Antonio Andelic).
- Исправлен Parts Splitter в запросах с модификатором FINAL #62268 (Nikita Taranov).
- Анализатор: исправлено разрешение псевдонима на параметризованное представление #62274 (Dmitry Novik).
- Анализатор: исправлено разрешение имён в родительских областях видимости #62281 (Dmitry Novik).
- Исправлен argMax для Nullable-столбца с ненативным числовым типом #62285 (Raúl Marín).
- Исправлены BACKUP и RESTORE materialized view в базе данных Ordinary #62295 (Vitaly Baranov).
- Исправлена гонка данных на скалярах в Context #62305 (Kruglov Pavel).
- Исправлен первичный ключ в materialized view #62319 (Murat Khairulin).
- Не создавать многопоточный конвейер вставки для таблиц без соответствующей поддержки #62333 (vdimir).
- Исправлена работа анализатора с позиционными аргументами в распределённом запросе #62362 (flynn).
- Исправлен pushdown фильтра из 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).
- Исправлена ошибка сегментации в экспериментальном и неподдерживаемом движке 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). - исправление: обновление: вложенные материализованные столбцы: исправления в проверке размера #62773 (Eliot Hautefeuille).
- Исправлено: в CTE с анализатором не учитывался модификатор FINAL #62811 (Duc Canh Le).
- Исправлено аварийное завершение функции
formatRowпри использовании форматаJSONи HTTP-интерфейса #62840 (Anton Popov). - Azure: исправлено формирование итогового URL из объекта конечной точки #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 protocol в 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. Строки в Parquet/ORC/Arrow поддерживают только UTF-8. Поэтому для типа данных ClickHouse String можно выбрать, какой тип данных Arrow использовать — 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). - Имя столбца в таблице
system.zookeeperизменено сduration_msнаduration_microseconds, чтобы отразить, что длительность измеряется с микросекундным разрешением. #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).
- Добавлена возможность Attach частей с другого диска (с копированием вместо жёсткой ссылки). #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, содержащая все ключевые слова из parser. В основном она нужна и будет использоваться для улучшения фаззинга и подсветки синтаксиса. #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. #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по умолчанию, что означает следующее: для составного первичного ключа, если столбец меняет своё значение как минимум в 0.9 всех случаев, последующие за ним столбцы загружаться не будут. #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 могут создаваться и отбрасываться во время разбора, в том числе при большом количестве откатов. Это приводит к замедлению на этапе разбора и, как следствие, позволяет readonly-пользователю устроить 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).
- Добавлена возможность использовать управляемую идентификацию для операций ввода-вывода резервных копий при работе с Azure Blob Storage. Также добавлена настройка, которая запрещает ClickHouse пытаться создавать несуществующий контейнер, поскольку для этого требуются разрешения на уровне storage account. #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 — терминал и output format не указан,
clickhouse-clientи похожие инструменты по умолчанию будут использоватьPrettyCompact, как и в interactive mode.clickhouse-clientиclickhouse-localбудут единообразно обрабатывать аргументы командной строки для input and output formats. Это закрывает #61272. #61800 (Alexey Milovidov). - В форматах Pretty группы цифр теперь можно разделять символом подчёркивания для лучшей читаемости. Это управляется новой настройкой
output_format_pretty_highlight_digit_groups. #61802 (Alexey Milovidov). - Добавлена возможность переопределять исходные настройки INSERT через
SYSTEM FLUSH DISTRIBUTED. #61832 (Azat Khuzhin). - По умолчанию включено профилирование processors (затраченное время, входящие и исходящие байты для сортировки, агрегации и т. д.). #61096 (Azat Khuzhin).
- Добавлена поддержка файлов без расширения формата в базе данных Filesystem. #60795 (Kruglov Pavel).
- Сделали все названия форматов регистронезависимыми: Tsv, TSV, tsv или даже rowbinary. #60420 (豪肥肥). Буду признателен, если вы и дальше будете писать их правильно, например
JSON😇, а неJson🤮, но мы не возражаем, если вы пишете так, как вам удобнее. - Добавлен режим
none_only_activeдля параметраdistributed_ddl_output_mode. #60340 (Alexander Tokmakov). - В панели Advanced dashboard немного улучшены цвета для графиков с несколькими линиями. #60391 (Alexey Milovidov).
- На панели мониторинга Advanced элементы управления теперь всегда видны при прокрутке. Это позволяет добавлять новый график, не прокручивая страницу вверх. #60692 (Alexey Milovidov).
- При выполнении запроса
MODIFY COLUMNдля materialized views проверяйте структуру внутренней таблицы, чтобы убедиться, что все столбцы существуют. #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 cache для слияний. #60308 (Kseniia Sumarokova).
- Улучшение протокола совместимости с MySQL. В задаче #57598 упоминается отличие в обработке транзакций. Команда COMMIT/ROLLBACK, выполненная при отсутствии активной транзакции, возвращает error, в отличие от поведения 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). - Добавлен флаг для алгоритма 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). - Теперь в подстановках конфигурации для поддеревьев
<include from_zk="/path" merge="true">можно указывать атрибут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).
- Попытка исправить логическую ошибку ‘Не удаётся захватить столбец из-за несовместимого типа’ в 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).
- Исправлена логическая ошибка при недопустимом типе значения настройки compatibility #60596 (Kruglov Pavel).
- fix(prql): Надёжный обработчик паники #60615 (Maximilian Roos).
- Исправлен
intDivдля десятичных аргументов и аргументов типа 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).
- Удалена некорректная проверка в агрегатной функции quantileGK #60740 (李扬).
- Исправлена ошибка insert-select + insert_deduplication_token установкой числа потоков в 1 #60745 (Jordi Villar).
- Запретить задавать пользовательские заголовки метаданных для неподдерживаемых операций multipart-загрузки #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).
- Исправлена оптимизация для последовательных Nullable-ключей #61393 (Anton Popov).
- исправлена проблема с разбиением DAG actions #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).
- Исправлен сбой в оконном представлении (экспериментальная возможность) #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). - Исправлено срабатывание sanitizer в
multiSearchAllPositionsCaseInsensitiveUTF8при некорректном UTF-8 #61749 (pufit). - Исправлено замечание о том, что рамка окна RANGE не поддерживается для столбцов с типом Nullable. #61766 (YuanLiu).
Релиз ClickHouse 24.2, 2024-02-29. Презентация, Видео
Обратно несовместимое изменение
- Добавлена проверка подозрительных/экспериментальных типов во вложенных типах. Ранее такие типы (кроме JSON) во вложенных типах, таких как Array/Tuple/Map, не проверялись. #59385 (Kruglov Pavel).
- Добавлена проверка корректности количества потоков и размеров блоков. #60138 (Raúl Marín).
- Числа с плавающей точкой в экспоненциальной записи больше не определяются автоматически по умолчанию. Добавлена настройка
input_format_try_infer_exponent_floats, которая восстанавливает прежнее поведение (по умолчанию отключена). Закрывает #59476. #59500 (Kruglov Pavel). - Теперь операции ALTER можно заключать в скобки. Выводом скобок можно управлять с помощью конфигурации
format_alter_operations_with_parentheses. По умолчанию в форматированных запросах скобки выводятся, так как в некоторых местах мы сохраняем форматированные операции ALTER как метаданные (например, mutations). Новый синтаксис делает более понятными некоторые запросы, в которых операции 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). - Исправлена проблема безопасности materialized view, из-за которой пользователь мог выполнять вставку в таблицу без необходимых привилегий. Теперь исправление проверяет, есть ли у пользователя разрешение на вставку не только в materialized view, но и во все базовые таблицы. Это означает, что некоторые запросы, которые раньше работали, теперь могут завершаться ошибкой
Not enough privileges. Для решения этой проблемы в релизе представлена новая возможность безопасности SQL для представлений: https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security. #54901 #60439 (pufit).
Новая возможность
- Добавлен новый синтаксис, позволяющий указывать пользователя-определителя в представлении/materialized view. Это позволяет выполнять операции 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 различных видов в Replicated-движок. Создайте пустой файл
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. Она отображает содержимое файлов индекса и marks таблицMergeTree. Ее можно использовать для интроспекции. Синтаксис:mergeTreeIndex(database, table, [with_marks = true]), гдеdatabase.table— существующая таблица с движкомMergeTree. #58140 (Anton Popov).
Экспериментальные возможности
- Добавлена функция
seriesOutliersDetectTukeyдля обнаружения выбросов в данных временных рядов с использованием метода ограждений Тьюки. #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; ускорение — до ~10x. #59413 (李扬). - Повышена производительность типа
Int8за счёт реализации строгого алиасинга (дляUInt8и всех остальных целочисленных типов он у нас уже есть). #59485 (Raúl Marín). - Оптимизирована производительность условного вычисления sum/avg для типов bigint и big decimal за счёт уменьшения числа ошибок предсказания ветвлений. #59504 (李扬).
- Повышена производительность запросов SELECT при активных мутациях. #59531 (Azat Khuzhin).
- Функция
isNotNullоптимизирована с использованием AVX2. #59621 (李扬). - Повышена производительность ASOF JOIN для отсортированных или почти отсортированных данных. #59731 (Maksim Kita).
- Прежнее значение по умолчанию для
async_insert_max_data_size, равное 1 MB, оказалось слишком маленьким. Новое значение — 10 MiB. #59536 (Nikita Mikhaylov). - Использование нескольких потоков при чтении метаданных таблиц из резервной копии во время выполнения команды RESTORE. #60040 (Vitaly Baranov).
- Теперь, если у
StorageBufferбольше 1 сегмента (num_layers> 1), фоновый сброс будет выполняться одновременно для всех сегментов в нескольких потоках. #60111 (alesapin).
Улучшение
- Когда в качестве output format используется формат
Prettyи block состоит из единственного числового значения, превышающего один миллион, справа от table будет выведено удобочитаемое число. #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). - Включена логика экспоненциальной задержки при ошибках во время мутаций. Это позволит снизить загрузку 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, а затем переключаться на программный кодек. #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достаточно мал, а таблицы содержат широкие строки (например, со значениями String или Tuple), фоновые слияния могут зациклиться. Это поведение исправлено. Дополнение к https://github.com/ClickHouse/ClickHouse/pull/59340. #59812 (Nikita Mikhaylov). - Разрешить использование uuid в replica_path, если он явно указан в CREATE TABLE. #59908 (Azat Khuzhin).
- В системную таблицу
system.tablesдобавлен столбецmetadata_versionдля таблиц ReplicatedMergeTree. #59942 (Maksim Kita). - Улучшение Keeper: для Prometheus отправляются только метрики/события, связанные с Keeper. #59945 (Antonio Andelic).
- Панель мониторинга будет отображать метрики в разных версиях ClickHouse, даже если после обновления изменилась структура системных таблиц. #59967 (Alexey Milovidov).
- Добавлена возможность загружать информацию об AZ из файла. #59976 (Konstantin 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 добавлено резервное копирование через buffer на случай, если GCP возвращает
Internal Errorс HTTP-кодом ошибкиGATEWAY_TIMEOUT. #60164 (Maksim Kita). - Выполнение с коротким замыканием для
ULIDStringToDateTime. #60211 (Juan Madurga). - Добавлен столбец
query_idв таблицахsystem.backupsиsystem.backup_log. В столбец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).
- Обновлён toolchain Rust в
corrosion-cmake, когда задана переменная toolchain CMake для кросс-компиляции. #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).
- Фаззер запросов теперь будет выполнять фаззинг 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при использовании анализатора #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).
- Исправлена distributed таблица с константным ключом сегментирования #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-фаззера в функции
countMatches#59752 (Robert Schulze). - RabbitMQ: исправлена ситуация, при которой сообщения не были ни подтверждены, ни отклонены #59775 (Kseniia Sumarokova).
- Исправлено: в StorageURL часть выполнения запроса происходила в одном потоке #59833 (Michael Kolupaev).
- S3Queue: исправлено использование неинициализированного значения #59897 (Kseniia Sumarokova).
- Исправлен разбор выражений партиционирования в круглых скобках #59901 (János Benjamin Antal).
- Исправлен сбой в формате JSONColumnsWithMetadata при использовании HTTP #59925 (Kruglov Pavel).
- Не выполнять переписывание
sumвcount, если возвращаемое значение отличается, в анализаторе #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 #60160 (Robert Schulze).
- Исправлена ошибка в
system.s3queue_log#60166 (Kseniia Sumarokova). - Исправлена ошибка в arrayReduce при Nullable-имени агрегатной функции #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).
- Исправлена небольшая ошибка, из-за которой запросы к distributed таблицам, отправленные из клиентов с диалектами 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, которые позволяют преобразовывать интернационализированные доменные имена в 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). - Добавлена возможность считывать значения Bool как String во входных форматах JSON. Это делается с помощью настройки
input_format_json_read_bools_as_strings, которая включена по умолчанию. #58561 (Kruglov Pavel). - Добавлена функция
seriesDecomposeSTL, которая раскладывает временной ряд на сезонную составляющую, тренд и остаточную составляющую. #57078 (Bhavna Jindal). - Добавлен клиент MySQL Binlog для MaterializedMySQL: одно binlog-подключение для множества баз данных. #57323 (Val Doroshchuk).
- Intel QuickAssist Technology (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для ограничения количества materialized views, прикреплённых к таблице. #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гарантирует, что мы ждём завершения загрузок и операций drop-range только для указанных исходных реплик, а также для любой реплики, отсутствующей в ZooKeeper или с пустым source_replica. #58393 (Jayme Bird). - Добавлена настройка
update_insert_deduplication_token_in_dependent_materialized_views. Эта настройка позволяет обновлять токен дедупликации вставки идентификатором таблицы при вставке в зависимые materialized view. Закрывает #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. Обратите внимание на изменение поведения: ранее запросы с модификатором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). В предыдущих реализациях выполнялось больше выделений, чем было необходимо. Ускорение после оптимизации достигает ~6x, особенно для входного типа Array(Map). #56403 (李扬).
- Столбец читается один раз при чтении из него более чем одного подстолбца в компактных частях. #57631 (Kruglov Pavel).
- Переписывание AST для функции
sum(column + constant). Доступно как проход оптимизации в Analyzer #57853 (Jiebin Sun). - Вычисление функции
matchтеперь использует пропускающие индексыngrambf_v1иtokenbf_v1. #57882 (凌涛). - При вычислении функции
matchтеперь используются инвертированные индексы. #58284 (凌涛). - MergeTree
FINALне сравнивает строки из одной и той же non-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, если включен профилировщик. В Keeper добавлены связанные с jemalloc команды 4LW: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>, позволяющий избежать разрешения имён хостов в DDL-запросах с предложением ON CLUSTER и в движках баз данных Replicated. Это уменьшает вероятность зависания очереди при изменении конфигурации кластера. Закрывает #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на столбецchangeable_without_restartтипа Enum8 с возможными значениямиNo,Yes,IncreaseOnlyиDecreaseOnly. Также задокументировали этот столбец. #58029 (skyoct). - Cluster Discovery поддерживает указание имени пользователя и пароля, закрыто #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иmax_estimated_execution_time. #58402 (Zhang Yifan). - Добавлена подсказка при использовании недопустимого имени движка базы данных. #58444 (Bharat Nallan).
- Добавлены настройки для более гибкого управления типом индексов в словаре Arrow. По умолчанию для индексов теперь используется знаковый целочисленный тип в соответствии с рекомендациями Arrow. Закрывает #57401. #58519 (Kruglov Pavel).
- Добавлена #58575 поддержка переменной окружения
CLICKHOUSE_PASSWORD_FILEпри запуске Docker-образа. #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(default=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, который используется, если первый не задан. Параметр файлового кэша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). - Разрешён запуск сервера с повреждённой таблицей озера данных. Закрывает #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 распознаёт случаи, когда в 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).
- В тестах с сохранением состояния теперь используются таблицы, напрямую присоединённые из 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).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Добавлено преобразование ключей JOIN для вложенного LowCardinality #51550 (vdimir).
- Разворачивать только настоящий тип Nested, если flatten_nested=1, а не все Array(Tuple) #56132 (Kruglov Pavel).
- Исправлена ошибка с проекциями и настройкой
aggregate_functions_null_for_emptyпри вставке. #56944 (Amos Bird). - Исправлено потенциальное исключение из-за устаревшего UUID профиля #57263 (Vasily Nemkov).
- Исправлена работа с буферами чтения в StreamingFormatExecutor #57438 (Kruglov Pavel).
- Игнорировать MV с удалённой целевой таблицей при записи в представления #57520 (Kruglov Pavel).
- Устранено возможное состояние гонки между 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 отсутствовала agg-функция #58453 (Duc Canh Le).
- Отложено чтение из StorageKafka, чтобы обеспечить несколько чтений в materialized views #58477 (János Benjamin Antal).
- Исправлен нелепый случай пересекающихся частей #58482 (Alexander Tokmakov).
- Отключение MergeTreePrefetchedReadPool для запросов, содержащих только LIMIT #58505 (Maksim Kita).
- Добавлена поддержка обычных баз данных при восстановлении #58520 (Jihyuk Bok).
- Исправлено чтение через threadpool Apache Hive для ORC/Parquet/… #58537 (sunny).
- Скрытие учетных данных в столбце
base_backup_nameтаблицыsystem.backup_log#58550 (Daniel Pozo Escalona). toStartOfIntervalдля округления значений с точностью до милли- и микросекунд #58557 (Yarik Briukhovetskyi).- Отключён
max_joined_block_rowsв ConcurrentHashJoin #58595 (vdimir). - Исправлена работа JOIN с Nullable в старом анализаторе #58596 (vdimir).
makeDateTime64: разрешено использовать неконстантный аргумент fraction #58597 (Robert Schulze).- Исправлено возможное разыменование NULL при символизации инлайн-фреймов #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).
- Хранилище FileLog с многократным чтением в mv #58877 (János Benjamin Antal).
- Ограничение для идентификатора ключа доступа к S3. #58900 (MikhailBurdukov).
- Устранён возможный сбой clickhouse-local при загрузке подсказок #58907 (Kruglov Pavel).
- Исправлен сбой при использовании
indexHint#58911 (Dmitry Novik). - Исправлена потеря заголовков в StorageURL при перезапуске сервера #58933 (Michael Kolupaev).
- Анализатор: исправлена замена хранилища блоком вставки #58958 (Yakov Olkhovskiy).
- Исправлен seek в ReadBufferFromZipArchive #58966 (Michael Kolupaev).
- Исправление для экспериментальных инвертированных индексов (не используйте в production):
DROP INDEXдля инвертированного индекса теперь удаляет из постоянного хранилища все связанные файлы #59040 (mochi). - Исправлено состояние гонки в query_factories_info #59049 (Kseniia Sumarokova).
- Отключены повторные попытки при ошибке “Too many redirects” #59099 (skyoct).
- Исправлена взаимоблокировка при остановке незапущенной базы данных #59137 (Sergei Trifonov).
- Исправлено: LIMIT BY и LIMIT в распределённом запросе #59153 (Igor Nikonov).
- Исправлен сбой в
toStringпри nullable timezone #59190 (Yarik Briukhovetskyi). - Исправлено аварийное завершение в метаданных Iceberg из-за некорректных путей к файлам #59275 (Kruglov Pavel).
- Исправлено название архитектуры в списке выбора цели Rust #59307 (p1rattttt).
- Исправлена логическая ошибка, связанная с “неготовым” множеством, при запросах к
system.tablesс подзапросом в условии IN. #59351 (Nikolai Kochetov).