跳至主要内容

ClickHouse 云 v24.5 版本更新日志

基于 v24.5 版本发布的 ClickHouse 云服务的相关更改。

重大变更

  • 将系统.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).

  • 函数 neighbor、runningAccumulate、runningDifferenceStartingWithFirstValue、runningDifference 的使用已弃用(因为容易出错)。 应改用适当的窗口函数。 要重新启用它们,请设置 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 表将显示这些列,但在新版本中,它将完全跳过该表。 删除了会减慢查询速度的跟踪日志消息“已授予访问权限”和“拒绝访问权限”。 #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。 关闭 #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).

  • 支持使用涉及左右表列的不等条件进行联接。 例如,t1.y < t2.y。 要启用,请设置 SET allow_experimental_join_condition = 1。 #60920 (lgbo).

  • 添加了一个新函数 getClientHTTPHeader。 这解决了 #54665。 与 @lingtaolf 共同创作。 #61820 (Alexey Milovidov).

  • 为了方便起见,SELECT FROM numbers() 将以与 SELECT FROM system.numbers 相同的方式工作 - 没有限制。 #61969 (YenchangChan).

  • 现在支持通过 ALTER MODIFY SETTING 修改内存表设置。 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 子句。 关闭 #47819。 #62619 (Maksim Kita).

  • 在 HTTP 接口中添加了角色查询参数。 它与 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 函数 generateUUIDv7、generateUUIDv7ThreadMonotonic、generateUUIDv7NonMonotonic(具有不同的单调性/性能权衡)来生成版本 7 UUID,也称为带有随机组件的基于时间戳的 UUID。 还添加了一个新函数 UUIDToNum 来从 UUID 中提取字节,以及一个新函数 UUIDv7ToDateTime 来从 UUID 版本 7 中提取时间戳组件。 #62852 (Alexey Petrunyaka).

  • Raw 作为 TSVRaw 的同义词。 #63394 (Unalian).

  • 添加了在大小超过限制时在临时文件中执行交叉联接的可能性。 #63432 (p1rattttt).

性能改进

  • 在 INSERT-s 期间跳过新创建的投影块的合并。 #59405 (Nikita Taranov).

  • 减少 SELECT 的更改开销(v2)。 #60856 (Azat Khuzhin).

  • 使用等效集改进 JOIN 过滤器向下推。 #61216 (Maksim Kita).

  • 添加一个新的分析器传递以优化单个值。 #61564 (LiuNeng).

  • 如果输入字符串全部是 ASCII 字符,则处理字符串函数 XXXUTF8 'asciily'。 受 apache/doris#29799 的启发。 总体速度提高了 1.07x~1.62x。 请注意,在某些情况下,峰值内存使用量已减少。 #61632 (李扬).

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

  • 通过在读取所有必需字段后跳过所有剩余字段来改进 JSONEachRowRowInputFormat。 #62210 (lgbo).

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

  • 改进文件/s3/hdfs/url/… 表函数中简单的插入选择操作。添加单独的 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)。

  • QueryPlan 将 OUTER JOIN 转换为 INNER JOIN 优化,如果 JOIN 后的过滤器始终过滤默认值。优化可以通过设置 query_plan_convert_outer_join_to_inner_join 来控制,默认情况下启用。 #62907 (Maksim Kita)。

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

  • 对新分析器进行微优化。 #63429 (Raúl Marín)。

  • 如果 DateTime 与 DateTime64 进行比较,索引分析将起作用。这解决了 #63441。 #63443 (Alexey Milovidov)。

  • 通过删除垃圾,将 set 类型索引的速度稍微提高(大约 1.5 倍)。 #64098 (Alexey Milovidov)。

改进

  • 删除 optimize_monotonous_functions_in_order_by 设置,这正在成为一个无操作。 #63004 (Raúl Marín)。

  • Map 现在可以将 Float32、Float64、Array(T)、Map(K,V) 和 Tuple(T1, T2, …) 作为键。解决了 #54537。 #59318 (李扬)。

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

  • 多行字符串,保留边界并更改列宽度。 #59940 (Volodyachan)。

  • 使 RabbitMQ 能够将损坏的消息 nack。解决了 #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,它包含部分的最小块号或变异版本。持久虚拟列 _block_number 不再被认为是实验性的。 #60676 (Anton Popov)。

  • date_diff 和 age 函数现在以纳秒而不是微秒的精度计算其结果。它们现在还提供纳秒(或纳秒或 ns)作为单位参数的可能值。 #61409 (Austin Kothig)。

  • 现在,在合并过程中不会为宽部分加载标记。 #61551 (Anton Popov)。

  • 默认情况下启用 output_format_pretty_row_numbers。这对用户友好性更好。 #61791 (Alexey Milovidov)。

  • 进度条将适用于来自 system.zeros、system.zeros_mt 的具有 LIMIT 的简单查询(它已经适用于 system.numbers 和 system.numbers_mt),以及 generateRandom 表函数。作为奖励,如果总记录数大于 max_rows_to_read 限制,它将更早抛出异常。这解决了 #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)。

  • 修复在撤消仲裁插入事务时发生的逻辑错误。 #61953 (Han Fei)。

  • 从 Apache Arrow 架构自动推断可空列类型。 #61984 (Maksim Kita)。

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

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

  • OPTIMIZE FINAL 用于 ReplicatedMergeTree 现在将等待当前活动的合并完成,然后重新尝试调度最终合并。这将使其更符合普通 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,但仅影响轻量级删除的行为。 #62195 (Anton Popov)。

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

  • 支持通过 AWS 私有链接接口端点访问 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)。

  • 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)。

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

  • 在执行 RESTORE 时避免评估表 DEFAULT 表达式。 #62601 (Vitaly Baranov)。

  • 允许在 HTTP 请求中使用具有不同身份验证方案的配额键。 #62842 (Kseniia Sumarokova)。

  • 如果用户 valid_until 到达,则关闭会话。 #63046 (Konstantin Bogdanov)。