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

v24.2 更新日志

ClickHouse 发布标签:24.2.2.15987

不向后兼容的变更

  • 在嵌套类型中对可疑/实验性类型进行校验。此前我们不会在 Array/Tuple/Map 等嵌套类型中校验这类类型(JSON 除外)。#59385Kruglov Pavel)。
  • 排序子句 ORDER BY ALL(在 v23.12 中引入)已被 ORDER BY * 取代。之前的语法对于包含名为 all 的列的表而言过于容易出错。#59450Robert Schulze)。
  • 为线程数和块大小添加合理性检查。#60138Raú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])#61092 (Robert 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。这也是为什么在为 ClickHouse 的 String 数据类型选择 Arrow 数据类型时,可以在 String 和 Binary 之间进行选择。该行为由设置项 output_format_parquet_string_as_stringoutput_format_orc_string_as_stringoutput_format_arrow_string_as_string 控制。虽然从正确性和兼容性角度来说,使用 Binary 更合适,但在大多数情况下,默认使用 String 更符合用户预期。Parquet/ORC/Arrow 支持多种压缩方法,包括 lz4 和 zstd。ClickHouse 支持所有这些压缩方法。一些功能较弱的工具不支持速度更快的 lz4 压缩方法,因此我们默认设置为 zstd。这由设置项 output_format_parquet_compression_methodoutput_format_orc_compression_methodoutput_format_arrow_compression_method 控制。我们已将 Parquet 和 ORC 的默认值改为 zstd,但未更改 Arrow(其主要面向底层使用场景)。#61817Alexey Milovidov)。
  • 修复了一个与物化视图相关的安全问题,该问题允许用户在未获得所需授权的情况下向表中插入数据。该修复会验证用户是否具有插入权限,不仅针对物化视图本身,还包括所有底层表。这意味着某些之前可以正常执行的查询,现在可能会因 Not enough privileges 而失败。为解决这一问题,本次发布为视图引入了一个新的 SQL 安全性特性 https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security#54901 (pufit)

新功能

  • 支持返回值计数及其误差的 topk/topkweighed 模式。 #54508 (UnamedRus).
  • 新增语法,允许在视图/物化视图中指定定义者用户(definer user)。这样可以在未对底层表显式授予权限的情况下,通过视图执行 SELECT/INSERT 操作。#54901 (pufit)。
  • 实现了将不同类型的 MergeTree 表自动转换为 Replicated 引擎的功能。在表的数据目录(/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/)中创建一个空的 convert_to_replicated 文件,该表将在下次服务器启动时自动完成转换。 #57798 (Kirill)。
  • 新增了表函数 mergeTreeIndex。它表示 MergeTree 表的索引文件和标记文件的内容,可用于内部检查。语法:mergeTreeIndex(database, table, [with_marks = true]),其中 database.table 是一个使用 MergeTree 引擎的现有表。#58140Anton Popov)。
  • file/s3/hdfs/url/azureBlobStorage 引擎中,如果文件格式未知,则在进行模式推断时尝试自动检测其格式。修复了 #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 类型值的毫秒部分。#60281 (Shaun Struwig)。
  • 支持 merge 表函数的单参数版本:merge(['db_name', ] 'tables_regexp')#60372 (豪肥肥)。
  • 使所有格式名称不区分大小写,例如 Tsv、TSV、tsv,甚至 rowbinary。#60420豪肥肥)。
  • 新增语法,允许在视图/物化视图中指定定义者(definer)用户。这样即使未对底层表授予显式权限,也可以通过视图执行 SELECT/INSERT 操作。#60439 (pufit)。
  • StorageMemory(memory 引擎)添加四个属性: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 的查询进行了改进。#58640Raúl Marín)。
  • 通过减少分支预测未命中来优化针对 bigintbig decimal 类型的条件 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 控制,默认开启。这样带来几个优点:- 对未使用的表不会加载主键;- 如果内存不足,将在首次使用时抛出异常,而不是在服务器启动时抛出异常。同时也有一些缺点:- 主键加载带来的延迟会在第一次查询时承担,而不是在开始接受连接之前;这在理论上可能引发“惊群”问题。此变更关闭了 #11188#60093Alexey Milovidov)。
  • 向量化函数 dotProduct,适用于向量搜索。#60202Robert 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. 由 “&&”(左)和 “&”(右)编译生成的代码。#60498Zhiguo Zhou)。
  • 更快的互斥锁(速度几乎提升 2 倍,此前因为 ThreadFuzzer 而较慢)。 #60823 (Azat Khuzhin).
  • 将连接排空从 prepare 阶段移到 work 阶段,并并行排空多个连接。 #60845 (lizhuoyu5).
  • 优化针对可为空数字或可为空字符串的 insertManyFrom#60846 (李扬)。
  • 优化了函数 dotProduct,省去了不必要且开销昂贵的内存拷贝。#60928Robert Schulze)。
  • 对 filesystem cache 的操作将更少受到锁竞争的影响。#61066Alexey Milovidov)。
  • 优化 ColumnString::replicate,并防止 memcpySmallAllowReadWriteOverflow15Impl 被优化为内置的 memcpy。关闭 #61074。在 x86-64 上,ColumnString::replicate 性能提升了 2.46 倍。#61075李扬)。
  • 将 256 位整数的打印速度提升 30 倍。#61100 (Raúl Marín).
  • 如果一个包含语法错误的查询中带有使用正则表达式的 COLUMNS 匹配器,那么在解析器回溯的每一次尝试中都会重新编译该正则表达式,而不是只编译一次。这是一个根本性错误。已编译的正则表达式会被放入 AST 中。但 AST 中的字母 A 意味着“抽象(abstract)”,这意味着它不应包含重量级对象。AST 的部分内容在解析期间可以被创建和丢弃,这其中包括大量的回溯操作。这会导致解析端变慢,从而允许只读用户实施 DoS 攻击。但主要问题在于它妨碍了 fuzzers 的进展。#61543Alexey Milovidov)。

改进

  • 在对物化视图运行 MODIFY COLUMN 查询时,检查内部表的结构以确保所有列均存在。#47427 (sunny)。
  • 新增了表 system.keywords,其中包含解析器中的所有关键字。主要是为了更好地支持模糊测试和语法高亮。 #51808 (Nikita Mikhaylov)。
  • 为带有分析器的参数化视图添加支持,以避免对 CREATE PARAMETERIZED VIEW 语句进行分析。重构现有参数化视图逻辑,同样避免对 CREATE PARAMETERIZED VIEW 语句进行分析。#54211 (SmitaRKulkarni)。
  • Ordinary 数据库引擎已弃用。如果您的服务器正在使用它,您将在 clickhouse-client 中收到警告。已关闭 #52229#56942shabroo)。
  • 与某个表相关的所有零拷贝锁在该表被删除时必须全部删除。包含这些锁的目录也必须一并移除。#57575 (Sema Checherinda).
  • dictGetOrDefault 函数添加短路机制。修复 #52098#57767jsc0218)。
  • 允许在外部表结构中声明枚举类型。 #57857 (Duc Canh Le).
  • 现在对带有 DEFAULTMATERIALIZED 表达式的列执行 ALTER COLUMN MATERIALIZE 时,会写入正确的值:对于已有数据片段中应为默认值的部分写入默认值,对于应为非默认值的部分写入相应的非默认值。此前会为所有已有数据片段写入默认值。 #58023 (Duc Canh Le).
  • 启用了退避机制(例如指数退避)。从而降低 CPU 使用率、内存使用率和日志文件大小。#58036 (MikhailBurdukov)。
  • 在选择要合并的数据分片时考虑轻量级删除行。 #58223 (Zhuo Qiu).
  • 支持在 storage_configuration 中定义 volume_priority#58533 (Andrey Zvonov)。
  • 在 T64 编解码器中增加对 Date32 类型的支持。#58738Hongbin 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).
  • 现在,对象存储不再使用常量 key,而是生成用于确定是否具备删除对象能力的 key。#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,使用新语法可能会导致问题。#59532János Benjamin Antal)。
  • 将 Intel QPL(供编解码器 DEFLATE_QPL 使用)从 v1.3.1 升级到 v1.4.0。同时修复了轮询超时机制中的一个 bug,我们观察到在某些情况下超时机制不会正确生效;如果发生超时,IAA 和 CPU 可能会并发处理缓冲区。目前,在回退到软件编解码器之前,我们最好先确保 IAA 编解码器状态不是 QPL_STS_BEING_PROCESSED。 #59551 (jasperzhu)。
  • 在 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 中使用它。 #59908 (Azat Khuzhin).
  • system.tables 系统表中为 ReplicatedMergeTree 引擎表新增 metadata_version 列。 #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>#60002Vitaly Baranov)。
  • 在执行 RESTORE 命令时,从备份中读取表元数据将使用多线程。 #60040 (Vitaly Baranov).
  • 现在,如果 StorageBuffer 有超过 1 个分片(num_layers > 1),后台刷新将会在多个线程中并行处理所有分片。#60111alesapin)。
  • 现在支持在配置中通过 user 键为特定的 S3 设置指定用户。#60144 (Antonio Andelic)。
  • 在通过 GCP 复制 S3 文件时,如果 GCP 返回带有 GATEWAY_TIMEOUT HTTP 状态码的 Internal Error,则回退为缓冲区复制。#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#60259lgbo)。
  • 新增用于在合并时强制使用直读缓存的设置。 #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 工具的兼容性。#60365 (Robert Schulze)。
  • 当输出格式为 Pretty,且某个数据块仅包含一个数值且该数值大于一百万时,会在表格右侧附带打印一个易读的数字说明。例如:┌──────count()─┐ │ 233765663884 │ -- 233.77 billion └──────────────┘#60379rogeryk)。
  • 允许为 clickhouse-server 配置 HTTP 重定向处理程序。例如,可以将 / 重定向到 Play UI。 #60390 (Alexey Milovidov).
  • 高级仪表板中多折线图的配色略有优化。#60391Alexey Milovidov)。
  • 修复 JavaScript 代码中的竞态条件,避免图表重复叠加在一起。#60392Alexey Milovidov)。
  • 即使用户将 max_parser_depth 设置错误地配置为一个非常大的值,也会检查解析器中的栈溢出。此更改关闭了 #59622#60434Alexey 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)。
  • 新增设置 merge_tree_read_split_ranges_into_intersecting_and_non_intersecting_fault_probability,用于在 MergeTree 读取拆分区间时,对相交和非相交区间进行故障注入。#60548Maksim Kita)。
  • 高级仪表板现在在滚动页面时控件始终可见。这样你就可以在无需向上滚动的情况下添加新图表。 #60692 (Alexey Milovidov).
  • 字符串类型和 Enum 可以在相同的上下文中使用,例如数组、UNION 查询和条件表达式。这修复了 #60726#60727Alexey Milovidov)。
  • 将 tzdata 更新为 2024a 版。 #60768 (Raúl Marín)。
  • 支持 Filesystem 数据库中的无格式扩展名文件。#60795Kruglov 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)保持一致。#60896loudongfeng)。
  • 已将 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).
  • 默认启用处理器性能分析(统计在排序、聚合等操作中花费的时间以及输入/输出字节数)。#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李扬)。
  • 修复 has() 函数在 Nullable 列上的问题(修复了 #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 时,为备份 I/O 使用托管身份。添加一个配置项,防止 ClickHouse 尝试创建不存在的容器(该操作需要存储账户级别的权限)。#61785Daniel Pozo Escalona)。
  • 在之前的版本中,Pretty 格式中某些数字的显示效果还不够美观。#61794Alexey Milovidov)。
  • 在 Pretty 格式中,如果结果集中只有单个值(例如 SHOW CREATE TABLE 查询的结果),则该较长的值不会被截断。#61795Alexey 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 修复(官方稳定版中用户可见的错误行为)