适用于 Cloud 的 v24.6 版本变更日志
基于 v24.6 发行版的、与 ClickHouse Cloud 服务相关的更改。
不兼容的向后变更
- 重构了存储
S3Queue在Ordered模式下的并行处理逻辑。如果你在 Ordered 模式中使用过s3queue_processing_threads_num或s3queue_total_shards_num这两个设置,则该 PR 在此模式下是不向后兼容的。设置s3queue_total_shards_num已被删除,此前只允许在启用已弃用的s3queue_allow_experimental_sharded_mode时使用。新增了一个设置:s3queue_buckets。#64349(Kseniia Sumarokova)。 - 新增了函数
snowflakeIDToDateTime、snowflakeIDToDateTime64、dateTimeToSnowflakeID和dateTime64ToSnowflakeID。与现有的snowflakeToDateTime、snowflakeToDateTime64、dateTimeToSnowflake和dateTime64ToSnowflake不同,新函数与generateSnowflakeID函数兼容,即它们接受由generateSnowflakeID生成的 Snowflake ID,并生成与generateSnowflakeID相同类型(即UInt64)的 Snowflake ID。此外,新函数默认使用 UNIX 纪元(即 1970-01-01),与generateSnowflakeID一致。如有需要,可以传入其他纪元,例如 Twitter/X 的纪元 2010-11-04(即自 UNIX 纪元以来的 1288834974657 毫秒)。旧的转换函数已被弃用,并将在过渡期后移除;如仍需使用它们,请启用设置allow_deprecated_snowflake_conversion_functions。#64948(Robert Schulze)。
新特性
- 支持空元组。#55061 (Amos Bird).
- 添加 Hilbert 曲线编码和解码函数。#60156 (Artem Mustafin).
- 为
hilbertEncode添加索引分析支持。#64662 (Artem Mustafin). - 新增对以 WKT 格式表示的
LINESTRING几何对象的读取支持,可通过函数readWKTLineString实现。#62519 (Nikita Mikhaylov). - 添加新的 SQL 函数
generateSnowflakeID,用于生成 Twitter 风格的 Snowflake ID。#63577 (Danila Puzov). - 添加使用
=运算符比较IPv4和IPv6类型的支持。#64292 (Francisco J. Jurado Moreno). - 在二元数学函数(pow、atan2、max2、min2、hypot)中支持 Decimal 十进制参数。#64582 (Mikhail Gorshkov).
- 添加 SQL 函数
parseReadableSize(以及OrNull和OrZero变体)。#64742 (Francisco J. Jurado Moreno). - 为类文件存储(s3/file/hdfs/url/azureBlobStorage)添加
_time虚拟列。#64947 (Ilya Golshtein). - 引入新函数
base64URLEncode、base64URLDecode和tryBase64URLDecode。#64991 (Mikhail Gorshkov). - 添加新函数
editDistanceUTF8,用于计算两个 UTF8 字符串之间的编辑距离。#65269 (LiuNeng). - 添加
http_response_headers配置,用于在自定义 HTTP 处理程序中设置自定义响应头。#63562 (Grigorii). - 新增表函数
loop,支持以无限循环的方式返回查询结果。#63452 (Sariel). 这对于测试很有用。 - 在
system.query_log中引入两个额外的列:used_privileges和missing_privileges。used_privileges记录在查询执行期间检查过的权限,missing_privileges包含缺失的必需权限。#64597 (Alexey Katsman). - 新增设置
output_format_pretty_display_footer_column_names,启用后会在长表(默认 50 行)末尾显示列名,最小行数阈值由output_format_pretty_display_footer_column_names_min_rows控制。#65144 (Shaun Struwig).
性能优化
- 修复在 #60459(24.5)中引入的 CROSS JOIN 性能回退问题。#65243(Nikita Taranov)。
- 改进 io_uring 重新提交操作的可见性。将 profile 事件 IOUringSQEsResubmits 重命名为 IOUringSQEsResubmitsAsync,并新增事件 IOUringSQEsResubmitsSync。#63699(Tomer Shafir)。
- 为所有函数调用添加断言,以验证其使用的列大小是否正确。#63723(Raúl Marín)。
- 在插入时增加重新调整行顺序的能力,以在不违反由
PRIMARY KEY设定的顺序前提下优化数据大小。该功能由设置optimize_row_order控制(默认关闭)。#63578(Igor Markelov)。 - 添加原生 Parquet 读取器,可将 Parquet 二进制数据直接读取为 ClickHouse 列。受设置
input_format_parquet_use_native_reader控制(默认关闭)。 #60361 (ZhiHong Zhang). - 当查询过滤条件能够从 MergeTree 表中精确选出范围时,支持部分 trivial count 优化。 #60463 (Amos Bird).
- 通过在单个 transform 中汇聚多个线程的 chunk,降低多线程
INSERT的最大内存占用。#61047 (Yarik Briukhovetskyi). - 在使用 Azure 对象存储时,通过采用固定内存分配来减少内存占用,避免分配额外的缓冲区。#63160(SmitaRKulkarni)。
- 减少
ColumnNullable::size中的虚函数调用次数。 #60556 (HappenLee). - 当正则表达式参数为单个字符时,优化
splitByRegexp的性能。 #62696 (Robert Schulze). - 通过跟踪使用过的最小和最大键,加速基于 8 位和 16 位键的聚合。这可以减少需要验证的单元数量。#62746(Jiebin Sun)。
- 当左侧为
LowCardinality且右侧为常量集合时,对 IN 运算符进行优化。 #64060 (Zhiguo Zhou). - 使用线程池在
ConcurrentHashJoin中对哈希表进行初始化和销毁。 #64241 (Nikita Taranov). - 针对包含稀疏列的表优化了纵向合并。#64311 (Anton Popov)。
- 在执行纵向合并时启用了从远程文件系统预取数据的功能,从而降低了数据存储在远程文件系统上的表在进行纵向合并时的延迟。 #64314 (Anton Popov).
- 减少对
ColumnSparse::filter的isDefault的冗余调用,从而提升性能。 #64426 (Jiebin Sun)。 - 通过对 getChildren 发起多个异步请求,加速
find_super_nodes和find_big_familykeeper-client 命令的执行。 #64628 (Alexander Gololobov). - 改进函数
least/greatest对可为 NULL 的数值类型参数的支持。#64668 (KevinyhZou)。 - 允许合并查询计划中两个连续的过滤步骤。如果过滤条件可以从父步骤下推,则可以改进过滤下推优化。#64760 (Nikolai Kochetov)。
- 在 vertical final 算法的实现中移除不良优化,并重新将 vertical final 算法设为默认启用。#64783 (Duc Canh Le).
- 从过滤表达式中移除 ALIAS 节点。对于使用
PREWHERE的查询(在新分析器中),这会略微提升性能。#64793 (Nikolai Kochetov)。 - 重新启用 OpenSSL 会话缓存功能。#65111(Robert Schulze)。
- 添加了用于在插入时禁用跳过索引和统计信息物化的设置(
materialize_skip_indexes_on_insert和materialize_statistics_on_insert)。#64391 (Anton Popov). - 根据已分配的内存大小计算行组大小,从而在单线程模式下降低 Parquet 写入器的峰值内存占用。#64424 (LiuNeng)。
- 改进稀疏列的迭代器,减少对
size的调用。 #64497 (Jiebin Sun). - 更新条件,以在备份到 Azure Blob 存储时使用服务器端复制。#64518 (SmitaRKulkarni)。
- 针对具有大量 skip 索引的表,优化了垂直合并的内存使用。#64580 (Anton Popov)。
改进
- 恢复了 ClickHouse 在 CSV 格式中处理和解释 Tuple 的原有行为。此更改实质上回退了 ClickHouse/ClickHouse#60994,并将其限制为仅在以下少数设置下可用:output_format_csv_serialize_tuple_into_separate_columns、input_format_csv_deserialize_separate_columns_into_tuple 和 input_format_csv_try_infer_strings_from_quoted_tuples。#65170(Nikita Mikhaylov)。
- 现在在系统表上执行
SHOW CREATE TABLE时,会显示每个表特有的、非常实用的注释,用于说明该表的用途。 #63788 (Nikita Mikhaylov)。 - 函数
round(),roundBankers(),floor(),ceil()和trunc()的第二个参数(scale)现在可以不是常量(non-const)。#64798 (Mikhail Gorshkov)。 - 在高负载服务中进行线程调度时,避免在 MergeTree 索引分析期间可能出现的死锁。#59427 (Sean Haynes)。
- 对 S3 代理支持和隧道机制的一些边界情况进行了小幅修复。#63427(Arthur Passos)。
- 添加监控指标,用于跟踪
plain_rewritable元数据存储创建和删除的目录数量,以及本地到远程内存映射表中的条目数量。#64175 (Julia Kartseva)。 - 查询缓存现在会将文本相同但设置不同的查询视为不同的查询。这样在不同设置(例如
limit或additional_table_filters)会影响查询结果的情况下,可以提高健壮性。 #64205 (Robert Schulze). - 在对象存储中将非标准错误码
QpsLimitExceeded视为可重试错误并予以支持。 #64225 (Sema Checherinda). - 新增了一个设置项
input_format_parquet_prefer_block_bytes,用于控制平均输出数据块的字节数,并将input_format_parquet_max_block_size的默认值修改为 65409。#64427 (LiuNeng)。 - 用户配置中的设置不会影响基于对象存储的
MergeTree表的合并和变更操作。#64456 (alesapin)。 - 在对象存储中支持将非标准错误码
TotalQpsLimitExceeded视为可重试错误。#64520(Sema Checherinda)。 - 为开源版和 ClickHouse Cloud 版本更新了 Advanced Dashboard,加入了“最大并发网络连接数”图表。#64610(Thom O'Connor)。
- 改进
zeros_mt和generateRandom的进度报告。#64804(Raúl Marín)。 - 添加一个异步指标
jemalloc.profile.active,用于显示当前是否启用了采样。这是除了prof.active之外的额外激活机制;调用线程要进行采样,二者都必须处于激活状态。#64842 (Unalian)。 - 移除了
allow_experimental_join_condition的重要标记。该标记可能会导致在混合版本集群中无法成功执行分布式查询。#65008(Nikita Mikhaylov)。 - 新增服务器异步指标
DiskGetObjectThrottler*和DiskGetObjectThrottler*,用于表示通过磁盘设置s3_max_get_rps和s3_max_put_rps定义的每秒请求速率限制,以及在不触发该磁盘限流阈值的前提下当前仍可发送的请求数量。对于每个配置了限流的磁盘,都会定义这些指标。 #65050 (Sergei Trifonov)。 - 在使用
bcrypt_hash创建用户时添加验证。#65242(Raúl Marín)。 - 新增用于统计在
PREWHERE执行期间及之后读取行数的 profile 事件。 #64198 (Nikita Taranov). - 在并行副本模式下在
EXPLAIN PLAN中输出查询。 #64298 (vdimir). - 将
allow_deprecated_functions重命名为allow_deprecated_error_prone_window_functions。 #64358 (Raúl Marín)。 - 在
file表函数中,文件描述符同样会受max_read_buffer_size设置的约束。#64532 (Azat Khuzhin). - 在不支持的存储上禁用事务,即使用于物化视图时也是如此。#64918 (alesapin)。
- 在旧版分析器中禁止使用
QUALIFY子句。旧版分析器会忽略QUALIFY,因此在执行 mutation 操作时可能导致数据被意外删除。#65356(Dmitry Novik)。
Bug 修复(官方稳定版本中对用户可见的错误行为)
- 修复在与 IN 和 indexHint() 配合使用时,“set” 跳过索引不起作用的问题。#62083 (Michael Kolupaev)。
- 修复在表未启用自适应粒度时带有 FINAL 的查询返回错误结果的问题。#62432(Duc Canh Le)。
- 在为参数化视图设置值时支持执行函数。#63502 (SmitaRKulkarni).
- 修复了 Parquet 内存使用跟踪问题。#63584(Michael Kolupaev)。
- 修复分布式查询结果中偶发的数据缺失问题。#63691(vdimir)。
- 修复了读取类型为 Tuple(Map(LowCardinality(String), String), ...) 的列时的问题。#63956 (Anton Popov)。
- 修复对未限定的 COLUMNS 匹配器的解析。保留输入列的顺序,并禁止使用未知标识符。#63962 (Dmitry Novik)。
- 修复在不同类型(表达式和 FUNCTION)之间存在循环别名时出现的
Cyclic aliases错误。#63993(Nikolai Kochetov)。 - 此修复将为查询管道中的每个单独 VIEW 使用带有正确 definer 的重新定义上下文。#64079 (pufit)。
- 修复 analyzer:修正了在使用 INTERPOLATE 时出现的 "Not found column" 错误。#64096 (Yakov Olkhovskiy)。
- 防止在将 CREATE TABLE 作为物化视图 (MaterializedView) 使用时产生 LOGICAL_ERROR。#64174 (Raúl Marín)。
- 查询缓存现在会将针对不同数据库的两个相同查询视为不同查询。此前的行为可能被用来绕过读取某个表所需的权限。#64199 (Robert Schulze)。
- 修复 StatusFile 中 ~WriteBufferFromFileDescriptor 因未捕获异常而可能触发的进程中止问题。#64206 (Kruglov Pavel)。
- 修复使用 ARRAY JOIN 的分布式查询中的重复别名错误。#64226(Nikolai Kochetov)。
- 修复从 string 到 integer 的意外 accurateCast 行为。#64255 (wudidapaopao)。
- 修复了 CNF 简化逻辑,以应对某个 OR 组中存在互斥原子的情况。#64256(Eduard Karacharov)。
- 修复查询树大小验证。#64377(Dmitry Novik)。
- 修复逻辑错误:在带 PREWHERE 的 Buffer 表中出现错误的类型转换。#64388(Nikolai Kochetov)。
- 修复了在包含默认表达式的表上执行的
CREATE TABLE AS查询的问题。#64455(Anton Popov)。 - 修复了在含 Nullable 键的表上使用
ORDER BY ... NULLS FIRST / LAST时的optimize_read_in_order行为。#64483 (Eduard Karacharov)。 - 修复在带有别名的 GLOBAL IN 查询中出现
Expression nodes list expected 1 projection names和Unknown expression or identifier错误的问题。#64517(Nikolai Kochetov)。 - 修复在 GROUP BY 键中使用常量 CTE 的分布式查询中出现的 “Cannot find column” 错误。#64519 (Nikolai Kochetov)。
- 修复函数 formatDateTimeInJodaSyntax 的输出问题:当格式化器生成的字符数量为奇数且最后一个字符为 0 时,输出结果不正确。例如,SELECT formatDateTimeInJodaSyntax(toDate('2012-05-29'), 'D') 现在会正确返回 150,而不是之前的 15。#64614 (LiuNeng)。
- 如果已经使用 -If 组合器,则不要重写聚合。#64638 (Dmitry Novik)。
- 修复对 float 的类型推断(在缓冲区较小时,例如 --max_read_buffer_size 为 1)。#64641(Azat Khuzhin)。
- 修复了一个可能导致带表达式的生存时间 (TTL) 设置失效的错误。#64694 (alesapin)。
- 修复新分析器中移除始终为 true 的 WHERE 和 PREWHERE 表达式的逻辑。#64695 (Nikolai Kochetov)。
- 修复了在基于 startsWith、endsWith、match、multiSearchAny 的结果进行过滤时,基于 token 的文本索引(ngrambf、full_text)导致的 part 过度消除问题。#64720 (Eduard Karacharov).
- 修复了
UTF8::computeWidth函数中对 ANSI CSI 转义序列处理不正确的问题。#64756(Shaun Struwig)。 - 修复了一个在子查询中错误移除 ORDER BY / LIMIT BY 的问题。#64766(Raúl Marín)。
- 修复实验性功能:在混合 join 条件中包含针对 Set 的子查询时的非等值 join。#64775 (lgbo)。
- 修复在 plain_rewritable 磁盘上的本地缓存崩溃问题。#64778(Julia Kartseva)。
- 修复在通过 Nested 列进行 ARRAY JOIN 的分布式查询中出现的
Cannot find column错误。修复 #64755。#64801 (Nikolai Kochetov)。 - 修复 SLRU 缓存策略中的内存泄漏。#64803(Kseniia Sumarokova)。
- 修复了在多类查询中可能出现的内存跟踪错误:从 S3 读取任意数据的查询、通过 HTTP 协议执行的查询以及异步插入操作。#64844(Anton Popov)。
- 修复在 materialized view 中使用 PREWHERE 读取查询时,当该 materialized view 包含与源表数据类型不同的列时出现的 Block 结构不匹配错误。修复 #64611。#64855(Nikolai Kochetov)。
- 修复了在表包含带有子查询的 TTL、数据库为 replicated、启用了并行副本并使用 analyzer 时可能发生的罕见崩溃。虽然极其罕见,但请不要在 TTL 中使用子查询。#64858 (alesapin)。
- 修复 ClickHouse/ClickHouse#54211 中导致针对参数化 VIEW 的 ALTER MODIFY COMMENT 查询出错的问题。#65031(Nikolay Degterinsky)。
- 在启用
cluster_secure_connection参数时,修复 DatabaseReplicated 中的host_id。此前,即使启用了该参数,由 DatabaseReplicated 在集群内创建的所有连接也都是不安全的。#65054(Nikolay Degterinsky)。 - 修复在对 StorageMerge 进行 PREWHERE 优化后出现的 Not-ready Set 错误。#65057 (Nikolai Kochetov)。
- 避免向类文件存储中的已完成缓冲区写入。#65063 (Kruglov Pavel).
- 在存在循环别名时,修复可能出现的查询无限执行时间问题。修复 #64849。#65081(Nikolai Kochetov)。
- 修复在使用 INTERPOLATE(别名)(新分析器)进行远程查询时出现的 Unknown expression identifier 错误。修复 #64636。#65090(Nikolai Kochetov)。
- 修复将算术运算从聚合中外提的优化问题。在新的分析器中,该优化之前只会执行一次。#65104 (Dmitry Novik)。
- 修复新分析器中聚合函数名称改写。#65110(Dmitry Novik)。
- 在从客户端套接字读取请求体(部分内容)时发生接收超时时,返回 5xx 而不是 200 OK。#65118 (Julian Maicher)。
- 修复可能在对冲请求中发生的崩溃。#65206(Azat Khuzhin)
- 修复 Hashed 和 Hashed_Array 字典在短路求值中的缺陷,该缺陷可能会读取未初始化的数值,从而引发各种错误。#65256 (jsc0218)。
- 此 PR 确保在 IN 运算符的类型转换过程中,常量(IN 运算符的第二个参数)的类型始终可见。否则,类型信息的丢失可能导致某些转换失败,例如从 DateTime 到 Date 的转换。修复 (#64487)。#65315 (pn)。