跳到主要内容
跳到主要内容

v24.2 变更日志

ClickHouse 发布标签:24.2.2.15987

不向后兼容的更改

  • 在嵌套类型中验证可疑/实验性类型。此前我们不会在 Array/Tuple/Map 等嵌套类型中验证此类类型(JSON 除外)。#59385 (Kruglov Pavel)。
  • 排序子句 ORDER BY ALL(在 v23.12 中引入)被替换为 ORDER BY *。之前的语法对于包含名为 all 的列的表而言过于容易出错。#59450 (Robert Schulze)。
  • 添加对线程数和块大小的合理性检查。 #60138 (Raúl Marín).
  • 当查询级别设置 async_insertdeduplicate_blocks_in_dependent_materialized_views 同时启用时,拒绝处理传入的 INSERT 查询。此行为由设置 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#60888Nikita 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])。可以通过将 function_locate_has_mysql_compatible_argument_order 设置为 0 来恢复之前的参数顺序 (haystack, needle, [, start_pos])#61092Robert Schulze)。
  • 自 23.5 版本起,过时的内存型分区片段已被弃用,自 23.10 版本起不再受支持,现在剩余的相关代码已被移除。此变更是对 #55186#45409 的延续。你很可能没有使用内存型分区片段,因为它们只在 23.5 版本之前可用,并且仅在你通过为 MergeTree 表手动指定对应的 SETTINGS 启用后才会生效。要检查是否存在内存型分区片段,请运行以下查询: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 升级之前,请先检查是否存在内存型分区片段。如果存在内存型分区片段,请先禁用它们,然后等待所有内存型分区片段都消失后再继续升级。#61127Alexey Milovidov)。
  • 默认禁止在 MergeTree 表的 ORDER BY 中使用 SimpleAggregateFunction(与 AggregateFunction 一样被禁止,不过这里的原因是它们不可比较),如需允许请使用 allow_suspicious_primary_key#61399 (Azat Khuzhin).
  • ClickHouse 在 String 数据类型中允许任意二进制数据,尽管其典型用法是存储 UTF-8。Parquet/ORC/Arrow 中的 String 仅支持 UTF-8。因此,在 Arrow 中可以为 ClickHouse 的 String 数据类型选择使用哪种数据类型——StringBinary。这由 output_format_parquet_string_as_stringoutput_format_orc_string_as_stringoutput_format_arrow_string_as_string 这些设置控制。虽然使用 Binary 在语义上更正确且兼容性更好,但在大多数情况下,默认使用 String 更符合用户预期。Parquet/ORC/Arrow 支持多种压缩方法,包括 lz4zstd。ClickHouse 支持所有这些压缩方法。一些能力较弱的工具不支持更快的 lz4 压缩方法,因此我们默认设置为 zstd。这由 output_format_parquet_compression_methodoutput_format_orc_compression_methodoutput_format_arrow_compression_method 这些设置控制。我们已将 Parquet 和 ORC 的默认值更改为 zstd,但对 Arrow 没有更改(其主要面向底层使用场景)。#61817Alexey Milovidov)。
  • 修复了一个 materialized view 的安全问题,该问题允许用户在未获得相应权限的情况下向表中插入数据。该修复会校验用户是否拥有插入权限,不仅针对 materialized view 本身,还包括所有底层表。这意味着某些之前可以正常执行的查询,现在可能会因为 “Not enough privileges” 错误而失败。为解决此问题,本次发布在 views 中引入了 SQL security 新功能 https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security#54901 (pufit)

新功能

  • Topk/topkweighed 模式支持返回值的数量及其误差。#54508 (UnamedRus)。
  • 添加了新的语法,允许在 view/materialized view 中指定 definer 用户。这样就可以在未对底层表显式授予权限的情况下,从视图中执行 SELECT/INSERT 操作。#54901 (pufit)。
  • 实现了将不同类型的 MergeTree 表自动转换为 Replicated 引擎的功能。只需在表的数据目录(/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/)中创建一个空的 convert_to_replicated 文件,该表将在下次服务器启动时自动完成转换。#57798 (Kirill)。
  • 新增了表函数 mergeTreeIndex。用于表示 MergeTree 表的索引文件和标记文件(marks files)的内容,可用于内部自省。语法:mergeTreeIndex(database, table, [with_marks = true]),其中 database.table 是一个已存在且使用 MergeTree 引擎的表。#58140 (Anton Popov)。
  • file/s3/hdfs/url/azureBlobStorage 引擎中进行 schema 推断时,如果文件格式未知,则尝试自动检测其格式。关闭 #50576#59092Kruglov Pavel)。
  • 将 generate_series 添加为一个表函数。此函数会生成一个由自然数组成的等差数列表。#59390 (divanik).
  • 新增了查询语句 ALTER TABLE table FORGET PARTITION partition,用于删除与空分区相关的 ZooKeeper 节点。#59507 (Sergei Trifonov)。
  • 支持以 tar 归档文件的形式读取和写入备份。#59535 (josh-hildred)。
  • 新增聚合函数 'groupArrayIntersect'。跟进:#49862#59598Yarik Briukhovetskyi)。
  • 新增 system.dns_cache 表,可用于调试 DNS 问题。 #59856 (Kirill Nikiforov).
  • 已实现对 S3Express 存储桶的支持。 #59965 (Nikita Taranov).
  • 编解码器 LZ4HC 将支持新的压缩级别 2,它比之前的最小级别 3 更快,但压缩率略低。在之前的版本中,LZ4HC(2) 及更低级别与 LZ4HC(3) 是相同的。作者:Cyan4973#60090Alexey Milovidov)。
  • 实现了 system.dns_cache 表,可用于调试 DNS 问题;新增服务器设置项 dns_cache_max_size。#60257 (Kirill Nikiforov).
  • 添加了函数 toMillisecond,用于返回 DateTimeDateTime64 类型值的毫秒部分。#60281Shaun Struwig)。
  • merge 表函数添加对单参数形式的支持,形式为 merge(['db_name', ] 'tables_regexp')#60372豪肥肥)。
  • 使所有格式名称不区分大小写,例如 Tsv、TSV、tsv,甚至 rowbinary 均可。#60420豪肥肥)。
  • 新增语法,支持在 view/materialized view 中指定定义者用户(definer user)。这样即可在未对底层表授予显式权限的情况下,从视图执行 SELECT/INSERT 操作。#60439 (pufit).
  • StorageMemory(内存引擎)添加四个属性 min_bytes_to_keep, max_bytes_to_keep, min_rows_to_keepmax_rows_to_keep —— 添加测试以反映这些更改 —— 更新 memory.md 文档 —— 为 MemorySink 添加表级 context 属性,以便访问表参数上下限。#60612 (Jake Bamrah).
  • 新增函数 toMillisecond,用于返回 DateTimeDateTime64 类型值的毫秒部分。#60649 (Robert Schulze)。
  • 将等待查询与执行中查询的数量限制分开。新增服务器设置 max_waiting_queries,用于限制因 async_load_databases 而处于等待状态的查询数量。现有的执行中查询数量限制不再统计等待中的查询。#61053 (Sergei Trifonov)。
  • 新增对 ATTACH PARTITION ALL 的支持。#61107 (Kirill Nikiforov).

性能优化

  • SELECT 子句中消除对 GROUP BY 键的 min/max/any/anyLast 聚合函数。#52230 (JackyWoo)。
  • 在处理多个 [Nullable] 列时提升序列化聚合方法的性能。这是 #51399 的通用版本,并不会牺牲抽象层的完整性。#55809Amos Bird)。
  • 对 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).
  • 通过减少分支预测失败,有条件地优化 bigint 和 BigDecimal 类型的 sum/avg 性能。#59504 (李扬).
  • 在存在正在执行的 mutation 时提升 SELECT 查询的性能。#59531 (Azat Khuzhin).
  • 对列过滤进行了简单优化。避免对底层数据类型为非数值的过滤列使用 result_size_hint = -1。在某些情况下,峰值内存可降至原来的 44%。#59698李扬)。
  • 主键将占用更少内存。#60049 (Alexey Milovidov)。
  • 优化主键及部分其他操作的内存使用。 #60050 (Alexey Milovidov).
  • 表的主键将在首次访问时按需(懒加载)载入内存。该行为由新的 MergeTree 设置 primary_key_lazy_load 控制,默认开启。这样带来了一些优势:- 不会为未使用的表加载主键;- 如果内存不足,将在首次使用时抛出异常,而不是在服务器启动时抛出。与此同时,这也带来了一些劣势:- 加载主键带来的延迟会在第一次查询时产生,而不是在接受连接之前;理论上这可能引入“羊群效应”(thundering-herd problem)。此更改关闭了 #11188#60093Alexey Milovidov)。
  • 向量化函数 dotProduct,适用于向量搜索。#60202 (Robert Schulze)。
  • 如果表的主键中大部分是无用的列,就不要让这些列常驻内存。可以通过一个新的设置项 primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns 来控制,默认值为 0.9,其含义是:对于复合主键,如果某一列在至少 90% 的记录中其值都会发生变化,那么在它之后的列将不会被加载。#60255Alexey Milovidov)。
  • result_type 的基础类型为数值类型时,以列式方式执行 multiIf 函数。 #60384 (李扬).
  • 如图 1 所示,将“&&”替换为“&”可以使编译器生成 SIMD 代码。 image 图 1. 由“&&”(左)和“&”(右)编译生成的代码。 #60498 (Zhiguo Zhou).
  • 互斥锁速度更快(几乎提升 2 倍;之前由于 ThreadFuzzer 而较慢)。 #60823 (Azat Khuzhin).
  • 将连接排空操作从 prepare 阶段移到 work 阶段,并并行排空多个连接。 #60845 (lizhuoyu5).
  • 优化对 Nullable 数字或 Nullable 字符串的 insertManyFrom。 #60846 (李扬).
  • 对函数 dotProduct 进行了优化,以避免不必要且开销巨大的内存拷贝。 #60928 (Robert Schulze).
  • 对文件系统缓存的操作将更少受到锁竞争的影响。 #61066 (Alexey Milovidov).
  • 优化 ColumnString::replicate,并防止 memcpySmallAllowReadWriteOverflow15Impl 被优化为内置 memcpy。关闭 #61074。在 x86-64 上,ColumnString::replicate 性能提升了 2.46 倍。#61075 (李扬)。
  • 256 位整数的打印速度提升 30 倍。 #61100 (Raúl Marín).
  • 如果一个带有语法错误的查询中包含带正则表达式的 COLUMNS 匹配器,那么在解析器回溯的每一次尝试中都会重新编译该正则表达式,而不是只编译一次。这是一个根本性错误。已编译的正则表达式被放入 AST 中。但 AST 中的字母 A 意为“抽象”,这意味着其中不应包含重量级对象。AST 的部分节点在解析过程中可能被创建和丢弃,包括在大量回溯的情况下。这会导致解析阶段变慢,从而使只读用户可以实施 DoS 攻击。但主要问题在于,它阻碍了模糊测试工具(fuzzers)的进展。#61543 (Alexey Milovidov)。

改进

  • 在对 materialized view 执行 MODIFY COLUMN 查询时,应检查内部表的结构,确保每一列都存在。#47427 (sunny)。
  • 新增了表 system.keywords,其中包含来自解析器的所有关键字,主要用于改进模糊测试和语法高亮。#51808 (Nikita Mikhaylov).
  • 通过在分析器中为参数化视图添加支持,使其不再对 CREATE PARAMETERIZED VIEW 语句进行分析。重构了现有的参数化视图逻辑,同样避免分析 CREATE PARAMETERIZED VIEW 语句。#54211 (SmitaRKulkarni).
  • Ordinary 数据库引擎已被弃用。如果你的服务器正在使用它,你将在 clickhouse-client 中收到一条警告。由此关闭了 #52229#56942shabroo)。
  • 在删除表时,必须删除与该表相关的所有 zero-copy 锁,并同时删除包含这些锁的目录。#57575 (Sema Checherinda)。
  • dictGetOrDefault 函数添加短路特性。关闭 #52098#57767 (jsc0218)。
  • 允许在外部表结构中声明枚举类型。 #57857 (Duc Canh Le).
  • 在对包含 DEFAULTMATERIALIZED 表达式的列运行 ALTER COLUMN MATERIALIZE 时,现在会写入正确的值:对于已有且应使用默认值的分区片段,会写入默认值;对于已有且应使用非默认值的分区片段,会写入非默认值。此前,所有已有分区片段都会被写入默认值。#58023Duc Canh Le)。
  • 已启用退避逻辑(例如指数退避),从而降低 CPU 使用率、内存占用和日志文件大小。#58036 (MikhailBurdukov)。
  • 在选择要合并的分区片段时考虑已被轻量级删除的行。#58223 (Zhuo Qiu)。
  • 现在允许在 storage_configuration 中定义 volume_priority#58533 (Andrey Zvonov).
  • 在 T64 编解码器中新增对 Date32 类型的支持。#58738 (Hongbin Ma)。
  • 此 PR 使 http/https 连接在所有用例中都可复用,即使响应为 3xx 或 4xx。 #58845 (Sema Checherinda).
  • 为更多系统表的列添加了注释。是对 https://github.com/ClickHouse/ClickHouse/pull/58356 的延续。#59016Nikita 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_thresholdcommit_logs_cache_size_threshold 控制的一定数量的日志。#59460 (Antonio Andelic).
  • 现在,对象存储不再使用固定的常量密钥,而是生成密钥来判断是否具备删除对象的能力。#59495 (Sema Checherinda)。
  • 默认情况下不再将指数表示法推断为浮点数。新增设置项 input_format_try_infer_exponent_floats,用于恢复之前的行为(默认关闭)。关闭 #59476#59500Kruglov 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)。
  • 将 Intel QPL(DEFLATE_QPL 编解码器所使用)从 v1.3.1 升级到 v1.4.0。同时修复了轮询超时机制中的一个 bug,我们观察到在某些情况下超时机制不会正常生效;如果发生超时,IAA 和 CPU 可能会并发处理缓冲区。目前的做法是先确保 IAA codec 的状态不是 QPL_STS_BEING_PROCESSED,然后再回退到 SW codec。#59551jasperzhu)。
  • 在 libhdfs3 中添加按位置读取(pread)功能。如果需要在 libhdfs3 中调用按位置读取,请在 hdfs.h 中按如下方式使用 hdfsPread 函数:tSize hdfsPread(hdfsFS fs, hdfsFile file, void * buffer, tSize length, tOffset position);#59624M1eyu)。
  • 即使用户误将 max_parser_depth 设置配置为一个非常大的值,解析器中仍会检查栈溢出。此更改修复了 #59622#59697Alexey Milovidov)。
  • 统一了在 Kafka 存储中通过 XML 和 SQL 创建命名集合时的行为。#59710 (Pervakov Grigorii).
  • 如果在 CREATE TABLE 语句中显式指定了 uuid,则允许在 replica_path 中包含该 uuid#59908 (Azat Khuzhin).
  • system.tables 系统表中为 ReplicatedMergeTree 表新增 metadata_version 列。#59942 (Maksim Kita)。
  • Keeper 改进:为磁盘相关操作添加失败重试机制。#59980Antonio Andelic)。
  • 新增配置项 backups.remove_backup_files_after_failure<clickhouse> <backups> <remove_backup_files_after_failure>true</remove_backup_files_after_failure> </backups> </clickhouse>#60002Vitaly Baranov)。
  • 在执行 RESTORE 命令时,从备份中读取表元数据的过程改为使用多线程。#60040 (Vitaly Baranov)。
  • 现在,如果 StorageBuffer 具有多个分片(num_layers > 1),则所有分片的后台刷新将会在多个线程中并行执行。#60111 (alesapin)。
  • 支持在配置文件中通过 user 键为特定的 S3 设置指定用户。 #60144 (Antonio Andelic).
  • 当 GCP 返回带有 HTTP 错误码 GATEWAY_TIMEOUTInternal Error 时,回退为将 S3 文件复制到缓冲区。#60164 (Maksim Kita).
  • 允许使用 "local" 作为对象存储类型,替代 "local_blob_storage"。#60165 (Kseniia Sumarokova)。
  • Variant 值实现比较运算符,以及将 Field 正确插入到 Variant 列中。默认情况下不允许创建具有相似变体类型的 Variant 类型(可通过设置 allow_suspicious_variant_types 予以允许)。关闭 #59996。关闭 #59850#60198Kruglov Pavel)。
  • 改进了虚拟列的整体可用性。现在允许在 PREWHERE 中使用虚拟列(对于 _part_offset 这类非常量虚拟列尤其有用)。同时还为虚拟列提供了内置文档:在启用 describe_include_virtual_columns 设置后,它会作为列注释显示在 DESCRIBE 查询中。 #60205 (Anton Popov).
  • ULIDStringToDateTime 实现短路执行。 #60211 (Juan Madurga).
  • 为表 system.backupssystem.backup_log 新增了 query_id 列。为 error 列新增了错误堆栈跟踪信息。 #60220 (Maksim Kita).
  • DETACH / 服务器关闭以及执行 SYSTEM FLUSH DISTRIBUTED 时,对 Distributed 引擎中待处理的 INSERT 数据块进行并行刷新(仅当表配置了多磁盘策略时才会启用并行——当前 Distributed 引擎中的所有表均为此配置)。 #60225 (Azat Khuzhin).
  • joinRightColumnsSwitchNullability 中的过滤设置不当,已在 #59625 中修复。#60259 (lgbo)。
  • 添加一个设置,用于在合并时强制使用读透缓存。 #60308 (Kseniia Sumarokova)。
  • Issue #57598 提及了一个与事务处理相关的行为差异:在没有活动事务时执行 COMMIT/ROLLBACK 会被报告为错误,这与 MySQL 的行为不一致。#60338PapaToemmsn)。
  • distributed_ddl_output_mode 设置中新增 none_only_active 模式。#60340 (Alexander Tokmakov)。
  • 现在,通过 MySQL 端口的连接会自动在设置 prefer_column_name_to_alias = 1 下运行,以便开箱即用地支持 QuickSight。此外,设置 mysql_map_string_to_text_in_show_columnsmysql_map_fixed_string_to_text_in_show_columns 现已默认启用,同样只影响 MySQL 连接。这提高了与更多 BI 工具的兼容性。#60365Robert Schulze)。
  • 当输出格式为 Pretty 格式且一个数据块只包含一个超过一百万的数值时,会在表格右侧显示对应的可读数值。例如:┌──────count()─┐ │ 233765663884 │ -- 233.77 billion └──────────────┘#60379 (rogeryk)。
  • 允许为 clickhouse-server 配置 HTTP 重定向处理程序。例如,可以将 / 重定向到 Play UI。#60390 (Alexey Milovidov).
  • 高级仪表板中的多折线图颜色略有优化。 #60391 (Alexey Milovidov).
  • 修复 JavaScript 代码中的竞态条件,该问题会导致多个图表相互重叠显示。#60392 (Alexey Milovidov)。
  • 即使用户将 max_parser_depth 设置错误配置为非常大的值,也要在解析器中检查栈溢出。修复了 #59622#60434Alexey Milovidov)。
  • 函数 substring 新增了一个别名 byteSlice#60494 (Robert Schulze).
  • 将服务器设置项 dns_cache_max_size 重命名为 dns_cache_max_entries,以减少歧义。#60500Kirill Nikiforov)。
  • SHOW INDEX | INDEXES | INDICES | KEYS 不再按照主键列进行排序(此前这种行为并不直观)。#60514 (Robert Schulze)。
  • Keeper 改进:在启动时如果检测到无效快照则中止启动,以避免数据丢失。 #60537 (Antonio Andelic).
  • 通过 merge_tree_read_split_ranges_into_intersecting_and_non_intersecting_fault_probability 设置,为 MergeTree 读取拆分范围添加了相交和不相交的故障注入。 #60548 (Maksim Kita).
  • 高级仪表板现在在滚动页面时始终显示控件。因此,您可以在无需向上滚动的情况下添加新图表。#60692Alexey Milovidov)。
  • 字符串类型和 Enum 可以在相同的上下文中使用,例如数组、UNION 查询和条件表达式。此更改关闭了 #60726#60727Alexey Milovidov)。
  • 将 tzdata 更新到 2024a。 #60768 (Raúl Marín)。
  • 在 Filesystem 数据库中支持无扩展名文件。#60795 (Kruglov Pavel)。
  • Keeper 改进:在 Keeper 的设置中支持 leadership_expiry_ms#60806 (Brokenice0415).
  • 无论 input_format_try_infer_exponent_floats 的设置为何,始终在 JSON 格式中推断指数形式的数值。新增设置 input_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects,允许在根据 JSON 对象推断命名 Tuple 时,对存在歧义的路径使用 String 类型,而不是抛出异常。 #60808 (Kruglov Pavel).
  • 为 SMJ 添加一个标志位,用于将 null 视为最大值或最小值,从而使其行为与其他 SQL 系统(例如 Apache Spark)保持兼容。#60896 (loudongfeng)。
  • 已将 ClickHouse 版本添加到 Docker 标签。解决了 #54224#60949Nikolay Monkov)。
  • 添加设置 parallel_replicas_allow_in_with_subquery = 1,该设置允许 IN 子查询与并行副本配合使用。#60950 (Nikolai Kochetov)。
  • DNSResolver 会对解析得到的 IP 地址集合进行随机打乱。#60965 (Sema Checherinda)。
  • clickhouse-clientclickhouse-local 中支持根据文件扩展名检测输出格式。 #61036 (豪肥肥).
  • 定期检查内存限制是否已更新。#61049 (Han Fei).
  • 默认启用处理器 profiling 功能(用于统计排序、聚合等操作的耗时以及输入/输出字节数)。 #61096 (Azat Khuzhin)。
  • 添加此前因疏忽遗漏的函数 toUInt128OrZero(该疏漏与 https://github.com/ClickHouse/ClickHouse/pull/945 相关)。兼容性别名 FROM_UNIXTIMEDATE_FORMAT(它们并非 ClickHouse 原生函数,仅为 MySQL 兼容性而存在)现已改为大小写不敏感,以符合 SQL 兼容别名的预期行为。#61114Alexey 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 (李扬)。
  • 修复 Nullable 列上 has() 函数的问题(修复 #60214)。#61249Mikhail Koviazin)。
  • 现在可以在配置替换中,为子树 <include from_zk="/path" merge="true"> 指定属性 merge="true"。如果指定了该属性,ClickHouse 会将该子树与现有配置进行合并;否则,默认行为是将新内容追加到配置中。#61299 (alesapin)。
  • 为虚拟内存映射添加异步指标:VMMaxMapCount 和 VMNumMaps。解决了 #60662#61354Tuan Pham Anh)。
  • 在所有会创建临时数据的场景中使用 temporary_files_codec 设置,例如外部内存排序和外部内存 GROUP BY。此前它仅在 partial_merge JOIN 算法中生效。#61456 (Maksim Kita)。
  • 移除重复的 containing_part.empty() 检查,该检查已在此处执行:https://github.com/ClickHouse/ClickHouse/blob/1296dac3c7e47670872c15e3f5e58f869e0bd2f2/src/Storages/MergeTree/MergeTreeData.cpp#L6141#61467William 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)。
  • 在使用 Azure Blob Storage 时,为备份 IO 使用托管标识。新增一个设置,以防止 ClickHouse 尝试创建不存在的容器(该操作需要存储账户级别的权限)。 #61785 (Daniel Pozo Escalona)。
  • 在之前的版本中,Pretty 格式中某些数字的显示效果还不够理想。 #61794 (Alexey Milovidov).
  • 在 Pretty 格式中,如果结果集中只有一个值(例如 SHOW CREATE TABLE 查询的结果),则该较长的值不会被截断。 #61795 (Alexey Milovidov)。
  • clickhouse-local 类似,clickhouse-client 也接受 --output-format 选项,将其视为 --format 选项的同义选项。此更改关闭了 #59848#61797Alexey Milovidov)。
  • 如果 stdout 是终端且未指定输出格式,clickhouse-client 和类似工具将默认使用 PrettyCompact,与交互模式类似。clickhouse-clientclickhouse-local 将以统一的方式处理用于指定输入和输出格式的命令行参数。这解决了 #61272#61800Alexey Milovidov)。
  • 在 Pretty 格式中为数字分组添加下划线以提升可读性。该行为由一个新的设置 output_format_pretty_highlight_digit_groups 控制。#61802Alexey Milovidov)。

Bug 修复(官方稳定版本中用户可见的异常行为)