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

V24.5 Cloud 版本变更日志

基于 v24.5 版本的 ClickHouse Cloud 服务相关变更。

重大变更

  • system.zookeeper 表中的列名从 duration_ms 更改为 duration_microseconds,以反映该持续时间实际为微秒级精度。#60774 (Duc Canh Le)。

  • 不再允许将 max_parallel_replicas 设置为 0,因为这没有意义。将其设置为 0 可能会导致意外的逻辑错误。修复 #60140。#61201 (Kruglov Pavel)。

  • 移除对 INSERT WATCH 查询的支持(此功能属于实验性的 LIVE VIEW 功能的一部分)。#62382 (Alexey Milovidov)。

  • 弃用函数 neighborrunningAccumulaterunningDifferenceStartingWithFirstValuerunningDifference 的使用(因为容易出错)。应改为使用规范的窗口函数。要重新启用这些函数,请设置 allow_deprecated_error_prone_window_functions=1#63132 (Nikita Taranov)。

向后不兼容的变更

  • 在新的 ClickHouse 版本中,如果所有参数都是 Float64,函数 geoDistance、greatCircleDistance 和 greatCircleAngle 将在内部计算以及返回类型中使用 64 位双精度浮点数据类型。这解决了 #58476 问题。在之前的版本中,这些函数始终使用 Float32。你可以通过将 geo_distance_returns_float64_on_float64_arguments 设置为 false,或将 compatibility 设置为 24.2 或更早版本来切换回旧的行为。#61848 (Alexey Milovidov)。

  • 当列数量很大但许多数据库或表未被授予 SHOW TABLES 权限时,针对 system.columns 的查询将运行得更快。注意,在之前的版本中,如果你为某些单独的列授予 SHOW COLUMNS 权限,但未对相应的表授予 SHOW TABLES 权限,system.columns 表仍会显示这些列;但在新版本中,它会直接跳过整个表。移除了会减慢查询的跟踪日志消息 "Access granted" 和 "Access denied"。#63439 (Alexey Milovidov)。

  • 修复 largestTriangleThreeBuckets 中的崩溃。此更改修改了该函数的行为,使其会忽略所提供序列中的 NaN。因此,结果集可能与之前版本不同。#62646 (Raúl Marín)。

新功能

  • 新的分析器在新建的服务上默认启用。

  • 支持一次性删除多张表,例如 DROP TABLE a, b, c;#58705 (zhongyuankai)。

  • 现在用户可以通过设置 input_format_tsv_crlf_end_of_line,在 TSV 格式中解析 CRLF。关闭 issue #56257。#59747 (Shaun Struwig)。

  • 现在可以为表引擎授予权限,并且不会影响现有用户的行为。#60117 (jsc0218)。

  • 新增 Form 格式,用于以 application/x-www-form-urlencoded 格式读写单条记录。#60199 (Shaun Struwig)。

  • CROSS JOIN 新增压缩能力。#60459 (p1rattttt)。

  • 新增设置 input_format_force_null_for_omitted_fields,可对被省略的字段强制使用 NULL 值。#60887 (Constantine Peresypkin)。

  • 支持包含左右表列的不等连接条件的 JOIN,例如 t1.y < t2.y。要启用该功能,执行 SET allow_experimental_join_condition = 1#60920 (lgbo)。

  • 新增函数 getClientHTTPHeader,关闭 issue #54665。与 @lingtaolf 共同完成。#61820 (Alexey Milovidov)。

  • 为方便起见,SELECT * FROM numbers() 的行为现在与 SELECT * FROM system.numbers 相同——不会自动添加 LIMIT#61969 (YenchangChan)。

  • 现在支持通过 ALTER MODIFY SETTING 修改 Memory 引擎表的设置。例如:ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 1000;#62039 (zhongyuankai)。

  • 分析器现在支持递归 CTE。#62074 (Maksim Kita)。

  • 之前我们的 S3 存储和 S3 表函数不支持从归档文件中进行查询。现在新增方案,允许在 S3 中遍历归档内的文件。#62259 (Daniil Ivanik)。

  • 支持条件函数 clamp#62377 (skyoct)。

  • 新增 npy 输出格式。#62430 (豪肥肥)。

  • 分析器现在支持 QUALIFY 子句。关闭 issue #47819。#62619 (Maksim Kita)。

  • 在 HTTP 接口中新增 role 查询参数。其行为类似于 SET ROLE x,在语句执行前应用角色。这解决了 HTTP 接口的限制:不允许多条语句,因此无法同时发送 SET ROLE x 和实际语句。现在可以通过该方式设置多个角色,例如 ?role=x&role=y,等价于 SET ROLE x, y#62669 (Serge Klochkov)。

  • 新增 SYSTEM UNLOAD PRIMARY KEY 命令。#62738 (Pablo Marcos)。

  • 新增 SQL 函数 generateUUIDv7generateUUIDv7ThreadMonotonicgenerateUUIDv7NonMonotonic(在单调性与性能之间具有不同权衡),用于生成第 7 版 UUID,即带随机组件的基于时间戳的 UUID。同时新增函数 UUIDToNum,用于从 UUID 中提取字节,以及函数 UUIDv7ToDateTime,用于从第 7 版 UUID 中提取时间戳组件。#62852 (Alexey Petrunyaka)。

  • Raw 增加为 TSVRaw 的同义名。#63394 (Unalian)。

  • 新增支持在大小超出限制时使用临时文件执行 cross join。#63432 (p1rattttt)。

性能改进

  • 在 INSERT 过程中跳过对新创建的 projection 块的合并。#59405 (Nikita Taranov)。

  • 降低针对 SELECT 的变更操作(mutations)开销(v2)。#60856 (Azat Khuzhin)。

  • 使用等价集合改进 JOIN 过滤下推。#61216 (Maksim Kita)。

  • 增加新的分析器阶段(analyzer pass),以优化 IN 单值场景。#61564 (LiuNeng)。

  • 当输入字符串全部为 ASCII 字符时,将字符串函数 XXXUTF8 按 ASCII 方式处理。灵感来自 apache/doris#29799。整体加速约为 1.07x~1.62x。注意在某些场景下峰值内存使用也有所下降。#61632 (李扬)。

  • 默认启用快速 Parquet 编码器(output_format_parquet_use_custom_encoder)。#62088 (Michael Kolupaev)。

  • 改进 JSONEachRowRowInputFormat,当所有必需字段都已读取后,跳过剩余字段。#62210 (lgbo)。

  • 显著提升函数 splitByChar 和 splitByRegexp 的性能。#62392 (李扬)。

  • 改进 file/s3/hdfs/url/... 表函数中的简单 INSERT SELECT。从文件执行简单的 INSERT SELECT 时,增加独立的 max_parsing_threads 设置,用于控制并行解析所使用的线程数。#62404 (Kruglov Pavel)。

  • 通过设置 azure_allow_parallel_part_upload,为 AzureBlobStorage 启用并行写入缓冲区。#62534 (SmitaRKulkarni)。

  • 函数 to_utc_timestamp 和 from_utc_timestamp 现在快约 2 倍。#62583 (KevinyhZou)。

  • 当输入中大部分为不可解析值时,函数 parseDateTimeOrNull、parseDateTimeOrZero、parseDateTimeInJodaSyntaxOrNull 和 parseDateTimeInJodaSyntaxOrZero 的执行速度现在大幅提升(10 倍到 1000 倍)。#62634 (LiuNeng)。

  • 更改 HostResolver 在解析失败时的行为,使每个 IP 仅保留一条记录。#62652 (Anton Ivashkin)。

  • 新增配置项 prefer_merge_sort_block_bytes,用于控制内存使用,并在列很多时将合并阶段的排序速度提升 2 倍。#62904 (LiuNeng)。

  • 如果 JOIN 之后的过滤条件总是过滤掉默认值,则在 QueryPlan 中将 OUTER JOIN 转换为 INNER JOIN 以进行优化。该优化可通过设置 query_plan_convert_outer_join_to_inner_join 控制,默认启用。#62907 (Maksim Kita)。

  • 默认启用 optimize_rewrite_sum_if_to_count_if。#62929 (Raúl Marín)。

  • 针对新的 analyzer 进行微优化。#63429 (Raúl Marín)。

  • 当 DateTime 与 DateTime64 进行比较时,将启用索引分析,从而解决 issue #63441。#63443 (Alexey Milovidov)。

  • 通过移除冗余数据,使 set 类型索引的速度略有提升(约 1.5 倍)。#64098 (Alexey Milovidov)。

改进

  • 移除 optimize_monotonous_functions_in_order_by 设置,该设置正逐渐变成空操作(no-op)。#63004 (Raúl Marín)。

  • Map 现在可以使用 Float32Float64Array(T)Map(K,V)Tuple(T1, T2, ...) 作为键。关闭 issue #54537。#59318 (李扬)。

  • AzureBlobStorage 添加类似于 S3 的异步 WriteBuffer#59929 (SmitaRKulkarni)。

  • 支持在保留边框的同时调整列宽的多行字符串。#59940 (Volodyachan)。

  • RabbitMQ 对损坏的消息发送 nack。关闭 issue #45350。#60312 (Kseniia Sumarokova)。

  • 添加设置 first_day_of_week,它会影响函数 toStartOfInterval(..., INTERVAL ... WEEK) 所采用的一周的第一天。这样可以与函数 toStartOfWeek 保持一致,后者默认将星期日视为一周的第一天。#60598 (Jordi Villar)。

  • 新增持久化虚拟列 _block_offset,用于存储在插入时分配的块中原始行号。可以通过设置 enable_block_offset_column 来启用 _block_offset 列的持久化。新增虚拟列 _part_data_version,其中包含分片的最小块号或变更(mutation)版本。持久化虚拟列 _block_number 不再被视为实验性功能。#60676 (Anton Popov)。

  • 函数 date_diffage 现在以纳秒精度而不是微秒精度计算结果。它们现在还支持将 nanosecond(或 nanosecondsns)作为 unit 参数的取值之一。#61409 (Austin Kothig)。

  • 现在在合并期间,不再为宽部件加载 marks#61551 (Anton Popov)。

  • 默认启用 output_format_pretty_row_numbers,有助于提升可用性。#61791 (Alexey Milovidov)。

  • 进度条现在会对来自 system.zerossystem.zeros_mt 的带 LIMIT 的简单查询生效(之前已支持 system.numberssystem.numbers_mt),以及 generateRandom 表函数。额外的好处是:如果记录总数大于 max_rows_to_read 限制,将更早抛出异常。这关闭了 issue #58183。#61823 (Alexey Milovidov)。

  • 新增 TRUNCATE ALL TABLES#61862 (豪肥肥)。

  • 添加设置 input_format_json_throw_on_bad_escape_sequence,禁用该设置允许在 JSON 输入格式中保留错误的转义序列。#61889 (Kruglov Pavel)。

  • 修正告警消息中的语法,将 "a" 改为 "the"。因为只有一个 Atomic 引擎,所以应为 "to the new Atomic engine" 而不是 "to a new Atomic engine"。#61952 (shabroo)。

  • 修复在回滚 quorum 插入事务时出现的逻辑错误。#61953 (Han Fei)。

  • 从 Apache Arrow schema 自动推断 Nullable 列类型。#61984 (Maksim Kita)。

  • 允许在聚合过程中取消聚合状态的并行合并。例如:uniqExact#61992 (Maksim Kita)。

  • 启动时带有 INVALIDATE_QUERY 的字典源不会被加载两次。#62050 (vdimir)。

  • 现在,对 ReplicatedMergeTree 执行 OPTIMIZE FINAL 时,会先等待当前活动的合并完成,然后重新尝试调度最终合并。这将使其行为与普通 MergeTree 更加一致。#62067 (Nikita Taranov)。

  • 在从 Hive 文本文件读取数据时,会使用 Hive 文本文件的第一行来调整输入字段的数量,而有时第一行的字段数量与定义的 Hive 表不匹配。例如,Hive 表被定义为有 3 列,如 test_tbl(a Int32, b Int32, c Int32),但文本文件的第一行只有 2 个字段,在这种情况下,输入字段数量会被调整为 2,如果文本文件的下一行有 3 个字段,则第三个字段将无法被读取,而是被设置为默认值 0,这是不正确的。#62086 (KevinyhZou)。

  • 客户端在输入时的语法高亮现在将基于语法层面工作(之前是基于词法分析器层面)。#62123 (Alexey Milovidov)。

  • 修复了这样一个问题:当在涉及主键的布尔表达式后面添加多余的 = 1= 0 时,不会使用主键索引。例如,SELECT * FROM <table> WHERE <primary-key> IN (<value>) = 1SELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0 都会执行全表扫描,而本可以使用主键索引。#62142 (josh-hildred)。

  • 新增设置 lightweight_deletes_sync(默认值:2 - 同步等待所有副本)。它类似于 mutations_sync 设置,但只影响轻量级删除(lightweight deletes)的行为。#62195 (Anton Popov)。

  • 在解析自定义设置的值时区分布尔值和整数:SET custom_a = true; SET custom_b = 1;#62206 (Vitaly Baranov)。

  • 支持通过 AWS PrivateLink 接口终端节点访问 S3。关闭 #60021、#31074 和 #53761。#62208 (Arthur Passos)。

  • 客户端必须向服务器发送带有 Keep-Alive: timeout=X 的头部。如果客户端从服务器接收到带该头部的响应,则客户端必须使用服务器返回的值。此外,对于客户端来说,最好不要使用即将过期的连接,以避免连接关闭时出现竞态条件。#62249 (Sema Checherinda)。

  • date_trunc 新增纳秒、微秒、毫秒单位。#62335 (Misz606)。

  • 查询缓存现在不再缓存针对系统表(system.*information_schema.*INFORMATION_SCHEMA.*)的查询结果。#62376 (Robert Schulze)。

  • 为避免超过数据片段(part)数量限制,MOVE PARTITION TO TABLE 查询可能会被延迟执行,或者抛出 TOO_MANY_PARTS 异常。适用的设置和限制与 INSERT 查询相同(参见 max_parts_in_totalparts_to_delay_insertparts_to_throw_insertinactive_parts_to_throw_insertinactive_parts_to_delay_insertmax_avg_part_size_for_too_many_partsmin_delay_to_insert_msmax_delay_to_insert 设置)。#62420 (Sergei Trifonov)。

  • 使 transform 始终返回第一个匹配项。#62518 (Raúl Marín)。

  • 在执行 RESTORE 时避免计算表的 DEFAULT 表达式。#62601 (Vitaly Baranov)。

  • 允许在 HTTP 请求中使用具有不同认证方式的 quota key。#62842 (Kseniia Sumarokova)。

  • 当用户的 valid_until 到期时关闭会话。#63046 (Konstantin Bogdanov).