Тег релиза ClickHouse: 24.2.2.15987
Обратно несовместимое изменение
- Проверка подозрительных/экспериментальных типов внутри вложенных типов. Ранее мы не проверяли такие типы (кроме JSON) внутри вложенных типов, таких как Array/Tuple/Map. #59385 (Kruglov Pavel).
- Условие сортировки
ORDER BY ALL(добавленное в v23.12) заменено наORDER BY *. Прежний синтаксис был слишком подвержен ошибкам для таблиц со столбцомall. #59450 (Robert Schulze). - Добавлена базовая проверка количества потоков и размеров блоков. #60138 (Raúl Marín).
- Отклонять входящие запросы 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 ### Запись в документации об изменениях, заметных пользователям. #61058 (Nikita Mikhaylov). - Для повышения совместимости с MySQL функция
locateтеперь по умолчанию принимает аргументы(needle, haystack[, start_pos]). Прежнее поведение(haystack, needle, [, start_pos])можно восстановить, установивfunction_locate_has_mysql_compatible_argument_order = 0. #61092 (Robert Schulze). - Устаревшие части данных в памяти были объявлены устаревшими начиная с версии 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). - По умолчанию запретить
SimpleAggregateFunctionвORDER BYтаблицMergeTree(как иAggregateFunction; они запрещены, поскольку не поддерживают сравнение) (используйтеallow_suspicious_primary_key, чтобы разрешить их). #61399 (Azat Khuzhin). - ClickHouse допускает произвольные двоичные данные в типе String, который обычно содержит UTF-8. Строки в Parquet/ORC/Arrow поддерживают только UTF-8. Поэтому для типа String в ClickHouse можно выбрать, какой тип данных 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). - Исправление проблемы безопасности materialized view, из-за которой пользователь мог вставлять данные в таблицу без необходимых для этого привилегий. Теперь проверяется, что у пользователя есть разрешение на вставку не только в materialized view, но и во все базовые таблицы. Это означает, что некоторые запросы, которые раньше работали, теперь могут завершаться ошибкой Not enough privileges. Чтобы решить эту проблему, в релизе представлена новая возможность безопасности SQL для представлений https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security. #54901 (pufit)
Новая возможность
- Поддержка режима Topk/topkweighed, который возвращает количество значений и погрешность. #54508 (UnamedRus).
- Добавлен новый синтаксис, позволяющий указывать пользователя-определителя для view/materialized view. Это позволяет выполнять запросы SELECT и операции вставки через представления без явных привилегий на базовые таблицы. #54901 (pufit).
- Реализовано автоматическое преобразование таблиц MergeTree различных типов в движок Replicated. Создайте пустой файл
convert_to_replicatedв каталоге данных таблицы (/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/), и при следующем запуске сервера эта таблица будет автоматически преобразована. #57798 (Kirill). - Добавлена табличная функция
mergeTreeIndex. Она показывает содержимое файлов индекса и меток таблицMergeTree. Ее можно использовать для интроспекции. Синтаксис:mergeTreeIndex(database, table, [with_marks = true]), гдеdatabase.table— существующая таблица с движкомMergeTree. #58140 (Anton Popov). - Пытаться автоматически определять формат файла при определении схемы, если он неизвестен в движках
file/s3/hdfs/url/azureBlobStorage. Закрывает #50576. #59092 (Kruglov Pavel). - Добавлена табличная функция generate_series. Эта функция генерирует таблицу с арифметической прогрессией натуральных чисел. #59390 (divanik).
- Добавлен запрос
ALTER TABLE table FORGET PARTITION partition, удаляющий узлы ZooKeeper, связанные с пустой партицией. #59507 (Sergei Trifonov). - Добавлена поддержка чтения и записи резервных копий в формате tar-архивов. #59535 (josh-hildred).
- Добавлена новая агрегатная функция ‘groupArrayIntersect’. В продолжение: #49862. #59598 (Yarik Briukhovetskyi).
- Реализована таблица system.dns_cache, которая может быть полезна для диагностики проблем с DNS. #59856 (Kirill Nikiforov).
- Добавлена поддержка бакетов S3Express. #59965 (Nikita Taranov).
- Кодек
LZ4HCтеперь поддерживает новый уровень 2, который работает быстрее прежнего минимального уровня 3, но обеспечивает меньшее сжатие. В предыдущих версияхLZ4HC(2)и ниже было равнозначноLZ4HC(3). Автор: Cyan4973. #60090 (Alexey Milovidov). - Реализована таблица system.dns_cache, которая может быть полезна при отладке проблем с DNS. Добавлена новая настройка сервера dns_cache_max_size. #60257 (Kirill Nikiforov).
- Добавлена функция
toMillisecond, которая возвращает миллисекундную составляющую для значений типаDateTimeилиDateTime64. #60281 (Shaun Struwig). - Добавлена поддержка варианта табличной функции
mergeс одним аргументом:merge(['db_name', ] 'tables_regexp'). #60372 (豪肥肥). - Все названия форматов теперь регистронезависимы: Tsv, TSV, tsv или даже rowbinary. #60420 (豪肥肥).
- Добавлен новый синтаксис, позволяющий указывать пользователя-определителя в view/materialized view. Это позволяет выполнять SELECT/INSERT через представления без явных привилегий на базовые таблицы. #60439 (pufit).
- Добавлены четыре свойства для
StorageMemory(memory-engine):min_bytes_to_keep,max_bytes_to_keep,min_rows_to_keepиmax_rows_to_keep— добавлены тесты, отражающие эти изменения, — обновлена документацияmemory.md— вMemorySinkдобавлено свойство таблицыcontext, чтобы обеспечить доступ к ограничениям параметров таблицы. #60612 (Jake Bamrah). - Добавлена функция
toMillisecond, которая возвращает миллисекундную составляющую для значений типаDateTimeилиDateTime64. #60649 (Robert Schulze). - Раздельные ограничения на число ожидающих и выполняемых запросов. Добавлена новая настройка сервера
max_waiting_queries, которая ограничивает число запросов, ожидающих из-заasync_load_databases. Существующие ограничения на число выполняемых запросов больше не учитывают ожидающие запросы. #61053 (Sergei Trifonov). - Добавлена поддержка
ATTACH PARTITION ALL. #61107 (Kirill Nikiforov).
Повышение производительности
- Убирает агрегаторы min/max/any/anyLast для ключей GROUP BY в секции SELECT. #52230 (JackyWoo).
- Улучшена производительность сериализованного метода агрегации при работе с несколькими [nullable] столбцами. Это обобщённая версия #51399, которая не нарушает целостность абстракции. #55809 (Amos Bird).
- Ленивое построение результата JOIN для повышения производительности ALL JOIN. #58278 (LiuNeng).
- Повышена производительность агрегатных функций ArgMin / ArgMax / any / anyLast / anyHeavy, а также запросов
ORDER BY {u8/u16/u32/u64/i8/i16/u32/i64) LIMIT 1. #58640 (Raúl Marín). - Оптимизирована производительность условных sum/avg для bigint и больших типов Decimal за счёт уменьшения числа промахов предсказателя ветвлений. #59504 (李扬).
- Повышена производительность запросов SELECT при наличии активных мутаций. #59531 (Azat Khuzhin).
- Небольшая оптимизация фильтрации по столбцам. Фильтрация по тем столбцам фильтра, чей базовый тип данных не является числовым, при
result_size_hint = -1теперь не выполняется. В некоторых случаях пиковое потребление памяти можно снизить до 44% от исходного. #59698 (李扬). - Для первичного ключа будет использоваться меньше памяти. #60049 (Alexey Milovidov).
- Улучшено использование памяти при работе с первичным ключом и некоторыми другими операциями. #60050 (Alexey Milovidov).
- Первичные ключи таблиц будут загружаться в память отложенно, при первом обращении. Это поведение контролируется новой настройкой MergeTree
primary_key_lazy_load, которая включена по умолчанию. Это дает несколько преимуществ: - они не будут загружаться для таблиц, которые не используются; - если памяти недостаточно, при первом использовании будет сгенерировано исключение, а не при запуске сервера. Это также имеет несколько недостатков: - задержка, связанная с загрузкой первичного ключа, будет приходиться на первый запрос, а не возникать до начала приема соединений; теоретически это может привести к эффекту thundering herd. Это закрывает #11188. #60093 (Alexey Milovidov). - Векторизованная функция
dotProduct, полезная при векторном поиске. #60202 (Robert Schulze). - Если первичный ключ таблицы состоит в основном из бесполезных столбцов, не держите их в памяти. Это регулируется новой настройкой
primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columnsсо значением0.9по умолчанию, что означает: для составного первичного ключа, если столбец меняет своё значение как минимум в 0.9 всех случаев, следующие за ним столбцы загружаться не будут. #60255 (Alexey Milovidov). - Выполнять функцию multiIf в столбцовом режиме, если базовый тип result_type — числовой. #60384 (李扬).
- Как показано на рис. 1, замена ”&&” на ”&” позволяет сгенерировать SIMD-код.
Рис. 1. Код, полученный при компиляции ’&&’ (слева) и ’&’ (справа). #60498 (Zhiguo Zhou).
- Ускорены (почти в 2 раза) мьютексы (раньше работали медленнее из-за ThreadFuzzer). #60823 (Azat Khuzhin).
- Перенесён этап освобождения соединений из
prepareвwork, а также реализовано параллельное освобождение нескольких соединений. #60845 (lizhuoyu5). - Оптимизирована
insertManyFromдля Nullable(Number) и Nullable(String). #60846 (李扬). - Оптимизирована функция
dotProduct, чтобы избежать ненужного и дорогостоящего копирования данных в памяти. #60928 (Robert Schulze). - Операции с файловым кэшем будут меньше страдать из-за конкуренции за блокировки. #61066 (Alexey Milovidov).
- Оптимизирован
ColumnString::replicate, а также предотвращено преобразованиеmemcpySmallAllowReadWriteOverflow15Implво встроенныйmemcpyпри оптимизации. Закрывает #61074.ColumnString::replicateработает в 2,46 раза быстрее на x86-64. #61075 (李扬). - Печать 256-битных целых чисел стала в 30 раз быстрее. #61100 (Raúl Marín).
- Если запрос с синтаксической ошибкой содержал матчер COLUMNS с регулярным выражением, это регулярное выражение компилировалось при каждом откате парсера, вместо того чтобы компилироваться один раз. Это была фундаментальная ошибка. Скомпилированное регулярное выражение помещалось в AST. Но буква A в AST означает “абстрактное”, а это значит, что оно не должно содержать тяжеловесных объектов. Части AST могут создаваться и отбрасываться во время разбора, в том числе при большом количестве откатов. Это замедляет разбор и, как следствие, позволяет пользователю только для чтения устраивать DoS-атаки. Но главная проблема в том, что это не даёт фаззерам продвигаться дальше. #61543 (Alexey Milovidov).
Улучшения
- При выполнении запроса MODIFY COLUMN для materialized views проверяется структура внутренней таблицы, чтобы убедиться в наличии каждого столбца. #47427 (sunny).
- Добавлена таблица
system.keywords, содержащая все ключевые слова из парсера. В основном она нужна и будет использоваться для улучшения фаззинга и подсветки синтаксиса. #51808 (Nikita Mikhaylov). - Добавлена поддержка параметризованного представления в анализаторе, чтобы не анализировать создание параметризованного представления. Переработана существующая логика параметризованного представления, чтобы не анализировать создание параметризованного представления. #54211 (SmitaRKulkarni).
- Движок базы данных Ordinary устарел. Если ваш сервер использует его, в clickhouse-client вы получите предупреждение. Это закрывает #52229. #56942 (shabroo).
- При удалении таблицы необходимо удалить все блокировки zero copy, связанные с ней. Также нужно удалить каталог, в котором хранятся эти блокировки. #57575 (Sema Checherinda).
- Реализована поддержка короткого замыкания для функции
dictGetOrDefault. Закрывает #52098. #57767 (jsc0218). - Разрешено объявлять тип enum в структуре внешней таблицы. #57857 (Duc Canh Le).
- Выполнение
ALTER COLUMN MATERIALIZEдля столбца с выражениемDEFAULTилиMATERIALIZEDтеперь записывает правильные значения: значение по умолчанию для существующих частей со значением по умолчанию и не заданное по умолчанию значение для существующих частей с не заданным по умолчанию значением. Ранее для всех существующих частей записывалось значение по умолчанию. #58023 (Duc Canh Le). - Включена логика задержки повторных попыток (например, экспоненциальной). Это позволит снизить нагрузку на CPU, использование памяти и размеры файлов журнала. #58036 (MikhailBurdukov).
- При выборе частей для слияния теперь учитываются строки, удалённые с помощью легковесного удаления. #58223 (Zhuo Qiu).
- Добавлена возможность задавать
volume_priorityвstorage_configuration. #58533 (Andrey Zvonov). - Добавлена поддержка типа Date32 в кодеке T64. #58738 (Hongbin Ma).
- Этот PR позволяет повторно использовать HTTP/HTTPS-соединения во всех случаях. Даже если ответ имеет код 3xx или 4xx. #58845 (Sema Checherinda).
- Добавлены комментарии для столбцов в дополнительных системных таблицах. Продолжение https://github.com/ClickHouse/ClickHouse/pull/58356. #59016 (Nikita Mikhaylov).
- Теперь в PREWHERE можно использовать виртуальные столбцы. Это особенно полезно для неконстантных виртуальных столбцов, таких как
_part_offset. #59033 (Amos Bird). - Настройки для движка таблицы Distributed теперь можно задавать в файле конфигурации сервера (как и настройки MergeTree), например:
<distributed> <flush_on_detach>false</flush_on_detach> </distributed>. #59291 (Azat Khuzhin). - Улучшение Keeper: хранить в памяти только ограниченное количество журналов; это количество задается параметрами
latest_logs_cache_size_thresholdиcommit_logs_cache_size_threshold. #59460 (Antonio Andelic). - Вместо использования постоянного ключа объектное хранилище теперь генерирует ключ для проверки возможности удаления объектов. #59495 (Sema Checherinda).
- По умолчанию не определять числа с плавающей запятой в экспоненциальной форме. Добавлена настройка
input_format_try_infer_exponent_floats, которая восстанавливает прежнее поведение (по умолчанию отключена). Закрывает #59476. #59500 (Kruglov Pavel). - Разрешено заключать операции ALTER в круглые скобки. Выводом круглых скобок можно управлять с помощью настройки
format_alter_operations_with_parentheses. По умолчанию в отформатированных запросах круглые скобки выводятся, поскольку в некоторых местах мы храним отформатированные операции ALTER как метаданные (например, Мутации). Новый синтаксис делает более понятными некоторые запросы, в которых операции ALTER заканчиваются списком. Например, запросALTER TABLE x MODIFY TTL date GROUP BY a, b, DROP COLUMN cневозможно корректно разобрать при старом синтаксисе. В новом синтаксисе запросALTER TABLE x (MODIFY TTL date GROUP BY a, b), (DROP COLUMN c)однозначен. Старые версии не могут читать новый синтаксис, поэтому его использование может вызвать проблемы, если в одном кластере одновременно используются более новые и более старые версии ClickHouse. #59532 (János Benjamin Antal). - Обновили Intel QPL (используется кодеком
DEFLATE_QPL) с v1.3.1 до v1.4.0. Также исправили ошибку в механизме тайм-аута при polling: мы заметили, что в некоторых случаях тайм-аут срабатывал некорректно — если происходил тайм-аут, IAA и CPU могли обрабатывать буфер одновременно. На данный момент лучше убедиться, что статус кодека IAA не равен QPL_STS_BEING_PROCESSED, и затем переключаться на программный кодек. #59551 (jasperzhu). - Добавлена поддержка позиционного
preadв libhdfs3. Чтобы вызвать позиционное чтение в libhdfs3, используйте функциюhdfsPreadиз hdfs.h следующим образом:tSize hdfsPread(hdfsFS fs, hdfsFile file, void * buffer, tSize length, tOffset position);. #59624 (M1eyu). - Добавлена проверка на переполнение стека в парсерах, даже если пользователь неправильно настроил параметр
max_parser_depth, задав слишком большое значение. Это закрывает #59622. #59697 (Alexey Milovidov). - Унифицировано поведение именованных коллекций, созданных через XML и SQL, в хранилище Kafka. #59710 (Pervakov Grigorii).
- Разрешено использовать uuid в replica_path, если он явно указан в CREATE TABLE. #59908 (Azat Khuzhin).
- В системную таблицу
system.tablesдобавлен столбецmetadata_versionдля таблиц ReplicatedMergeTree. #59942 (Maksim Kita). - Улучшение Keeper: добавлены повторные попытки при ошибках в операциях, связанных с диском. #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). - При чтении метаданных таблиц из резервной копии во время выполнения команды RESTORE используется несколько потоков. #60040 (Vitaly Baranov).
- Теперь, если у
StorageBufferболее 1 сегмента (num_layers> 1), фоновый flush будет выполняться одновременно для всех сегментов в нескольких потоках. #60111 (alesapin). - Добавлена возможность указывать пользователей для отдельных настроек S3 в конфигурации с помощью ключа
user. #60144 (Antonio Andelic). - Добавлено резервное переключение с копирования S3-файла из GCP на копирование через buffer, если GCP возвращает
Internal Errorс кодом HTTP-ошибкиGATEWAY_TIMEOUT. #60164 (Maksim Kita). - Разрешить использовать “local” в качестве типа объектного хранилища вместо “local_blob_storage”. #60165 (Kseniia Sumarokova).
- Реализован оператор сравнения для значений Variant и корректная вставка Field в столбец Variant. По умолчанию запрещено создавать тип
Variantс похожими типами варианта (это можно разрешить с помощью настройкиallow_suspicious_variant_types). Закрывает #59996. Закрывает #59850. #60198 (Kruglov Pavel). - Повышено общее удобство использования виртуальных столбцов. Теперь виртуальные столбцы можно использовать в
PREWHERE(это особенно полезно для неконстантных виртуальных столбцов, таких как_part_offset). Также для виртуальных столбцов теперь доступна встроенная документация в виде комментария к столбцу в запросеDESCRIBEпри включенной настройкеdescribe_include_virtual_columns. #60205 (Anton Popov). - Короткое замыкание при выполнении
ULIDStringToDateTime. #60211 (Juan Madurga). - В таблицы
system.backupsиsystem.backup_logдобавлен столбецquery_id. В столбецerrorдобавлена трассировка стека ошибки. #60220 (Maksim Kita). - Параллельный сброс ожидающих блоков вставки движка Distributed при
DETACH/выключении сервера иSYSTEM FLUSH DISTRIBUTED(параллелизм будет работать, только если для таблицы настроена политика с несколькими дисками (как и всё в движке Distributed сейчас)). #60225 (Azat Khuzhin). - Параметр filter в
joinRightColumnsSwitchNullabilityзадан некорректно, исправлено #59625. #60259 (lgbo). - Добавлена настройка, принудительно включающая read-through cache для слияний. #60308 (Kseniia Sumarokova).
- В issue #57598 упоминается особенность поведения при обработке транзакций. Если выполнить COMMIT/ROLLBACK, когда ни одна транзакция не активна, это будет зарегистрировано как ошибка, в отличие от поведения MySQL. #60338 (PapaToemmsn).
- Добавлен режим
none_only_activeдля параметраdistributed_ddl_output_mode. #60340 (Alexander Tokmakov). - Соединения через порт 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). - Когда output format — Pretty format, а block состоит из одного числового значения, превышающего один миллион, справа в table будет выведено число в удобочитаемом виде. Например:
┌──────count()─┐ │ 233765663884 │ -- 233.77 billion └──────────────┘. #60379 (rogeryk). - Добавлена возможность настраивать обработчики HTTP-перенаправлений для clickhouse-server. Например, можно сделать так, чтобы
/перенаправлял в интерфейс Play. #60390 (Alexey Milovidov). - Расширенная панель мониторинга получила немного улучшенную цветовую схему для многолинейных графиков. #60391 (Alexey Milovidov).
- Исправлено состояние гонки в коде JavaScript, приводившее к дублированию диаграмм, накладывающихся друг на друга. #60392 (Alexey Milovidov).
- Проверка переполнения стека в парсерах, даже если пользователь по ошибке установил для параметра
max_parser_depthочень большое значение. Это закрывает #59622. #60434 (Alexey Milovidov). - У функции
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).
- Добавлена инъекция сбоев при разделении диапазонов чтения MergeTree на пересекающиеся и непересекающиеся с использованием настройки
merge_tree_read_split_ranges_into_intersecting_and_non_intersecting_fault_probability. #60548 (Maksim Kita). - На панели мониторинга Advanced элементы управления теперь всегда остаются видимыми при прокрутке. Это позволяет добавлять новый график без прокрутки вверх. #60692 (Alexey Milovidov).
- Типы String и enum можно использовать в одном контексте, например в массивах, запросах UNION и условных выражениях. Это закрывает #60726. #60727 (Alexey Milovidov).
- tzdata обновлён до версии 2024a. #60768 (Raúl Marín).
- Поддержка файлов без расширения в базе данных Filesystem. #60795 (Kruglov Pavel).
- Улучшение в 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). - Добавлен флаг для SMJ, позволяющий трактовать NULL как наибольшее/наименьшее значение, чтобы поведение было совместимо с другими SQL-системами, такими как Apache Spark. #60896 (loudongfeng).
- Версия ClickHouse была добавлена в метки Docker. Закрывает #54224. #60949 (Nikolay Monkov).
- Добавлена настройка
parallel_replicas_allow_in_with_subquery = 1, позволяющая использовать подзапросы в IN при работе с параллельными репликами. #60950 (Nikolai Kochetov). - DNSResolver перемешивает набор разрешённых IP-адресов. #60965 (Sema Checherinda).
- Добавлена поддержка определения формата вывода по расширению файла в
clickhouse-clientиclickhouse-local. #61036 (豪肥肥). - Периодически проверять изменения лимита памяти. #61049 (Han Fei).
- По умолчанию включён сбор данных профилирования процессоров (затраченное время, объём входящих и исходящих байтов для сортировки, агрегации, …). #61096 (Azat Khuzhin).
- Добавлена функция
toUInt128OrZero, которая была по ошибке пропущена (эта ошибка связана с https://github.com/ClickHouse/ClickHouse/pull/945). Псевдонимы совместимостиFROM_UNIXTIMEиDATE_FORMAT(они не являются встроенными в ClickHouse и существуют только для совместимости с MySQL) сделали регистронезависимыми, как и ожидается от SQL-совместимых псевдонимов. #61114 (Alexey Milovidov). - Улучшены проверки доступа: теперь можно отзывать непредоставленные права, даже если у целевого пользователя тоже нет привилегий на отзыв. Пример: ```sql GRANT SELECT ON . TO user1; REVOKE SELECT ON system.* FROM user1;. #61115 (pufit).
- Исправлена ошибка в предыдущей оптимизации: https://github.com/ClickHouse/ClickHouse/pull/59698 — убран break, чтобы первый отфильтрованный столбец гарантированно имел минимальный размер cc @jsc0218. #61145 (李扬).
- Исправлена функция
has()для столбца типаNullable(устраняет проблему #60214). #61249 (Mikhail Koviazin). - Теперь можно указывать атрибут
merge="true"в подстановках конфигурации для поддеревьев<include from_zk="/path" merge="true">. Если этот атрибут указан, ClickHouse объединит поддерево с существующей конфигурацией, в противном случае поведение по умолчанию — добавление нового содержимого в конфигурацию. #61299 (alesapin). - Добавлены асинхронные метрики для сопоставлений виртуальной памяти: VMMaxMapCount & VMNumMaps. Закрывает #60662. #61354 (Tuan Pham Anh).
- Используйте настройку
temporary_files_codecвезде, где создаются временные данные, например при сортировке с использованием внешней памяти иGROUP BYс использованием внешней памяти. Ранее это работало только для алгоритмаpartial_mergeJOIN. #61456 (Maksim Kita). - Удалена повторяющаяся проверка
containing_part.empty(): она уже выполняется здесь: https://github.com/ClickHouse/ClickHouse/blob/1296dac3c7e47670872c15e3f5e58f869e0bd2f2/src/Storages/MergeTree/MergeTreeData.cpp#L6141. #61467 (William Schoeffel). - Добавлена новая настройка
max_parser_backtracks, которая позволяет ограничить сложность разбора запроса. #61502 (Alexey Milovidov). - Снижена конкуренция при динамическом изменении размера файлового кэша. #61524 (Kseniia Sumarokova).
- Запретить режим сегментирования для очереди StorageS3, поскольку его будут переписывать. #61537 (Kseniia Sumarokova).
- Исправлена опечатка:
use_leagcy_max_levelзаменено наuse_legacy_max_level. #61545 (William Schoeffel). - Удалены некоторые дублирующиеся записи в blob_storage_log. #61622 (YenchangChan).
- Добавлена функция
current_userкак псевдоним для совместимости с MySQL. #61770 (Yarik Briukhovetskyi). - Используйте управляемую идентичность для операций IO резервных копий при работе с Azure Blob Storage. Добавлена настройка, которая не позволяет ClickHouse пытаться создавать несуществующий контейнер, что требует разрешений на уровне учетной записи хранения. #61785 (Daniel Pozo Escalona).
- В предыдущей версии некоторые числа в форматах Pretty выглядели недостаточно красиво. #61794 (Alexey Milovidov).
- Длинное значение в форматах Pretty не будет обрезано, если оно является единственным значением в наборе результатов, например в результате запроса
SHOW CREATE TABLE. #61795 (Alexey Milovidov). - По аналогии с
clickhouse-local,clickhouse-clientтакже поддерживает параметр--output-formatкак синоним--format. Это закрывает #59848. #61797 (Alexey Milovidov). - Если stdout — это терминал и выходной формат не указан,
clickhouse-clientи аналогичные инструменты по умолчанию будут использоватьPrettyCompact, как и в интерактивном режиме.clickhouse-clientиclickhouse-localбудут единообразно обрабатывать аргументы командной строки для входных и выходных форматов. Это закрывает #61272. #61800 (Alexey Milovidov). - В форматах Pretty группы цифр теперь для лучшей читаемости разделяются символом подчёркивания. Это управляется новой настройкой
output_format_pretty_highlight_digit_groups. #61802 (Alexey Milovidov).
Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе)
- Исправлена ошибка в
intDivдля аргументов типа Decimal #59243 (Yarik Briukhovetskyi). - Исправление_ошибки_kql,_найденной_wingfuzz #59626 (Yong Wang).
- Исправлена ошибка “Read beyond last offset” в буфере AsynchronousBoundedReadBuffer #59630 (Vitaly Baranov).
- rabbitmq: исправлена ситуация, при которой сообщения не были ни подтверждены, ни отклонены #59775 (Kseniia Sumarokova).
- Исправлено выполнение функций для const и LowCardinality при GROUP BY const в анализаторе #59986 (Azat Khuzhin).
- Исправлено преобразование точности для DateTime64 #60004 (Yarik Briukhovetskyi).
- Исправлена вставка INSERT в SQLite при наличии одинарной кавычки (одинарные кавычки теперь экранируются кавычкой, а не обратной косой чертой) #60015 (Azat Khuzhin).
- Исправлено удаление псевдонима столбца оптимизацией optimize_uniq_to_count #60026 (Raúl Marín).
- Исправлено значение finished_mutations_to_keep=0 в MergeTree (как указано в документации, 0 означает сохранять всё) #60031 (Azat Khuzhin).
- Исправлено возможное исключение при удалении таблицы s3queue #60036 (Kseniia Sumarokova).
- Некорректные диапазоны в PartsSplitter для одной и той же части #60041 (Maksim Kita).
- Использовать max_query_size из контекста в DDLLogEntry вместо жёстко заданного значения 4096 #60083 (Kruglov Pavel).
- Исправлена несогласованность в форматировании запросов #60095 (Alexey Milovidov).
- Исправлено непоследовательное форматирование EXPLAIN в подзапросах #60102 (Alexey Milovidov).
- Исправлен сбой в
cosineDistanceпри использовании Nullable #60150 (Raúl Marín). - Разрешено приводить логические значения в строковом представлении к значению true #60160 (Robert Schulze).
- Исправлена system.s3queue_log #60166 (Kseniia Sumarokova).
- Исправлена ошибка в arrayReduce при использовании имени Nullable агрегатной функции #60188 (Raúl Marín).
- Исправлено выполнение действий при предварительной фильтрации (PK, отсечении партиций) #60196 (Azat Khuzhin).
- Скрыта конфиденциальная информация в s3queue #60233 (Kseniia Sumarokova).
- Отменена “замена
ORDER BY ALLнаORDER BY *” #60248 (Robert Schulze). - Azure Blob Storage : исправлены проблемы с конечной точкой и префиксом #60251 (SmitaRKulkarni).
- Исправлены коды исключений HTTP. #60252 (Austin Kothig).
- исправлена ошибка в кэше LRUResource (кэш Hive) #60262 (shanfengp).
- s3queue: исправлена ошибка (также исправлен нестабильный тест test_storage_s3_queue/test.py::test_shards_distributed) #60282 (Kseniia Sumarokova).
- Исправлено использование неинициализированного значения и некорректный результат в хеш-функциях для IPv6 #60359 (Kruglov Pavel).
- Принудительный повторный анализ при изменении параллельных реплик #60362 (Raúl Marín).
- Исправлено использование простого типа метаданных в новой опции конфигурации disks #60396 (Kseniia Sumarokova).
- Не разрешать устанавливать max_parallel_replicas в 0, поскольку это не имеет смысла #60430 (Kruglov Pavel).
- Попытка исправления логической ошибки ‘Не удаётся захватить столбец, так как у него несовместимый тип’ в mapContainsKeyLike #60451 (Kruglov Pavel).
- Исправлен OptimizeDateOrDateTimeConverterWithPreimageVisitor при аргументах со значением NULL #60453 (Raúl Marín).
- По возможности избегать вычисления скалярных подзапросов в CREATE TABLE. #60464 (Nikolai Kochetov).
- Слияние #59674. #60470 (Alexey Milovidov).
- Исправлена проверка ключей в s3Cluster #60477 (Antonio Andelic).
- Исправлена взаимная блокировка при параллельном парсинге, когда из-за ошибок пропускается большое количество строк #60516 (Kruglov Pavel).
- Исправлено_значение_max_query_size_для_составного_оператора_KQL: #60534 (Yong Wang).
- Исправление Keeper: добавлены тайм-ауты при ожидании журналов коммитов #60544 (Antonio Andelic).
- Сокращено количество строк, считываемых из
system.numbers#60546 (JackyWoo). - Не выводить числовые подсказки для типов даты #60577 (Raúl Marín).
- Исправлено чтение из MergeTree при использовании недетерминированных функций в фильтре #60586 (Kruglov Pavel).
- Исправлена логическая ошибка при некорректном типе значения параметра совместимости #60596 (Kruglov Pavel).
- Исправлена несогласованность состояний агрегатных функций в смешанных кластерах x86-64 / ARM #60610 (Harry Lee).
- fix(prql): Надёжный обработчик паники #60615 (Maximilian Roos).
- Исправлен
intDivдля аргументов Decimal и Date #60672 (Yarik Briukhovetskyi). - Исправлено: раскрытие CTE в запросе alter modify #60682 (Yakov Olkhovskiy).
- Исправлен
system.partsдля движков баз данных, отличных от Atomic/Ordinary (то есть Memory) #60689 (Azat Khuzhin). - Исправлена ошибка “Invalid storage definition in metadata file” для параметризованных представлений #60708 (Azat Khuzhin).
- Исправлено переполнение буфера в CompressionCodecMultiple #60731 (Alexey Milovidov).
- Удалена бессмыслица в SQL/JSON #60738 (Alexey Milovidov).
- Удалена некорректная проверка sanitize в агрегатной функции quantileGK #60740 (李扬).
- Исправлена ошибка в insert-select + insert_deduplication_token путём установки значения streams в 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).
- исправлена проблема с
splitв DAG действий #61458 (Raúl Marín). - Исправлено завершение неуспешной операции RESTORE #61466 (Vitaly Baranov).
- Корректно отключён async_insert_use_adaptive_busy_timeout при использовании настроек совместимости #61468 (Raúl Marín).
- Добавлена возможность ставить задачи в очередь в пуле восстановления #61475 (Nikita Taranov).
- Исправлена ошибка при чтении
system.partsпо UUID (issue 61220). #61479 (Dan Wu). - Исправлено падение в оконном представлении #61526 (Alexey Milovidov).
- Исправлена работа
repeatс ненативными целыми числами #61527 (Antonio Andelic). - Исправлен аргумент
-sв клиенте #61530 (Mikhail f. Shiryaev). - Исправлен сбой в функции arrayPartialReverseSort #61539 (Raúl Marín).
- Исправлен поиск строки при константной позиции #61547 (Antonio Andelic).
- Исправлена ошибка, из-за которой
addDaysвызывал ошибку при использованииdatetime64#61561 (Shuai li). - Исправлен
system.part_logпри async insert с дедупликацией #61620 (Antonio Andelic). - Исправлен набор Non-ready в system.parts. #61666 (Nikolai Kochetov).