ClickHouse 云 v24.6 版本变更日志
基于 v24.6 版本发布的 ClickHouse 云服务的相关变更。
向后不兼容变更
- 重新设计存储
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
生成的雪花 ID,并生成与generateSnowflakeID
类型相同的雪花 ID(即UInt64
)。此外,新函数默认使用 UNIX 纪元(即 1970-01-01),就像generateSnowflakeID
一样。如果需要,可以传递不同的纪元,例如 Twitter/X 的纪元 2010-11-04,即自 UNIX 纪元以来的 1288834974657 毫秒。旧的转换函数已弃用,将在过渡期后移除:要无论如何使用它们,请启用设置allow_deprecated_snowflake_conversion_functions
。 #64948 (Robert Schulze).
新功能
- 支持空元组。 #55061 (Amos Bird).
- 添加希尔伯特曲线编码和解码函数。 #60156 (Artem Mustafin).
- 添加对
hilbertEncode
上的索引分析的支持。 #64662 (Artem Mustafin). - 添加了使用函数
readWKTLineString
读取 WKT 格式的LINESTRING
几何图形的支持。 #62519 (Nikita Mikhaylov). - 添加了新的 SQL 函数
generateSnowflakeID
用于生成 Twitter 风格的雪花 ID。 #63577 (Danila Puzov). - 添加对使用
=
运算符比较IPv4
和IPv6
类型 的支持。 #64292 (Francisco J. Jurado Moreno). - 在二进制数学函数(pow、atan2、max2、min2、hypot)中支持十进制参数。 #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 处理程序中添加
http_response_headers
配置以支持自定义响应标头。 #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)中引入的交叉联接中的性能回归。#65243(Nikita Taranov)。
- 改进 io_uring 重新提交的可见性。将配置文件事件 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). - 当查询过滤器能够从合并树表中选择精确范围时,支持部分平凡计数优化。 #60463 (Amos Bird).
- 通过在单个转换中收集多个线程的块来减少多线程
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_family
keeper-client命令。 #64628 (Alexander Gololobov). - 改进可空数字类型参数的函数
least
/greatest
。 #64668 (KevinyhZou). - 允许合并查询计划的两个连续过滤步骤。 如果过滤条件可以从父步骤向下推,这将改进过滤下推优化。 #64760 (Nikolai Kochetov).
- 删除垂直最终实现中的错误优化,并默认情况下重新启用垂直最终算法。 #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).
- 优化了具有大量跳过索引的表的垂直合并的内存使用情况。 #64580 (Anton Popov).
改进
- 恢复ClickHouse处理和解释CSV格式中元组的方式。 此更改实际上恢复了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()
的第二个参数(比例)现在可以是非常量。 #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
期间/之后读取的行数的配置文件事件。 #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
,因此它可能导致变异中意外的数据删除。 #65356 (Dmitry Novik).
错误修复(官方稳定版本中的用户可见的错误行为)
- 修复了'set'跳过索引无法与IN和indexHint()一起使用的问题。 #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)。
- 修复了针对不同类型(表达式和函数)的循环别名的循环别名错误。 #63993 (Nikolai Kochetov)。
- 此修复将使用具有正确定义者的适当重新定义的上下文,用于查询管道中的每个单独视图。 #64079 (pufit)。
- 修复分析器:“未找到列”错误在使用INTERPOLATE时已修复。 #64096 (Yakov Olkhovskiy)。
- 防止在CREATE TABLE as MaterializedView时出现LOGICAL_ERROR。 #64174 (Raúl Marín)。
- 查询缓存现在将针对不同数据库的两个相同查询视为不同的查询。之前的行为可用于绕过读取表的权限不足问题。#64199 (Robert Schulze)。
- 修复 StatusFile 中 ~WriteBufferFromFileDescriptor 捕获异常时可能发生的异常中止问题。#64206 (Kruglov Pavel)。
- 修复分布式查询中使用 ARRAY JOIN 时发生的重复别名错误。#64226 (Nikolai Kochetov)。
- 修复从字符串到整数的意外准确转换问题。#64255 (wudidapaopao)。
- 修复 CNF 简化问题,在任何 OR 组包含相互排斥的原子时。#64256 (Eduard Karacharov)。
- 修复查询树大小验证问题。#64377 (Dmitry Novik)。
- 修复逻辑错误:带有 PREWHERE 的 Buffer 表的错误转换。#64388 (Nikolai Kochetov)。
- 修复带有默认表达式的表的 CREATE TABLE AS 查询。#64455 (Anton Popov)。
- 修复带有可为空键的表上 ORDER BY ... NULLS FIRST / LAST 时 optimize_read_in_order 的行为。#64483 (Eduard Karacharov)。
- 修复带有 GLOBAL IN.. 别名的查询的 Expression 节点列表期望 1 个投影名称和 Unknown expression 或 identifier 错误。#64517 (Nikolai Kochetov)。
- 修复分布式查询中使用常量 CTE 作为 GROUP BY 键时发生的无法找到列的错误。#64519 (Nikolai Kochetov)。
- 修复 formatDateTimeInJodaSyntax 函数的输出,当格式化程序生成奇数个字符且最后一个字符为 0 时。例如,SELECT formatDateTimeInJodaSyntax(toDate('2012-05-29'), 'D') 现在将正确返回 150,而不是之前的 15。#64614 (LiuNeng)。
- 如果已使用 -If 组合器,则不要重写聚合。#64638 (Dmitry Novik)。
- 修复浮点类型的类型推断(在缓冲区较小的情况下,例如 --max_read_buffer_size 1)。#64641 (Azat Khuzhin)。
- 修复可能导致带有表达式的 TTL 无法正常工作的错误。#64694 (alesapin)。
- 修复删除始终为真(对于新分析器)的 WHERE 和 PREWHERE 表达式。#64695 (Nikolai Kochetov)。
- 修复基于令牌的文本索引(ngrambf、full_text)在通过 startsWith、endsWith、match、multiSearchAny 的结果进行过滤时过度删除部分的问题。#64720 (Eduard Karacharov)。
- 修复 UTF8::computeWidth 函数中 ANSI CSI 转义的错误行为。#64756 (Shaun Struwig)。
- 修复子查询中错误删除 ORDER BY / LIMIT BY 的情况。#64766 (Raúl Marín)。
- 修复(实验性)对处于混合连接条件中的集的不等连接,使用子查询。#64775 (lgbo)。
- 修复在纯可重写磁盘上的本地缓存中发生的崩溃。#64778 (Julia Kartseva)。
- 修复分布式查询中使用嵌套列进行 ARRAY JOIN 时发生的无法找到列的错误。修复了 #64755。#64801 (Nikolai Kochetov)。
- 修复 slru 缓存策略中的内存泄漏问题。#64803 (Kseniia Sumarokova)。
- 修复几种类型查询中可能发生的错误内存跟踪问题:从 S3 读取任何数据的查询,通过 http 协议的查询,异步插入查询。#64844 (Anton Popov)。
- 修复从物化视图读取数据时,当物化视图的列类型与源表不同时,发生的 Block structure mismatch 错误。修复了 #64611。#64855 (Nikolai Kochetov)。
- 修复当表具有带有子查询 + 数据库复制 + 并行副本 + 分析器的 TTL 时发生的罕见崩溃。这确实非常罕见,但请不要在子查询中使用 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 (alias) 的远程查询发生的 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)。